Convention shift: epic folders + PRD filenames + frontmatter id
fields are now bare slugs. The created: timestamp (Phase 2) carries
the date; folder names don't repeat it. A future <task-id>-<slug>
shape (e.g. ClickUp) lands cleanly when that integration ships.
Renames (git mv preserves history):
- docs/work/2026-05-13-binder-wrap-helper/
-> docs/work/binder-wrap-helper/
- docs/work/2026-05-14-library-evaluation-policy/
-> docs/work/library-evaluation-policy/
- docs/work/2026-05-14-ci-security-and-supply-chain/
-> docs/work/ci-security-and-supply-chain/
- docs/work/prds/2026-05-13-binder-wrap-helper.prd.md
-> docs/work/prds/binder-wrap-helper.prd.md
- docs/work/prds/2026-05-13-coverage-architecture.prd.md
-> docs/work/prds/coverage-architecture.prd.md
- docs/work/prds/2026-05-14-library-evaluation-policy.prd.md
-> docs/work/prds/library-evaluation-policy.prd.md
- docs/work/prds/2026-05-14-ci-security-and-supply-chain.prd.md
-> docs/work/prds/ci-security-and-supply-chain.prd.md
Frontmatter updates inside the renamed files: epic id, epic prd,
story epic, PRD id, PRD builds-on all drop date prefixes.
System folder + state file move:
- New docs/work/_system/ holds framework-managed state.
- docs/work/_state.json -> docs/work/_system/_state.json.
- state-builder.mjs adds _system to SKIP_FOLDERS.
- cli.mjs + state-sync-guard.mjs + .husky/pre-commit point at the
new path.
template-reset-v1 epic deleted entirely (one-off cleanup epic from
the pre-date-convention era; status was already done).
Generator-template updates (so new artifacts ship in the right
shape):
- .sandcastle/decomposer.prompt.md emits bare-slug folder names +
ISO created: timestamp.
- .claude/skills/to-prd/SKILL.md template uses bare-slug filename +
bare-slug id field + ISO created: timestamp.
Doc reference updates: glossary, runbook, agent-first-workflow-
and-conformance, reviewer prompt, ADR-020, ADR-022, ADR-023 all
point at the new paths/slugs.
3.2 KiB
3.2 KiB
id, epic, title, type, status, feature, depends-on, blocks, created, updated
| id | epic | title | type | status | feature | depends-on | blocks | created | updated | |
|---|---|---|---|---|---|---|---|---|---|---|
| 08-backfill-traces | library-evaluation-policy | Backfill library traces for existing feature- and core-tier runtime deps | technical-story | done | docs |
|
2026-05-14T06:52:02+02:00 | 2026-05-14T19:16:52.691Z |
Goal
Write approved library trace files dated 2026-05-14 in docs/library-decisions/ for every existing runtime dependency in feature- and core-tier packages, grouped by ADR provenance into four commits. No package.json is changed; these commits are pure trace-file additions.
Why
Without backfill, every existing dep becomes a pre-commit-hook failure the first time someone touches a package.json — the enforcement gate would fire retroactively. Backfill establishes the baseline so the gate is additive (new deps require traces) rather than disruptive (old deps fail immediately). Grouping by ADR cluster makes the commit history readable and keeps each commit focused on a coherent rationale.
Done when
- All runtime deps in
packages/(feature- and core-tier) have a correspondingdocs/library-decisions/YYYY-MM-DD-<name>.mdwithdecision: approved,date: 2026-05-14, and the relevantadrcitation (ornullfor un-cited deps). - Four commits land, one per cluster:
- ADR-002 cluster:
inversify,reflect-metadata. - ADR-014 cluster:
@sentry/node,@sentry/nextjs,@sentry/react, and any other Sentry packages present. - ADR-017 cluster:
@opentelemetry/api,@opentelemetry/sdk-node, and any other OTel packages present. - Un-cited cluster:
payload,@trpc/server,zod,superjson, and any remaining runtime deps not covered by an ADR.
- ADR-002 cluster:
- All trace files pass
validateTrace()fromschema.mjs(Story 01). pnpm lint && pnpm fallow:auditpass after all four commits.
In scope
docs/library-decisions/<date>-<name>.mdtrace files — one per dep.- Four conventional commits:
chore(deps): backfill library traces for <cluster>.
Out of scope
- Deps in
apps/*— app-tier is out of scope per the PRD. - devDeps in any tier — exempt from traces.
- Changing any
package.json— backfill is trace-only. - Optional core packages not yet installed in the workspace — covered by Story 07 (generator pre-shipped traces) when they are scaffolded.
Tasks
- Inventory all runtime deps in
packages/(runjq '.dependencies // {} | keys' packages/*/package.json packages/core-*/package.jsonor equivalent); write approved trace files for the ADR-002 cluster (inversify,reflect-metadata) indocs/library-decisions/; commit aschore(deps): backfill library traces for ADR-002 cluster. - Write approved trace files for the ADR-014 cluster (Sentry packages); commit as
chore(deps): backfill library traces for ADR-014 cluster. - Write approved trace files for the ADR-017 cluster (OpenTelemetry packages); commit as
chore(deps): backfill library traces for ADR-017 cluster. - Write approved trace files for the un-cited cluster (
payload,@trpc/server,zod,superjson, and any remaining runtime deps); commit aschore(deps): backfill library traces for un-cited cluster; all gates pass after this final commit.