rcf-lite 0.28.2 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +317 -0
- package/bin/rcf.js +8 -0
- package/fixtures/canary-manifest.json +9 -9
- package/guidance/define-draft-shapes.md +89 -0
- package/guidance/define-intake.md +97 -0
- package/guidance/define-intent.md +107 -0
- package/guidance/discover-prototype.md +67 -0
- package/guidance/discovery-prototypes.md +69 -0
- package/guidance/harness-template.md +34 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +34 -0
- package/guidance/manifest.json +9 -2
- package/package.json +1 -1
- package/rcf/adrs/adr-4120-canonical-json-hashing.json +30 -0
- package/rcf/adrs/adr-4121-define-sidecars.json +30 -0
- package/rcf/adrs/adr-4122-define-gates-blocking-and-optout.json +30 -0
- package/rcf/adrs/adr-4123-readiness-single-object.json +30 -0
- package/rcf/adrs/adr-4124-define-freeze-verb.json +30 -0
- package/rcf/adrs/adr-4126-persona-tagged-blockers-two-levels.json +40 -0
- package/rcf/adrs/adr-4127-readiness-tab-order-and-register.json +40 -0
- package/rcf/adrs/adr-4129-questions-harness-driven-loop.json +25 -0
- package/rcf/adrs/adr-4130-intake-harness-split-tool-scanned.json +20 -0
- package/rcf/adrs/adr-4132-prototypes-in-discovery-as-evidence.json +20 -0
- package/rcf/adrs/adr-4133-dag-dependency-depth-layout.json +40 -0
- package/rcf/adrs/adr-4134-index-json-route.json +35 -0
- package/rcf/adrs/adr-4135-readiness-po-register-and-adapter.json +35 -0
- package/rcf/adrs/adr-4136-embedding-host-fixture.json +35 -0
- package/rcf/code-nodes/cn-700.json +23 -0
- package/rcf/code-nodes/cn-701.json +14 -0
- package/rcf/code-nodes/cn-702.json +14 -0
- package/rcf/code-nodes/cn-703.json +16 -0
- package/rcf/code-nodes/cn-720.json +15 -0
- package/rcf/code-nodes/cn-721.json +15 -0
- package/rcf/code-nodes/cn-722.json +15 -0
- package/rcf/code-nodes/cn-723.json +18 -0
- package/rcf/code-nodes/cn-724.json +14 -0
- package/rcf/code-nodes/cn-725.json +37 -0
- package/rcf/code-nodes/cn-726.json +25 -0
- package/rcf/code-nodes/cn-727.json +23 -0
- package/rcf/code-nodes/cn-728.json +37 -0
- package/rcf/code-nodes/cn-729.json +26 -0
- package/rcf/code-nodes/cn-730.json +24 -0
- package/rcf/code-nodes/cn-731.json +20 -0
- package/rcf/code-nodes/cn-732.json +14 -0
- package/rcf/code-nodes/cn-733.json +14 -0
- package/rcf/code-nodes/cn-734.json +14 -0
- package/rcf/code-nodes/cn-735.json +20 -0
- package/rcf/code-nodes/cn-736.json +14 -0
- package/rcf/code-nodes/cn-737.json +14 -0
- package/rcf/code-nodes/cn-738.json +14 -0
- package/rcf/code-nodes/cn-739.json +18 -0
- package/rcf/code-nodes/cn-740.json +19 -0
- package/rcf/code-nodes/cn-741.json +16 -0
- package/rcf/code-nodes/cn-742.json +16 -0
- package/rcf/code-nodes/cn-743.json +15 -0
- package/rcf/code-nodes/cn-744.json +22 -0
- package/rcf/code-nodes/cn-745.json +16 -0
- package/rcf/code-nodes/cn-746.json +14 -0
- package/rcf/code-nodes/cn-747.json +18 -0
- package/rcf/code-nodes/cn-748.json +16 -0
- package/rcf/code-nodes/cn-749.json +16 -0
- package/rcf/code-nodes/cn-750.json +15 -0
- package/rcf/code-nodes/cn-751.json +18 -0
- package/rcf/code-nodes/cn-752.json +14 -0
- package/rcf/fbs/fbs-190.json +37 -0
- package/rcf/fbs/fbs-191.json +34 -0
- package/rcf/fbs/fbs-192.json +17 -0
- package/rcf/fbs/fbs-193.json +37 -0
- package/rcf/fbs/fbs-194.json +35 -0
- package/rcf/fbs/fbs-195.json +37 -0
- package/rcf/fbs/fbs-196.json +45 -0
- package/rcf/fbs/fbs-197.json +41 -0
- package/rcf/fbs/fbs-198.json +42 -0
- package/rcf/fbs/fbs-199.json +59 -0
- package/rcf/fbs/fbs-200.json +46 -0
- package/rcf/fbs/fbs-201.json +49 -0
- package/rcf/fbs/fbs-202.json +110 -0
- package/rcf/fbs/fbs-203.json +100 -0
- package/rcf/requirements/req-001.json +2 -1
- package/rcf/requirements/req-002.json +3 -2
- package/rcf/requirements/req-003.json +2 -1
- package/rcf/requirements/req-004.json +2 -1
- package/rcf/requirements/req-005.json +2 -1
- package/rcf/requirements/req-006.json +2 -1
- package/rcf/requirements/req-007.json +2 -1
- package/rcf/requirements/req-008.json +2 -1
- package/rcf/requirements/req-009.json +2 -1
- package/rcf/requirements/req-010.json +5 -2
- package/rcf/requirements/req-011.json +2 -1
- package/rcf/requirements/req-012.json +2 -1
- package/rcf/requirements/req-013.json +2 -1
- package/rcf/requirements/req-014.json +2 -1
- package/rcf/requirements/req-015.json +2 -1
- package/rcf/requirements/req-016.json +5 -2
- package/rcf/requirements/req-017.json +6 -2
- package/rcf/requirements/req-018.json +5 -2
- package/rcf/requirements/req-019.json +5 -2
- package/rcf/requirements/req-020.json +5 -2
- package/rcf/requirements/req-021.json +5 -2
- package/rcf/requirements/req-022.json +5 -2
- package/rcf/requirements/req-023.json +6 -4
- package/rcf/requirements/req-024.json +5 -2
- package/rcf/requirements/req-025.json +5 -2
- package/rcf/requirements/req-026.json +5 -2
- package/rcf/requirements/req-027.json +5 -2
- package/rcf/requirements/req-028.json +5 -2
- package/rcf/requirements/req-029.json +5 -2
- package/rcf/requirements/req-030.json +5 -2
- package/rcf/requirements/req-040.json +5 -2
- package/rcf/requirements/req-041.json +5 -2
- package/rcf/requirements/req-042.json +5 -2
- package/rcf/requirements/req-043.json +5 -2
- package/rcf/requirements/req-050.json +5 -2
- package/rcf/requirements/req-051.json +5 -2
- package/rcf/requirements/req-052.json +5 -2
- package/rcf/requirements/req-053.json +5 -2
- package/rcf/requirements/req-054.json +5 -2
- package/rcf/requirements/req-060.json +5 -2
- package/rcf/requirements/req-061.json +5 -2
- package/rcf/requirements/req-062.json +5 -2
- package/rcf/requirements/req-063.json +5 -2
- package/rcf/requirements/req-070.json +5 -2
- package/rcf/requirements/req-071.json +5 -2
- package/rcf/requirements/req-072.json +5 -2
- package/rcf/requirements/req-073.json +5 -2
- package/rcf/requirements/req-074.json +5 -2
- package/rcf/requirements/req-075.json +5 -2
- package/rcf/requirements/req-076.json +5 -2
- package/rcf/requirements/req-077.json +5 -2
- package/rcf/requirements/req-080.json +5 -2
- package/rcf/requirements/req-081.json +5 -2
- package/rcf/requirements/req-082.json +5 -2
- package/rcf/requirements/req-083.json +5 -2
- package/rcf/requirements/req-084.json +5 -2
- package/rcf/requirements/req-085.json +5 -2
- package/rcf/requirements/req-086.json +5 -2
- package/rcf/requirements/req-090.json +5 -2
- package/rcf/requirements/req-091.json +5 -2
- package/rcf/requirements/req-092.json +5 -2
- package/rcf/requirements/req-093.json +5 -2
- package/rcf/requirements/req-094.json +5 -2
- package/rcf/requirements/req-100.json +5 -2
- package/rcf/requirements/req-101.json +5 -2
- package/rcf/requirements/req-102.json +5 -2
- package/rcf/requirements/req-103.json +5 -2
- package/rcf/requirements/req-104.json +5 -2
- package/rcf/requirements/req-110.json +5 -2
- package/rcf/requirements/req-111.json +5 -2
- package/rcf/requirements/req-112.json +5 -2
- package/rcf/requirements/req-113.json +5 -2
- package/rcf/requirements/req-114.json +5 -2
- package/rcf/requirements/req-115.json +5 -2
- package/rcf/requirements/req-120.json +5 -2
- package/rcf/requirements/req-121.json +5 -2
- package/rcf/requirements/req-122.json +5 -2
- package/rcf/requirements/req-123.json +5 -2
- package/rcf/requirements/req-124.json +5 -2
- package/rcf/requirements/req-125.json +5 -2
- package/rcf/requirements/req-130.json +6 -2
- package/rcf/requirements/req-131.json +6 -2
- package/rcf/requirements/req-132.json +6 -2
- package/rcf/requirements/req-133.json +6 -2
- package/rcf/requirements/req-134.json +6 -2
- package/rcf/requirements/req-140.json +5 -2
- package/rcf/requirements/req-145.json +5 -2
- package/rcf/requirements/req-150.json +6 -2
- package/rcf/requirements/req-151.json +6 -2
- package/rcf/requirements/req-152.json +6 -2
- package/rcf/requirements/req-153.json +6 -2
- package/rcf/requirements/req-154.json +5 -2
- package/rcf/requirements/req-155.json +4 -1
- package/rcf/requirements/req-156.json +4 -1
- package/rcf/requirements/req-157.json +4 -1
- package/rcf/requirements/req-158.json +4 -1
- package/rcf/requirements/req-159.json +4 -1
- package/rcf/requirements/req-160.json +4 -1
- package/rcf/requirements/req-161.json +4 -1
- package/rcf/requirements/req-162.json +4 -1
- package/rcf/requirements/req-163.json +5 -2
- package/rcf/requirements/req-164.json +5 -2
- package/rcf/requirements/req-165.json +5 -2
- package/rcf/requirements/req-170.json +33 -0
- package/rcf/requirements/req-171.json +44 -0
- package/rcf/requirements/req-172.json +25 -0
- package/rcf/requirements/req-173.json +25 -0
- package/rcf/requirements/req-174.json +31 -0
- package/rcf/requirements/req-175.json +31 -0
- package/rcf/requirements/req-176.json +25 -0
- package/rcf/requirements/req-180.json +31 -0
- package/rcf/requirements/req-181.json +31 -0
- package/rcf/requirements/req-182.json +25 -0
- package/rcf/requirements/req-186.json +25 -0
- package/rcf/requirements/req-187.json +31 -0
- package/rcf/requirements/req-188.json +25 -0
- package/rcf/tacs/tac-4120-define-delta-and-freeze.json +21 -0
- package/rcf/tacs/tac-4121-define-ledgers.json +35 -0
- package/rcf/tacs/tac-4122-define-gates.json +61 -0
- package/rcf/tacs/tac-4123-define-readiness.json +61 -0
- package/rcf/tacs/tac-4124-define-freeze.json +28 -0
- package/rcf/tacs/tac-4127-readiness-view.json +49 -0
- package/rcf/tacs/tac-4128-define-guidance.json +53 -0
- package/rcf/tacs/tac-4129-define-questions.json +45 -0
- package/rcf/tacs/tac-4130-define-intake-brief.json +35 -0
- package/rcf/tacs/tac-4131-build-dag-view.json +39 -0
- package/rcf/tacs/tac-4132-id-lookup.json +42 -0
- package/rcf/tacs/tac-4133-readiness-po-layer.json +37 -0
- package/rcf/tacs/tac-4134-wespa-host-fixture.json +54 -0
- package/rcf/test-suites/ts-016.json +3 -3
- package/rcf/test-suites/ts-204.json +30 -0
- package/rcf/test-suites/ts-205.json +22 -0
- package/rcf/test-suites/ts-206.json +22 -0
- package/rcf/test-suites/ts-207.json +22 -0
- package/rcf/test-suites/ts-208.json +22 -0
- package/rcf/test-suites/ts-209.json +22 -0
- package/rcf/test-suites/ts-210.json +22 -0
- package/rcf/test-suites/ts-211.json +22 -0
- package/rcf/test-suites/ts-212.json +22 -0
- package/rcf/test-suites/ts-213.json +50 -0
- package/rcf/test-suites/ts-214.json +74 -0
- package/rcf/test-suites/ts-215.json +211 -0
- package/rcf/test-suites/ts-216.json +94 -0
- package/rcf/test-suites/ts-217.json +62 -0
- package/rcf/test-suites/ts-218.json +78 -0
- package/rcf/test-suites/ts-219.json +70 -0
- package/rcf/test-suites/ts-220.json +78 -0
- package/rcf/test-suites/ts-221.json +78 -0
- package/rcf/test-suites/ts-222.json +100 -0
- package/rcf/test-suites/ts-223.json +94 -0
- package/rcf/test-suites/ts-224.json +70 -0
- package/rcf/test-suites/ts-225.json +78 -0
- package/rcf/test-suites/ts-226.json +158 -0
- package/rcf/test-suites/ts-227.json +38 -0
- package/rcf/test-suites/ts-228.json +86 -0
- package/rcf/test-suites/ts-229.json +83 -0
- package/rcf/user-stories/us-15601.json +4 -4
- package/rcf/user-stories/us-17001.json +27 -0
- package/rcf/user-stories/us-17002.json +22 -0
- package/rcf/user-stories/us-17003.json +22 -0
- package/rcf/user-stories/us-17004.json +22 -0
- package/rcf/user-stories/us-17005.json +22 -0
- package/rcf/user-stories/us-17006.json +21 -0
- package/rcf/user-stories/us-17007.json +21 -0
- package/rcf/user-stories/us-17008.json +22 -0
- package/rcf/user-stories/us-17101.json +22 -0
- package/rcf/user-stories/us-17102.json +22 -0
- package/rcf/user-stories/us-17201.json +38 -0
- package/rcf/user-stories/us-17301.json +38 -0
- package/rcf/user-stories/us-17302.json +50 -0
- package/rcf/user-stories/us-17401.json +70 -0
- package/rcf/user-stories/us-17402.json +55 -0
- package/rcf/user-stories/us-17403.json +60 -0
- package/rcf/user-stories/us-17501.json +48 -0
- package/rcf/user-stories/us-17502.json +60 -0
- package/rcf/user-stories/us-17503.json +65 -0
- package/rcf/user-stories/us-17601.json +58 -0
- package/rcf/user-stories/us-18001.json +55 -0
- package/rcf/user-stories/us-18002.json +35 -0
- package/rcf/user-stories/us-18101.json +35 -0
- package/rcf/user-stories/us-18202.json +40 -0
- package/rcf/user-stories/us-18601.json +55 -0
- package/rcf/user-stories/us-18602.json +50 -0
- package/rcf/user-stories/us-18603.json +45 -0
- package/rcf/user-stories/us-18701.json +50 -0
- package/rcf/user-stories/us-18702.json +50 -0
- package/rcf/user-stories/us-18801.json +45 -0
- package/rcf/user-stories/us-204.json +59 -0
- package/rcf/user-stories/us-205.json +64 -0
- package/rcf/user-stories/us-206.json +54 -0
- package/releases/releases.yaml +31 -1
- package/src/cli/feedback.js +126 -10
- package/src/cli/freeze.js +730 -0
- package/src/cli/help.js +23 -0
- package/src/cli/ledger.js +615 -0
- package/src/cli/questions.js +288 -0
- package/src/cli/readiness.js +498 -0
- package/src/cli/view.js +29 -0
- package/src/core/store/writer.js +86 -6
- package/src/define/freeze-record.js +247 -0
- package/src/define/ledgers.js +712 -0
- package/src/feedback/redact.js +105 -19
- package/src/intake/index.js +1 -1
- package/src/intake/orchestrator.js +117 -0
- package/src/mcp/tools.js +354 -0
- package/src/query/delta.js +282 -0
- package/src/query/gates.js +1107 -0
- package/src/query/index.js +50 -0
- package/src/query/questions.js +438 -0
- package/src/query/readiness.js +574 -0
- package/src/server/index.js +60 -1
- package/src/server/routes.js +133 -4
- package/src/setup/identity-seed.js +17 -0
- package/src/view/build-dag.js +563 -0
- package/src/view/components/badge.js +41 -0
- package/src/view/components/diff.js +72 -0
- package/src/view/components/doc-row.js +62 -0
- package/src/view/components/empty-state.js +35 -0
- package/src/view/components/entity-selector.js +137 -0
- package/src/view/components/filter-bar.js +97 -0
- package/src/view/components/findings-list.js +49 -0
- package/src/view/components/index.js +12 -0
- package/src/view/components/pill.js +46 -0
- package/src/view/components/sub-tab-strip.js +43 -0
- package/src/view/components/toast.js +25 -0
- package/src/view/components-fixture.js +265 -0
- package/src/view/doc-renderers/architecture.js +304 -0
- package/src/view/doc-renderers/build.js +160 -0
- package/src/view/doc-renderers/helpers.js +2 -2
- package/src/view/doc-renderers/index.js +2 -0
- package/src/view/doc-renderers/prd.js +35 -6
- package/src/view/doc-renderers/req.js +10 -2
- package/src/view/doc-renderers/user-story.js +10 -5
- package/src/view/html-page.js +717 -300
- package/src/view/index.js +109 -3
- package/src/view/live-client.js +61 -8
- package/src/view/needs-work.js +79 -0
- package/src/view/page-init.js +2193 -0
- package/src/view/product-map.js +751 -0
- package/src/view/readiness/phrasebook.js +115 -0
- package/src/view/readiness/po-layer.js +288 -0
- package/src/view/readiness/question-adapter.js +329 -0
- package/src/view/readiness/stage-legend.js +71 -0
- package/src/view/readiness.js +505 -0
- package/src/view/style.css +2279 -266
- package/src/view/test-host/embed-client.js +121 -0
- package/src/view/test-host/fixture.js +183 -0
- package/src/view/test-host/lints.js +220 -0
- package/src/view/view-index.js +323 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-24T12:00:00Z",
|
|
3
|
+
"updatedAt": "2026-09-24T12:00:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17301-1",
|
|
6
|
+
"AC-17301-2",
|
|
7
|
+
"AC-17301-3",
|
|
8
|
+
"AC-17301-4"
|
|
9
|
+
],
|
|
10
|
+
"fbsId": "FBS-195",
|
|
11
|
+
"prdId": "PRD-001",
|
|
12
|
+
"bsId": "BS-001",
|
|
13
|
+
"buildOrder": 195,
|
|
14
|
+
"executionStatus": "complete",
|
|
15
|
+
"title": "DEFINE slice 1: four sidecar ledgers and rcf define ledger CLI",
|
|
16
|
+
"summary": "Ship src/define/ledgers.js (load, save, validate, addEntry, resolveEntry, parseBriefFromFile, loadAllLedgers), src/cli/ledger.js (add / resolve / list on every ledger name; renderDecisionsList prints the #241 format), and wire under define in bin/rcf.js and src/cli/help.js. Prove walker invisibility of rcf/define/ with a dedicated test.",
|
|
17
|
+
"dependsOnFbsIds": ["FBS-194"],
|
|
18
|
+
"approach": "One JSON file per ledger under rcf/define/ (brief-ledger.json, decisions-ledger.json, concern-ledger.json, probe-ledger.json). LEDGER_NAMES is the closed list of accepted names; per-ledger config maps to the filename and array key. Validation is local (no @stravica-ai/rcf-schemas change). loadLedger returns an empty ledger on ENOENT; a malformed file raises LedgerError with a coded reason. addEntry mints ids per ledger and validates the whole body before returning it. The CLI wraps parseArgs, prints per-verb usage from HELP so 'rcf help define ledger' and 'rcf define ledger --help' render the same block, and disposes of ledger-specific flags (--kind, --text, --from, --source, --question, --option, --default, --blocks, --req, --concern, --disposition, --reason, --answer, --finding, --severity). renderDecisionsList prints the numbered #241 format for decisions list. The walker never reads rcf/define/ because loader.subdirFor names its children by kind; a dedicated test seeds four ledger files plus a bug-bait req-999.json under rcf/define/ and asserts no walker error path starts with rcf/define/ and no matching id lands in tree.byId.",
|
|
19
|
+
"contextRequirements": {
|
|
20
|
+
"tacIds": ["TAC-4121-define-ledgers"],
|
|
21
|
+
"adrIds": ["ADR-4121-define-sidecars"]
|
|
22
|
+
},
|
|
23
|
+
"deliverables": [
|
|
24
|
+
"src/define/ledgers.js: LEDGER_NAMES, BRIEF_KINDS, LedgerError, emptyLedger, ledgerRelPath, ledgerPath, loadLedger, saveLedger, validateLedger, addEntry, resolveEntry, nextIdFor, parseBriefFromFile, loadAllLedgers",
|
|
25
|
+
"src/cli/ledger.js: main, HELP, renderDecisionsList, parseOptionFlags",
|
|
26
|
+
"bin/rcf.js: GROUPS.define.ledger registered",
|
|
27
|
+
"src/cli/help.js: HELP_MAP.define.ledger, DEFINE_HELP block extended, top-level listing extended",
|
|
28
|
+
"test/define/ledgers.test.js: fifteen tests covering AC-17301-1 and AC-17301-3 semantics on the pure module",
|
|
29
|
+
"test/cli/ledger.test.js: eight CLI tests covering AC-17301-1, AC-17301-2 and AC-17301-3",
|
|
30
|
+
"test/store/walker-invisible-define.test.js: one test proving AC-17301-4"
|
|
31
|
+
],
|
|
32
|
+
"riskLevel": "low",
|
|
33
|
+
"domain": "defineLedgers",
|
|
34
|
+
"estimatedSize": "medium",
|
|
35
|
+
"estimatedHours": 5,
|
|
36
|
+
"notes": "Slice 1 leaves the intake-scan-against-frozen-statements hook on brief add --from as a named seam; slice 2's D1 gate is the intended consumer. No schema-package change."
|
|
37
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
3
|
+
"updatedAt": "2026-10-01T13:12:16Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17401-1",
|
|
6
|
+
"AC-17401-2",
|
|
7
|
+
"AC-17401-3",
|
|
8
|
+
"AC-17401-4",
|
|
9
|
+
"AC-17401-5",
|
|
10
|
+
"AC-17401-6",
|
|
11
|
+
"AC-17401-7",
|
|
12
|
+
"AC-17401-8",
|
|
13
|
+
"AC-17401-9",
|
|
14
|
+
"AC-17401-10"
|
|
15
|
+
],
|
|
16
|
+
"fbsId": "FBS-196",
|
|
17
|
+
"prdId": "PRD-001",
|
|
18
|
+
"bsId": "BS-001",
|
|
19
|
+
"buildOrder": 196,
|
|
20
|
+
"executionStatus": "complete",
|
|
21
|
+
"title": "DEFINE slice 2: stage gates D1..D8 pure check functions",
|
|
22
|
+
"summary": "Ship src/query/gates.js exposing one check function per stage D1..D8 with the section 2.4 shape { stage, gate, state, checks[] }. Blocking stages (D1, D2, D4, D7, D8) enforce the floors listed in proposal section 3.2; warn-with-ack stages (D3, D5, D6) run only the cheap data-backed checks and are acknowledgeable via freeze.gates[<gate>] at the current tree hash. AC class parses off the bracketed prefix on AC description (decision 6); D4 per-class opt-outs read manifest.baselineAcOptOuts[] with baselineKey 'defineD4:failure' or 'defineD4:mustNot' per ADR-4122.",
|
|
23
|
+
"dependsOnFbsIds": [
|
|
24
|
+
"FBS-195"
|
|
25
|
+
],
|
|
26
|
+
"approach": "One file, eight exported functions plus the STAGE_ORDER, STAGE_GATES, STAGE_SHORT_NAMES and INTERFACE_KINDS constants. Every function follows the same shape: decide notApplicable per section 3.2; assemble a checks[] list of { name, ok, over, pass, total, failing }; fold to state, honouring the warn-with-ack acknowledgement window when the stage is D3/D5/D6. Ledger reads use the emptyLedger fallback so an absent ledger contributes no findings. AC class parsing is a static regex over the description string (leading '[failure]' / '[must-not]' / '[happy]' / '[edge]' / '[non-functional]', case-sensitive). Profile parsing is a light presence check on rcf/.identity/profile.md (surface and register markers).",
|
|
27
|
+
"contextRequirements": {
|
|
28
|
+
"tacIds": [
|
|
29
|
+
"TAC-4122-define-gates"
|
|
30
|
+
],
|
|
31
|
+
"adrIds": [
|
|
32
|
+
"ADR-4122-define-gates-blocking-and-optout"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"deliverables": [
|
|
36
|
+
"src/query/gates.js: STAGE_ORDER, STAGE_GATES, STAGE_SHORT_NAMES, INTERFACE_KINDS, checkD1Brief..checkD8Freeze, plus foldState and parseAcClass helpers",
|
|
37
|
+
"src/query/index.js: re-export gate check functions + STAGE_ORDER, STAGE_GATES, STAGE_SHORT_NAMES so consumers import through one seam",
|
|
38
|
+
"test/query/gates.test.js: unit tests covering AC-17401-1 through AC-17401-8"
|
|
39
|
+
],
|
|
40
|
+
"riskLevel": "low",
|
|
41
|
+
"domain": "defineDetection",
|
|
42
|
+
"estimatedSize": "medium",
|
|
43
|
+
"estimatedHours": 4,
|
|
44
|
+
"notes": "Pure module: no filesystem I/O beyond what the caller supplies. Every warn-with-ack check leaves an explicit named seam for the 0.30 slice that will land the full template parser, catalogue and scans."
|
|
45
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
3
|
+
"updatedAt": "2026-09-24T14:30:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17501-1",
|
|
6
|
+
"AC-17501-2",
|
|
7
|
+
"AC-17501-3",
|
|
8
|
+
"AC-17501-4",
|
|
9
|
+
"AC-17501-5",
|
|
10
|
+
"AC-17501-6"
|
|
11
|
+
],
|
|
12
|
+
"fbsId": "FBS-197",
|
|
13
|
+
"prdId": "PRD-001",
|
|
14
|
+
"bsId": "BS-001",
|
|
15
|
+
"buildOrder": 197,
|
|
16
|
+
"executionStatus": "complete",
|
|
17
|
+
"title": "DEFINE slice 2: computeReadiness compose and rcf define readiness CLI",
|
|
18
|
+
"summary": "Ship src/query/readiness.js (computeReadiness composing delta + fan-out + gates + coverage + decisions into the section 2.4 object), src/cli/readiness.js (rcf define readiness [--json] [--check <stage>|all]), wire into bin/rcf.js and src/cli/help.js, resolve the slice-1 P3 by correcting loadAllLedgers to omit absent ledger files from the returned bundle.",
|
|
19
|
+
"dependsOnFbsIds": ["FBS-196"],
|
|
20
|
+
"approach": "Pure composer over TAC-4122's gates. computeImpact is called once per id in changed union added; impacted is the deduplicated union of every impact node id excluding pivots; impactedFbs is the subset { kind === 'fbs' AND actionNeeded === 're-execute' }. Coverage runs tree-wide (strict per-AC) plus once per REQ ancestor of the delta. nextAction picks the first failing stage in D1..D8 order and the first failing check inside it. freezeable is the AND of every stage state being passed / acknowledged / notApplicable. The CLI wraps its producer with runWithAdmissibilityGate; on refuse the wrapper's refusal envelope prints on stderr and the CLI exits 4. Text output follows section 6.2 (tree line, next action, chip line, delta list, failing items). --json emits JSON.stringify(result, null, 2). --check <stage> narrows the output and gates the exit code per AC-17501-5. loadAllLedgers is updated to stat each file first and omit missing ones (P3 resolution).",
|
|
21
|
+
"contextRequirements": {
|
|
22
|
+
"tacIds": ["TAC-4123-define-readiness"],
|
|
23
|
+
"adrIds": ["ADR-4123-readiness-single-object"]
|
|
24
|
+
},
|
|
25
|
+
"deliverables": [
|
|
26
|
+
"src/query/readiness.js: computeReadiness, computeScope, composeStages, deriveNextAction, deriveTreeSummary",
|
|
27
|
+
"src/cli/readiness.js: HELP, main; --json / --check / --help flags; runWithAdmissibilityGate wrap",
|
|
28
|
+
"src/define/ledgers.js: loadAllLedgers refactor to omit absent files (P3)",
|
|
29
|
+
"src/query/index.js: export computeReadiness + gates re-exports",
|
|
30
|
+
"bin/rcf.js: GROUPS.define.readiness registered",
|
|
31
|
+
"src/cli/help.js: HELP_MAP.define.readiness wired; DEFINE_HELP block extended; top-level DEFINE listing extended",
|
|
32
|
+
"test/query/readiness.test.js: tests covering AC-17501-1..4 and AC-17501-6",
|
|
33
|
+
"test/cli/readiness.test.js: CLI tests covering AC-17501-5",
|
|
34
|
+
"test/define/ledgers.test.js: extension test covering AC-17501-6 (loadAllLedgers omits missing files)"
|
|
35
|
+
],
|
|
36
|
+
"riskLevel": "low",
|
|
37
|
+
"domain": "defineDetection",
|
|
38
|
+
"estimatedSize": "medium",
|
|
39
|
+
"estimatedHours": 4,
|
|
40
|
+
"notes": "Depth-2 slice: no sub-agents. Chain first, code next, tests last. Every warn-with-ack check leaves a named seam for the 0.30 slice."
|
|
41
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-24T16:33:15Z",
|
|
3
|
+
"updatedAt": "2026-09-24T16:33:15Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17601-1",
|
|
6
|
+
"AC-17601-2",
|
|
7
|
+
"AC-17601-3",
|
|
8
|
+
"AC-17601-4",
|
|
9
|
+
"AC-17601-5",
|
|
10
|
+
"AC-17601-6",
|
|
11
|
+
"AC-17601-7",
|
|
12
|
+
"AC-17601-8"
|
|
13
|
+
],
|
|
14
|
+
"fbsId": "FBS-198",
|
|
15
|
+
"prdId": "PRD-001",
|
|
16
|
+
"bsId": "BS-001",
|
|
17
|
+
"buildOrder": 198,
|
|
18
|
+
"executionStatus": "notStarted",
|
|
19
|
+
"title": "DEFINE slice 3: rcf define freeze CLI + freeze-record override + hygiene",
|
|
20
|
+
"summary": "Ship src/cli/freeze.js implementing 'rcf define freeze' as the only freeze-record writer, wire it into bin/rcf.js and src/cli/help.js, update src/define/freeze-record.js so override is a nullable-required field (loader defaults missing keys to null; validator refuses a body without the key), and replace the ' -- ' double-dash in the readiness CLI stage header and the CHANGELOG TODO-regex line with a colon.",
|
|
21
|
+
"dependsOnFbsIds": ["FBS-197"],
|
|
22
|
+
"approach": "One CLI module composing computeReadiness (REQ-175) and saveFreezeRecord (REQ-172). Ack parsing is a small helper walking --ack and --reason multi-valued arrays in parallel. Ack folding uses the same WARN_WITH_ACK rules gates.js applies at the current tree hash. Counts derivation reuses tree.kindById and parseAcClass; interface counts walk each TAC's interfaces[]. Version reading loads packages/rcf-lite/package.json, src/ruleset/ruleset.json and node_modules/@stravica-ai/rcf-schemas/package.json. --status is a read-only branch that never runs gates. Admissibility refusal is informational per ADR-4124. The freeze-record schema fix requires an override field (nullable): validator throws on missing key, loader defaults missing keys to null on read for backward compatibility, saveFreezeRecord's own validate step catches a caller that forgets to write override.",
|
|
23
|
+
"contextRequirements": {
|
|
24
|
+
"tacIds": ["TAC-4124-define-freeze"],
|
|
25
|
+
"adrIds": ["ADR-4124-define-freeze-verb"]
|
|
26
|
+
},
|
|
27
|
+
"deliverables": [
|
|
28
|
+
"src/cli/freeze.js: HELP, main; --ack (multiple) / --reason (multiple) / --note / --litmus-attested / --status / --json / --help flags; runWithAdmissibilityGate wrap; section 2.5 summary line and --json envelope; counts derivation",
|
|
29
|
+
"src/define/freeze-record.js: validateFreezeRecord requires override (nullable); loadFreezeRecord defaults missing override to null; saveFreezeRecord unchanged (still validates first, which now catches missing override)",
|
|
30
|
+
"src/cli/readiness.js: stage header line uses ': ' between stage / gate / state (no ' -- ')",
|
|
31
|
+
"CHANGELOG.md: TODO regex line rewritten to use ': ' instead of ' -- ', plus slice-3 entries under [Unreleased]",
|
|
32
|
+
"bin/rcf.js: GROUPS.define.freeze wired to freezeMain",
|
|
33
|
+
"src/cli/help.js: HELP as FREEZE_HELP imported; HELP_MAP.define.freeze wired; DEFINE_HELP listing extended",
|
|
34
|
+
"test/cli/freeze.test.js: CLI tests covering AC-17601-1..6 and AC-17601-8",
|
|
35
|
+
"test/define/freeze-record.test.js: extension test covering AC-17601-7 (override required, loader defaults)"
|
|
36
|
+
],
|
|
37
|
+
"riskLevel": "low",
|
|
38
|
+
"domain": "defineDetection",
|
|
39
|
+
"estimatedSize": "medium",
|
|
40
|
+
"estimatedHours": 4,
|
|
41
|
+
"notes": "Depth-2 slice: no sub-agents. Chain first, code next, tests last. Dogfood is NOT frozen in the repo (a committed freeze.json would be a product decision); prove the verb on scratch trees and run --status on the dogfood chain as evidence."
|
|
42
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-10-01T14:30:00Z",
|
|
3
|
+
"updatedAt": "2026-10-01T14:30:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17402-1",
|
|
6
|
+
"AC-17402-2",
|
|
7
|
+
"AC-17402-3",
|
|
8
|
+
"AC-17402-4",
|
|
9
|
+
"AC-17402-5",
|
|
10
|
+
"AC-17402-6",
|
|
11
|
+
"AC-17402-7",
|
|
12
|
+
"AC-17403-1",
|
|
13
|
+
"AC-17403-2",
|
|
14
|
+
"AC-17403-3",
|
|
15
|
+
"AC-17403-4",
|
|
16
|
+
"AC-17403-5",
|
|
17
|
+
"AC-17403-6",
|
|
18
|
+
"AC-17403-7",
|
|
19
|
+
"AC-17403-8",
|
|
20
|
+
"AC-17502-1",
|
|
21
|
+
"AC-17502-2",
|
|
22
|
+
"AC-17502-3",
|
|
23
|
+
"AC-17502-4",
|
|
24
|
+
"AC-17502-5",
|
|
25
|
+
"AC-17502-6",
|
|
26
|
+
"AC-17502-7",
|
|
27
|
+
"AC-17502-8"
|
|
28
|
+
],
|
|
29
|
+
"fbsId": "FBS-199",
|
|
30
|
+
"prdId": "PRD-001",
|
|
31
|
+
"bsId": "BS-001",
|
|
32
|
+
"buildOrder": 199,
|
|
33
|
+
"executionStatus": "complete",
|
|
34
|
+
"title": "DEFINE step 2 (0.29.0) PR A: persona tags on every gate check and two readiness levels (ADR-4126)",
|
|
35
|
+
"summary": "Ship the compute layer for ADR-4126: CHECK_PERSONA / CHECK_QUESTION maps and persona + question on every stages[].checks[] entry; split skeleton:reqFields into skeleton:reqIntent + skeleton:reqShape and decisions:allAnswered into decisions:wellFormed + decisions:allAnswered; add the new D3 shapes:draftSettled check and the parseInterfaceDraft helper; fold levels (intentComplete, readyToBuild) and personas (productOwner, engineer) on the computeReadiness result; extend deriveNextAction with an optional persona filter; add formatVerdictLines shared by the CLI (PR B) and the Readiness tab (PR C). All additions are strictly additive; the 0.28.4 top-level shape is preserved and rcf define readiness default behaviour / exit codes are unchanged.",
|
|
36
|
+
"dependsOnFbsIds": ["FBS-197"],
|
|
37
|
+
"approach": "One pass through src/query/gates.js adds the persona + question maps and plumbs them through makeCheck; the two splits are per-REQ / per-entry loops that evaluate every item independently so one failure never masks another; the shapes:draftSettled check parses the leading bracket marker on interface descriptions (whitespace tolerated). src/query/readiness.js folds levels + personas from stages[].checks[] after the eight stage functions run; deriveNextAction gains an optional persona argument; formatVerdictLines builds the two shared verdict strings. The CLI flags (--level, --persona) and the viewer tab land in PRs B and C of the same train and are out of scope here.",
|
|
38
|
+
"contextRequirements": {
|
|
39
|
+
"tacIds": [
|
|
40
|
+
"TAC-4122-define-gates",
|
|
41
|
+
"TAC-4123-define-readiness"
|
|
42
|
+
],
|
|
43
|
+
"adrIds": [
|
|
44
|
+
"ADR-4126-persona-tagged-blockers-two-levels"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"deliverables": [
|
|
48
|
+
"src/query/gates.js: CHECK_PERSONA + CHECK_QUESTION + STAGE_FALLBACK_PERSONA maps; checkPersona / checkQuestion / parseInterfaceDraft helpers; split skeleton:reqIntent / skeleton:reqShape; new shapes:draftSettled; split decisions:wellFormed / decisions:allAnswered; makeCheck adds persona + question on every emitted check; D3 doc comment fix for TAD.dataArchitecture.coreEntities",
|
|
49
|
+
"src/query/readiness.js: levels (intentComplete, readyToBuild) and personas (productOwner, engineer) fold; deriveNextAction gains an optional persona argument; formatVerdictLines builds the two shared verdict strings",
|
|
50
|
+
"src/query/index.js: re-export the new helpers (CHECK_PERSONA / CHECK_QUESTION / STAGE_FALLBACK_PERSONA / parseInterfaceDraft / deriveLevels / derivePersonas / formatVerdictLines)",
|
|
51
|
+
"test/query/gates.test.js and test/query/readiness.test.js: new cases covering AC-17402-*, AC-17403-* and AC-17502-*",
|
|
52
|
+
"CHANGELOG [Unreleased] entry describing the additive compute changes"
|
|
53
|
+
],
|
|
54
|
+
"riskLevel": "low",
|
|
55
|
+
"domain": "defineDetection",
|
|
56
|
+
"estimatedSize": "medium",
|
|
57
|
+
"estimatedHours": 4,
|
|
58
|
+
"notes": "PR B (CLI --level / --persona + text report) and PR C (Readiness viewer tab) are the remaining 0.29.0 step-2 PRs under REQ-175 / REQ-180 / REQ-181. No file under rcf/ is created or modified by any rcf define readiness invocation; the levels and personas folds are read-only derivations over stages[].checks[]."
|
|
59
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-10-01T16:00:00Z",
|
|
3
|
+
"updatedAt": "2026-10-01T16:00:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17503-1",
|
|
6
|
+
"AC-17503-2",
|
|
7
|
+
"AC-17503-3",
|
|
8
|
+
"AC-17503-4",
|
|
9
|
+
"AC-17503-5",
|
|
10
|
+
"AC-17503-6",
|
|
11
|
+
"AC-17503-7",
|
|
12
|
+
"AC-17503-8",
|
|
13
|
+
"AC-17503-9"
|
|
14
|
+
],
|
|
15
|
+
"fbsId": "FBS-200",
|
|
16
|
+
"prdId": "PRD-001",
|
|
17
|
+
"bsId": "BS-001",
|
|
18
|
+
"buildOrder": 200,
|
|
19
|
+
"executionStatus": "complete",
|
|
20
|
+
"title": "DEFINE step 2 (0.29.0) PR B: --level, --persona and persona-grouped text report on rcf define readiness (ADR-4126)",
|
|
21
|
+
"summary": "Add --level intent|build and --persona productOwner|engineer to rcf define readiness, print the two verdict lines at the top of the text report, regroup blockers into product-owner and engineer sections ordered by the profile.md register, carry _meta.level in the JSON envelope, and wire the exit matrix per spec section 3.2. --persona is a display filter only; --level drives the exit code and --level build is stricter than --check all on unacknowledged warn-with-ack failures. Chain-first: US-17503 and TS-222 land first; TAC-4123 gains the new interfaces and responsibility bump.",
|
|
22
|
+
"dependsOnFbsIds": ["FBS-199"],
|
|
23
|
+
"approach": "One pass through src/cli/readiness.js parses the two new flags via parseLevelFlag / parsePersonaFlag (shared usage-line shape with --check), passes the resolved level into the JSON envelope's _meta, prints the verdict pair (formatVerdictLines) at the top of the text report, renders a Product owner / Engineer blocker pair ordered by the profile register (PO first by default), and emits the per-stage detail with the persona inside the parenthesis after `over`. --persona X collapses the opposite-persona block to one 'hidden; run without --persona' line and restricts the per-stage detail to matching-persona checks. decideExitCode now folds the --check policy (unchanged), --level intent (4 iff levels.intentComplete.ok === false) and --level build (4 iff levels.readyToBuild.ok === false, with the warn-with-ack warn lines still emitted). src/cli/help.js is unchanged because the per-verb HELP is sourced directly from readiness.js.",
|
|
24
|
+
"contextRequirements": {
|
|
25
|
+
"tacIds": [
|
|
26
|
+
"TAC-4123-define-readiness"
|
|
27
|
+
],
|
|
28
|
+
"adrIds": [
|
|
29
|
+
"ADR-4126-persona-tagged-blockers-two-levels"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"deliverables": [
|
|
33
|
+
"src/cli/readiness.js: --level and --persona on OPTION_SPEC; parseLevelFlag / parsePersonaFlag calls; pickRegister from profile.md; renderText emits verdict pair, per-persona next actions, PO + engineer blocker blocks ordered by register, per-stage detail with persona in the parenthesis; decideExitCode folds --check and --level per spec section 3.2; HELP text updated",
|
|
34
|
+
"src/query/readiness.js: parseLevelFlag and parsePersonaFlag helpers exported for the CLI (and the Readiness tab's future test-shared harness)",
|
|
35
|
+
"test/cli/readiness.test.js: AC-17503-1 through AC-17503-9 cases, including the parameterised exit matrix",
|
|
36
|
+
"rcf/user-stories/us-17503.json, rcf/test-suites/ts-222.json: chain documents under REQ-175 / TAC-4123",
|
|
37
|
+
"rcf/tacs/tac-4123-define-readiness.json: responsibility bump for PR B's dispatch and text regrouping; interfaces[] gains parseLevelFlag / parsePersonaFlag as [draft] other-kind entries",
|
|
38
|
+
"rcf/fbs/fbs-200.json: this file, carrying AC-17503-* ownership",
|
|
39
|
+
"CHANGELOG [Unreleased] 0.29.0 PR B bullet"
|
|
40
|
+
],
|
|
41
|
+
"riskLevel": "low",
|
|
42
|
+
"domain": "defineDetection",
|
|
43
|
+
"estimatedSize": "small",
|
|
44
|
+
"estimatedHours": 2,
|
|
45
|
+
"notes": "PR C (Readiness viewer tab) is the remaining 0.29.0 step-2 PR under REQ-180 / REQ-181. rcf define freeze is untouched; the no-mutation contract (TS-221 TC-no-write-on-invocation) still holds."
|
|
46
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-10-01T18:00:00Z",
|
|
3
|
+
"updatedAt": "2026-10-01T18:00:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-18001-1",
|
|
6
|
+
"AC-18001-2",
|
|
7
|
+
"AC-18001-3",
|
|
8
|
+
"AC-18001-4",
|
|
9
|
+
"AC-18001-5",
|
|
10
|
+
"AC-18001-6",
|
|
11
|
+
"AC-18001-7",
|
|
12
|
+
"AC-18101-1",
|
|
13
|
+
"AC-18101-2",
|
|
14
|
+
"AC-18101-3"
|
|
15
|
+
],
|
|
16
|
+
"fbsId": "FBS-201",
|
|
17
|
+
"prdId": "PRD-001",
|
|
18
|
+
"bsId": "BS-001",
|
|
19
|
+
"buildOrder": 201,
|
|
20
|
+
"executionStatus": "complete",
|
|
21
|
+
"title": "DEFINE step 2 (0.29.0) PR C: Readiness tab as tab 1, Overview-to-PRD rename, shared pill, findings-list and diff components (REQ-180, REQ-181, TAC-4127, ADR-4127)",
|
|
22
|
+
"summary": "Land src/view/readiness.js plus src/view/components/{pill,findings-list,diff}.js; wire Readiness as the first tab in html-page.js; rename the Overview button and panel to PRD with no content change; keep the data-tab=overview identifier so existing hash anchors still resolve. The tab renders the computeReadiness result passed in from renderModelToPage (which loads the freeze record, ledgers, test pointers and profile text once per rewalk). Document-level diff only; criterion-level before-and-after is deferred per ADR-4127. Product Map and Requirements markup is unchanged; the shared components are additive in 0.29.0.",
|
|
23
|
+
"dependsOnFbsIds": ["FBS-200"],
|
|
24
|
+
"approach": "html-page.js: insert the Readiness tab button as the first entry; relabel the Overview button and panel heading to PRD (identifiers preserved); add the inline-script TABS entry 'readiness' as the first value; renderContent receives the readiness result on the model and emits the Readiness tabpanel ahead of the PRD tabpanel. src/view/readiness.js: eleven block builders in spec-section-5 order calling the three shared components; register ordering picked once at the top; blocker ids rendered as hash anchors so the existing resolveHash routine opens the right document tab. src/view/components/*.js: three small, pure modules each exporting the one function the tab calls. src/view/index.js: renderModelToPage loads freeze, ledgers, testPointers and profileText once per walk and attaches the readiness result to the model so the SSE live-update path carries the recomputed object. Tests under test/view/readiness-tab.test.js cover AC-18001-1..7 and AC-18101-1..3; the layout-regression baseline is regenerated as a result of the new DOM.",
|
|
25
|
+
"contextRequirements": {
|
|
26
|
+
"tacIds": [
|
|
27
|
+
"TAC-4127-readiness-view"
|
|
28
|
+
],
|
|
29
|
+
"adrIds": [
|
|
30
|
+
"ADR-4127-readiness-tab-order-and-register"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"deliverables": [
|
|
34
|
+
"src/view/readiness.js: renderReadinessPanel(result, { profile }); eleven ordered blocks per spec section 5; pure, no I/O",
|
|
35
|
+
"src/view/components/pill.js, findings-list.js, diff.js: the three shared view components",
|
|
36
|
+
"src/view/html-page.js: Readiness tab as first entry; PRD rename (label-only); inline-script TABS array updated",
|
|
37
|
+
"src/view/index.js: renderModelToPage loads freeze, ledgers, testPointers and profileText; attaches the computed readiness result to the model",
|
|
38
|
+
"test/view/readiness-tab.test.js: AC-18001-1 through AC-18001-7 and AC-18101-1 through AC-18101-3",
|
|
39
|
+
"test/view/layout-regression.test.js: baseline regenerated to include the Readiness tabpanel",
|
|
40
|
+
"rcf/requirements/req-180.json, rcf/requirements/req-181.json, rcf/user-stories/us-18001.json, rcf/user-stories/us-18101.json, rcf/tacs/tac-4127-readiness-view.json, rcf/adrs/adr-4127-readiness-tab-order-and-register.json, rcf/test-suites/ts-223.json: the chain documents under PRD-001 / TAD-001 / BS-001",
|
|
41
|
+
"rcf/fbs/fbs-201.json: this file, carrying AC-18001-* and AC-18101-* ownership",
|
|
42
|
+
"CHANGELOG [Unreleased] 0.29.0 PR C bullet"
|
|
43
|
+
],
|
|
44
|
+
"riskLevel": "low",
|
|
45
|
+
"domain": "defineDetection",
|
|
46
|
+
"estimatedSize": "medium",
|
|
47
|
+
"estimatedHours": 4,
|
|
48
|
+
"notes": "`rcf define freeze` is untouched; the no-mutation contract (TS-221 TC-no-write-on-invocation) still holds. Product Map and Requirements rendering is unchanged in this PR; the shared components are additive and existing tab tests pass without edits."
|
|
49
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-10-02T16:40:00Z",
|
|
3
|
+
"updatedAt": "2026-10-03T00:00:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17302-1",
|
|
6
|
+
"AC-17302-2",
|
|
7
|
+
"AC-17302-3",
|
|
8
|
+
"AC-17302-4",
|
|
9
|
+
"AC-17302-5",
|
|
10
|
+
"AC-17302-6",
|
|
11
|
+
"AC-18701-1",
|
|
12
|
+
"AC-18701-2",
|
|
13
|
+
"AC-18701-3",
|
|
14
|
+
"AC-18701-4",
|
|
15
|
+
"AC-18701-5",
|
|
16
|
+
"AC-18701-6",
|
|
17
|
+
"AC-18702-1",
|
|
18
|
+
"AC-18702-2",
|
|
19
|
+
"AC-18702-3",
|
|
20
|
+
"AC-18702-4",
|
|
21
|
+
"AC-18702-5",
|
|
22
|
+
"AC-18702-6",
|
|
23
|
+
"AC-18601-1",
|
|
24
|
+
"AC-18601-2",
|
|
25
|
+
"AC-18601-3",
|
|
26
|
+
"AC-18601-4",
|
|
27
|
+
"AC-18601-5",
|
|
28
|
+
"AC-18601-6",
|
|
29
|
+
"AC-18601-7",
|
|
30
|
+
"AC-18602-1",
|
|
31
|
+
"AC-18602-2",
|
|
32
|
+
"AC-18602-3",
|
|
33
|
+
"AC-18602-4",
|
|
34
|
+
"AC-18602-5",
|
|
35
|
+
"AC-18602-6",
|
|
36
|
+
"AC-18603-1",
|
|
37
|
+
"AC-18603-2",
|
|
38
|
+
"AC-18603-3",
|
|
39
|
+
"AC-18603-4",
|
|
40
|
+
"AC-18603-5",
|
|
41
|
+
"AC-18801-1",
|
|
42
|
+
"AC-18801-2",
|
|
43
|
+
"AC-18801-3",
|
|
44
|
+
"AC-18801-4",
|
|
45
|
+
"AC-18801-5",
|
|
46
|
+
"AC-18202-1",
|
|
47
|
+
"AC-18202-2",
|
|
48
|
+
"AC-18202-3",
|
|
49
|
+
"AC-18202-4"
|
|
50
|
+
],
|
|
51
|
+
"fbsId": "FBS-202",
|
|
52
|
+
"prdId": "PRD-001",
|
|
53
|
+
"bsId": "BS-001",
|
|
54
|
+
"buildOrder": 202,
|
|
55
|
+
"executionStatus": "notStarted",
|
|
56
|
+
"title": "DEFINE step 3 PRs 1-3: intake markers, ledger update, resolvedBy grammar (PR 1); computeQuestions, questions verb and MCP tools (PR 2); draft-shape marker extension, DISCOVERY prototypes guidance and prompts (PR 3)",
|
|
57
|
+
"summary": "Carry the ACs for PRs 1, 2 and 3 of the DEFINE step 3 spec (2026-10-01). PR 1: statement-file markers in parseBriefFromFile ([kind] and (source: ...)), the brief add --scan / --no-scan / --findings / --dry-run / --json wiring, the new ledger <name> update <id> subverb, and the resolvedBy closed pointer grammar validated by D2 (title-hit fallback dropped). PR 2: computeQuestions pure compute over readiness per persona; `rcf define questions` verb; three MCP tools (rcf_define_questions, rcf_define_readiness, rcf_define_ledger); the define-intent guidance file and the rcf_define_intent + rcf_define_intake prompts; two new managed-block rules. PR 3: parseInterfaceDraft extended to TAC.purpose and coreEntities[].description, shapes:draftSettled reports all three id forms (<tacId>:<name>, <tacId>, TAD.entity:<name>); the two new argument-free prompts rcf_define_draft_shapes and rcf_discover_prototype plus guidance/discovery-prototypes.md (REQ-188 + REQ-182 amended, ADR-4132). Chain-first commits landed before the code in each PR. FBS stays notStarted until the CN axis mints Code Nodes against the ACs across the PRs. PR 1 tests ride TS-215; PR 2 tests ride TS-226; PR 3 tests ride TS-228 (renumbered from the cloud build's TS-227 after viewer PR 8 claimed TS-227 for US-18002).",
|
|
58
|
+
"dependsOnFbsIds": [
|
|
59
|
+
"FBS-195",
|
|
60
|
+
"FBS-201"
|
|
61
|
+
],
|
|
62
|
+
"approach": "PR 1: parseBriefFromFile parses a leading [kind] and a trailing (source: ...) marker; unknown kind raises LedgerError code 'usage' before any write. updateEntry patches named fields and re-runs validateLedger. parseResolvedBy / isResolvedByGrammar implement the closed pointer grammar. runIntakeScansOnDelta composes the three mechanical scans in src/intake/validate.js over new-plus-existing statements, attributing findings to the statement ids that participate. The CLI brief add wires --scan / --no-scan / --findings / --dry-run / --json; the update subverb lives beside add in src/cli/ledger.js. D2's skeleton:resolvedBy drops the title-hit fallback and refuses a pointer outside the grammar with 'pointer does not resolve'. PR 2: src/query/questions.js exports computeQuestions(readiness, { tree, ledgers, profileText, persona }) folding readiness blockers into questions through a per-check template; src/cli/questions.js registers `rcf define questions` with --json, --persona, --stage, --limit; src/mcp/tools.js adds rcf_define_questions, rcf_define_readiness and rcf_define_ledger (thin wrapper over the ledger handler); guidance/define-intent.md and guidance/elicitation-playbook.md ship the loop content; guidance/manifest.json registers the new slug and the two argument-free prompts rcf_define_intent and rcf_define_intake; guidance/managed/agent-instructions-block.md adds the two new rules.",
|
|
63
|
+
"contextRequirements": {
|
|
64
|
+
"tacIds": [
|
|
65
|
+
"TAC-4121-define-ledgers",
|
|
66
|
+
"TAC-4130-define-intake-brief",
|
|
67
|
+
"TAC-4129-define-questions",
|
|
68
|
+
"TAC-4128-define-guidance",
|
|
69
|
+
"TAC-4122-define-gates"
|
|
70
|
+
],
|
|
71
|
+
"adrIds": [
|
|
72
|
+
"ADR-4129-questions-harness-driven-loop",
|
|
73
|
+
"ADR-4130-intake-harness-split-tool-scanned",
|
|
74
|
+
"ADR-4132-prototypes-in-discovery-as-evidence"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"deliverables": [
|
|
78
|
+
"src/define/ledgers.js: parseBriefFromFile with markers; updateEntry; parseResolvedBy; isResolvedByGrammar; brief resolvedBy field in validateEntry",
|
|
79
|
+
"src/intake/orchestrator.js: runIntakeScansOnDelta",
|
|
80
|
+
"src/intake/index.js: re-export runIntakeScansOnDelta",
|
|
81
|
+
"src/cli/ledger.js: brief add scan wiring, --findings, --dry-run, --json; update subverb",
|
|
82
|
+
"src/query/gates.js: D2 skeleton:resolvedBy validates the closed pointer grammar; title-hit fallback dropped",
|
|
83
|
+
"src/query/questions.js: computeQuestions over readiness per persona (PR 2)",
|
|
84
|
+
"src/cli/questions.js: rcf define questions verb (PR 2)",
|
|
85
|
+
"src/mcp/tools.js: rcf_define_questions, rcf_define_readiness, rcf_define_ledger tools (PR 2)",
|
|
86
|
+
"guidance/define-intent.md, guidance/define-intake.md and guidance/elicitation-playbook.md (restructured): the PO loop and intake prose (PR 2)",
|
|
87
|
+
"guidance/managed/agent-instructions-block.md: two new rules (PR 2)",
|
|
88
|
+
"guidance/manifest.json: define-intent slug and the two new prompts (PR 2)",
|
|
89
|
+
"test/define/ledgers.test.js: AC-17302-1..5, AC-18701-1..5 unit cases",
|
|
90
|
+
"test/intake/validate.test.js: runIntakeScansOnDelta unit cases",
|
|
91
|
+
"test/query/gates.test.js: AC-17302-3/5/6 D2 cases",
|
|
92
|
+
"test/cli/ledger.test.js: AC-17302-1/4, AC-18701-1/5/6, AC-18702-1/2/4/5/6 CLI cases",
|
|
93
|
+
"test/query/questions.test.js: AC-18601-1..7 unit cases (PR 2)",
|
|
94
|
+
"test/cli/questions.test.js: AC-18602-1..6 CLI cases (PR 2)",
|
|
95
|
+
"test/mcp/define-questions.test.js: AC-18602-4 MCP parity (PR 2)",
|
|
96
|
+
"test/query/questions-loop.test.js: AC-18603-1..5 scripted loop cases (PR 2)",
|
|
97
|
+
"rcf/requirements/req-187.json, rcf/requirements/req-173.json (amended), rcf/user-stories/us-18701.json, us-18702.json, us-17302.json, rcf/tacs/tac-4121-define-ledgers.json (amended), tac-4130-define-intake-brief.json, rcf/test-suites/ts-215.json (extended), rcf/fbs/fbs-202.json: this file",
|
|
98
|
+
"rcf/requirements/req-186.json, rcf/user-stories/us-18601.json, us-18602.json, us-18603.json, rcf/tacs/tac-4129-define-questions.json, tac-4128-define-guidance.json, rcf/adrs/adr-4129-questions-harness-driven-loop.json, adr-4130-intake-harness-split-tool-scanned.json, rcf/test-suites/ts-226.json (PR 2 chain)",
|
|
99
|
+
"rcf/requirements/req-188.json, rcf/requirements/req-182.json (new on this PR; see report.md shift note), rcf/user-stories/us-18801.json, us-18202.json, rcf/tacs/tac-4122-define-gates.json (amended), tac-4128-define-guidance.json (amended), rcf/adrs/adr-4132-prototypes-in-discovery-as-evidence.json, rcf/test-suites/ts-228.json, docs/capability-tags.md (capability:define-drafts) (PR 3 chain)",
|
|
100
|
+
"src/query/gates.js: parseInterfaceDraft extended to TAC.purpose and coreEntities[].description; checkD3Shapes shapes:draftSettled enumerates all three homes (PR 3)",
|
|
101
|
+
"guidance/define-draft-shapes.md, guidance/discover-prototype.md, guidance/discovery-prototypes.md and guidance/manifest.json entries for the two prompts and the two slugs (PR 3)",
|
|
102
|
+
"guidance/managed/agent-instructions-block.md: the prototype rule from ADR-4132 (PR 3)",
|
|
103
|
+
"test/query/gates.test.js: extended for the three draft homes; test/guidance/manifest.test.js and test/guidance/register-scan.test.js: new slugs and five prompts, em-dash scan (PR 3)"
|
|
104
|
+
],
|
|
105
|
+
"riskLevel": "low",
|
|
106
|
+
"domain": "defineLedgers",
|
|
107
|
+
"estimatedSize": "medium",
|
|
108
|
+
"estimatedHours": 4,
|
|
109
|
+
"notes": "FBS-202 was reserved as 'next free' in the dispatch brief and allocated here to keep the dogfood no-orphan-AC invariant. executionStatus is 'notStarted' so the CN axis stays legitimately deferred for this PR (test additions ride existing test suites, no new CN per brief). Later DEFINE PRs promote this FBS to inProgress / complete as their deliveries land."
|
|
110
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-10-02T19:00:00Z",
|
|
3
|
+
"updatedAt": "2026-10-03T09:55:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-204-1",
|
|
6
|
+
"AC-204-2",
|
|
7
|
+
"AC-204-3",
|
|
8
|
+
"AC-204-4",
|
|
9
|
+
"AC-204-5",
|
|
10
|
+
"AC-204-6",
|
|
11
|
+
"AC-204-7",
|
|
12
|
+
"AC-205-1",
|
|
13
|
+
"AC-205-2",
|
|
14
|
+
"AC-205-3",
|
|
15
|
+
"AC-205-4",
|
|
16
|
+
"AC-205-5",
|
|
17
|
+
"AC-205-6",
|
|
18
|
+
"AC-205-7",
|
|
19
|
+
"AC-205-8",
|
|
20
|
+
"AC-18002-1",
|
|
21
|
+
"AC-18002-2",
|
|
22
|
+
"AC-18002-3",
|
|
23
|
+
"AC-206-1",
|
|
24
|
+
"AC-206-2",
|
|
25
|
+
"AC-206-3",
|
|
26
|
+
"AC-206-4",
|
|
27
|
+
"AC-206-5",
|
|
28
|
+
"AC-206-6"
|
|
29
|
+
],
|
|
30
|
+
"fbsId": "FBS-203",
|
|
31
|
+
"prdId": "PRD-001",
|
|
32
|
+
"bsId": "BS-001",
|
|
33
|
+
"buildOrder": 203,
|
|
34
|
+
"executionStatus": "inProgress",
|
|
35
|
+
"title": "Viewer UI refresh build stream: Build/DAG sub-tab, filters, inspector and later tab deltas (US-204, US-205, US-18002 and successor USs)",
|
|
36
|
+
"summary": "Single FBS owning the Build/DAG sub-tab acceptance criteria (AC-204-1..7, US-204) that land as the viewer UI refresh PR 6, the ID lookup acceptance criteria (AC-205-1..8, US-205) that land as PR 7, the Readiness PO redesign acceptance criteria (AC-18002-1..3, US-18002) that land as PR 8, plus the successor acceptance criteria the same build stream picks up in PR 9. The stream delivers one chain-first tab delta per PR: DAG (PR 6), ID lookup (PR 7), Readiness PO redesign (PR 8), and the shared chrome and release prep (PR 9). This FBS stays `inProgress` for the length of the stream so the AC-ownership check on origin/main is green between PRs; successor PRs extend the `acIds` list under this file as their new USs land.",
|
|
37
|
+
"dependsOnFbsIds": [],
|
|
38
|
+
"approach": "Build the DAG sub-tab (PR 6) under src/view/build-dag.js with buildDagLayout, renderBuildDag, renderDagInspector and buildDagInspectorPayload; wire html-page.js's renderBuildPanel to call the new renderer in place of the PR 5 placeholder; add wireBuildDag in page-init.js for click-to-highlight, filters, inspector fill from the data-* attribute payload and `#tab=build&sub=dag&entity=` deep links. Inspector payload rides on a `data-rcf-dag-inspector-data` attribute on the inspector shell per the PR 1 contract (no inline <script> body). `currentDagHashExtras` keeps Specs filter keys unknown on the DAG sub-tab so the decision 11 preservation contract holds. applyBuildHash auto-presses Show-unconnected on restoring an unconnected FBS. PR 7 to PR 9 extend the renderer, add their own sub-tab, filter and inspector pieces and append the new ACs to this FBS's `acIds` array; this file is the single owner of the AC coverage for the whole stream so the dogfood tree's `every AC covered by at least one FBS` check stays green at every merge.",
|
|
39
|
+
"contextRequirements": {
|
|
40
|
+
"tacIds": [
|
|
41
|
+
"TAC-4131-build-dag-view",
|
|
42
|
+
"TAC-4132-id-lookup",
|
|
43
|
+
"TAC-4134-wespa-host-fixture"
|
|
44
|
+
],
|
|
45
|
+
"adrIds": [
|
|
46
|
+
"ADR-4133-dag-dependency-depth-layout",
|
|
47
|
+
"ADR-4134-index-json-route",
|
|
48
|
+
"ADR-4136-embedding-host-fixture"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"deliverables": [
|
|
52
|
+
"packages/rcf-lite/src/view/build-dag.js: buildDagLayout, renderBuildDag, renderDagInspector, buildDagInspectorPayload (pure HTML string + data-attr payload shell)",
|
|
53
|
+
"packages/rcf-lite/src/view/html-page.js: renderBuildPanel calls renderBuildDag with the inspector payload argument (PR 5 placeholder removed)",
|
|
54
|
+
"packages/rcf-lite/src/view/page-init.js: wireBuildDag (click-to-highlight, filters, inspector fill, hash round-trip, auto-press show-unconnected on restore); currentDagHashExtras preserves non-DAG hash params",
|
|
55
|
+
"packages/rcf-lite/src/view/style.css: `.rcf-dag-*` tokens aligned with the Stravica brand palette, both themes",
|
|
56
|
+
"packages/rcf-lite/test/view/build-tab.test.js: twelve new unit tests for buildDagLayout (depth columns, closures, critical path, cycle, unconnected lane), renderBuildDag (toolbar, canvas, edges), buildDagInspectorPayload, page-init DAG wiring markers and the AC-204-7 postMessage guard",
|
|
57
|
+
"packages/rcf-lite/test/view/fixtures/phase-3-6-static.html: baseline regenerated to include the DAG panel with the data-attr inspector payload shell",
|
|
58
|
+
"packages/rcf-lite/rcf/requirements/req-002.json: description amended with the DAG sub-tab coverage",
|
|
59
|
+
"packages/rcf-lite/rcf/user-stories/us-204.json: US-204 with AC-204-1..7",
|
|
60
|
+
"packages/rcf-lite/rcf/tacs/tac-4131-build-dag-view.json, packages/rcf-lite/rcf/adrs/adr-4133-dag-dependency-depth-layout.json: chain docs",
|
|
61
|
+
"packages/rcf-lite/src/view/view-index.js: buildViewIndex, serialiseViewIndex, rankLookupRows (PR 7)",
|
|
62
|
+
"packages/rcf-lite/src/server/routes.js + packages/rcf-lite/src/server/index.js: GET /index.json route (PR 7)",
|
|
63
|
+
"packages/rcf-lite/src/view/html-page.js: renderSearchButton + renderLookupModal shell (PR 7)",
|
|
64
|
+
"packages/rcf-lite/src/view/page-init.js: wireLookup + rankLookupRows mirror (PR 7)",
|
|
65
|
+
"packages/rcf-lite/src/view/live-client.js: __rcfLookupDirty on SSE tree-update (PR 7)",
|
|
66
|
+
"packages/rcf-lite/test/view/id-lookup.test.js: 22 unit tests for ID lookup (PR 7)",
|
|
67
|
+
"packages/rcf-lite/rcf/user-stories/us-205.json, packages/rcf-lite/rcf/tacs/tac-4132-id-lookup.json, packages/rcf-lite/rcf/adrs/adr-4134-index-json-route.json: PR 7 chain docs",
|
|
68
|
+
"packages/rcf-lite/rcf/test-suites/ts-225.json: TS-225 covering AC-205-1..8 (PR 7)",
|
|
69
|
+
"packages/rcf-lite/rcf/code-nodes/cn-741..cn-745.json: CN entries mapping PR 7 code files to AC-205-* (PR 7)",
|
|
70
|
+
"packages/rcf-lite/src/view/readiness/po-layer.js: renderReadinessPO building two VerdictCards, QuestionCards grouped by source span, the Requirements-that-still-need-work table and the For-engineers DocRow shell (PR 8)",
|
|
71
|
+
"packages/rcf-lite/src/view/readiness/question-adapter.js: toQuestions + preferReadinessQuestions, feature-detected on readiness.questions[], consuming the computeQuestions shape with phrasebook fallback (PR 8)",
|
|
72
|
+
"packages/rcf-lite/src/view/readiness/phrasebook.js: PO ask / heading / hint entries keyed by checkId:itemId with a plain-checkId fallback (PR 8)",
|
|
73
|
+
"packages/rcf-lite/src/view/readiness/stage-legend.js: renderStageLegend + stageTitle for D1..D8 chips and the dialog (PR 8)",
|
|
74
|
+
"packages/rcf-lite/src/view/readiness.js: renderReadinessPanel wraps the PO layer around the engineer body and threads the register from profile.md (PR 8)",
|
|
75
|
+
"packages/rcf-lite/src/view/index.js: attaches computeQuestions output onto model.readiness so the adapter feature-detects the real shape (PR 8 landing fix)",
|
|
76
|
+
"packages/rcf-lite/src/view/page-init.js: StageLegend <dialog> wiring on D-chip click (PR 8)",
|
|
77
|
+
"packages/rcf-lite/src/view/style.css: `.rcf-po-*`, `.rcf-pill--*`, `.rcf-stage-legend*`, `.rcf-chain-term` tokens, both themes (PR 8)",
|
|
78
|
+
"packages/rcf-lite/test/view/readiness-po-layer.test.js: 14 unit tests covering the adapter branches, PO blocks, equal-height card markup, For-engineers register wiring, StageLegend shape, D-chip hover-title/data-rcf-stage-ref, phrasebook em-dash guard, Reqwork empty + populated, and AC-18002-1/2/3 (PR 8)",
|
|
79
|
+
"packages/rcf-lite/rcf/requirements/req-180.json: description amended with the question-cards grouped-by-source-span rendering (PR 8)",
|
|
80
|
+
"packages/rcf-lite/rcf/user-stories/us-18002.json: US-18002 with AC-18002-1..3 (PR 8)",
|
|
81
|
+
"packages/rcf-lite/rcf/tacs/tac-4133-readiness-po-layer.json: TAC-4133 for the Readiness PO layer (PR 8)",
|
|
82
|
+
"packages/rcf-lite/rcf/adrs/adr-4135-readiness-po-register-and-adapter.json: ADR-4135 for the two-audience split by register and the adapter seam (PR 8)",
|
|
83
|
+
"packages/rcf-lite/rcf/test-suites/ts-227.json: TS-227 covering AC-18002-1..3 (PR 8)",
|
|
84
|
+
"packages/rcf-lite/rcf/code-nodes/cn-746..cn-749.json: CN entries mapping PR 8 code files to AC-18002-* (PR 8)",
|
|
85
|
+
"packages/rcf-lite/src/view/test-host/fixture.js: renderTestHostPage (pure HTML string; 56px header, resizable sidebar, iframe mounted at ./?embed=1&theme=light; no inline <script>) (PR 9)",
|
|
86
|
+
"packages/rcf-lite/src/view/test-host/embed-client.js: /test-host.js wiring (theme toggle posts rcf-view-theme to iframe.contentWindow targeting window.location.origin; sidebar drag + collapse/expand; no localStorage persist) (PR 9)",
|
|
87
|
+
"packages/rcf-lite/src/view/test-host/lints.js: assertFramingHeaders, assertNoTargetTop, assertLocalStorageNamespace (three pure embedding lints) (PR 9)",
|
|
88
|
+
"packages/rcf-lite/src/cli/view.js, packages/rcf-lite/src/server/index.js, packages/rcf-lite/src/server/routes.js: --test-host CLI flag + RCF_VIEW_TEST_HOST=1 env guard, 404-by-default route surface for /test-host.html and /test-host.js (PR 9)",
|
|
89
|
+
"packages/rcf-lite/test/view/wespa-host-fixture.test.js: 11 unit tests covering the fixture shell, 404-by-default route surface, HTTP round-trip, and the three lints (positive + negative) (PR 9)",
|
|
90
|
+
"packages/rcf-lite/rcf/user-stories/us-206.json: US-206 with AC-206-1..6 (PR 9)",
|
|
91
|
+
"packages/rcf-lite/rcf/tacs/tac-4134-wespa-host-fixture.json: TAC-4134 (test-host fixture + three embedding lints) (PR 9)",
|
|
92
|
+
"packages/rcf-lite/rcf/adrs/adr-4136-embedding-host-fixture.json: ADR-4136 (CI host fixture + three lints; fixture does not persist theme) (PR 9)",
|
|
93
|
+
"packages/rcf-lite/rcf/test-suites/ts-229.json: TS-229 covering AC-206-1..6 (PR 9 landing)",
|
|
94
|
+
"packages/rcf-lite/rcf/code-nodes/cn-750..cn-752.json: CN entries mapping PR 9 code files to AC-206-* (PR 9 landing)"
|
|
95
|
+
],
|
|
96
|
+
"riskLevel": "low",
|
|
97
|
+
"domain": "reviewSurface",
|
|
98
|
+
"estimatedSize": "large",
|
|
99
|
+
"notes": "Single FBS for the whole viewer UI refresh build stream (ruling 2026-10-02): keeping one FBS avoids a sprawl of near-duplicate FBS entries for the same renderer family. PRs 7 to 9 extended the acIds list under this file as AC-205-*, AC-18002-* and AC-206-* arrived. Status stays `inProgress` after PR 9 lands because every TC on this stream's TS docs is still `pending` (not yet flipped to `passing`); flip to `verified` is a separate housekeeping pass once each TC's status is advanced to `passing` against the green suite."
|
|
100
|
+
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "The in-repository differentiator depends on RCF documents living beside the code. A predictable on-disk layout is the foundation every other capability reads from and writes to.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:project-init",
|
|
11
12
|
"structure",
|
|
12
13
|
"manifest",
|
|
13
14
|
"filesystem"
|
|
@@ -15,5 +16,5 @@
|
|
|
15
16
|
"version": "0.1.0",
|
|
16
17
|
"status": "draft",
|
|
17
18
|
"createdAt": "2026-06-25T00:00:00Z",
|
|
18
|
-
"updatedAt": "2026-
|
|
19
|
+
"updatedAt": "2026-09-21T17:00:00.000Z"
|
|
19
20
|
}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"reqId": "REQ-002",
|
|
3
3
|
"prdId": "PRD-001",
|
|
4
4
|
"title": "Visual review surface",
|
|
5
|
-
"description": "Build Lite renders the whole RCF tree as a diagram and as a browsable static page, so a non-coding owner can see the documents and their links without reading any JSON. The view is read-only and generated from the on-disk tree on demand.",
|
|
5
|
+
"description": "Build Lite renders the whole RCF tree as a diagram and as a browsable static page, so a non-coding owner can see the documents and their links without reading any JSON. The view is read-only and generated from the on-disk tree on demand. Build/DAG sub-tab lays FBS by `dependsOnFbsIds` depth with click-to-highlight closure, dependency inspector, filters, unconnected lane and `#tab=build&sub=dag&entity=` deep links, per viewer UI refresh design section 7. ID lookup over a server-built `./index.json` of every document id and AC, opened by the SearchButton or Cmd/Ctrl+F, navigates to `#tab=<tab>&entity=<id>` preserving `embed` and `theme`, per viewer UI refresh design section 6. Embedding proof: a same-origin test-host fixture mounts the viewer with `embed=1` and `theme=` and the three lints keep framing headers, `target='_top'` and localStorage namespace in place, per viewer UI refresh design section 9 and Dex's wespa requirements of 2026-10-02.",
|
|
6
6
|
"category": "functional",
|
|
7
7
|
"domain": "view",
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "The owner cannot review code and will not read raw JSON. A visual surface is the only way they can see and steer what is being built in their name. It is delivered first (Phase 3) so every later phase has a review surface.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:review-surface",
|
|
11
12
|
"view",
|
|
12
13
|
"diagram",
|
|
13
14
|
"review"
|
|
@@ -15,5 +16,5 @@
|
|
|
15
16
|
"version": "0.1.0",
|
|
16
17
|
"status": "draft",
|
|
17
18
|
"createdAt": "2026-06-25T00:00:00Z",
|
|
18
|
-
"updatedAt": "2026-
|
|
19
|
+
"updatedAt": "2026-10-02T20:00:00.000Z"
|
|
19
20
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "Deterministic CRUD is the foundational primitive everything else sits on. Hand-writing the tree in this phase surfaces exactly which operations the owner and the agent need.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:requirements-authoring",
|
|
11
12
|
"crud",
|
|
12
13
|
"cli",
|
|
13
14
|
"validation"
|
|
@@ -15,5 +16,5 @@
|
|
|
15
16
|
"version": "0.1.0",
|
|
16
17
|
"status": "draft",
|
|
17
18
|
"createdAt": "2026-06-25T00:00:00Z",
|
|
18
|
-
"updatedAt": "2026-
|
|
19
|
+
"updatedAt": "2026-09-21T17:00:00.000Z"
|
|
19
20
|
}
|