1.8 KiB
1.8 KiB
id, epic, title, type, status, feature, depends-on, blocks
| id | epic | title | type | status | feature | depends-on | blocks | |
|---|---|---|---|---|---|---|---|---|
| 01-define-feature-helper | conformance-system-v1 | defineFeature helper + Instrumented/Captured/Audited brands | technical-story | done | core-shared |
|
Goal
Manifest helper + brand types enable type-level enforcement that every
use-case binding is wrapped with withSpan + withCapture
(and withAudit when mutating with audits declared).
Why
Compile-time feedback is the cheapest layer and the foundation every other milestone reads.
Done when
Compile-time TS2322 fires when an unwrapped factory is bound through
ProductionUseCase<...>, and auth.signIn is rebound through the new slot.
In scope
Instrumented<F>andCaptured<F>brand types in@repo/core-shared/conformance- Brand attachment in
withSpanandwithCapture Audited<F>brand andwithAuditwrapper in@repo/core-auditdefineFeaturehelper +FeatureManifest/UseCaseManifesttypesProductionUseCase<I, O, M>branded slot typeauthManifestdeclaringsignIn,signUp,signOutauth.signInrebound through the branded slot
Out of scope
auth.signUp/auth.signOutrebinding through branded slots (separate tasks within this story or a follow-up story; signUp requiresAudited<F>once we declare itsaudits)- Boot-time
assertConformance(story 02) - ESLint rules reading the manifest (story 03)
- Generator emitting manifest stubs (story 05)
Tasks
- Brand types:
Instrumented<F>andCaptured<F> withSpanattachesInstrumentedwithCaptureattachesCaptureddefineFeaturehelper + manifest typesProductionUseCase<I, O, M>slot typewithAuditwrapper +AuditedbrandauthManifestdeclarationauth.signInrebound through branded slot- Negative test: unwrapped factory rejected at type level