diff --git a/.sf/REQUIREMENTS.md b/.sf/REQUIREMENTS.md index 2d8bd0fbb..f3f6e52f7 100644 --- a/.sf/REQUIREMENTS.md +++ b/.sf/REQUIREMENTS.md @@ -70,6 +70,50 @@ This file is the explicit capability and coverage contract for the project. - Validation: unmapped - Notes: Standard try/catch protection. +### R007 — Knowledge/Graph Artifact Formalization +- Class: constraint +- Status: active +- Description: `knowledge` and `graph` must be declared in `ARTIFACT_KEYS` in `unit-context-manifest.js` alongside their existing `computed` registrations in `UNIT_MANIFESTS`. +- Why it matters: Without formal registration, manifests that declare `knowledge` and `graph` as `computed` entries are structurally unreliable — the artifact registry doesn't know these keys exist, making the system incomplete and future tooling harder to build. +- Source: spec +- Primary owning slice: M005/S01 +- Supporting slices: none +- Validation: unmapped +- Notes: The manifests already declare them as `computed`; this formalizes the registry entry. + +### R008 — Remaining Builder Migration to composeUnitContext v2 +- Class: core-capability +- Status: active +- Description: All 7 unmigrated unit-type builders (`execute-task`, `complete-slice`, `discuss-milestone`, `discuss-project`, `discuss-requirements`, `research-project`, `rewrite-docs`) must be wired through `composeUnitContext` v2 with proper `computed` knowledge/graph entries. +- Why it matters: The migration eliminates imperative string manipulation and positions SF for the Phase 4 pipeline-variants feature. Fragile sentinel-string searches (e.g., `body.lastIndexOf("### Task Summary:")`) are replaced by structured computed entries. +- Source: spec +- Primary owning slice: M005/S01 +- Supporting slices: M005/S02 +- Validation: unmapped +- Notes: Phase 2 shipped 15/26 types migrated. This completes the remaining 7. + +### R009 — Builder Ordering Safety Tests +- Class: quality-attribute +- Status: active +- Description: Position-assertion and equivalence tests must cover all migrated builders to guard against silent ordering degradation when manifests are changed. +- Why it matters: Without tests, manifest reordering or new computed entries silently change prompt output — a regression only visible in production LLM calls. +- Source: spec +- Primary owning slice: M005/S01 +- Supporting slices: M005/S03 +- Validation: unmapped +- Notes: Extends existing `auto-prompts-phase3.test.mjs` which covers plan-milestone, replan-slice, validate-milestone, research-slice. + +### R010 — Dead Code Removal +- Class: quality-attribute +- Status: active +- Description: `prompt-cache-optimizer.js` must be removed — `optimizeForCaching()`, `estimateCacheSavings()`, and `computeCacheHitRate()` have zero importers. +- Why it matters: Dead code is maintenance burden; the actual caching logic lives in `prompt-ordering.js` (which is wired). +- Source: spec +- Primary owning slice: M005/S02 +- Supporting slices: none +- Validation: unmapped +- Notes: `reorderForCaching` in `prompt-ordering.js` is the live implementation. + ## Traceability | ID | Class | Status | Primary owner | Supporting | Proof | @@ -80,10 +124,14 @@ This file is the explicit capability and coverage contract for the project. | R004 | differentiator | active | M003/S04 | none | unmapped | | R005 | constraint | active | M003/S05 | none | unmapped | | R006 | quality-attribute | active | M003/S06 | none | unmapped | +| R007 | constraint | active | M005/S01 | none | unmapped | +| R008 | core-capability | active | M005/S01 | M005/S02 | unmapped | +| R009 | quality-attribute | active | M005/S01 | M005/S03 | unmapped | +| R010 | quality-attribute | active | M005/S02 | none | unmapped | ## Coverage Summary -- Active requirements: 6 -- Mapped to slices: 6 +- Active requirements: 10 +- Mapped to slices: 10 - Validated: 0 - Unmapped active requirements: 0