The previous layout placed epic folders directly under docs/work/
alongside prds/ and _system/. Tightening: epics now live in their
own docs/work/epics/ subfolder, peer to prds/ and _system/. Same
shape as the existing prds/ bucket.
Final docs/work/ layout:
README.md
prds/<slug>.prd.md
_system/_state.json
epics/<slug>/_epic.md + <story-folder>/_story.md
Renames (git mv preserves history):
- docs/work/binder-wrap-helper/
-> docs/work/epics/binder-wrap-helper/
- docs/work/library-evaluation-policy/
-> docs/work/epics/library-evaluation-policy/
- docs/work/ci-security-and-supply-chain/
-> docs/work/epics/ci-security-and-supply-chain/
Tooling updates:
- state-builder.mjs walks workRoot/epics/ directly; SKIP_FOLDERS
obsoleted (no more sibling folders to filter out).
- dispatch.mjs's findNextTask, tickStoryBulletInEpic, and
flipEpicDoneIfAllStoriesDone all join with "epics" segment.
- prd-ship.mjs's deriveShippingCommits walks workRoot/epics/ and
git-logs docs/work/epics/<epic>/.
- decomposer.prompt.md emits epics under docs/work/epics/<epic-id>/.
- handoff + grill-with-docs glossary references updated.
- Glossary entry for Epic updated.
Reserved future shape: when a task-tracker integration (ClickUp,
Linear) ships, the epics/ subfolder hosts <task-id>-<slug>/
folders. Today it just hosts bare slugs.
1.2 KiB
1.2 KiB
id, prd, title, type, status, features, created, updated
| id | prd | title | type | status | features | created | updated | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| binder-wrap-helper | docs/work/prds/binder-wrap-helper.prd.md | Collapse binder duplication via wireUseCase helper | epic | done |
|
2026-05-13T00:00:00Z | 2026-05-14T19:21:52.308Z |
Goal
Introduce a wireUseCase(...) helper in @repo/core-shared/conformance/ that encapsulates the withSpan + withCapture (+ optional withAudit) composition. Refactor all five features' binders to call the helper. Update the feature generator templates to emit the new call shape by default.
Why
Five of pnpm fallow's top-ten clone groups come from binder pairs across features. The inline wrapping runs 30–79 duplicated lines per binder pair. The helper becomes the single source of truth for the wrapping shape; per-feature binders shrink to their decision content plus a list of wireUseCase calls.