rcf-lite 0.28.1 → 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.
Files changed (219) hide show
  1. package/CHANGELOG.md +310 -0
  2. package/bin/rcf.js +4 -0
  3. package/fixtures/canary-manifest.json +9 -9
  4. package/package.json +1 -1
  5. package/rcf/adrs/adr-4120-canonical-json-hashing.json +30 -0
  6. package/rcf/adrs/adr-4121-define-sidecars.json +30 -0
  7. package/rcf/adrs/adr-4122-define-gates-blocking-and-optout.json +30 -0
  8. package/rcf/adrs/adr-4123-readiness-single-object.json +30 -0
  9. package/rcf/code-nodes/cn-602.json +3 -2
  10. package/rcf/code-nodes/cn-700.json +23 -0
  11. package/rcf/code-nodes/cn-701.json +14 -0
  12. package/rcf/code-nodes/cn-702.json +14 -0
  13. package/rcf/code-nodes/cn-703.json +16 -0
  14. package/rcf/code-nodes/cn-720.json +15 -0
  15. package/rcf/code-nodes/cn-721.json +15 -0
  16. package/rcf/code-nodes/cn-722.json +15 -0
  17. package/rcf/code-nodes/cn-723.json +18 -0
  18. package/rcf/code-nodes/cn-724.json +14 -0
  19. package/rcf/code-nodes/cn-725.json +21 -0
  20. package/rcf/code-nodes/cn-726.json +17 -0
  21. package/rcf/code-nodes/cn-727.json +14 -0
  22. package/rcf/code-nodes/cn-728.json +21 -0
  23. package/rcf/code-nodes/cn-729.json +18 -0
  24. package/rcf/code-nodes/cn-730.json +14 -0
  25. package/rcf/fbs/fbs-181.json +3 -2
  26. package/rcf/fbs/fbs-190.json +37 -0
  27. package/rcf/fbs/fbs-191.json +34 -0
  28. package/rcf/fbs/fbs-192.json +17 -0
  29. package/rcf/fbs/fbs-193.json +37 -0
  30. package/rcf/fbs/fbs-194.json +35 -0
  31. package/rcf/fbs/fbs-195.json +37 -0
  32. package/rcf/fbs/fbs-196.json +37 -0
  33. package/rcf/fbs/fbs-197.json +41 -0
  34. package/rcf/requirements/req-001.json +2 -1
  35. package/rcf/requirements/req-002.json +2 -1
  36. package/rcf/requirements/req-003.json +2 -1
  37. package/rcf/requirements/req-004.json +2 -1
  38. package/rcf/requirements/req-005.json +2 -1
  39. package/rcf/requirements/req-006.json +2 -1
  40. package/rcf/requirements/req-007.json +2 -1
  41. package/rcf/requirements/req-008.json +2 -1
  42. package/rcf/requirements/req-009.json +2 -1
  43. package/rcf/requirements/req-010.json +5 -2
  44. package/rcf/requirements/req-011.json +2 -1
  45. package/rcf/requirements/req-012.json +2 -1
  46. package/rcf/requirements/req-013.json +2 -1
  47. package/rcf/requirements/req-014.json +2 -1
  48. package/rcf/requirements/req-015.json +2 -1
  49. package/rcf/requirements/req-016.json +5 -2
  50. package/rcf/requirements/req-017.json +6 -2
  51. package/rcf/requirements/req-018.json +5 -2
  52. package/rcf/requirements/req-019.json +5 -2
  53. package/rcf/requirements/req-020.json +5 -2
  54. package/rcf/requirements/req-021.json +5 -2
  55. package/rcf/requirements/req-022.json +5 -2
  56. package/rcf/requirements/req-023.json +6 -4
  57. package/rcf/requirements/req-024.json +5 -2
  58. package/rcf/requirements/req-025.json +5 -2
  59. package/rcf/requirements/req-026.json +5 -2
  60. package/rcf/requirements/req-027.json +5 -2
  61. package/rcf/requirements/req-028.json +5 -2
  62. package/rcf/requirements/req-029.json +5 -2
  63. package/rcf/requirements/req-030.json +5 -2
  64. package/rcf/requirements/req-040.json +5 -2
  65. package/rcf/requirements/req-041.json +5 -2
  66. package/rcf/requirements/req-042.json +5 -2
  67. package/rcf/requirements/req-043.json +5 -2
  68. package/rcf/requirements/req-050.json +5 -2
  69. package/rcf/requirements/req-051.json +5 -2
  70. package/rcf/requirements/req-052.json +5 -2
  71. package/rcf/requirements/req-053.json +5 -2
  72. package/rcf/requirements/req-054.json +5 -2
  73. package/rcf/requirements/req-060.json +5 -2
  74. package/rcf/requirements/req-061.json +5 -2
  75. package/rcf/requirements/req-062.json +5 -2
  76. package/rcf/requirements/req-063.json +5 -2
  77. package/rcf/requirements/req-070.json +5 -2
  78. package/rcf/requirements/req-071.json +5 -2
  79. package/rcf/requirements/req-072.json +5 -2
  80. package/rcf/requirements/req-073.json +5 -2
  81. package/rcf/requirements/req-074.json +5 -2
  82. package/rcf/requirements/req-075.json +5 -2
  83. package/rcf/requirements/req-076.json +5 -2
  84. package/rcf/requirements/req-077.json +5 -2
  85. package/rcf/requirements/req-080.json +5 -2
  86. package/rcf/requirements/req-081.json +5 -2
  87. package/rcf/requirements/req-082.json +5 -2
  88. package/rcf/requirements/req-083.json +5 -2
  89. package/rcf/requirements/req-084.json +5 -2
  90. package/rcf/requirements/req-085.json +5 -2
  91. package/rcf/requirements/req-086.json +5 -2
  92. package/rcf/requirements/req-090.json +5 -2
  93. package/rcf/requirements/req-091.json +5 -2
  94. package/rcf/requirements/req-092.json +5 -2
  95. package/rcf/requirements/req-093.json +5 -2
  96. package/rcf/requirements/req-094.json +5 -2
  97. package/rcf/requirements/req-100.json +5 -2
  98. package/rcf/requirements/req-101.json +5 -2
  99. package/rcf/requirements/req-102.json +5 -2
  100. package/rcf/requirements/req-103.json +5 -2
  101. package/rcf/requirements/req-104.json +5 -2
  102. package/rcf/requirements/req-110.json +5 -2
  103. package/rcf/requirements/req-111.json +5 -2
  104. package/rcf/requirements/req-112.json +5 -2
  105. package/rcf/requirements/req-113.json +5 -2
  106. package/rcf/requirements/req-114.json +5 -2
  107. package/rcf/requirements/req-115.json +5 -2
  108. package/rcf/requirements/req-120.json +5 -2
  109. package/rcf/requirements/req-121.json +5 -2
  110. package/rcf/requirements/req-122.json +5 -2
  111. package/rcf/requirements/req-123.json +5 -2
  112. package/rcf/requirements/req-124.json +5 -2
  113. package/rcf/requirements/req-125.json +5 -2
  114. package/rcf/requirements/req-130.json +6 -2
  115. package/rcf/requirements/req-131.json +6 -2
  116. package/rcf/requirements/req-132.json +6 -2
  117. package/rcf/requirements/req-133.json +6 -2
  118. package/rcf/requirements/req-134.json +6 -2
  119. package/rcf/requirements/req-140.json +5 -2
  120. package/rcf/requirements/req-145.json +5 -2
  121. package/rcf/requirements/req-150.json +6 -2
  122. package/rcf/requirements/req-151.json +6 -2
  123. package/rcf/requirements/req-152.json +6 -2
  124. package/rcf/requirements/req-153.json +6 -2
  125. package/rcf/requirements/req-154.json +5 -2
  126. package/rcf/requirements/req-155.json +4 -1
  127. package/rcf/requirements/req-156.json +4 -1
  128. package/rcf/requirements/req-157.json +4 -1
  129. package/rcf/requirements/req-158.json +4 -1
  130. package/rcf/requirements/req-159.json +4 -1
  131. package/rcf/requirements/req-160.json +4 -1
  132. package/rcf/requirements/req-161.json +4 -1
  133. package/rcf/requirements/req-162.json +4 -1
  134. package/rcf/requirements/req-163.json +5 -2
  135. package/rcf/requirements/req-164.json +5 -2
  136. package/rcf/requirements/req-165.json +5 -2
  137. package/rcf/requirements/req-170.json +33 -0
  138. package/rcf/requirements/req-171.json +44 -0
  139. package/rcf/requirements/req-172.json +25 -0
  140. package/rcf/requirements/req-173.json +25 -0
  141. package/rcf/requirements/req-174.json +25 -0
  142. package/rcf/requirements/req-175.json +25 -0
  143. package/rcf/tacs/tac-4103-feedback-redact.json +2 -2
  144. package/rcf/tacs/tac-4120-define-delta-and-freeze.json +21 -0
  145. package/rcf/tacs/tac-4121-define-ledgers.json +23 -0
  146. package/rcf/tacs/tac-4122-define-gates.json +25 -0
  147. package/rcf/tacs/tac-4123-define-readiness.json +25 -0
  148. package/rcf/test-suites/ts-188.json +10 -2
  149. package/rcf/test-suites/ts-191.json +19 -5
  150. package/rcf/test-suites/ts-204.json +30 -0
  151. package/rcf/test-suites/ts-205.json +22 -0
  152. package/rcf/test-suites/ts-206.json +22 -0
  153. package/rcf/test-suites/ts-207.json +22 -0
  154. package/rcf/test-suites/ts-208.json +22 -0
  155. package/rcf/test-suites/ts-209.json +22 -0
  156. package/rcf/test-suites/ts-210.json +22 -0
  157. package/rcf/test-suites/ts-211.json +22 -0
  158. package/rcf/test-suites/ts-212.json +22 -0
  159. package/rcf/test-suites/ts-213.json +50 -0
  160. package/rcf/test-suites/ts-214.json +74 -0
  161. package/rcf/test-suites/ts-215.json +67 -0
  162. package/rcf/test-suites/ts-216.json +78 -0
  163. package/rcf/test-suites/ts-217.json +62 -0
  164. package/rcf/user-stories/us-15601.json +10 -1
  165. package/rcf/user-stories/us-15701.json +4 -4
  166. package/rcf/user-stories/us-17001.json +27 -0
  167. package/rcf/user-stories/us-17002.json +22 -0
  168. package/rcf/user-stories/us-17003.json +22 -0
  169. package/rcf/user-stories/us-17004.json +22 -0
  170. package/rcf/user-stories/us-17005.json +22 -0
  171. package/rcf/user-stories/us-17006.json +21 -0
  172. package/rcf/user-stories/us-17007.json +21 -0
  173. package/rcf/user-stories/us-17008.json +22 -0
  174. package/rcf/user-stories/us-17101.json +22 -0
  175. package/rcf/user-stories/us-17102.json +22 -0
  176. package/rcf/user-stories/us-17201.json +38 -0
  177. package/rcf/user-stories/us-17301.json +38 -0
  178. package/rcf/user-stories/us-17401.json +58 -0
  179. package/rcf/user-stories/us-17501.json +48 -0
  180. package/releases/releases.yaml +31 -1
  181. package/src/browser-verify/manifest-writer.js +9 -5
  182. package/src/cli/browser-verify.js +9 -1
  183. package/src/cli/feedback.js +316 -32
  184. package/src/cli/help.js +11 -0
  185. package/src/cli/intake.js +25 -4
  186. package/src/cli/ledger.js +399 -0
  187. package/src/cli/preflight.js +24 -3
  188. package/src/cli/readiness.js +280 -0
  189. package/src/cli/review.js +9 -1
  190. package/src/cli/ui-baseline.js +14 -1
  191. package/src/core/store/index.js +5 -0
  192. package/src/core/store/validate-composed-record.js +95 -0
  193. package/src/core/store/writer.js +86 -6
  194. package/src/define/freeze-record.js +232 -0
  195. package/src/define/ledgers.js +513 -0
  196. package/src/feedback/gh.js +27 -1
  197. package/src/feedback/redact-allowlist.json +7 -0
  198. package/src/feedback/redact.js +126 -11
  199. package/src/feedback/render.js +34 -12
  200. package/src/intake/manifest-writer.js +6 -3
  201. package/src/intake/orchestrator.js +44 -7
  202. package/src/preflight/manifest-writer.js +11 -11
  203. package/src/query/delta.js +276 -0
  204. package/src/query/gates.js +832 -0
  205. package/src/query/index.js +36 -0
  206. package/src/query/readiness.js +333 -0
  207. package/src/req-baseline/sweep.js +34 -5
  208. package/src/server/index.js +37 -0
  209. package/src/server/routes.js +65 -3
  210. package/src/ui-baseline/manifest-writer.js +11 -10
  211. package/src/view/doc-renderers/helpers.js +39 -2
  212. package/src/view/doc-renderers/req.js +10 -2
  213. package/src/view/doc-renderers/tad.js +67 -6
  214. package/src/view/doc-renderers/user-story.js +10 -5
  215. package/src/view/html-page.js +347 -28
  216. package/src/view/index.js +14 -1
  217. package/src/view/live-client.js +22 -2
  218. package/src/view/product-map.js +751 -0
  219. package/src/view/style.css +383 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "cnId": "CN-721",
