rcf-lite 0.0.1 → 0.7.1

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 (342) hide show
  1. package/CHANGELOG.md +288 -0
  2. package/LICENSE +202 -0
  3. package/README.md +92 -4
  4. package/bin/rcf-verify.js +122 -0
  5. package/bin/rcf.js +174 -0
  6. package/bin/view-supervisor-child.mjs +14 -0
  7. package/fixtures/canary-manifest.json +103 -0
  8. package/guidance/README.md +25 -0
  9. package/guidance/build-cycle-playbook.md +492 -0
  10. package/guidance/build-cycle.md +40 -0
  11. package/guidance/document-model.md +45 -0
  12. package/guidance/elicitation-playbook.md +442 -0
  13. package/guidance/harness-template.md +246 -0
  14. package/guidance/managed/README.md +63 -0
  15. package/guidance/managed/agent-instructions-block.hash +1 -0
  16. package/guidance/managed/agent-instructions-block.md +220 -0
  17. package/guidance/managed/legacy-fragment-hashes.json +22 -0
  18. package/guidance/manifest.json +21 -0
  19. package/guidance/overview.md +48 -0
  20. package/guidance/persona-programme.md +44 -0
  21. package/package.json +69 -8
  22. package/rcf/adrs/adr-001.json +25 -0
  23. package/rcf/adrs/adr-002.json +25 -0
  24. package/rcf/adrs/adr-003.json +25 -0
  25. package/rcf/adrs/adr-004.json +20 -0
  26. package/rcf/adrs/adr-005.json +20 -0
  27. package/rcf/adrs/adr-006.json +25 -0
  28. package/rcf/adrs/adr-007.json +25 -0
  29. package/rcf/adrs/adr-008.json +25 -0
  30. package/rcf/adrs/adr-009.json +25 -0
  31. package/rcf/build-sequence.json +11 -0
  32. package/rcf/code-nodes/cn-001.json +14 -0
  33. package/rcf/code-nodes/cn-002.json +14 -0
  34. package/rcf/code-nodes/cn-003.json +15 -0
  35. package/rcf/code-nodes/cn-004.json +17 -0
  36. package/rcf/code-nodes/cn-005.json +19 -0
  37. package/rcf/code-nodes/cn-006.json +17 -0
  38. package/rcf/code-nodes/cn-007.json +16 -0
  39. package/rcf/code-nodes/cn-008.json +19 -0
  40. package/rcf/code-nodes/cn-009.json +16 -0
  41. package/rcf/code-nodes/cn-010.json +18 -0
  42. package/rcf/code-nodes/cn-011.json +18 -0
  43. package/rcf/code-nodes/cn-012.json +18 -0
  44. package/rcf/code-nodes/cn-013.json +19 -0
  45. package/rcf/code-nodes/cn-014.json +16 -0
  46. package/rcf/code-nodes/cn-015.json +16 -0
  47. package/rcf/code-nodes/cn-016.json +16 -0
  48. package/rcf/code-nodes/cn-017.json +16 -0
  49. package/rcf/code-nodes/cn-018.json +15 -0
  50. package/rcf/code-nodes/cn-019.json +16 -0
  51. package/rcf/code-nodes/cn-020.json +16 -0
  52. package/rcf/code-nodes/cn-021.json +16 -0
  53. package/rcf/code-nodes/cn-022.json +16 -0
  54. package/rcf/code-nodes/cn-023.json +16 -0
  55. package/rcf/code-nodes/cn-024.json +16 -0
  56. package/rcf/code-nodes/cn-025.json +16 -0
  57. package/rcf/code-nodes/cn-026.json +16 -0
  58. package/rcf/code-nodes/cn-027.json +16 -0
  59. package/rcf/code-nodes/cn-028.json +16 -0
  60. package/rcf/code-nodes/cn-029.json +19 -0
  61. package/rcf/code-nodes/cn-030.json +14 -0
  62. package/rcf/code-nodes/cn-031.json +14 -0
  63. package/rcf/code-nodes/cn-032.json +14 -0
  64. package/rcf/code-nodes/cn-033.json +14 -0
  65. package/rcf/code-nodes/cn-034.json +14 -0
  66. package/rcf/code-nodes/cn-035.json +14 -0
  67. package/rcf/code-nodes/cn-036.json +14 -0
  68. package/rcf/code-nodes/cn-037.json +14 -0
  69. package/rcf/code-nodes/cn-038.json +14 -0
  70. package/rcf/code-nodes/cn-039.json +14 -0
  71. package/rcf/code-nodes/cn-040.json +14 -0
  72. package/rcf/code-nodes/cn-041.json +14 -0
  73. package/rcf/code-nodes/cn-042.json +14 -0
  74. package/rcf/code-nodes/cn-043.json +14 -0
  75. package/rcf/code-nodes/cn-044.json +14 -0
  76. package/rcf/code-nodes/cn-045.json +14 -0
  77. package/rcf/code-nodes/cn-046.json +14 -0
  78. package/rcf/code-nodes/cn-047.json +14 -0
  79. package/rcf/code-nodes/cn-048.json +14 -0
  80. package/rcf/code-nodes/cn-049.json +14 -0
  81. package/rcf/code-nodes/cn-050.json +14 -0
  82. package/rcf/code-nodes/cn-051.json +14 -0
  83. package/rcf/code-nodes/cn-052.json +14 -0
  84. package/rcf/code-nodes/cn-053.json +14 -0
  85. package/rcf/code-nodes/cn-054.json +14 -0
  86. package/rcf/code-nodes/cn-055.json +14 -0
  87. package/rcf/code-nodes/cn-056.json +14 -0
  88. package/rcf/code-nodes/cn-057.json +14 -0
  89. package/rcf/fbs/fbs-001.json +49 -0
  90. package/rcf/fbs/fbs-002.json +42 -0
  91. package/rcf/fbs/fbs-003.json +37 -0
  92. package/rcf/fbs/fbs-004.json +39 -0
  93. package/rcf/fbs/fbs-005.json +38 -0
  94. package/rcf/fbs/fbs-006.json +48 -0
  95. package/rcf/fbs/fbs-007.json +39 -0
  96. package/rcf/fbs/fbs-008.json +40 -0
  97. package/rcf/fbs/fbs-009.json +36 -0
  98. package/rcf/fbs/fbs-010.json +41 -0
  99. package/rcf/fbs/fbs-011.json +36 -0
  100. package/rcf/fbs/fbs-012.json +46 -0
  101. package/rcf/fbs/fbs-013.json +42 -0
  102. package/rcf/fbs/fbs-014.json +49 -0
  103. package/rcf/fbs/fbs-015.json +32 -0
  104. package/rcf/manifest.json +17 -0
  105. package/rcf/prd.json +47 -0
  106. package/rcf/requirements/req-001.json +19 -0
  107. package/rcf/requirements/req-002.json +19 -0
  108. package/rcf/requirements/req-003.json +19 -0
  109. package/rcf/requirements/req-004.json +19 -0
  110. package/rcf/requirements/req-005.json +19 -0
  111. package/rcf/requirements/req-006.json +19 -0
  112. package/rcf/requirements/req-007.json +19 -0
  113. package/rcf/requirements/req-008.json +19 -0
  114. package/rcf/requirements/req-009.json +19 -0
  115. package/rcf/tacs/tac-001.json +45 -0
  116. package/rcf/tacs/tac-002.json +109 -0
  117. package/rcf/tacs/tac-003.json +40 -0
  118. package/rcf/tacs/tac-004.json +51 -0
  119. package/rcf/tacs/tac-005.json +52 -0
  120. package/rcf/tacs/tac-006.json +104 -0
  121. package/rcf/tacs/tac-007.json +38 -0
  122. package/rcf/tacs/tac-008.json +51 -0
  123. package/rcf/tad.json +51 -0
  124. package/rcf/test-suites/PENDING.md +23 -0
  125. package/rcf/test-suites/ts-001.json +38 -0
  126. package/rcf/test-suites/ts-002.json +38 -0
  127. package/rcf/test-suites/ts-003.json +43 -0
  128. package/rcf/test-suites/ts-004.json +44 -0
  129. package/rcf/test-suites/ts-005.json +30 -0
  130. package/rcf/test-suites/ts-006.json +36 -0
  131. package/rcf/test-suites/ts-007.json +43 -0
  132. package/rcf/test-suites/ts-008.json +37 -0
  133. package/rcf/test-suites/ts-009.json +38 -0
  134. package/rcf/test-suites/ts-010.json +38 -0
  135. package/rcf/test-suites/ts-011.json +44 -0
  136. package/rcf/test-suites/ts-012.json +36 -0
  137. package/rcf/test-suites/ts-013.json +38 -0
  138. package/rcf/test-suites/ts-014.json +38 -0
  139. package/rcf/test-suites/ts-015.json +38 -0
  140. package/rcf/test-suites/ts-016.json +37 -0
  141. package/rcf/test-suites/ts-017.json +38 -0
  142. package/rcf/test-suites/ts-018.json +38 -0
  143. package/rcf/test-suites/ts-019.json +37 -0
  144. package/rcf/test-suites/ts-020.json +46 -0
  145. package/rcf/test-suites/ts-021.json +46 -0
  146. package/rcf/test-suites/ts-022.json +46 -0
  147. package/rcf/test-suites/ts-023.json +46 -0
  148. package/rcf/test-suites/ts-024.json +46 -0
  149. package/rcf/test-suites/ts-025.json +52 -0
  150. package/rcf/user-stories/us-101.json +40 -0
  151. package/rcf/user-stories/us-102.json +40 -0
  152. package/rcf/user-stories/us-201.json +40 -0
  153. package/rcf/user-stories/us-202.json +40 -0
  154. package/rcf/user-stories/us-203.json +32 -0
  155. package/rcf/user-stories/us-301.json +40 -0
  156. package/rcf/user-stories/us-302.json +40 -0
  157. package/rcf/user-stories/us-303.json +40 -0
  158. package/rcf/user-stories/us-304.json +40 -0
  159. package/rcf/user-stories/us-401.json +40 -0
  160. package/rcf/user-stories/us-402.json +40 -0
  161. package/rcf/user-stories/us-403.json +40 -0
  162. package/rcf/user-stories/us-501.json +40 -0
  163. package/rcf/user-stories/us-502.json +40 -0
  164. package/rcf/user-stories/us-503.json +40 -0
  165. package/rcf/user-stories/us-601.json +40 -0
  166. package/rcf/user-stories/us-602.json +40 -0
  167. package/rcf/user-stories/us-701.json +40 -0
  168. package/rcf/user-stories/us-702.json +40 -0
  169. package/rcf/user-stories/us-801.json +49 -0
  170. package/rcf/user-stories/us-802.json +49 -0
  171. package/rcf/user-stories/us-803.json +49 -0
  172. package/rcf/user-stories/us-804.json +49 -0
  173. package/rcf/user-stories/us-805.json +49 -0
  174. package/rcf/user-stories/us-901.json +40 -0
  175. package/src/.gitkeep +0 -0
  176. package/src/browser-verify/auth-smoke.js +109 -0
  177. package/src/browser-verify/index.js +29 -0
  178. package/src/browser-verify/invariants.js +336 -0
  179. package/src/browser-verify/manifest-writer.js +189 -0
  180. package/src/browser-verify/runner.js +171 -0
  181. package/src/build/bundle.js +198 -0
  182. package/src/build/formatters/json.js +18 -0
  183. package/src/build/formatters/markdown.js +406 -0
  184. package/src/build/index.js +14 -0
  185. package/src/build/mark.js +177 -0
  186. package/src/build/queue.js +285 -0
  187. package/src/cli/browser-verify.js +231 -0
  188. package/src/cli/build.js +584 -0
  189. package/src/cli/coverage.js +219 -0
  190. package/src/cli/create.js +355 -0
  191. package/src/cli/delete.js +127 -0
  192. package/src/cli/design.js +353 -0
  193. package/src/cli/doctor.js +548 -0
  194. package/src/cli/fbs.js +171 -0
  195. package/src/cli/finalise.js +377 -0
  196. package/src/cli/guidance.js +206 -0
  197. package/src/cli/help.js +156 -0
  198. package/src/cli/impact.js +119 -0
  199. package/src/cli/init.js +282 -0
  200. package/src/cli/intake.js +153 -0
  201. package/src/cli/link.js +128 -0
  202. package/src/cli/mcp.js +160 -0
  203. package/src/cli/preflight.js +220 -0
  204. package/src/cli/read.js +162 -0
  205. package/src/cli/req-baseline.js +269 -0
  206. package/src/cli/req-classify.js +135 -0
  207. package/src/cli/review.js +295 -0
  208. package/src/cli/test-suite.js +216 -0
  209. package/src/cli/trace.js +172 -0
  210. package/src/cli/ui-baseline.js +292 -0
  211. package/src/cli/ui-classify.js +108 -0
  212. package/src/cli/update.js +197 -0
  213. package/src/cli/validate.js +168 -0
  214. package/src/cli/view.js +452 -0
  215. package/src/core/baseline-catalog/data/auth.json +42 -0
  216. package/src/core/baseline-catalog/data/http-api.json +42 -0
  217. package/src/core/baseline-catalog/data/notifications.json +33 -0
  218. package/src/core/baseline-catalog/data/persistence.json +33 -0
  219. package/src/core/baseline-catalog/data/web-ui.json +60 -0
  220. package/src/core/baseline-catalog/index.js +121 -0
  221. package/src/core/errors/index.js +167 -0
  222. package/src/core/fixtures/register-canary/canary-prompt-01.json +18 -0
  223. package/src/core/fixtures/register-canary/canary-prompt-02.json +21 -0
  224. package/src/core/fixtures/register-canary/canary-prompt-03.json +17 -0
  225. package/src/core/isolation/index.js +60 -0
  226. package/src/core/mcp/framing.js +103 -0
  227. package/src/core/mcp/index.js +8 -0
  228. package/src/core/mcp/server.js +228 -0
  229. package/src/core/patterns/register-canary.js +209 -0
  230. package/src/core/patterns/req-shapes.js +158 -0
  231. package/src/core/patterns/services.js +358 -0
  232. package/src/core/patterns/ui-shapes.js +166 -0
  233. package/src/core/store/cn-resolve.js +134 -0
  234. package/src/core/store/derive-deps.js +93 -0
  235. package/src/core/store/ids.js +78 -0
  236. package/src/core/store/index.js +20 -0
  237. package/src/core/store/init.js +255 -0
  238. package/src/core/store/loader.js +211 -0
  239. package/src/core/store/tp-resolve.js +176 -0
  240. package/src/core/store/validator.js +191 -0
  241. package/src/core/store/walker.js +898 -0
  242. package/src/core/store/writer.js +1849 -0
  243. package/src/design/index.js +11 -0
  244. package/src/design/writer.js +271 -0
  245. package/src/finalise/detect.js +129 -0
  246. package/src/finalise/index.js +17 -0
  247. package/src/finalise/ingest.js +119 -0
  248. package/src/finalise/install.js +119 -0
  249. package/src/finalise/ship-without-verified.js +131 -0
  250. package/src/finalise/spawn.js +84 -0
  251. package/src/intake/fidelity.js +105 -0
  252. package/src/intake/index.js +6 -0
  253. package/src/intake/manifest-writer.js +100 -0
  254. package/src/intake/orchestrator.js +138 -0
  255. package/src/intake/validate.js +80 -0
  256. package/src/mcp/map-errors.js +131 -0
  257. package/src/mcp/prompts.js +49 -0
  258. package/src/mcp/resources.js +244 -0
  259. package/src/mcp/tools.js +1204 -0
  260. package/src/preflight/design-shapes.js +185 -0
  261. package/src/preflight/index.js +90 -0
  262. package/src/preflight/manifest-writer.js +264 -0
  263. package/src/preflight/scanner.js +206 -0
  264. package/src/preflight/secrets.js +134 -0
  265. package/src/preflight/session.js +246 -0
  266. package/src/query/attestation.js +285 -0
  267. package/src/query/coverage.js +308 -0
  268. package/src/query/formatters/json.js +21 -0
  269. package/src/query/formatters/mermaid.js +209 -0
  270. package/src/query/formatters/table.js +203 -0
  271. package/src/query/impact.js +173 -0
  272. package/src/query/index.js +9 -0
  273. package/src/query/trace.js +345 -0
  274. package/src/register-canary/fixture-loader.js +87 -0
  275. package/src/register-canary/index.js +10 -0
  276. package/src/register-canary/record-writer.js +132 -0
  277. package/src/register-canary/runner.js +156 -0
  278. package/src/req-baseline/gate.js +86 -0
  279. package/src/req-baseline/index.js +27 -0
  280. package/src/req-baseline/open-candidates.js +143 -0
  281. package/src/req-baseline/opt-out.js +195 -0
  282. package/src/req-baseline/sweep.js +230 -0
  283. package/src/req-detection/classifier.js +181 -0
  284. package/src/req-detection/index.js +9 -0
  285. package/src/req-detection/persist.js +55 -0
  286. package/src/review/index.js +325 -0
  287. package/src/review/mutation.js +117 -0
  288. package/src/review/ui-baseline-drift.js +138 -0
  289. package/src/server/index.js +178 -0
  290. package/src/server/routes.js +110 -0
  291. package/src/server/sse.js +118 -0
  292. package/src/setup/agent-setup.js +362 -0
  293. package/src/setup/identity-seed.js +104 -0
  294. package/src/setup/knowledge-seed.js +123 -0
  295. package/src/setup/managed-block.js +193 -0
  296. package/src/setup/managed-gitignore.js +166 -0
  297. package/src/setup/managed-markers.js +49 -0
  298. package/src/ui-baseline/defaults.js +119 -0
  299. package/src/ui-baseline/index.js +25 -0
  300. package/src/ui-baseline/manifest-writer.js +282 -0
  301. package/src/ui-baseline/session.js +178 -0
  302. package/src/ui-detection/classifier.js +192 -0
  303. package/src/verify/chain/index.js +190 -0
  304. package/src/verify/cli/cleanup.js +61 -0
  305. package/src/verify/cli/help.js +56 -0
  306. package/src/verify/cli/mcp.js +98 -0
  307. package/src/verify/cli/provision.js +71 -0
  308. package/src/verify/cli/report.js +71 -0
  309. package/src/verify/cli/run.js +155 -0
  310. package/src/verify/engine/brief.js +87 -0
  311. package/src/verify/engine/index.js +177 -0
  312. package/src/verify/engine/launcher.js +307 -0
  313. package/src/verify/mcp/tools.js +107 -0
  314. package/src/verify/profile/index.js +146 -0
  315. package/src/verify/provision/index.js +256 -0
  316. package/src/verify/report/index.js +139 -0
  317. package/src/verify/report/renderer.js +118 -0
  318. package/src/verify/verdict/index.js +246 -0
  319. package/src/view/doc-renderers/adr.js +44 -0
  320. package/src/view/doc-renderers/build-sequence.js +40 -0
  321. package/src/view/doc-renderers/fbs.js +128 -0
  322. package/src/view/doc-renderers/helpers.js +159 -0
  323. package/src/view/doc-renderers/index.js +12 -0
  324. package/src/view/doc-renderers/prd.js +45 -0
  325. package/src/view/doc-renderers/req.js +43 -0
  326. package/src/view/doc-renderers/tac.js +38 -0
  327. package/src/view/doc-renderers/tad.js +74 -0
  328. package/src/view/doc-renderers/test-suite.js +45 -0
  329. package/src/view/doc-renderers/user-story.js +63 -0
  330. package/src/view/html-page.js +462 -0
  331. package/src/view/index.js +63 -0
  332. package/src/view/live-client.js +338 -0
  333. package/src/view/mermaid-diagram.js +178 -0
  334. package/src/view/style.css +735 -0
  335. package/src/view/tree-model.js +152 -0
  336. package/src/view/vendored/mermaid.min.js +2607 -0
  337. package/src/view-supervisor/index.js +26 -0
  338. package/src/view-supervisor/logs.js +32 -0
  339. package/src/view-supervisor/manifest-writer.js +178 -0
  340. package/src/view-supervisor/persist-until.js +85 -0
  341. package/src/view-supervisor/supervisor.js +276 -0
  342. package/src/watch/index.js +152 -0
