rcf-lite 0.28.2 → 0.28.4
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 +211 -0
- package/bin/rcf.js +4 -0
- package/fixtures/canary-manifest.json +9 -9
- 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/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 +21 -0
- package/rcf/code-nodes/cn-726.json +17 -0
- package/rcf/code-nodes/cn-727.json +14 -0
- package/rcf/code-nodes/cn-728.json +21 -0
- package/rcf/code-nodes/cn-729.json +18 -0
- package/rcf/code-nodes/cn-730.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 +37 -0
- package/rcf/fbs/fbs-197.json +41 -0
- package/rcf/requirements/req-001.json +2 -1
- package/rcf/requirements/req-002.json +2 -1
- 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 +25 -0
- package/rcf/requirements/req-175.json +25 -0
- package/rcf/tacs/tac-4120-define-delta-and-freeze.json +21 -0
- package/rcf/tacs/tac-4121-define-ledgers.json +23 -0
- package/rcf/tacs/tac-4122-define-gates.json +25 -0
- package/rcf/tacs/tac-4123-define-readiness.json +25 -0
- 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 +67 -0
- package/rcf/test-suites/ts-216.json +78 -0
- package/rcf/test-suites/ts-217.json +62 -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-17401.json +58 -0
- package/rcf/user-stories/us-17501.json +48 -0
- package/releases/releases.yaml +21 -1
- package/src/cli/feedback.js +126 -10
- package/src/cli/help.js +11 -0
- package/src/cli/ledger.js +399 -0
- package/src/cli/readiness.js +280 -0
- package/src/core/store/writer.js +86 -6
- package/src/define/freeze-record.js +232 -0
- package/src/define/ledgers.js +513 -0
- package/src/feedback/redact.js +105 -19
- package/src/query/delta.js +276 -0
- package/src/query/gates.js +832 -0
- package/src/query/index.js +36 -0
- package/src/query/readiness.js +333 -0
- package/src/server/index.js +37 -0
- package/src/server/routes.js +65 -3
- package/src/view/doc-renderers/helpers.js +2 -2
- 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 +347 -28
- package/src/view/index.js +14 -1
- package/src/view/live-client.js +22 -2
- package/src/view/product-map.js +751 -0
- package/src/view/style.css +378 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-727",
|
|
3
|
+
"path": "src/cli/readiness.js",
|
|
4
|
+
"title": "rcf define readiness [--json] [--check <stage>|all]",
|
|
5
|
+
"description": "CLI handler. Parses --json / --check / --help; walks the tree; loads freeze + all four ledgers; resolves test pointers; wraps computeReadiness with runWithAdmissibilityGate; emits text or JSON; --check narrows and gates the exit code.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-17501-5"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
13
|
+
"updatedAt": "2026-09-24T14:30:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-728",
|
|
3
|
+
"path": "test/query/gates.test.js",
|
|
4
|
+
"title": "Unit tests for stage gates D1..D8",
|
|
5
|
+
"description": "Covers AC-17401-1..8: return shape, blocking-vs-warn-with-ack fold, notApplicable rules, D4 floors + per-class opt-outs, D3 interface kind vocabulary, D5 cheap checks, D6 validate + probe count, D8 tree-wide freeze checks.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-17401-1",
|
|
8
|
+
"AC-17401-2",
|
|
9
|
+
"AC-17401-3",
|
|
10
|
+
"AC-17401-4",
|
|
11
|
+
"AC-17401-5",
|
|
12
|
+
"AC-17401-6",
|
|
13
|
+
"AC-17401-7",
|
|
14
|
+
"AC-17401-8"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": [],
|
|
17
|
+
"version": "0.1.0",
|
|
18
|
+
"status": "draft",
|
|
19
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
20
|
+
"updatedAt": "2026-09-24T14:30:00Z"
|
|
21
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-729",
|
|
3
|
+
"path": "test/query/readiness.test.js",
|
|
4
|
+
"title": "Unit tests for computeReadiness",
|
|
5
|
+
"description": "Covers AC-17501-1..4 and AC-17501-6: section 2.4 shape, fan-out impacted/impactedFbs, coverage tree + per-REQ, nextAction pick, loadAllLedgers-omits-absent.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-17501-1",
|
|
8
|
+
"AC-17501-2",
|
|
9
|
+
"AC-17501-3",
|
|
10
|
+
"AC-17501-4",
|
|
11
|
+
"AC-17501-6"
|
|
12
|
+
],
|
|
13
|
+
"dependencies": [],
|
|
14
|
+
"version": "0.1.0",
|
|
15
|
+
"status": "draft",
|
|
16
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
17
|
+
"updatedAt": "2026-09-24T14:30:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-730",
|
|
3
|
+
"path": "test/cli/readiness.test.js",
|
|
4
|
+
"title": "CLI tests for rcf define readiness",
|
|
5
|
+
"description": "Covers AC-17501-5: text output, --json emission, --check exit codes (blocking 4, warn-with-ack 0 with [warn]), admissibility refusal path exit 4.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-17501-5"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
13
|
+
"updatedAt": "2026-09-24T14:30:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-190",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 190,
|
|
6
|
+
"executionStatus": "complete",
|
|
7
|
+
"title": "Product Map tab on the review surface",
|
|
8
|
+
"summary": "Deliver REQ-170: a new \"Product Map\" tab with five groupings (shape, status filter, component-first, trace coverage, capability) drilling group -> REQ -> US -> AC, hash-addressable.",
|
|
9
|
+
"approach": "Add a product-map tab to src/view/html-page.js after Build sequence. Extend inline script TAB list. Write src/view/product-map.js: pure bucketing over the BuiltTreeModel, one function per grouping, returning {buckets, unclassifiedCount} shapes the renderer consumes. Reuse the existing detailsWrap/renderReq helpers so REQ blocks match the Requirements tab. Deep-link hash pattern #tab=product-map&group=<g>&status=<s> handled by extending resolveHash + status filter client-side.",
|
|
10
|
+
"acIds": [
|
|
11
|
+
"AC-17001-1",
|
|
12
|
+
"AC-17001-2",
|
|
13
|
+
"AC-17002-1",
|
|
14
|
+
"AC-17003-1",
|
|
15
|
+
"AC-17004-1",
|
|
16
|
+
"AC-17005-1"
|
|
17
|
+
],
|
|
18
|
+
"dependsOnFbsIds": [],
|
|
19
|
+
"contextRequirements": {
|
|
20
|
+
"tacIds": [],
|
|
21
|
+
"adrIds": []
|
|
22
|
+
},
|
|
23
|
+
"deliverables": [
|
|
24
|
+
"src/view/product-map.js: pure bucketing (groupByShape, groupByComponent, groupByTraceCoverage, groupByCapability)",
|
|
25
|
+
"src/view/html-page.js: fifth tab wired, panel renderer, inline script TAB list extended, status filter handling",
|
|
26
|
+
"test/view/product-map.test.js: 5 grouping tests + status filter + hash routing shape",
|
|
27
|
+
"test/view/fixtures/phase-3-6-static.html: regenerated baseline (product-map tab is a whitelisted additive delta)",
|
|
28
|
+
"test/view/tabs.test.js: expect the fifth tab in order"
|
|
29
|
+
],
|
|
30
|
+
"riskLevel": "low",
|
|
31
|
+
"domain": "reviewSurface",
|
|
32
|
+
"estimatedSize": "medium",
|
|
33
|
+
"estimatedHours": 8,
|
|
34
|
+
"notes": "No schema changes. Capability grouping consumes REQ.tags[] convention (FBS-191 populates the data).",
|
|
35
|
+
"createdAt": "2026-09-21T17:00:00.000Z",
|
|
36
|
+
"updatedAt": "2026-09-21T17:00:00.000Z"
|
|
37
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-191",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 191,
|
|
6
|
+
"executionStatus": "complete",
|
|
7
|
+
"title": "Capability tag convention: taxonomy + dogfood application",
|
|
8
|
+
"summary": "Deliver REQ-171: tag every dogfood REQ with at least one capability:<slug> tag, document the taxonomy and the rule for adding a new capability.",
|
|
9
|
+
"approach": "Author a compact taxonomy (10-12 slugs) derived from the actual REQ set, hand-map each of the 103 dogfood REQs (or via a small offline script commit-editing the tags[] arrays), and add a capability-tags.md doc linked from docs/README.md.",
|
|
10
|
+
"acIds": [
|
|
11
|
+
"AC-17101-1",
|
|
12
|
+
"AC-17102-1"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-190"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"deliverables": [
|
|
22
|
+
"packages/rcf-lite/rcf/requirements/*.json: every REQ has >= 1 capability:<slug> tag",
|
|
23
|
+
"packages/rcf-lite/docs/capability-tags.md: the taxonomy and the rule",
|
|
24
|
+
"packages/rcf-lite/docs/README.md: link to capability-tags.md",
|
|
25
|
+
"test/view/product-map.test.js: capability grouping assertion runs on real data"
|
|
26
|
+
],
|
|
27
|
+
"riskLevel": "low",
|
|
28
|
+
"domain": "reviewSurface",
|
|
29
|
+
"estimatedSize": "small",
|
|
30
|
+
"estimatedHours": 3,
|
|
31
|
+
"notes": "A classifier verb (rcf discover req-capability-classify) is a follow-up, not part of this PR.",
|
|
32
|
+
"createdAt": "2026-09-21T17:00:00.000Z",
|
|
33
|
+
"updatedAt": "2026-09-21T17:00:00.000Z"
|
|
34
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-21T19:43:56.521Z",
|
|
3
|
+
"updatedAt": "2026-09-21T19:44:37.430Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17006-1",
|
|
6
|
+
"AC-17007-1"
|
|
7
|
+
],
|
|
8
|
+
"fbsId": "FBS-192",
|
|
9
|
+
"prdId": "PRD-001",
|
|
10
|
+
"bsId": "BS-001",
|
|
11
|
+
"buildOrder": 192,
|
|
12
|
+
"executionStatus": "complete",
|
|
13
|
+
"title": "Product Map UX rescue pass",
|
|
14
|
+
"summary": "Turn the Product Map from function-emitted to usable-every-day: sticky styled controls, collapsed-by-default buckets, jump-nav, per-status mini counts, hash-encoded open buckets, live-refresh persistence via stable data-doc-id, and a lazy first-load payload that ships only bucket-heading skeletons.",
|
|
15
|
+
"dependsOnFbsIds": [],
|
|
16
|
+
"approach": "Restyle pm-controls with the viewer indigo/rounded tokens. Wrap each bucket in <details class=\"pm-bucket\"> with a summary carrying label + count + per-status mini pills. Emit a pm-jump-nav chip row per grouping. Extend the hash schema to carry &open=<bucketIds>. Suppress raw-JSON disclosures inside pm-req cards via a suppressRawJson flag on renderReq/renderUserStory. Add a /product-map/<name> partial endpoint; the client fetches groupings on demand and invalidates the cache on every SSE swap."
|
|
17
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-22T11:59:39Z",
|
|
3
|
+
"updatedAt": "2026-09-22T15:00:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17008-1"
|
|
6
|
+
],
|
|
7
|
+
"fbsId": "FBS-193",
|
|
8
|
+
"prdId": "PRD-001",
|
|
9
|
+
"bsId": "BS-001",
|
|
10
|
+
"buildOrder": 193,
|
|
11
|
+
"executionStatus": "complete",
|
|
12
|
+
"title": "Product Map: blueprint badge and by-blueprint grouping",
|
|
13
|
+
"summary": "Add a sixth grouping to the Product Map tab: 'By blueprint', with one bucket per applied blueprint plus an Application bucket for the project's own (non-blueprint) requirements. Every REQ row contributed by an applied blueprint carries a compact blueprint badge in every grouping. The by-blueprint bucket's second level is capability, then the usual REQ->US->AC drill-down.",
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-192"
|
|
16
|
+
],
|
|
17
|
+
"approach": "Extend GROUPINGS with 'blueprint'. Read manifest.blueprints[].contributions[] via scope.contributionsForBlueprint as the source of truth for blueprint attribution; fall back to reqId's kebab-slug prefix only when no contributions record is present. Add renderBlueprintGrouping that emits jump-nav + one <details class=pm-bucket> per applied blueprint plus an Application bucket, each carrying a capability sub-heading before its REQ rows. Add a pm-blueprint-badge span into renderReqWrapper (or a wrapping helper) so every grouping's REQ rows render the badge when attributed. Extend inline script PM_GROUPS to include 'blueprint'; renderProductMapPanel adds a blueprint <section>; view/index.js adds a 'blueprint' partial to pmPartials.",
|
|
18
|
+
"contextRequirements": {
|
|
19
|
+
"tacIds": [],
|
|
20
|
+
"adrIds": []
|
|
21
|
+
},
|
|
22
|
+
"deliverables": [
|
|
23
|
+
"src/view/product-map.js: groupByBlueprint, blueprintForReq, renderBlueprintGrouping, badge in renderReqWrapper",
|
|
24
|
+
"src/view/html-page.js: PM_GROUPS extended, blueprint <section>, group label 'Blueprint'",
|
|
25
|
+
"src/view/index.js: pmPartials.blueprint",
|
|
26
|
+
"src/view/style.css: .pm-blueprint-badge token",
|
|
27
|
+
"test/view/fixtures/blueprint-applied/: fixture project with one applied blueprint (2 contributed REQs) + 2 project REQs",
|
|
28
|
+
"test/view/product-map.test.js: five tests covering AC-17008-1",
|
|
29
|
+
"test/view/fixtures/phase-3-6-static.html: regenerated baseline (blueprint grouping is a whitelisted additive delta)",
|
|
30
|
+
"docs/capability-tags.md, docs/how-it-works.md: short line about the by-blueprint grouping and badge"
|
|
31
|
+
],
|
|
32
|
+
"riskLevel": "low",
|
|
33
|
+
"domain": "reviewSurface",
|
|
34
|
+
"estimatedSize": "medium",
|
|
35
|
+
"estimatedHours": 5,
|
|
36
|
+
"notes": "No schema change. Uses manifest.blueprints[].contributions[] as truth (project-local); id-prefix fallback only when contributions absent. Dogfood tree applies no blueprints, so the by-blueprint tab shows one Application bucket - fixture proves the multi-bucket path."
|
|
37
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-24T12:00:00Z",
|
|
3
|
+
"updatedAt": "2026-09-24T12:00:00Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-17201-1",
|
|
6
|
+
"AC-17201-2",
|
|
7
|
+
"AC-17201-3",
|
|
8
|
+
"AC-17201-4"
|
|
9
|
+
],
|
|
10
|
+
"fbsId": "FBS-194",
|
|
11
|
+
"prdId": "PRD-001",
|
|
12
|
+
"bsId": "BS-001",
|
|
13
|
+
"buildOrder": 194,
|
|
14
|
+
"executionStatus": "complete",
|
|
15
|
+
"title": "DEFINE slice 1: delta module and freeze record I/O",
|
|
16
|
+
"summary": "Ship src/query/delta.js (hashDocument, computeTreeHash, computeDelta) and src/define/freeze-record.js (load, save, validate). Export the delta primitives from src/query/index.js. Cover every AC with unit tests in test/query/delta.test.js and test/define/freeze-record.test.js.",
|
|
17
|
+
"dependsOnFbsIds": [],
|
|
18
|
+
"approach": "Pure module with SHA-256 over canonical JSON per proposal 2026-09-22 v3 section 2.1 / 2.2. Canonicalise recurses over the parsed value, sorting object keys and stripping whitespace. Tree hash is SHA-256 over the sorted (id, docHash) pairs. Delta enumerates tree.byId once and classifies each id against the freeze docHashes, appending ledger:<name> entries for the sidecars the caller passes. Freeze record I/O treats a missing file as null; a malformed body raises FreezeRecordError with a coded reason and a named field. The writer validates first so a bad in-memory record never lands on disk.",
|
|
19
|
+
"contextRequirements": {
|
|
20
|
+
"tacIds": ["TAC-4120-define-delta-and-freeze"],
|
|
21
|
+
"adrIds": ["ADR-4120-canonical-json-hashing"]
|
|
22
|
+
},
|
|
23
|
+
"deliverables": [
|
|
24
|
+
"src/query/delta.js: canonicaliseJson, hashDocument, computeTreeHash, computeDelta (§2.2 shape)",
|
|
25
|
+
"src/query/index.js: re-export the four delta primitives",
|
|
26
|
+
"src/define/freeze-record.js: FREEZE_RECORD_REL_PATH, FreezeRecordError, validateFreezeRecord, loadFreezeRecord, saveFreezeRecord",
|
|
27
|
+
"test/query/delta.test.js: eleven tests covering AC-17201-1 and AC-17201-2",
|
|
28
|
+
"test/define/freeze-record.test.js: nine tests covering AC-17201-3 and AC-17201-4"
|
|
29
|
+
],
|
|
30
|
+
"riskLevel": "low",
|
|
31
|
+
"domain": "defineDetection",
|
|
32
|
+
"estimatedSize": "small",
|
|
33
|
+
"estimatedHours": 3,
|
|
34
|
+
"notes": "Pure module: no filesystem I/O beyond the freeze reader / writer. computeDelta signature and return shape are the contract every later slice reads."
|
|
35
|
+
}
|
|
@@ -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,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-24T14:30:00Z",
|
|
3
|
+
"updatedAt": "2026-09-24T14:30:00Z",
|
|
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
|
+
],
|
|
14
|
+
"fbsId": "FBS-196",
|
|
15
|
+
"prdId": "PRD-001",
|
|
16
|
+
"bsId": "BS-001",
|
|
17
|
+
"buildOrder": 196,
|
|
18
|
+
"executionStatus": "complete",
|
|
19
|
+
"title": "DEFINE slice 2: stage gates D1..D8 pure check functions",
|
|
20
|
+
"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.",
|
|
21
|
+
"dependsOnFbsIds": ["FBS-195"],
|
|
22
|
+
"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).",
|
|
23
|
+
"contextRequirements": {
|
|
24
|
+
"tacIds": ["TAC-4122-define-gates"],
|
|
25
|
+
"adrIds": ["ADR-4122-define-gates-blocking-and-optout"]
|
|
26
|
+
},
|
|
27
|
+
"deliverables": [
|
|
28
|
+
"src/query/gates.js: STAGE_ORDER, STAGE_GATES, STAGE_SHORT_NAMES, INTERFACE_KINDS, checkD1Brief..checkD8Freeze, plus foldState and parseAcClass helpers",
|
|
29
|
+
"src/query/index.js: re-export gate check functions + STAGE_ORDER, STAGE_GATES, STAGE_SHORT_NAMES so consumers import through one seam",
|
|
30
|
+
"test/query/gates.test.js: unit tests covering AC-17401-1 through AC-17401-8"
|
|
31
|
+
],
|
|
32
|
+
"riskLevel": "low",
|
|
33
|
+
"domain": "defineDetection",
|
|
34
|
+
"estimatedSize": "medium",
|
|
35
|
+
"estimatedHours": 4,
|
|
36
|
+
"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."
|
|
37
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -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
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
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-09-21T17: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
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "Traceability is the confidence the framework is named for. The owner needs to know that nothing is unspecified and nothing is untested, and what an edit ripples into, without reading the documents end to end.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:requirements-authoring",
|
|
11
12
|
"traceability",
|
|
12
13
|
"query",
|
|
13
14
|
"coverage"
|
|
@@ -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
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "For someone who cannot read code, the specification-to-build loop is the only thing between them and a confident but wrong result. Assembling the prompt from the tree is what makes the output solid and traceable to an agreed decision.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:build-sequence",
|
|
11
12
|
"build",
|
|
12
13
|
"sdd",
|
|
13
14
|
"fbs"
|
|
@@ -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
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "should",
|
|
9
9
|
"rationale": "The harness is where the owner's AI tooling lives. A local stdio MCP surface gives that tooling the full RCF feature set while preserving filesystem access and the source-of-truth rule. Remote MCP is excluded because it cannot see the user's codebase.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:mcp",
|
|
11
12
|
"mcp",
|
|
12
13
|
"harness",
|
|
13
14
|
"stdio"
|
|
@@ -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
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "A non-coder cannot catch a malformed document by eye. The tool must refuse to write invalid state and must explain why, so the owner can trust that what is on disk is always valid.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:requirements-authoring",
|
|
11
12
|
"validation",
|
|
12
13
|
"quality",
|
|
13
14
|
"schemas"
|
|
@@ -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
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"createdAt": "2026-07-20T17:01:21.557Z",
|
|
3
|
-
"updatedAt": "2026-
|
|
3
|
+
"updatedAt": "2026-09-21T17:00:00.000Z",
|
|
4
4
|
"category": "functional",
|
|
5
5
|
"priority": "must",
|
|
6
6
|
"description": "The agent guidance pack teaches a build method that keeps the deployment runtime present in the loop from elicitation to verification, so that a non-coding owner who cannot self-verify is not led into an undeployable stack or a false 'verified' claim. It requires four properties of the method the tool ships: (1) every build lands a working, documented local preview loop as its default outcome; (2) elicitation establishes where the app will run early and constrains the stack to that answer, with a jargon-free hosting-choice walkthrough when the owner does not know; (3) every 'verified' or 'tested' claim names the runtime it was checked against and never implies deploy-runtime verification that did not happen; (4) the method carries guidance for a periodic and end-of-build fresh-context self-review that drives the app against its acceptance criteria, subordinate to the independent verification gate rather than a substitute for it. This requirement governs the shipped guidance/prompt surface, not a new runtime subsystem.",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"version": "0.1.0",
|
|
13
13
|
"status": "draft",
|
|
14
14
|
"tags": [
|
|
15
|
+
"capability:build-sequence",
|
|
15
16
|
"guidance",
|
|
16
17
|
"deploy",
|
|
17
18
|
"verification"
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "The packaging consolidation ruling (docs/2026-08-06_packaging-consolidation-proposal.md, ratified 2026-08-11) picks one install (`rcf-lite`) with one CLI verb space (`rcf`). Verify is a first-class part of the RCF chain (define, build, verify) and must sit inside that verb space, not beside it. Keeping `rcf verify` as an alias avoids a hard break for existing scripts across a transition window.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:project-init",
|
|
11
12
|
"packaging",
|
|
12
13
|
"cli",
|
|
13
14
|
"verify"
|
|
@@ -15,5 +16,5 @@
|
|
|
15
16
|
"version": "0.1.0",
|
|
16
17
|
"status": "draft",
|
|
17
18
|
"createdAt": "2026-08-11T00:00:00Z",
|
|
18
|
-
"updatedAt": "2026-
|
|
19
|
+
"updatedAt": "2026-09-21T17:00:00.000Z"
|
|
19
20
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"createdAt": "2026-08-18T22:54:27.031Z",
|
|
3
|
-
"updatedAt": "2026-
|
|
3
|
+
"updatedAt": "2026-09-22T13:47:34.538Z",
|
|
4
4
|
"description": "The framework provides a Blueprint mechanism the operator uses to compose blueprint packages (specifications + assets, not code) onto a project tree at any point in its life. Composition is many blueprints per project. Blueprint-contributed docs are namespaced by the blueprint's slug so multiple blueprints cannot collide on ids. Standards packs register at rcf init (or later via rcf define standards add), reference-by-default, copied to rcf/standards/<slug>/ only when the source lives outside the project root. Manifest registration is authoritative. Selective retrieval populates fbs.contextRequirements.standardIds at bundle-assembly time by analysing the FBS work text against the standards tag vocabulary; operator override is supported by authoring the array on the FBS. scope:global ADR contributions surface as blocking conflicts at rcf define blueprint add time.",
|
|
5
5
|
"reqId": "REQ-010",
|
|
6
6
|
"prdId": "PRD-001",
|
|
@@ -16,5 +16,8 @@
|
|
|
16
16
|
],
|
|
17
17
|
"reason": "keyword-scan",
|
|
18
18
|
"classifiedAt": "2026-08-18T22:54:27.048Z"
|
|
19
|
-
}
|
|
19
|
+
},
|
|
20
|
+
"tags": [
|
|
21
|
+
"capability:blueprint-library"
|
|
22
|
+
]
|
|
20
23
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "Verify is the ship gate. A silent runtime change in the browser MCP on the next verify run is the reproducibility hole Baz named on 2026-09-03. Pinning the MCP closes it. Formalising e2e as a declared test level gives browser-facing projects a first-class contract instead of relying on the verify browser stage as a proxy for coverage. Doctor and init together make Playwright the operator's decision, not rcf-lite's ambient inheritance.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:verify",
|
|
11
12
|
"verify",
|
|
12
13
|
"playwright-mcp",
|
|
13
14
|
"e2e",
|
|
@@ -18,5 +19,5 @@
|
|
|
18
19
|
"version": "0.1.0",
|
|
19
20
|
"status": "draft",
|
|
20
21
|
"createdAt": "2026-09-03T16:56:00Z",
|
|
21
|
-
"updatedAt": "2026-09-
|
|
22
|
+
"updatedAt": "2026-09-21T17:00:00.000Z"
|
|
22
23
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "The shipped shelf carried three literal probe-path opinions before this alignment (essentials /healthz + /readyz, probe-endpoints /live + /ready, api-rest /healthz/live + /healthz/ready + /healthz/startup). Composing any two of the three on one project either fired a designed-in `globalAdrTopic` conflict on healthProbes/readinessSemantics or silently shipped three disagreeing probe bindings. WSD-012 mandates /live and /ready, which is the probe-endpoints Kubernetes default; Dex's A4 wsd-service-anatomy binds those two paths as a parameter and required this item as its dependency. Aligning ownership to one blueprint (probe-endpoints) and making the other two defer is the smallest change that closes both the conflict-by-design surface and the silent-disagreement surface without inventing a new composer primitive. Ratified spec: `projects/rcf-lite-wsd/specs/rcf-lite-probe-path-alignment-spec-2026-09-04.md` (sections 1 through 11).",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:blueprint-library",
|
|
11
12
|
"blueprints",
|
|
12
13
|
"observability",
|
|
13
14
|
"probe-endpoints",
|
|
@@ -18,5 +19,5 @@
|
|
|
18
19
|
"version": "0.1.0",
|
|
19
20
|
"status": "draft",
|
|
20
21
|
"createdAt": "2026-09-04T00:00:00Z",
|
|
21
|
-
"updatedAt": "2026-09-
|
|
22
|
+
"updatedAt": "2026-09-22T13:47:34.538Z"
|
|
22
23
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "The core shelf carried no logging or error-handling blueprint before this train; every WSD-facing service blueprint (Dex's `wsd-api-rest`) stated its companion suggestions in prose only, with no core fallback for projects that had not registered the WSD library. Baz on 2026-09-03 during the WSD blueprint round review ratified two decisions in one clause: the core shelf carries a `logging` and an `error-handling` blueprint written to general enterprise practice (not to any one organisation's standards), and a companion-suggestion mechanism (REQ-014) surfaces them at apply time. Shipping the two blueprints as general-enterprise-practice siblings of the WSD library halves means every project falls back to a sensible logging and error-handling contract without adopting a library, and the WSD library becomes a specialisation (adds `standardsTrace[]`, adds WSD-specific ADR clauses) that the mechanism resolves in preference to the core when the library is registered.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:blueprint-library",
|
|
11
12
|
"blueprints",
|
|
12
13
|
"observability",
|
|
13
14
|
"logging",
|
|
@@ -18,5 +19,5 @@
|
|
|
18
19
|
"version": "0.1.0",
|
|
19
20
|
"status": "draft",
|
|
20
21
|
"createdAt": "2026-09-04T12:20:00Z",
|
|
21
|
-
"updatedAt": "2026-09-
|
|
22
|
+
"updatedAt": "2026-09-22T13:47:34.538Z"
|
|
22
23
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "Before this train, service blueprints named their companion suggestions in prose in each README and each guide, and the machine could not act on them: `rcf define blueprint add` could not print a suggestion, `rcf define blueprint list` could not annotate an outstanding one, the agent could not know which library provider to prefer, and the operator had no place to record a project-level choice that outlived any single apply. Baz on 2026-09-03 during the WSD blueprint round review ratified the mechanism in the same clause as the two new core blueprints: the mechanism surfaces the suggestion three ways from one resolution rule, the agent surfaces the resolved companions verbally, and the operator adopts explicitly. Suggestion by role (not by slug) is the load-bearing choice: a service blueprint ships once and works with every library that provides the role; the operator's opt-in to a library IS the choice the resolution rule records.",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:blueprint-library",
|
|
11
12
|
"blueprints",
|
|
12
13
|
"companions",
|
|
13
14
|
"provides-roles",
|
|
@@ -18,5 +19,5 @@
|
|
|
18
19
|
"version": "0.1.0",
|
|
19
20
|
"status": "draft",
|
|
20
21
|
"createdAt": "2026-09-04T12:20:00Z",
|
|
21
|
-
"updatedAt": "2026-09-
|
|
22
|
+
"updatedAt": "2026-09-22T13:47:34.538Z"
|
|
22
23
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"priority": "must",
|
|
9
9
|
"rationale": "Dex's WSD library composes on the WSD-001 through WSD-012 standards with clause-level trace tables under `docs/standards-trace.md`. Before this train, the trace lived in prose only, and a library blueprint's ADR could omit any standard reference without the loader noticing. Baz on 2026-09-03 during the WSD blueprint round review ratified the discipline as `really good idea` and made it the shelf standard for any future library or shipped blueprint that composes on named standards. Baz amendment A2 (2026-09-04T12:20:31Z) refined the MUST-to-kind mapping to admit choice-shaped MUSTs as ADRs so the WSD library's 41 MUSTs (27 to AC, 8 to ADR, 8 not-carried per Dex's tables) fit under the discipline without renumbering. The additive fields and load-time validation give machine-checkable adherence without changing any existing blueprint (zero shelf blueprints declare `standardsTrace[]` today).",
|
|
10
10
|
"tags": [
|
|
11
|
+
"capability:blueprint-library",
|
|
11
12
|
"blueprints",
|
|
12
13
|
"authoring",
|
|
13
14
|
"standards",
|
|
@@ -17,5 +18,5 @@
|
|
|
17
18
|
"version": "0.1.0",
|
|
18
19
|
"status": "draft",
|
|
19
20
|
"createdAt": "2026-09-04T12:20:00Z",
|
|
20
|
-
"updatedAt": "2026-09-
|
|
21
|
+
"updatedAt": "2026-09-22T13:47:34.538Z"
|
|
21
22
|
}
|