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