@@ -0,0 +1,49 @@
1
+ {
2
+ "createdAt": "2026-07-20T17:05:46.941Z",
3
+ "updatedAt": "2026-07-20T17:05:46.941Z",
4
+ "summary": "Harden the build-cycle guidance so every build lands a documented local preview as its default outcome, every verification claim names the runtime it was checked against, and the method carries interim fresh-context self-review guidance. Edits the build-cycle playbook, the build-cycle contract and the harness fragment; no runtime subsystem.",
5
+ "approach": "In the build-cycle guidance, make a working, documented local preview loop (dev server, seeded data where needed, ideally one command) a required, hosting-independent part of a build's definition of done. Require every 'verified'/'tested' claim - in the Test and Finalise stages and in the PR body's verification section - to name the runtime it was checked against, forbid any claim implying deploy-runtime verification that did not happen, and add an explicit labelled-claim example. Add an interim self-review section describing a periodic and end-of-build fresh-context reviewer dispatch that drives the app against its ACs, targeting session-class bugs, false-promise UI, runtime mismatch, dead auth paths and dead code, scoped honestly as a stopgap until rcf-verify-lite and explicitly not the independent gate. Add matching harness-fragment rules and extend the guidance drift tests.",
6
+ "deliverables": [
7
+ "Build-cycle guidance: local preview loop as default, hosting-independent definition-of-done item",
8
+ "Build-cycle and PR-authoring guidance: runtime-provenance labelling with a worked example",
9
+ "Build-cycle guidance: interim self-review section, honestly scoped away from the independent gate",
10
+ "Harness fragment rules and guidance drift tests for the new invariants"
11
+ ],
12
+ "estimatedSize": "large",
13
+ "estimatedHours": 12,
14
+ "riskLevel": "medium",
15
+ "domain": "guidance",
16
+ "notes": "Implements US-801, US-804 and US-805. Targets the build/verification surface; pairs with FBS-013 on the elicitation surface. Self-review is guidance/docs only, not a new subsystem (ADR-009).",
17
+ "contextRequirements": {
18
+ "tacIds": [
19
+ "TAC-008",
20
+ "TAC-005"
21
+ ],
22
+ "adrIds": [
23
+ "ADR-006",
24
+ "ADR-008",
25
+ "ADR-009"
26
+ ]
27
+ },
28
+ "acIds": [
29
+ "AC-801-1",
30
+ "AC-801-2",
31
+ "AC-801-3",
32
+ "AC-801-4",
33
+ "AC-804-1",
34
+ "AC-804-2",
35
+ "AC-804-3",
36
+ "AC-804-4",
37
+ "AC-805-1",
38
+ "AC-805-2",
39
+ "AC-805-3",
40
+ "AC-805-4"
41
+ ],
42
+ "fbsId": "FBS-014",
43
+ "prdId": "PRD-001",
44
+ "bsId": "BS-001",
45
+ "buildOrder": 14,
46
+ "executionStatus": "notStarted",
47
+ "title": "Local-preview default, runtime-honest verification, interim self-review",
48
+ "dependsOnFbsIds": []
49
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "fbsId": "FBS-015",
3
+ "prdId": "PRD-001",
4
+ "bsId": "BS-001",
5
+ "buildOrder": 15,
6
+ "executionStatus": "complete",
7
+ "title": "`rcf verify` subcommand routing (0.7.1 consolidation)",
8
+ "summary": "Route the adversarial ship-gate verifier under the unified `rcf` CLI as `rcf verify <run|report|provision|cleanup|mcp>`. The pre-existing `rcf-verify` bin becomes a transition-grace alias that dispatches through the same handlers and emits a one-line stderr deprecation notice when invoked directly.",
9
+ "approach": "One dispatcher, two entry points. bin/rcf.js imports the `main` export from bin/rcf-verify.js and registers it as the `verify` entry on the top-level SUBCOMMANDS map, so `rcf verify --help` and `rcf-verify --help` share the same code path by construction. The alias bin gains a deprecation notice guarded by RCF_QUIET for scripted callers. The unified CLI's help output lists `verify <verb>` alongside the other top-level commands, sourced from the same verify TOP_LEVEL_HELP the alias bin uses (single-source rule).",
10
+ "deliverables": [
11
+ "bin/rcf.js: `verify` on the top-level SUBCOMMANDS map, dispatching to the alias bin's exported main",
12
+ "bin/rcf-verify.js: one-line stderr deprecation notice on direct invocation, suppressible via RCF_QUIET",
13
+ "src/cli/help.js: `verify <verb>` listed in the top-level command table; `help verify` prints the alias bin's TOP_LEVEL_HELP block"
14
+ ],
15
+ "estimatedSize": "small",
16
+ "estimatedHours": 1,
17
+ "riskLevel": "low",
18
+ "domain": "cli",
19
+ "notes": "Ratified in the 2026-08-06 packaging-consolidation proposal (R3). Pure repackage relative to 0.7.0 verify behaviour; the invocation form gains a canonical route, existing scripts keep working via the alias.",
20
+ "contextRequirements": {
21
+ "tacIds": [],
22
+ "adrIds": []
23
+ },
24
+ "acIds": [
25
+ "AC-901-1",
26
+ "AC-901-2",
27
+ "AC-901-3"
28
+ ],
29
+ "dependsOnFbsIds": [],
30
+ "createdAt": "2026-08-11T00:00:00Z",
31
+ "updatedAt": "2026-08-11T00:00:00Z"
32
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "projectName": "RCF Build Lite",
4
+ "description": "RCF tree for the RCF Build Lite product. Manifest declares the three root documents; every other document is discovered by walking from the roots.",
5
+ "prd": {
6
+ "id": "PRD-001",
7
+ "path": "prd.json"
8
+ },
9
+ "tad": {
10
+ "id": "TAD-001",
11
+ "path": "tad.json"
12
+ },
13
+ "bs": {
14
+ "id": "BS-001",
15
+ "path": "build-sequence.json"
16
+ }
17
+ }
package/rcf/prd.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "prdId": "PRD-001",
3
+ "productName": "RCF Build Lite",
4
+ "version": "0.1.0",
5
+ "status": "draft",
6
+ "executiveSummary": "RCF Build Lite is the tooling product of the RCF suite. It runs the full Requirements Confidence Framework over a project whose RCF documents live in the source repository, alongside the code. It gives a non-engineering product owner deterministic create, read, update and delete operations on every RCF document type, a visual review surface, traceability and query, a build loop that turns build specifications into implementation prompts, and a local MCP surface that exposes all of this to AI tooling.",
7
+ "problemStatement": "Power vibe-coders build real applications without engineering teams. They cannot read code, so they cannot judge whether what an AI tool produces is trustworthy. The full RCF chain makes output trustworthy without reading code, but authoring that chain by hand is the very effort these users lack the time and discipline for. There is no tool that runs the full RCF method over in-repository documents and surfaces it through structured, deterministic operations.",
8
+ "targetUsers": [
9
+ "Power vibe-coders: product owners, founders and business voices building applications without engineering teams",
10
+ "AI coding tools that need a structured, deterministic surface over a project's RCF documents",
11
+ "Maintainers dogfooding RCF on the Build Lite repository itself"
12
+ ],
13
+ "inScope": [
14
+ "On-disk RCF project structure under a project rcf folder",
15
+ "Visual review surface rendering the whole RCF tree as a diagram and a browsable page",
16
+ "Deterministic create, read, update and delete on every RCF document type",
17
+ "Traceability and query: coverage, trace forward, trace back, impact analysis",
18
+ "SDD build loop: assemble an implementation prompt from a build specification and mark it done on merge",
19
+ "Local stdio MCP surface exposing query, CRUD, view and build to AI tooling",
20
+ "Validation of every document against the published schema package at every boundary",
21
+ "Deploy-aware, runtime-honest build guidance: a documented local preview as the default build outcome, an early deploy-target question that constrains the stack, and runtime-provenance labels on verification claims"
22
+ ],
23
+ "outOfScope": [
24
+ "The schema package itself, which is the separately published rcf-schemas contract",
25
+ "A hosted service: MCP is local stdio and the CLI is a local binary",
26
+ "A web application with a server, authentication or a database",
27
+ "Language-agnostic tooling: Build Lite is Node 24 ESM",
28
+ "The one-off v1 to v2 migration script, which is not a product feature",
29
+ "Generation of executable test code: verification artefacts accrue per implementation phase"
30
+ ],
31
+ "objectives": [
32
+ "Make the full RCF chain usable with minimal user effort while keeping the method full-strength",
33
+ "Guarantee the in-repository differentiator by operating directly on local files as the source of truth",
34
+ "Keep every RCF document valid against the published schemas at all times",
35
+ "Surface the whole tree visually so a non-coder can review what is being built in their name",
36
+ "Stay harness-agnostic so the tooling survives a change of AI harness"
37
+ ],
38
+ "constraints": [
39
+ "Node 24 ESM, plain JavaScript, no TypeScript pin",
40
+ "Apache 2.0 license",
41
+ "Depends on the published rcf-schemas package as an external contract",
42
+ "Local filesystem is the source of truth; no network source of truth",
43
+ "MCP transport is local stdio only"
44
+ ],
45
+ "createdAt": "2026-06-25T00:00:00Z",
46
+ "updatedAt": "2026-07-20T17:56:57.237Z"
47
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-001",
3
+ "prdId": "PRD-001",
4
+ "title": "On-disk RCF project structure",
5
+ "description": "Build Lite initialises and maintains a project's RCF documents on the local filesystem, under a top-level rcf folder, with the project manifest declaring the three root documents (PRD, TAD, Build Sequence) and every other document discovered by walking from the roots. The local files are the single source of truth; no external store mirrors them.",
6
+ "category": "functional",
7
+ "domain": "projectStructure",
8
+ "priority": "must",
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
+ "tags": [
11
+ "structure",
12
+ "manifest",
13
+ "filesystem"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-002",
3
+ "prdId": "PRD-001",
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.",
6
+ "category": "functional",
7
+ "domain": "view",
8
+ "priority": "must",
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
+ "tags": [
11
+ "view",
12
+ "diagram",
13
+ "review"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-003",
3
+ "prdId": "PRD-001",
4
+ "title": "Deterministic create, read, update and delete over RCF documents",
5
+ "description": "Build Lite provides deterministic create, read, update and delete operations for every RCF document type, operating directly on the local files. Operations are structural and predictable so an AI agent cannot fudge document shape: each operation validates before it writes and reports a clear error on failure.",
6
+ "category": "functional",
7
+ "domain": "crud",
8
+ "priority": "must",
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
+ "tags": [
11
+ "crud",
12
+ "cli",
13
+ "validation"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-004",
3
+ "prdId": "PRD-001",
4
+ "title": "Traceability and query over the RCF chain",
5
+ "description": "Build Lite answers traceability questions over the RCF chain: coverage (which requirements lack stories, which acceptance criteria lack tests), trace forward (from a PRD or requirement down to acceptance criteria and tests), trace back (from a test or acceptance criterion up to its requirement and PRD), and impact analysis (what is affected if a given document changes). Queries walk the chain from the on-disk tree.",
6
+ "category": "functional",
7
+ "domain": "traceability",
8
+ "priority": "must",
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
+ "tags": [
11
+ "traceability",
12
+ "query",
13
+ "coverage"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-005",
3
+ "prdId": "PRD-001",
4
+ "title": "Specification-driven build loop",
5
+ "description": "Build Lite turns a Functional Build Specification into a single implementation prompt by walking the FBS, its acceptance criteria (to the parent user stories), and its declared architectural context (referenced TACs and ADRs), then assembles a markdown prompt for a coding agent. It marks a build slice done when the slice is finished.",
6
+ "category": "functional",
7
+ "domain": "build",
8
+ "priority": "must",
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
+ "tags": [
11
+ "build",
12
+ "sdd",
13
+ "fbs"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-006",
3
+ "prdId": "PRD-001",
4
+ "title": "Local MCP surface over the full feature set",
5
+ "description": "Build Lite exposes its query, CRUD, view and build operations through a local stdio MCP server, so an AI harness can drive the whole feature set as structured tools. The MCP server is a thin adapter over the same operations the CLI uses; it carries no behaviour the core does not already own.",
6
+ "category": "functional",
7
+ "domain": "mcp",
8
+ "priority": "should",
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
+ "tags": [
11
+ "mcp",
12
+ "harness",
13
+ "stdio"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-007",
3
+ "prdId": "PRD-001",
4
+ "title": "Validation at every boundary",
5
+ "description": "Every RCF document is validated against the published schema package on load and before persist. No operation writes an invalid document. Validation failures are reported as clear, structured errors that name the offending field and the rule it broke.",
6
+ "category": "nonFunctional",
7
+ "domain": "quality",
8
+ "priority": "must",
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
+ "tags": [
11
+ "validation",
12
+ "quality",
13
+ "schemas"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-06-25T00:00:00Z",
18
+ "updatedAt": "2026-06-25T00:00:00Z"
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "createdAt": "2026-07-20T17:01:21.557Z",
3
+ "updatedAt": "2026-07-28T16:40:04.361Z",
4
+ "category": "functional",
5
+ "priority": "must",
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.",
7
+ "rationale": "The five-run rcf-persona-testing programme (concluded 2026-07-20) found the tool builds excellently at every level but its own loop missed a ship-blocking or user-facing defect in three of five runs, with a single root cause: the deploy runtime is absent from the loop. It is absent from elicitation (runs 03/04 chose Cloudflare-incompatible stacks a CF-only holder cannot host, run 03 silently) and absent from verification (run 05 shipped a production auth 500 while 89/89 tests were green and the tool claimed a live-Worker verification its E2E never ran). The target user cannot diagnose 'wrong stack for your host' or 'verified against the wrong runtime', so the method itself must foreclose both. These are Tier-1 hardening fixes to make the base offering usable now, while the productised independent verification gate (rcf-verify-lite) is built separately.",
8
+ "reqId": "REQ-008",
9
+ "prdId": "PRD-001",
10
+ "title": "Deploy-aware, runtime-honest build guidance",
11
+ "domain": "guidance",
12
+ "version": "0.1.0",
13
+ "status": "draft",
14
+ "tags": [
15
+ "guidance",
16
+ "deploy",
17
+ "verification"
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "reqId": "REQ-009",
3
+ "prdId": "PRD-001",
4
+ "title": "Umbrella CLI: verify as a first-class subcommand",
5
+ "description": "Post 0.7.1 packaging consolidation the RCF Lite suite ships as one npm package with one unified `rcf` CLI. The adversarial ship-gate verifier that used to live behind its own `rcf-verify` bin is mounted as `rcf verify <run|report|provision|cleanup|mcp>` on that unified CLI. The pre-existing `rcf-verify` bin remains as a transition-grace alias that dispatches through the same handlers, deprecated in favour of `rcf verify`. Behaviour of each verify verb is unchanged; only the invocation form gains a canonical route.",
6
+ "category": "functional",
7
+ "domain": "cli",
8
+ "priority": "must",
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
+ "tags": [
11
+ "packaging",
12
+ "cli",
13
+ "verify"
14
+ ],
15
+ "version": "0.1.0",
16
+ "status": "draft",
17
+ "createdAt": "2026-08-11T00:00:00Z",
18
+ "updatedAt": "2026-08-11T00:00:00Z"
19
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "tacId": "TAC-001",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Document store",
8
+ "purpose": "Own all reads, validation and writes of RCF documents on the local filesystem, and be the only component that touches the rcf tree.",
9
+ "responsibilities": [
10
+ "Resolve a document file path from a document id by convention",
11
+ "Load and parse a document and validate it against its schema",
12
+ "Walk from the roots to assemble the full in-memory tree",
13
+ "Persist a document only after it validates",
14
+ "Surface broken references and schema failures as structured errors"
15
+ ],
16
+ "internalStructure": "A loader resolves ids to paths and parses JSON. A validator wraps the published schema bundle and is registered once at start-up. A writer serialises and persists. A tree walker reads the manifest roots and follows the parent id lists to build the full document set in memory.",
17
+ "interfaces": [
18
+ {
19
+ "name": "loadDocument",
20
+ "kind": "function",
21
+ "description": "Resolve an id to a path, parse and validate, return the document or a structured error."
22
+ },
23
+ {
24
+ "name": "saveDocument",
25
+ "kind": "function",
26
+ "description": "Validate then persist a document; refuse to write if validation fails."
27
+ },
28
+ {
29
+ "name": "walkTree",
30
+ "kind": "function",
31
+ "description": "From the manifest roots, resolve every child by id and return the full tree."
32
+ }
33
+ ],
34
+ "dependencies": [
35
+ {
36
+ "name": "rcf-schemas",
37
+ "kind": "external",
38
+ "description": "The published schema package the validator registers at start-up."
39
+ }
40
+ ],
41
+ "tradeoffs": "Centralising all filesystem access in one component costs a small amount of indirection but guarantees that no consumer can write an unvalidated document or bypass the source-of-truth rule.",
42
+ "notes": "The store is intentionally synchronous where possible; a local CLI does not benefit from streaming and synchronous code is easier for contributors to follow.",
43
+ "createdAt": "2026-06-25T00:00:00Z",
44
+ "updatedAt": "2026-06-25T00:00:00Z"
45
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "tacId": "TAC-002",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "CLI binary",
8
+ "purpose": "The rcf command-line entry point. Map verbs to store, query, view or build operations and render results and errors for a terminal.",
9
+ "responsibilities": [
10
+ "Parse command-line arguments and route each verb to the matching core operation",
11
+ "Render results as readable terminal output by default",
12
+ "Honour quiet and verbose flags for scripting and diagnostics",
13
+ "Surface structured errors as human-readable messages with the underlying detail available"
14
+ ],
15
+ "internalStructure": "A small command router maps each verb (init, view, read, create, update, delete, coverage, trace, impact, build, validate) to a function in the store, query, view or build adapter. A formatter renders results for a terminal.",
16
+ "interfaces": [
17
+ {
18
+ "name": "init",
19
+ "kind": "command",
20
+ "description": "Initialise a new RCF project on disk."
21
+ },
22
+ {
23
+ "name": "view",
24
+ "kind": "command",
25
+ "description": "Generate the diagram and the static page."
26
+ },
27
+ {
28
+ "name": "read",
29
+ "kind": "command",
30
+ "description": "Read a document by id."
31
+ },
32
+ {
33
+ "name": "create",
34
+ "kind": "command",
35
+ "description": "Create a document with parent linkage."
36
+ },
37
+ {
38
+ "name": "update",
39
+ "kind": "command",
40
+ "description": "Update fields on a document."
41
+ },
42
+ {
43
+ "name": "delete",
44
+ "kind": "command",
45
+ "description": "Delete a document with reference safety."
46
+ },
47
+ {
48
+ "name": "coverage",
49
+ "kind": "command",
50
+ "description": "Report coverage gaps across the tree."
51
+ },
52
+ {
53
+ "name": "trace",
54
+ "kind": "command",
55
+ "description": "Trace forward or back along the intent chain."
56
+ },
57
+ {
58
+ "name": "impact",
59
+ "kind": "command",
60
+ "description": "Report what is affected by a document change."
61
+ },
62
+ {
63
+ "name": "build",
64
+ "kind": "command",
65
+ "description": "Assemble a build prompt or mark a slice done."
66
+ },
67
+ {
68
+ "name": "validate",
69
+ "kind": "command",
70
+ "description": "Validate every document and list broken references."
71
+ }
72
+ ],
73
+ "dependencies": [
74
+ {
75
+ "name": "Document store",
76
+ "kind": "tac",
77
+ "tacId": "TAC-001",
78
+ "description": "All filesystem access goes through the store."
79
+ },
80
+ {
81
+ "name": "View renderer",
82
+ "kind": "tac",
83
+ "tacId": "TAC-003",
84
+ "description": "The view verb routes to the renderer."
85
+ },
86
+ {
87
+ "name": "Query engine",
88
+ "kind": "tac",
89
+ "tacId": "TAC-004",
90
+ "description": "The coverage, trace and impact verbs route to the query engine."
91
+ },
92
+ {
93
+ "name": "Build adapter",
94
+ "kind": "tac",
95
+ "tacId": "TAC-005",
96
+ "description": "The build verbs route to the build adapter."
97
+ },
98
+ {
99
+ "name": "Error and reporting",
100
+ "kind": "tac",
101
+ "tacId": "TAC-007",
102
+ "description": "Structured errors are rendered consistently."
103
+ }
104
+ ],
105
+ "tradeoffs": "A single binary keeps the install and discovery story simple; a fragmented set of binaries would be more orthogonal but is overkill for a single project.",
106
+ "notes": "Verbs are kept close to the spoken vocabulary of the method so a non-coder can guess the command from the document type.",
107
+ "createdAt": "2026-06-25T00:00:00Z",
108
+ "updatedAt": "2026-06-25T00:00:00Z"
109
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "tacId": "TAC-003",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "View renderer",
8
+ "purpose": "Produce the diagram source and the static browsable page from a loaded RCF tree, with broken references marked visibly and no server required.",
9
+ "responsibilities": [
10
+ "Build a diagram from the chain edges between documents",
11
+ "Render each document as a readable section, not raw JSON",
12
+ "Mark broken references visibly in both diagram and page",
13
+ "Write static output files that open in a browser with no server process"
14
+ ],
15
+ "internalStructure": "A diagram builder walks the loaded tree and emits Mermaid source. A page builder renders each document into a templated HTML section and links between them by id. Output is written to a fixed view directory at the project root.",
16
+ "interfaces": [
17
+ {
18
+ "name": "renderDiagram",
19
+ "kind": "function",
20
+ "description": "Emit the diagram source for the whole tree."
21
+ },
22
+ {
23
+ "name": "renderPage",
24
+ "kind": "function",
25
+ "description": "Write the static browsable page to the view output directory."
26
+ }
27
+ ],
28
+ "dependencies": [
29
+ {
30
+ "name": "Document store",
31
+ "kind": "tac",
32
+ "tacId": "TAC-001",
33
+ "description": "The renderer reads the loaded tree only through the store."
34
+ }
35
+ ],
36
+ "tradeoffs": "Mermaid is locked as the diagram format because it renders without a runtime and ships everywhere; a pluggable renderer would add an interface for a benefit the product does not yet need.",
37
+ "notes": "The fixed output directory keeps the configuration surface zero and the output discoverable.",
38
+ "createdAt": "2026-06-25T00:00:00Z",
39
+ "updatedAt": "2026-06-25T00:00:00Z"
40
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "tacId": "TAC-004",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Query engine",
8
+ "purpose": "Answer traceability questions over a loaded RCF tree without ever traversing the FBS layer.",
9
+ "responsibilities": [
10
+ "Compute coverage gaps across requirements, stories, criteria and tests",
11
+ "Trace forward from any document to its descendants along the intent chain",
12
+ "Trace back from any document to its ancestors along the intent chain",
13
+ "Compute impact sets across the intent chain and the architecture references on FBS",
14
+ "Never walk the FBS layer when computing intent-chain traces"
15
+ ],
16
+ "internalStructure": "A walker traverses the chain (PRD to REQ to US to AC to TS to TC) by id. Coverage and trace operations are layered over the walker. Impact analysis additionally inspects FBS contextRequirements references.",
17
+ "interfaces": [
18
+ {
19
+ "name": "coverage",
20
+ "kind": "function",
21
+ "description": "Report coverage gaps across the tree."
22
+ },
23
+ {
24
+ "name": "traceForward",
25
+ "kind": "function",
26
+ "description": "Trace from a document to its descendants along the intent chain."
27
+ },
28
+ {
29
+ "name": "traceBack",
30
+ "kind": "function",
31
+ "description": "Trace from a document back to its ancestors along the intent chain."
32
+ },
33
+ {
34
+ "name": "impact",
35
+ "kind": "function",
36
+ "description": "Compute the impact set of a change to a given document."
37
+ }
38
+ ],
39
+ "dependencies": [
40
+ {
41
+ "name": "Document store",
42
+ "kind": "tac",
43
+ "tacId": "TAC-001",
44
+ "description": "All traversal reads through the store."
45
+ }
46
+ ],
47
+ "tradeoffs": "A general graph engine would be more expressive but the intent chain is small and a hand-rolled walker is easier to reason about and to keep correct.",
48
+ "notes": "Keeping the FBS out of intent traces is a load-bearing design rule, not an optimisation.",
49
+ "createdAt": "2026-06-25T00:00:00Z",
50
+ "updatedAt": "2026-06-25T00:00:00Z"
51
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "tacId": "TAC-005",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Build adapter",
8
+ "purpose": "Walk an FBS and its references to assemble an implementation prompt, compute the dependency-respecting build order, and mark slices done.",
9
+ "responsibilities": [
10
+ "Walk acceptance criteria in acIds to their parent user stories",
11
+ "Walk referenced TACs and ADRs and include their relevant content",
12
+ "Assemble a single markdown prompt for the named FBS",
13
+ "Topologically sort the FBS dependency graph and detect cycles",
14
+ "Advance FBS execution status and the matching Build Sequence slot status when a slice is marked done"
15
+ ],
16
+ "internalStructure": "A prompt assembler composes a markdown document from the FBS, its acceptance criteria and the referenced architecture documents. A sorter computes the build order from FBS dependency lists. A mark-done operation updates execution status fields and writes through the store.",
17
+ "interfaces": [
18
+ {
19
+ "name": "assemblePrompt",
20
+ "kind": "function",
21
+ "description": "Assemble the implementation prompt for a named FBS."
22
+ },
23
+ {
24
+ "name": "buildOrder",
25
+ "kind": "function",
26
+ "description": "Compute the dependency-respecting order and parallel-safe groups."
27
+ },
28
+ {
29
+ "name": "markDone",
30
+ "kind": "function",
31
+ "description": "Advance the FBS and slot status when a slice is finished."
32
+ }
33
+ ],
34
+ "dependencies": [
35
+ {
36
+ "name": "Document store",
37
+ "kind": "tac",
38
+ "tacId": "TAC-001",
39
+ "description": "Read FBS, AC, TAC and ADR through the store; write status updates through the store."
40
+ },
41
+ {
42
+ "name": "Query engine",
43
+ "kind": "tac",
44
+ "tacId": "TAC-004",
45
+ "description": "Reuse the walker to resolve AC to parent user stories."
46
+ }
47
+ ],
48
+ "tradeoffs": "The prompt is assembled as a single markdown document for simplicity and portability; a richer structured payload would be more flexible but would lock the consumer to a non-portable shape.",
49
+ "notes": "Mark-done is an explicit command so the tool stays offline and harness-agnostic; no PR-watching daemon is required.",
50
+ "createdAt": "2026-06-25T00:00:00Z",
51
+ "updatedAt": "2026-06-25T00:00:00Z"
52
+ }