Output from `pnpm work decompose 2026-05-13-binder-wrap-helper
--execute` — sandcastle ran the decomposer agent with subscription
auth (after the macOS keychain workaround + Dockerfile fix from
prior commits). The agent wrote files but hit `Max iterations: 1`
before committing, so this commit carries its output unchanged.
Epic: docs/work/binder-wrap-helper/
- _epic.md links to PRD 2026-05-13-binder-wrap-helper
- features: [core-shared, auth, blog, media, marketing-pages,
navigation, tooling]
Stories (8 total, with dependency edges):
01-wire-use-case-helper prereq (blocks 02..07)
Goal: helper at core-shared/conformance/wire-use-case.ts +
tests covering brand stacking, span/capture/audit composition,
idempotent bind. depends-on: [], blocks 02..07.
02-migrate-auth-binders depends-on [01]
03-migrate-blog-binders depends-on [01]
04-migrate-media-binders depends-on [01]
05-migrate-marketing-pages- depends-on [01]
binders
06-migrate-navigation-binders depends-on [01]
07-update-feature-generator depends-on [01]
08-holistic-validation depends-on [02..07], blocks: []
Final gate suite + fallow dupes check to verify the 5 binder-
pair clone groups have disappeared.
After 01 lands, stories 02..07 are parallelisable; 08 collects them.
Pre-commit hook regenerates _state.json + re-stages it so `pnpm
work next` immediately surfaces the new ready story.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.1 KiB
2.1 KiB
id, epic, title, type, status, feature, depends-on, blocks
| id | epic | title | type | status | feature | depends-on | blocks | ||
|---|---|---|---|---|---|---|---|---|---|
| 06-migrate-navigation-binders | binder-wrap-helper | Migrate navigation feature binders to wireUseCase | technical-story | todo | navigation |
|
|
Goal
Replace the inline withSpan + withCapture (+ optional withAudit) block in packages/navigation/src/di/bind-production.ts and packages/navigation/src/di/bind-dev-seed.ts with a wireUseCase call for navigation's single use case (getHeader).
Why
Navigation's binder pair contributes one of the five top-ten pnpm fallow clone groups. Even with a single use case, the inline wrap shape is identical boilerplate that the helper eliminates.
Done when
bind-production.tsandbind-dev-seed.tscallwireUseCasefor getHeader — no inlinewithSpan(... withCapture(...))pattern remains.- Audit-bearing status confirmed via manifest check;
auditLog+ schema passed if needed. pnpm test --filter @repo/navigationgreen.pnpm typecheck --filter @repo/navigationgreen.assertFeatureConformancedoes not throw at boot for navigation.
In scope
packages/navigation/src/di/bind-production.ts— use-case binding block only.packages/navigation/src/di/bind-dev-seed.ts— use-case binding block only.- Repository and service bindings stay as-is.
- Controller bindings stay as-is.
Out of scope
- Controller bindings — deferred follow-up per PRD.
- Changes to navigation use-case implementations, schemas, or tests outside the binder.
Tasks
- Read
packages/navigation/src/feature.manifest.ts— confirm getHeader audit status - Read
packages/navigation/src/di/bind-production.ts— understand inline wrap shape and deps - Read
packages/navigation/src/di/bind-dev-seed.ts— same for dev-seed mode - Update
packages/navigation/src/di/bind-production.ts— replace inline wrap block withwireUseCasecall - Update
packages/navigation/src/di/bind-dev-seed.ts— same - Run
pnpm test --filter @repo/navigation— verify all tests pass - Run
pnpm typecheck --filter @repo/navigation— verify no type regressions