From superpowers-plus
Verifies field renames, API contract changes, and data model refactors across services by tracing full READ → STORE → PASS data flows to prevent incomplete updates.
npx claudepluginhub bordenet/superpowers-plus --plugin superpowers-plusThis skill uses the workspace's default tool permissions.
> **Wrong skill?** General code modification → `blast-radius-check`. Pre-commit checks → `pre-commit-gate`. Completion verification → `verification-before-completion`.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Wrong skill? General code modification →
blast-radius-check. Pre-commit checks →pre-commit-gate. Completion verification →verification-before-completion.
trackingLine → inboundLine/outboundLine)Field renames and API contract changes are the #1 source of production incidents from "complete" work that wasn't actually complete.
Core principle: Trace the FULL data flow, not just the obvious touchpoints.
Incident that created this skill: PROJ-XXX (Feb 2026) - Renamed trackingLine to inboundLine/outboundLine across 6 PRs, but missed the telephony client adapter that actually calls voice-service. Quality gates (lint, typecheck, tests) all passed because each service was internally consistent.
NO FIELD RENAME IS COMPLETE UNTIL YOU VERIFY EVERY PATH:
READ → STORE → PASS TO OTHER SERVICES
If you only traced READ and STORE, you missed PASS.
Every field has THREE data flow paths that must be traced:
| Path | Description | Example |
|---|---|---|
| READ | Where the field is read FROM | Config endpoint, database query |
| STORE | Where the field is written TO | Database insert, cache storage |
| PASS | Where the field is sent TO ANOTHER SERVICE | HTTP client, message queue, event payload |
The PROJ-XXX mistake: Traced READ (settings-service → post-lead.ts) and STORE (lead table), but missed PASS (telephony-client.adapter → voice-service).
BEFORE claiming a field rename is complete:
# Search ALL affected repos for the old field name
grep -rn "oldFieldName" --include="*.ts" --include="*.tsx" --include="*.js" repo1/ repo2/ repo3/
# Also search for the CamelCase, snake_case, and UPPER_CASE variants
grep -rn "old_field_name\|OLD_FIELD_NAME\|OldFieldName" --include="*.ts" repo/
For each service that handles this field:
| Question | If Yes → Check |
|---|---|
| Does this service call another service? | HTTP clients, SDK calls, API adapters |
| Does this service emit events? | Event payloads, message queue producers |
| Does this service store data? | Database schemas, cache keys |
| Does this service expose an API? | Request/response types, OpenAPI specs |
| Does this service have NPM packages? | Published type definitions |
# Check if old types are still published
grep -rn "oldFieldName" node_modules/@yourorg/*/dist/*.d.ts
If old types exist in node_modules, consumers may compile against wrong contract.
Unit tests pass but integration fails because:
oldFieldNamenewFieldNameREQUIRED: Run at least one test that crosses the service boundary you changed.
| Pattern | What Gets Missed | Prevention |
|---|---|---|
| "I updated the route handler" | HTTP client that calls the route | Trace callers, not just callees |
| "I updated the type definition" | Runtime code still uses old name | Grep before commit |
| "Tests pass" | Tests mock the boundary, don't test it | Add integration test |
| "Schema is updated" | Transform/adapter layer unchanged | Check every layer |
| "Config reads correctly" | Config is passed to another service wrong | Trace PASS path |
For cross-service field renames, verify at BOTH ends:
Service A (sender) Service B (receiver)
───────────────── ────────────────────
HTTP client sends → Route handler expects
message.fieldName body.fieldName
↓ ↓
MUST MUST
MATCH MATCH
PROJ-XXX failure:
inboundLine/outboundLine ✅trackingLine ❌If you find yourself thinking:
BEFORE claiming a field rename is complete:
1. GREP: Run exhaustive search for old field name in ALL affected repos
2. LIST: Enumerate every service boundary the field crosses
3. TRACE: For each boundary, verify BOTH sender and receiver
4. TEST: Run at least one integration test crossing each boundary
5. ONLY THEN: Claim the rename is complete
Skip any step = incomplete work
verification-before-completion — General verification disciplinesystematic-debugging — When the field mismatch causes runtime errorslink-verification — For verifying API endpoint URLs still exist| Failure | Recovery |
|---|---|
| Missing a consumer across service boundary | Search ALL repos, not just current. Check API clients, shared libs. |
| Renaming in code but not in config/env files | Check .env files, docker-compose, CI configs, deployment manifests |
| Database column rename without migration | Column renames need a migration. Check ORM models match DB schema. |