From superpowers-plus
Traces READ → STORE → PASS data flow paths when renaming fields or changing API contracts across services. Prevents incomplete dependency analysis that causes production incidents.
How this skill is triggered — by the user, by Claude, or both
Slash command
/superpowers-plus:field-rename-verificationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Wrong skill?** General code modification → `blast-radius-check`. Pre-commit checks → `pre-commit-gate`. Completion verification → `verification-before-completion`.
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. |
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub bordenet/superpowers-plus --plugin superpowers-plus