docs(work): story 01 — defineFeature helper + brands
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
id: 01-define-feature-helper
|
||||||
|
epic: conformance-system-v1
|
||||||
|
title: defineFeature helper + Instrumented/Captured/Audited brands
|
||||||
|
type: technical-story
|
||||||
|
status: in-progress
|
||||||
|
feature: core-shared
|
||||||
|
depends-on: []
|
||||||
|
blocks: [02-boot-assertions]
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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>` and `Captured<F>` brand types in `@repo/core-shared/conformance`
|
||||||
|
- Brand attachment in `withSpan` and `withCapture`
|
||||||
|
- `Audited<F>` brand and `withAudit` wrapper in `@repo/core-audit`
|
||||||
|
- `defineFeature` helper + `FeatureManifest` / `UseCaseManifest` types
|
||||||
|
- `ProductionUseCase<I, O, M>` branded slot type
|
||||||
|
- `authManifest` declaring `signIn`, `signUp`, `signOut`
|
||||||
|
- `auth.signIn` rebound through the branded slot
|
||||||
|
|
||||||
|
## Out of scope
|
||||||
|
- `auth.signUp` / `auth.signOut` rebinding through branded slots (separate tasks within this story or a follow-up story; signUp requires `Audited<F>` once we declare its `audits`)
|
||||||
|
- Boot-time `assertConformance` (story 02)
|
||||||
|
- ESLint rules reading the manifest (story 03)
|
||||||
|
- Generator emitting manifest stubs (story 05)
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
- [ ] Brand types: `Instrumented<F>` and `Captured<F>`
|
||||||
|
- [ ] `withSpan` attaches `Instrumented`
|
||||||
|
- [ ] `withCapture` attaches `Captured`
|
||||||
|
- [ ] `defineFeature` helper + manifest types
|
||||||
|
- [ ] `ProductionUseCase<I, O, M>` slot type
|
||||||
|
- [ ] `withAudit` wrapper + `Audited` brand
|
||||||
|
- [ ] `authManifest` declaration
|
||||||
|
- [ ] `auth.signIn` rebound through branded slot
|
||||||
|
- [ ] Negative test: unwrapped factory rejected at type level
|
||||||
Reference in New Issue
Block a user