rcf-lite 0.0.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/CHANGELOG.md +344 -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 +71 -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/admissibility/enforce.js +142 -0
  177. package/src/admissibility/index.js +8 -0
  178. package/src/admissibility/markers.js +104 -0
  179. package/src/admissibility/scope-lint.js +163 -0
  180. package/src/browser-verify/auth-smoke.js +109 -0
  181. package/src/browser-verify/index.js +29 -0
  182. package/src/browser-verify/invariants.js +336 -0
  183. package/src/browser-verify/manifest-writer.js +189 -0
  184. package/src/browser-verify/runner.js +171 -0
  185. package/src/build/bundle.js +198 -0
  186. package/src/build/formatters/json.js +18 -0
  187. package/src/build/formatters/markdown.js +406 -0
  188. package/src/build/index.js +14 -0
  189. package/src/build/mark.js +177 -0
  190. package/src/build/queue.js +285 -0
  191. package/src/cli/browser-verify.js +231 -0
  192. package/src/cli/build.js +584 -0
  193. package/src/cli/coverage.js +219 -0
  194. package/src/cli/create.js +358 -0
  195. package/src/cli/delete.js +127 -0
  196. package/src/cli/design.js +353 -0
  197. package/src/cli/doctor.js +548 -0
  198. package/src/cli/fbs.js +171 -0
  199. package/src/cli/finalise.js +377 -0
  200. package/src/cli/guidance.js +206 -0
  201. package/src/cli/help.js +156 -0
  202. package/src/cli/impact.js +119 -0
  203. package/src/cli/init.js +282 -0
  204. package/src/cli/intake.js +153 -0
  205. package/src/cli/link.js +128 -0
  206. package/src/cli/mcp.js +160 -0
  207. package/src/cli/preflight.js +220 -0
  208. package/src/cli/read.js +168 -0
  209. package/src/cli/req-baseline.js +269 -0
  210. package/src/cli/req-classify.js +135 -0
  211. package/src/cli/review.js +295 -0
  212. package/src/cli/test-suite.js +221 -0
  213. package/src/cli/trace.js +172 -0
  214. package/src/cli/ui-baseline.js +292 -0
  215. package/src/cli/ui-classify.js +108 -0
  216. package/src/cli/update.js +197 -0
  217. package/src/cli/validate.js +168 -0
  218. package/src/cli/view.js +452 -0
  219. package/src/core/baseline-catalog/data/auth.json +42 -0
  220. package/src/core/baseline-catalog/data/http-api.json +42 -0
  221. package/src/core/baseline-catalog/data/notifications.json +33 -0
  222. package/src/core/baseline-catalog/data/persistence.json +33 -0
  223. package/src/core/baseline-catalog/data/web-ui.json +60 -0
  224. package/src/core/baseline-catalog/index.js +121 -0
  225. package/src/core/errors/index.js +167 -0
  226. package/src/core/fixtures/register-canary/canary-prompt-01.json +18 -0
  227. package/src/core/fixtures/register-canary/canary-prompt-02.json +21 -0
  228. package/src/core/fixtures/register-canary/canary-prompt-03.json +17 -0
  229. package/src/core/isolation/index.js +60 -0
  230. package/src/core/mcp/framing.js +103 -0
  231. package/src/core/mcp/index.js +8 -0
  232. package/src/core/mcp/server.js +228 -0
  233. package/src/core/patterns/register-canary.js +209 -0
  234. package/src/core/patterns/req-shapes.js +158 -0
  235. package/src/core/patterns/services.js +358 -0
  236. package/src/core/patterns/ui-shapes.js +166 -0
  237. package/src/core/store/cn-resolve.js +134 -0
  238. package/src/core/store/derive-deps.js +93 -0
  239. package/src/core/store/ids.js +78 -0
  240. package/src/core/store/index.js +20 -0
  241. package/src/core/store/init.js +255 -0
  242. package/src/core/store/loader.js +214 -0
  243. package/src/core/store/tp-resolve.js +176 -0
  244. package/src/core/store/validator.js +191 -0
  245. package/src/core/store/walker.js +944 -0
  246. package/src/core/store/writer.js +1879 -0
  247. package/src/design/index.js +11 -0
  248. package/src/design/writer.js +271 -0
  249. package/src/finalise/detect.js +151 -0
  250. package/src/finalise/index.js +31 -0
  251. package/src/finalise/ingest.js +160 -0
  252. package/src/finalise/install.js +119 -0
  253. package/src/finalise/ship-without-verified.js +131 -0
  254. package/src/finalise/spawn.js +84 -0
  255. package/src/intake/fidelity.js +105 -0
  256. package/src/intake/index.js +6 -0
  257. package/src/intake/manifest-writer.js +100 -0
  258. package/src/intake/orchestrator.js +138 -0
  259. package/src/intake/validate.js +80 -0
  260. package/src/mcp/map-errors.js +131 -0
  261. package/src/mcp/prompts.js +49 -0
  262. package/src/mcp/resources.js +244 -0
  263. package/src/mcp/tools.js +1212 -0
  264. package/src/preflight/design-shapes.js +185 -0
  265. package/src/preflight/index.js +90 -0
  266. package/src/preflight/manifest-writer.js +264 -0
  267. package/src/preflight/scanner.js +206 -0
  268. package/src/preflight/secrets.js +134 -0
  269. package/src/preflight/session.js +246 -0
  270. package/src/query/attestation.js +285 -0
  271. package/src/query/coverage.js +308 -0
  272. package/src/query/formatters/json.js +21 -0
  273. package/src/query/formatters/mermaid.js +209 -0
  274. package/src/query/formatters/table.js +203 -0
  275. package/src/query/impact.js +173 -0
  276. package/src/query/index.js +13 -0
  277. package/src/query/refuse-on-admissibility.js +73 -0
  278. package/src/query/trace.js +345 -0
  279. package/src/register-canary/fixture-loader.js +87 -0
  280. package/src/register-canary/index.js +10 -0
  281. package/src/register-canary/record-writer.js +132 -0
  282. package/src/register-canary/runner.js +156 -0
  283. package/src/req-baseline/gate.js +86 -0
  284. package/src/req-baseline/index.js +27 -0
  285. package/src/req-baseline/open-candidates.js +143 -0
  286. package/src/req-baseline/opt-out.js +195 -0
  287. package/src/req-baseline/sweep.js +230 -0
  288. package/src/req-detection/classifier.js +181 -0
  289. package/src/req-detection/index.js +9 -0
  290. package/src/req-detection/persist.js +55 -0
  291. package/src/review/index.js +325 -0
  292. package/src/review/mutation.js +117 -0
  293. package/src/review/ui-baseline-drift.js +138 -0
  294. package/src/ruleset/index.js +140 -0
  295. package/src/ruleset/ruleset.json +146 -0
  296. package/src/server/index.js +178 -0
  297. package/src/server/routes.js +110 -0
  298. package/src/server/sse.js +118 -0
  299. package/src/setup/agent-setup.js +362 -0
  300. package/src/setup/identity-seed.js +104 -0
  301. package/src/setup/knowledge-seed.js +123 -0
  302. package/src/setup/managed-block.js +193 -0
  303. package/src/setup/managed-gitignore.js +166 -0
  304. package/src/setup/managed-markers.js +49 -0
  305. package/src/ui-baseline/defaults.js +119 -0
  306. package/src/ui-baseline/index.js +25 -0
  307. package/src/ui-baseline/manifest-writer.js +282 -0
  308. package/src/ui-baseline/session.js +178 -0
  309. package/src/ui-detection/classifier.js +192 -0
  310. package/src/verify/chain/index.js +221 -0
  311. package/src/verify/cli/cleanup.js +61 -0
  312. package/src/verify/cli/help.js +56 -0
  313. package/src/verify/cli/mcp.js +98 -0
  314. package/src/verify/cli/provision.js +71 -0
  315. package/src/verify/cli/report.js +71 -0
  316. package/src/verify/cli/run.js +155 -0
  317. package/src/verify/engine/brief.js +87 -0
  318. package/src/verify/engine/index.js +177 -0
  319. package/src/verify/engine/launcher.js +307 -0
  320. package/src/verify/mcp/tools.js +107 -0
  321. package/src/verify/profile/index.js +146 -0
  322. package/src/verify/provision/index.js +256 -0
  323. package/src/verify/report/index.js +139 -0
  324. package/src/verify/report/renderer.js +118 -0
  325. package/src/verify/verdict/index.js +313 -0
  326. package/src/view/doc-renderers/adr.js +44 -0
  327. package/src/view/doc-renderers/build-sequence.js +40 -0
  328. package/src/view/doc-renderers/fbs.js +128 -0
  329. package/src/view/doc-renderers/helpers.js +159 -0
  330. package/src/view/doc-renderers/index.js +12 -0
  331. package/src/view/doc-renderers/prd.js +45 -0
  332. package/src/view/doc-renderers/req.js +43 -0
  333. package/src/view/doc-renderers/tac.js +38 -0
  334. package/src/view/doc-renderers/tad.js +74 -0
  335. package/src/view/doc-renderers/test-suite.js +45 -0
  336. package/src/view/doc-renderers/user-story.js +63 -0
  337. package/src/view/html-page.js +462 -0
  338. package/src/view/index.js +63 -0
  339. package/src/view/live-client.js +338 -0
  340. package/src/view/mermaid-diagram.js +178 -0
  341. package/src/view/style.css +735 -0
  342. package/src/view/tree-model.js +152 -0
  343. package/src/view/vendored/mermaid.min.js +2607 -0
  344. package/src/view-supervisor/index.js +26 -0
  345. package/src/view-supervisor/logs.js +32 -0
  346. package/src/view-supervisor/manifest-writer.js +178 -0
  347. package/src/view-supervisor/persist-until.js +85 -0
  348. package/src/view-supervisor/supervisor.js +276 -0
  349. package/src/watch/index.js +152 -0
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:19.703Z",
3
+ "updatedAt": "2026-07-29T12:57:19.997Z",
4
+ "purpose": "Verify coverage classifies requirements without stories and criteria without resolving test cases, and reports complete coverage with no gaps when everything is bound.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-401-1",
8
+ "AC-401-2",
9
+ "AC-401-3"
10
+ ],
11
+ "id": "TS-010",
12
+ "usId": "US-401",
13
+ "title": "Coverage report",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-010-req-without-us-uncovered",
17
+ "acId": "AC-401-1",
18
+ "description": "a requirement with no user story is classified uncovered",
19
+ "status": "pending",
20
+ "testPointer": "test/query/coverage.test.js::REQ with zero US returns uncovered"
21
+ },
22
+ {
23
+ "id": "TC-010-ac-without-tc-uncovered",
24
+ "acId": "AC-401-2",
25
+ "description": "an acceptance criterion with no test case cross-link is classified uncovered",
26
+ "status": "pending",
27
+ "testPointer": "test/query/coverage.test.js::AC with no TC cross-link at all is absent (uncovered), not unresolved"
28
+ },
29
+ {
30
+ "id": "TC-010-full-coverage-no-gaps",
31
+ "acId": "AC-401-3",
32
+ "description": "a fully covered tree reports ok with zero uncovered",
33
+ "status": "pending",
34
+ "testPointer": "test/query/coverage.test.js::shallow-any default: REQ with one AC covered by one RESOLVING TC returns covered"
35
+ }
36
+ ],
37
+ "status": "draft"
38
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:20.096Z",
3
+ "updatedAt": "2026-07-29T13:35:15.082Z",
4
+ "purpose": "Verify forward and backward traversal along the intent chain. AC-402-3 is pending: forward trace deliberately surfaces FBS via cross-link (D4), contradicting the AC's never-FBS clause (see test-suites/PENDING.md).",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-402-1",
8
+ "AC-402-2"
9
+ ],
10
+ "id": "TS-011",
11
+ "usId": "US-402",
12
+ "title": "Trace forward and back",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-011-trace-forward-req-subtree",
16
+ "acId": "AC-402-1",
17
+ "description": "forward trace from a REQ returns the US, AC, TS and TC beneath it",
18
+ "status": "pending",
19
+ "testPointer": "test/query/trace.test.js::forward from REQ returns US -> AC -> TS -> TC subtree"
20
+ },
21
+ {
22
+ "id": "TC-011-trace-back-ac-ancestry",
23
+ "acId": "AC-402-2",
24
+ "description": "backward trace from an AC returns exactly US, REQ and PRD",
25
+ "status": "pending",
26
+ "testPointer": "test/query/trace.test.js::back from AC walks AC -> US -> REQ -> PRD"
27
+ },
28
+ {
29
+ "id": "TC-011-forward-fbs-cross-link-leaf",
30
+ "acId": "AC-402-3",
31
+ "description": "forward trace surfaces the delivering FBS as a cross-link leaf and does not walk into its dependents",
32
+ "status": "pending",
33
+ "testPointer": "test/query/trace.test.js::forward from AC includes FBS via fbsByAcId cross-link as a leaf, never traversed through (AC-402-3)"
34
+ },
35
+ {
36
+ "id": "TC-011-backward-intent-chain-only",
37
+ "acId": "AC-402-3",
38
+ "description": "backward trace walks the intent chain only, with no FBS nodes",
39
+ "status": "pending",
40
+ "testPointer": "test/query/trace.test.js::back from AC walks AC -> US -> REQ -> PRD"
41
+ }
42
+ ],
43
+ "status": "draft"
44
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:20.391Z",
3
+ "updatedAt": "2026-07-29T13:35:26.943Z",
4
+ "purpose": "Verify impact fan-out from architecture documents. AC-403-1 (FBS slots from a REQ pivot) and AC-403-3 (empty impact set) lack direct assertions and are pending (see test-suites/PENDING.md).",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-403-2"
8
+ ],
9
+ "id": "TS-012",
10
+ "usId": "US-403",
11
+ "title": "Impact analysis",
12
+ "testCases": [
13
+ {
14
+ "id": "TC-012-adr-impact-reaches-fbs",
15
+ "acId": "AC-403-2",
16
+ "description": "impact from an ADR returns the FBS items referencing it as context",
17
+ "status": "pending",
18
+ "testPointer": "test/query/impact.test.js::impact from ADR: ancestor TAD; descendants include FBS via contextRequirements.adrIds"
19
+ },
20
+ {
21
+ "id": "TC-012-req-impact-includes-fbs-slots",
22
+ "acId": "AC-403-1",
23
+ "description": "impact from a REQ pivot includes the FBS slots whose acceptance criteria fall under it, labelled re-execute",
24
+ "status": "pending",
25
+ "testPointer": "test/query/impact.test.js::impact from REQ: ancestor PRD; descendants US -> AC -> TS -> TC and the FBS slots under it (AC-403-1)"
26
+ },
27
+ {
28
+ "id": "TC-012-no-dependents-empty-impact",
29
+ "acId": "AC-403-3",
30
+ "description": "impact on a document with no dependents reports an empty descendant set",
31
+ "status": "pending",
32
+ "testPointer": "test/query/impact.test.js::impact from TC: ancestors include TS, AC, US, REQ, PRD; no dependents -> empty impact set (AC-403-3)"
33
+ }
34
+ ],
35
+ "status": "draft"
36
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:20.589Z",
3
+ "updatedAt": "2026-07-29T12:57:20.885Z",
4
+ "purpose": "Verify bundle assembly walks ACs to their stories, inlines architectural context, and renders as a single sectioned markdown document.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-501-1",
8
+ "AC-501-2",
9
+ "AC-501-3"
10
+ ],
11
+ "id": "TS-013",
12
+ "usId": "US-501",
13
+ "title": "Build prompt assembly",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-013-bundle-ac-gwt-ancestry",
17
+ "acId": "AC-501-1",
18
+ "description": "each bundled AC carries its given, when and then plus usId and reqId ancestry",
19
+ "status": "pending",
20
+ "testPointer": "test/build/bundle.test.js::each AC carries usId + reqId ancestry and its own fields"
21
+ },
22
+ {
23
+ "id": "TC-013-bundle-inlines-tacs-adrs",
24
+ "acId": "AC-501-2",
25
+ "description": "referenced TACs and ADRs are inlined into the bundle context in authored order",
26
+ "status": "pending",
27
+ "testPointer": "test/build/bundle.test.js::tacIds / adrIds inline the referenced documents in authored order"
28
+ },
29
+ {
30
+ "id": "TC-013-bundle-single-markdown-document",
31
+ "acId": "AC-501-3",
32
+ "description": "the markdown bundle renders the seven sections naming the work, ACs and architectural context",
33
+ "status": "pending",
34
+ "testPointer": "test/build/formatters/markdown.test.js::bundle renders the seven D3 sections as headings, in order"
35
+ }
36
+ ],
37
+ "status": "draft"
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:20.986Z",
3
+ "updatedAt": "2026-07-29T16:45:00.000Z",
4
+ "purpose": "Verify dependency-respecting ordering, parallel-safe tier reporting and cycle refusal.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-502-1",
8
+ "AC-502-2",
9
+ "AC-502-3"
10
+ ],
11
+ "id": "TS-014",
12
+ "usId": "US-502",
13
+ "title": "Build order dependencies",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-014-dependency-precedes-dependent",
17
+ "acId": "AC-502-1",
18
+ "description": "a dependent item stays blocked until its dependency is satisfied, so dependencies always precede dependents",
19
+ "status": "pending",
20
+ "testPointer": "test/build/queue.test.js::notStarted with an unsatisfied dependency is blocked, blockedBy names it"
21
+ },
22
+ {
23
+ "id": "TC-014-independent-items-share-tier",
24
+ "acId": "AC-502-2",
25
+ "description": "two FBS items with no dependency between them report the same parallel-safe tier group; a dependent item reports a later tier, never the same group",
26
+ "status": "pending",
27
+ "testPointer": "test/build/queue.test.js::FBS items with no dependency between them share a parallel-safe tier (AC-502-2)"
28
+ },
29
+ {
30
+ "id": "TC-014-cycle-detected-reported",
31
+ "acId": "AC-502-3",
32
+ "description": "a dependency cycle is detected and every member reported blocked-cycle with no partial order",
33
+ "status": "pending",
34
+ "testPointer": "test/build/queue.test.js::dependency cycle: every member is blocked (cycle), never a crash"
35
+ }
36
+ ],
37
+ "status": "draft"
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:21.282Z",
3
+ "updatedAt": "2026-07-29T12:57:21.580Z",
4
+ "purpose": "Verify marking advances execution status through the validating writer, touches only status fields, and refuses unknown ids.",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-503-1",
8
+ "AC-503-2",
9
+ "AC-503-3"
10
+ ],
11
+ "id": "TS-015",
12
+ "usId": "US-503",
13
+ "title": "Mark a slice done",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-015-mark-advances-status",
17
+ "acId": "AC-503-1",
18
+ "description": "mark advances executionStatus on disk with updatedAt bumped through the validating writer",
19
+ "status": "pending",
20
+ "testPointer": "test/cli/build.test.js::--mark writes through updateDocument: status changed, updatedAt bumped"
21
+ },
22
+ {
23
+ "id": "TC-015-mark-unknown-id-not-found",
24
+ "acId": "AC-503-2",
25
+ "description": "mark on an unknown FBS id returns a usage error from the pure planner",
26
+ "status": "pending",
27
+ "testPointer": "test/build/mark.test.js::unknown id returns a usage error"
28
+ },
29
+ {
30
+ "id": "TC-015-mark-touches-status-only",
31
+ "acId": "AC-503-3",
32
+ "description": "the mark write changes only executionStatus and updatedAt, with createdAt untouched",
33
+ "status": "pending",
34
+ "testPointer": "test/cli/build.test.js::--mark writes through updateDocument: status changed, updatedAt bumped"
35
+ }
36
+ ],
37
+ "status": "draft"
38
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:21.678Z",
3
+ "updatedAt": "2026-07-29T13:35:27.040Z",
4
+ "purpose": "Verify MCP tool listing and CLI parity for queries. AC-601-3 is pending: no test asserts the absence of a network listener (see test-suites/PENDING.md).",
5
+ "testLevel": "e2e",
6
+ "acIds": [
7
+ "AC-601-1",
8
+ "AC-601-2"
9
+ ],
10
+ "id": "TS-016",
11
+ "usId": "US-601",
12
+ "title": "Query and view over MCP",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-016-tools-list-structured-schemas",
16
+ "acId": "AC-601-1",
17
+ "description": "an MCP client listing tools sees all eleven rcf tools with input and output schemas",
18
+ "status": "pending",
19
+ "testPointer": "test/mcp/stdio.e2e.test.js::e2e: tools/list returns all eleven tools with schemas"
20
+ },
21
+ {
22
+ "id": "TC-016-mcp-coverage-cli-parity",
23
+ "acId": "AC-601-2",
24
+ "description": "rcf_coverage over MCP deep-equals the committed CLI coverage golden",
25
+ "status": "pending",
26
+ "testPointer": "test/mcp/parity.test.js::parity: rcf_coverage structuredContent deep-equals the committed coverage golden"
27
+ },
28
+ {
29
+ "id": "TC-016-stdio-only-no-listener",
30
+ "acId": "AC-601-3",
31
+ "description": "a full MCP session with every listener API instrumented opens no TCP or UDP listener",
32
+ "status": "pending",
33
+ "testPointer": "test/mcp/stdio.e2e.test.js::e2e: the server communicates over stdio only and opens no network listener (AC-601-3)"
34
+ }
35
+ ],
36
+ "status": "draft"
37
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:21.977Z",
3
+ "updatedAt": "2026-07-29T12:57:22.271Z",
4
+ "purpose": "Verify mutating and build operations over MCP share the CLI's validation, linkage and refusal behaviour.",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-602-1",
8
+ "AC-602-2",
9
+ "AC-602-3"
10
+ ],
11
+ "id": "TS-017",
12
+ "usId": "US-602",
13
+ "title": "CRUD and build over MCP",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-017-mcp-create-cli-validation",
17
+ "acId": "AC-602-1",
18
+ "description": "rcf_create applies the CLI per-kind mandatory-field validation over MCP",
19
+ "status": "pending",
20
+ "testPointer": "test/mcp/tools.test.js::rcf_create: per-kind mandatory fields are usage errors; body object carries extra fields"
21
+ },
22
+ {
23
+ "id": "TC-017-mcp-build-returns-bundle",
24
+ "acId": "AC-602-2",
25
+ "description": "rcf_build returns the assembled bundle deep-equal to the CLI output for the named FBS",
26
+ "status": "pending",
27
+ "testPointer": "test/mcp/parity.test.js::parity: rcf_build FBS-001 structuredContent deep-equals live `rcf build FBS-001 --format json`"
28
+ },
29
+ {
30
+ "id": "TC-017-mcp-invalid-write-refused",
31
+ "acId": "AC-602-3",
32
+ "description": "a mutating MCP call that would break the tree errors with the postWriteValidation rule",
33
+ "status": "pending",
34
+ "testPointer": "test/mcp/b5-postwrite.test.js::net-new breakage on the wedged tree still errors with the postWriteValidation rule"
35
+ }
36
+ ],
37
+ "status": "draft"
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:22.370Z",
3
+ "updatedAt": "2026-07-29T12:57:22.667Z",
4
+ "purpose": "Verify invalid-producing writes land nothing on disk, successful writes revalidate cleanly, and validation runs against the registered published schema bundle.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-701-1",
8
+ "AC-701-2",
9
+ "AC-701-3"
10
+ ],
11
+ "id": "TS-018",
12
+ "usId": "US-701",
13
+ "title": "Invalid writes refused",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-018-invalid-write-writes-nothing",
17
+ "acId": "AC-701-1",
18
+ "description": "a tree-invalidating update is refused and nothing is written",
19
+ "status": "pending",
20
+ "testPointer": "test/core/store/writer-postwrite.test.js::(d) net-new breakage on the already-broken tree is still REFUSED"
21
+ },
22
+ {
23
+ "id": "TC-018-written-doc-validates",
24
+ "acId": "AC-701-2",
25
+ "description": "a successful create writes a document that revalidates cleanly on reload",
26
+ "status": "pending",
27
+ "testPointer": "test/core/store/writer.test.js::createDocument req writes a schema-valid child file"
28
+ },
29
+ {
30
+ "id": "TC-018-registered-bundle-no-drift",
31
+ "acId": "AC-701-3",
32
+ "description": "validation reuses the registered schema bundle across passes without drift",
33
+ "status": "pending",
34
+ "testPointer": "test/core/store/validator.test.js::validateDocument re-validates the registered schema (no drift)"
35
+ }
36
+ ],
37
+ "status": "draft"
38
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:22.767Z",
3
+ "updatedAt": "2026-07-29T13:35:27.138Z",
4
+ "purpose": "Verify failures name field and rule and reach MCP clients as structured objects. AC-702-2 is pending: multi-failure aggregation in one document is implemented (Ajv allErrors) but not asserted (see test-suites/PENDING.md).",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-702-1",
8
+ "AC-702-3"
9
+ ],
10
+ "id": "TS-019",
11
+ "usId": "US-702",
12
+ "title": "Clear validation errors",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-019-failure-names-field-and-rule",
16
+ "acId": "AC-702-1",
17
+ "description": "a validation failure names the offending field and the rule it broke",
18
+ "status": "pending",
19
+ "testPointer": "test/core/errors/format.test.js::formatError verbose mode appends field and rule"
20
+ },
21
+ {
22
+ "id": "TC-019-mcp-errors-structured",
23
+ "acId": "AC-702-3",
24
+ "description": "validation errors over MCP pass through as structured D11 payload objects",
25
+ "status": "pending",
26
+ "testPointer": "test/mcp/map-errors.test.js::writerErrorResult passes plain validation / brokenReference errors through with the D11 payload"
27
+ },
28
+ {
29
+ "id": "TC-019-multi-failures-returned-together",
30
+ "acId": "AC-702-2",
31
+ "description": "two independent violations in one document surface together in the single returned error",
32
+ "status": "pending",
33
+ "testPointer": "test/core/store/validator.test.js::validateDocument returns every failure in one document together (AC-702-2)"
34
+ }
35
+ ],
36
+ "status": "draft"
37
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:23.080Z",
3
+ "updatedAt": "2026-07-29T12:57:23.529Z",
4
+ "purpose": "Verify the shipped guidance pack requires a working, seeded, single-command local preview as the hosting-independent default outcome of every build.",
5
+ "testLevel": "contract",
6
+ "acIds": [
7
+ "AC-801-1",
8
+ "AC-801-2",
9
+ "AC-801-3",
10
+ "AC-801-4"
11
+ ],
12
+ "id": "TS-020",
13
+ "usId": "US-801",
14
+ "title": "Local preview guidance",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-020-preview-in-definition-of-done",
18
+ "acId": "AC-801-1",
19
+ "description": "the build-cycle contract requires a working documented local preview in the definition of done",
20
+ "status": "pending",
21
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-801-1/3: the build cycle requires a local preview as the hosting-independent default outcome"
22
+ },
23
+ {
24
+ "id": "TC-020-single-start-command",
25
+ "acId": "AC-801-2",
26
+ "description": "the playbook directs one documented start command where the stack allows",
27
+ "status": "pending",
28
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-801-2: the local preview is startable via a single documented command where the stack allows"
29
+ },
30
+ {
31
+ "id": "TC-020-preview-hosting-independent",
32
+ "acId": "AC-801-3",
33
+ "description": "the preview is required whether or not a hosting target was stated",
34
+ "status": "pending",
35
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-801-1/3: the build cycle requires a local preview as the hosting-independent default outcome"
36
+ },
37
+ {
38
+ "id": "TC-020-seeded-data-required",
39
+ "acId": "AC-801-4",
40
+ "description": "the guidance requires seeded or sample data so the preview is drivable, not an empty shell",
41
+ "status": "pending",
42
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-801-4: the preview carries seeded data when the app needs data to be usable"
43
+ }
44
+ ],
45
+ "status": "draft"
46
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:23.635Z",
3
+ "updatedAt": "2026-07-29T12:57:24.063Z",
4
+ "purpose": "Verify elicitation guidance and the harness fragment order the deploy-target decision ahead of any stack commitment and capture it as an ADR.",
5
+ "testLevel": "contract",
6
+ "acIds": [
7
+ "AC-802-1",
8
+ "AC-802-2",
9
+ "AC-802-3",
10
+ "AC-802-4"
11
+ ],
12
+ "id": "TS-021",
13
+ "usId": "US-802",
14
+ "title": "Deploy target before stack",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-021-deploy-target-question-early",
18
+ "acId": "AC-802-1",
19
+ "description": "elicitation places the deploy-target question before any stack is committed",
20
+ "status": "pending",
21
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-802-1: elicitation places a deploy-target question early, before any stack is committed"
22
+ },
23
+ {
24
+ "id": "TC-021-stack-constrained-by-target",
25
+ "acId": "AC-802-2",
26
+ "description": "the stack is constrained to what the stated target can host",
27
+ "status": "pending",
28
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-802-2: the stack choice is constrained by the deploy-target answer"
29
+ },
30
+ {
31
+ "id": "TC-021-target-captured-as-adr",
32
+ "acId": "AC-802-3",
33
+ "description": "the deploy target and stack constraint are captured as a visible revisable ADR",
34
+ "status": "pending",
35
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-802-3: the deploy target and its stack implication are captured as an ADR on the project tree"
36
+ },
37
+ {
38
+ "id": "TC-021-fragment-forbids-early-stack",
39
+ "acId": "AC-802-4",
40
+ "description": "the harness fragment RULE 5 forbids committing a stack before the deploy target",
41
+ "status": "pending",
42
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-802-4: the harness fragment forbids committing a stack before the deploy target is established"
43
+ }
44
+ ],
45
+ "status": "draft"
46
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:24.164Z",
3
+ "updatedAt": "2026-07-29T12:57:24.579Z",
4
+ "purpose": "Verify the guidance runs a plain-language hosting walkthrough for unsure owners, isolates human-only steps honestly, and covers account configuration.",
5
+ "testLevel": "contract",
6
+ "acIds": [
7
+ "AC-803-1",
8
+ "AC-803-2",
9
+ "AC-803-3",
10
+ "AC-803-4"
11
+ ],
12
+ "id": "TS-022",
13
+ "usId": "US-803",
14
+ "title": "Hosting-choice walkthrough",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-022-walkthrough-not-silent-choice",
18
+ "acId": "AC-803-1",
19
+ "description": "an unsure owner triggers the hosting-choice walkthrough, never a silent choice",
20
+ "status": "pending",
21
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-803-1: when the owner does not know, run a walkthrough rather than choosing silently"
22
+ },
23
+ {
24
+ "id": "TC-022-plain-language-options",
25
+ "acId": "AC-803-2",
26
+ "description": "the walkthrough explains options in plain language with no unexplained jargon",
27
+ "status": "pending",
28
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-803-2: the walkthrough explains options in plain language with no unexplained jargon"
29
+ },
30
+ {
31
+ "id": "TC-022-human-steps-named-honestly",
32
+ "acId": "AC-803-3",
33
+ "description": "account-holder-only steps are isolated and named honestly, never performed silently or pretended",
34
+ "status": "pending",
35
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-803-3: human-only steps are isolated and named honestly, not performed or pretended"
36
+ },
37
+ {
38
+ "id": "TC-022-covers-account-configuration",
39
+ "acId": "AC-803-4",
40
+ "description": "the walkthrough covers accounts, tokens and CLI setup beyond naming a provider",
41
+ "status": "pending",
42
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-803-4: the walkthrough covers configuring the account, not only naming a provider"
43
+ }
44
+ ],
45
+ "status": "draft"
46
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:24.682Z",
3
+ "updatedAt": "2026-07-29T12:57:25.085Z",
4
+ "purpose": "Verify the guidance requires every verification claim to name its runtime, forbids implied deploy-runtime verification, and ships a labelled example.",
5
+ "testLevel": "contract",
6
+ "acIds": [
7
+ "AC-804-1",
8
+ "AC-804-2",
9
+ "AC-804-3",
10
+ "AC-804-4"
11
+ ],
12
+ "id": "TS-023",
13
+ "usId": "US-804",
14
+ "title": "Runtime-honest verification claims",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-023-claims-name-runtime",
18
+ "acId": "AC-804-1",
19
+ "description": "every verification claim names the runtime it was checked against",
20
+ "status": "pending",
21
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-804-1/2: every verification claim names its runtime and never implies an unexercised deployed runtime"
22
+ },
23
+ {
24
+ "id": "TC-023-no-implied-deploy-verification",
25
+ "acId": "AC-804-2",
26
+ "description": "no claim may state or imply deploy-runtime verification that did not happen",
27
+ "status": "pending",
28
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-804-1/2: every verification claim names its runtime and never implies an unexercised deployed runtime"
29
+ },
30
+ {
31
+ "id": "TC-023-pr-section-runtime-label",
32
+ "acId": "AC-804-3",
33
+ "description": "the PR verification section requires the runtime label on every claim",
34
+ "status": "pending",
35
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-804-3: the PR-authoring guidance requires the runtime label in the verification section"
36
+ },
37
+ {
38
+ "id": "TC-023-labelled-claim-example",
39
+ "acId": "AC-804-4",
40
+ "description": "an explicit labelled example names wrangler dev localhost as not the deployed runtime",
41
+ "status": "pending",
42
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-804-4: an explicit labelled example exists, with a non-Cloudflare example alongside the wrangler-dev one"
43
+ }
44
+ ],
45
+ "status": "draft"
46
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "createdAt": "2026-07-29T12:57:25.185Z",
3
+ "updatedAt": "2026-07-29T12:57:25.588Z",
4
+ "purpose": "Verify the guidance describes a fresh-context self-review dispatch that drives the running app against the ACs, names the defect classes, and stays subordinate to the finalise gate.",
5
+ "testLevel": "contract",
6
+ "acIds": [
7
+ "AC-805-1",
8
+ "AC-805-2",
9
+ "AC-805-3",
10
+ "AC-805-4"
11
+ ],
12
+ "id": "TS-024",
13
+ "usId": "US-805",
14
+ "title": "Interim self-review guidance",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-024-periodic-fresh-context-review",
18
+ "acId": "AC-805-1",
19
+ "description": "a periodic and end-of-build fresh-context self-review dispatch is described",
20
+ "status": "pending",
21
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-805-1: a periodic and end-of-build fresh-context self-review dispatch is described"
22
+ },
23
+ {
24
+ "id": "TC-024-reviewer-drives-the-app",
25
+ "acId": "AC-805-2",
26
+ "description": "the reviewer drives the running app against the ACs rather than reading code",
27
+ "status": "pending",
28
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-805-2: the reviewer drives the running app against the ACs rather than reading the code"
29
+ },
30
+ {
31
+ "id": "TC-024-names-defect-classes",
32
+ "acId": "AC-805-3",
33
+ "description": "the review names the five target defect classes",
34
+ "status": "pending",
35
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-805-3: the review names the target defect classes"
36
+ },
37
+ {
38
+ "id": "TC-024-in-loop-not-the-gate",
39
+ "acId": "AC-805-4",
40
+ "description": "the self-review is scoped as an in-loop check naming rcf finalise as the gate",
41
+ "status": "pending",
42
+ "testPointer": "test/guidance/tier1-hardening.test.js::AC-805-4: the self-review is honestly scoped as an in-loop check subordinate to the independent gate"
43
+ }
44
+ ],
45
+ "status": "draft"
46
+ }