How features get from code to production without orphaned wiring
April 2, 2026
Every feature ships through this cycle. Skip a step and you get orphaned fields, broken optimistic updates, and silent data loss.
When adding any field to BlockState, it must exist in all 5 places. Miss one and the field is orphaned.
| # | Location | File | What breaks if missing |
|---|---|---|---|
| 1 | BlockState type definition | lib/types.ts | TypeScript has no knowledge of the field |
| 2 | Local BlockState in page.tsx | app/run/[id]/page.tsx | Client-side state never includes the field |
| 3 | Optimistic update handler | app/run/[id]/page.tsx | Field reverts on next render after mutation |
| 4 | update-state whitelist | app/api/factory-run/route.ts | API silently drops the field on PATCH |
| 5 | Component prop types | components/workbench/*.tsx | Component cannot read or display the field |
Two interval loops ran during this session. The first caught orphans. The second proved the checklist works.
The interval loop works manually, but manual processes get skipped under time pressure. This should become infrastructure.