3
+ "path": "src/define/freeze-record.js",
4
+ "title": "Freeze record I/O: load, save, validate",
5
+ "description": "Owns rcf/define/freeze.json. FREEZE_RECORD_REL_PATH, FreezeRecordError (coded parseFailure | schemaFailure | ioFailure with a named field), validateFreezeRecord, loadFreezeRecord (returns null on ENOENT), saveFreezeRecord (validates first; refuses to persist an invalid record; creates rcf/define/ on demand; writes pretty JSON with a trailing newline). The record's local schema is documented at the top of this file and covered by test/define/freeze-record.test.js.",
6
+ "implementsAcIds": [
7
+ "AC-17201-3",
8
+ "AC-17201-4"
9
+ ],
10
+ "dependencies": [],
11
+ "version": "0.1.0",
12
+ "status": "draft",
13
+ "createdAt": "2026-09-24T12:00:00Z",
14
+ "updatedAt": "2026-09-24T12:00:00Z"
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "cnId": "CN-722",
3
+ "path": "src/define/ledgers.js",
4
+ "title": "Four sidecar ledgers: load, save, validate, add, resolve",
5
+ "description": "Pure module. LEDGER_NAMES (brief, decisions, concerns, probes), BRIEF_KINDS closed vocabulary, LedgerError with coded reason and named field, ledgerRelPath / ledgerPath, emptyLedger, loadLedger (empty on ENOENT), saveLedger (validates first), validateLedger, addEntry (mints next id, stamps addedAt, defaults status open, validates the whole body), resolveEntry (flips status to resolved, stamps resolvedAt, refuses unknown id), parseBriefFromFile (splits by non-empty lines, strips '- ', '* ', '<n>. ' bullets), loadAllLedgers (returns a LedgerBundle for computeDelta).",
6
+ "implementsAcIds": [
7
+ "AC-17301-1",
8
+ "AC-17301-3"
9
+ ],
10
+ "dependencies": [],
11
+ "version": "0.1.0",
12
+ "status": "draft",
13
+ "createdAt": "2026-09-24T12:00:00Z",
14
+ "updatedAt": "2026-09-24T12:00:00Z"
15
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "cnId": "CN-723",
3
+ "path": "src/cli/ledger.js",
4
+ "title": "rcf define ledger CLI verb",
5
+ "description": "Wraps src/define/ledgers.js with parseArgs and per-verb usage text. Dispatches ledger <name> <verb> where name is brief | decisions | concerns | probes and verb is add | resolve | list. renderDecisionsList prints the numbered #241 format (one decision per item, letter) options, default:, blocks:). list --json emits { ledger, <arrayKey>: [...] }. bin/rcf.js registers this under GROUPS.define.ledger; src/cli/help.js wires HELP into HELP_MAP.define.ledger and extends the DEFINE_HELP and top-level listing blocks so 'rcf help define ledger' and 'rcf define ledger --help' render the same text by construction.",
6
+ "implementsAcIds": [
7
+ "AC-17301-1",
8
+ "AC-17301-2",
9
+ "AC-17301-3"
10
+ ],
11
+ "dependencies": [
12
+ "CN-722"
13
+ ],
14
+ "version": "0.1.0",
15
+ "status": "draft",
16
+ "createdAt": "2026-09-24T12:00:00Z",
17
+ "updatedAt": "2026-09-24T12:00:00Z"
18
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "cnId": "CN-724",
3
+ "path": "test/store/walker-invisible-define.test.js",
4
+ "title": "Invariant test: walker never surfaces rcf/define/ files",
5
+ "description": "One-scenario test that seeds a fresh project (initProject), writes rcf/define/freeze.json, the four ledger files and a bug-bait req-999.json under rcf/define/, then runs walkTree and asserts no error path starts with rcf/define/ and no such file lands in tree.byId. The invariant is what keeps the sidecars out of every existing tree consumer (proposal 2026-09-22 section 2.1).",
6
+ "implementsAcIds": [
7
+ "AC-17301-4"
8
+ ],
9
+ "dependencies": [],
10
+ "version": "0.1.0",
11
+ "status": "draft",
12
+ "createdAt": "2026-09-24T12:00:00Z",
13
+ "updatedAt": "2026-09-24T12:00:00Z"
14
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "cnId": "CN-725",
3
+ "path": "src/query/gates.js",
4
+ "title": "DEFINE stage gates D1..D8 pure check functions",
5
+ "description": "Pure module. One check function per stage D1..D8 (checkD1Brief..checkD8Freeze) plus STAGE_ORDER, STAGE_GATES, STAGE_SHORT_NAMES, INTERFACE_KINDS. Each takes (tree, context) and returns { stage, gate, state, checks[] } in the section 2.4 shape.",
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,17 @@
1
+ {
2
+ "cnId": "CN-726",
3
+ "path": "src/query/readiness.js",
4
+ "title": "computeReadiness composes delta + fan-out + gates + coverage + decisions",
5
+ "description": "Pure module. computeReadiness returns the section 2.4 object; internal composeStages calls TAC-4122's gate functions in D1..D8 order; deriveNextAction picks the first failing check; freezeable folds the eight stage states.",
6
+ "implementsAcIds": [
7
+ "AC-17501-1",
8
+ "AC-17501-2",
9
+ "AC-17501-3",
10
+ "AC-17501-4"
11
+ ],
12
+ "dependencies": [],
13
+ "version": "0.1.0",
14
+ "status": "draft",
15
+ "createdAt": "2026-09-24T14:30:00Z",
16
+ "updatedAt": "2026-09-24T14:30:00Z"
17
+ }
@@ -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
+ }
@@ -13,7 +13,8 @@
13
13
  "AC-15601-3",
14
14
  "AC-15601-4",
15
15
  "AC-15601-5",
16
- "AC-15701-1"
16
+ "AC-15701-1",
17
+ "AC-15601-6"
17
18
  ],
18
19
  "dependsOnFbsIds": [
19
20
  "FBS-180"
@@ -42,5 +43,5 @@
42
43
  "estimatedHours": 16,
43
44
  "notes": "Fingerprint decision confined to this slice via ADR-4102; the labels half of that ADR pays off in slice 4.",
44
45
  "createdAt": "2026-09-16T13:45:23.000Z",
45
- "updatedAt": "2026-09-17T14:14:56Z"
46
+ "updatedAt": "2026-09-22T00:00:00Z"
46
47
  }
@@ -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-06-25T00:00:00Z"
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-06-25T00:00:00Z"
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-06-25T00:00:00Z"
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-06-25T00:00:00Z"
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-06-25T00:00:00Z"
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-06-25T00:00:00Z"
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-06-25T00:00:00Z"
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-07-28T16:40:04.361Z",
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"