rcf-lite 0.19.0 → 0.21.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 (263) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/bin/rcf.js +5 -0
  3. package/blueprints/application-admin-console/CHANGELOG.md +11 -0
  4. package/blueprints/application-admin-console/README.md +98 -0
  5. package/blueprints/application-admin-console/blueprint.json +226 -0
  6. package/blueprints/application-admin-console/contributions/adrs/adr-2201-application-admin-console-capability-vocabulary.json +25 -0
  7. package/blueprints/application-admin-console/contributions/adrs/adr-2202-application-admin-console-baseline-roles.json +25 -0
  8. package/blueprints/application-admin-console/contributions/adrs/adr-2203-application-admin-console-invite-transport.json +20 -0
  9. package/blueprints/application-admin-console/contributions/adrs/adr-2204-application-admin-console-audit-retention.json +20 -0
  10. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-001.json +18 -0
  11. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-002.json +18 -0
  12. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-003.json +18 -0
  13. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-004.json +18 -0
  14. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-005.json +18 -0
  15. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-006.json +18 -0
  16. package/blueprints/application-admin-console/contributions/tacs/tac-2201-application-admin-console-shell.json +40 -0
  17. package/blueprints/application-admin-console/contributions/tacs/tac-2202-application-admin-console-capability-discovery.json +44 -0
  18. package/blueprints/application-admin-console/contributions/tacs/tac-2203-application-admin-console-permission-matrix.json +34 -0
  19. package/blueprints/application-admin-console/contributions/tacs/tac-2204-application-admin-console-audit-view.json +40 -0
  20. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21101.json +34 -0
  21. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21102.json +34 -0
  22. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21103.json +34 -0
  23. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21104.json +28 -0
  24. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21105.json +34 -0
  25. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21106.json +27 -0
  26. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21107.json +27 -0
  27. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21108.json +27 -0
  28. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21109.json +33 -0
  29. package/blueprints/application-admin-console/docs/topics.md +35 -0
  30. package/blueprints/application-admin-console/guide/application-admin-console.md +29 -0
  31. package/blueprints/application-admin-console/probe-packs/application-admin-console.pack.mjs +182 -0
  32. package/blueprints/application-api-rest/docs/topics.md +5 -0
  33. package/blueprints/application-charts/CHANGELOG.md +12 -0
  34. package/blueprints/application-charts/README.md +73 -0
  35. package/blueprints/application-charts/blueprint.json +26 -0
  36. package/blueprints/application-charts/contributions/adrs/adr-1901-application-charts-engine-choice.json +25 -0
  37. package/blueprints/application-charts/contributions/adrs/adr-1902-application-charts-accessible-palette.json +25 -0
  38. package/blueprints/application-charts/contributions/adrs/adr-1903-application-charts-motion.json +25 -0
  39. package/blueprints/application-charts/contributions/requirements/application-charts-req-001.json +15 -0
  40. package/blueprints/application-charts/contributions/requirements/application-charts-req-002.json +15 -0
  41. package/blueprints/application-charts/contributions/requirements/application-charts-req-003.json +15 -0
  42. package/blueprints/application-charts/contributions/requirements/application-charts-req-004.json +15 -0
  43. package/blueprints/application-charts/contributions/tacs/tac-1901-application-charts-render-shell.json +42 -0
  44. package/blueprints/application-charts/contributions/tacs/tac-1902-application-charts-keyboard-traversal.json +40 -0
  45. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18101.json +35 -0
  46. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18102.json +35 -0
  47. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18103.json +35 -0
  48. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18104.json +35 -0
  49. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18105.json +35 -0
  50. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18106.json +35 -0
  51. package/blueprints/application-charts/docs/topics.md +37 -0
  52. package/blueprints/application-charts/guide/application-charts.md +44 -0
  53. package/blueprints/application-charts/probe-packs/application-charts.pack.mjs +191 -0
  54. package/blueprints/application-dashboard/CHANGELOG.md +10 -0
  55. package/blueprints/application-dashboard/README.md +102 -0
  56. package/blueprints/application-dashboard/assets/guidance/dashboard-design.md +124 -0
  57. package/blueprints/application-dashboard/blueprint.json +29 -0
  58. package/blueprints/application-dashboard/contributions/adrs/adr-2001-application-dashboard-primary-kpi-enum.json +25 -0
  59. package/blueprints/application-dashboard/contributions/adrs/adr-2002-application-dashboard-timeframe-presets.json +25 -0
  60. package/blueprints/application-dashboard/contributions/adrs/adr-2003-application-dashboard-export-formats.json +25 -0
  61. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-001.json +15 -0
  62. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-002.json +15 -0
  63. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-003.json +15 -0
  64. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-004.json +15 -0
  65. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-005.json +15 -0
  66. package/blueprints/application-dashboard/contributions/tacs/tac-2001-application-dashboard-tile-grid.json +47 -0
  67. package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +41 -0
  68. package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +35 -0
  69. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19101.json +35 -0
  70. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19102.json +35 -0
  71. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19103.json +35 -0
  72. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19104.json +35 -0
  73. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19105.json +35 -0
  74. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +35 -0
  75. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19107.json +35 -0
  76. package/blueprints/application-dashboard/docs/topics.md +43 -0
  77. package/blueprints/application-dashboard/guide/application-dashboard.md +48 -0
  78. package/blueprints/application-dashboard/probe-packs/application-dashboard.pack.mjs +231 -0
  79. package/blueprints/application-datatable/CHANGELOG.md +8 -0
  80. package/blueprints/application-datatable/README.md +43 -0
  81. package/blueprints/application-datatable/blueprint.json +33 -0
  82. package/blueprints/application-datatable/contributions/adrs/adr-1801-application-datatable-pattern-choice.json +25 -0
  83. package/blueprints/application-datatable/contributions/adrs/adr-1802-application-datatable-url-state.json +20 -0
  84. package/blueprints/application-datatable/contributions/adrs/adr-1803-application-datatable-page-size.json +20 -0
  85. package/blueprints/application-datatable/contributions/adrs/adr-1804-application-datatable-selection-persistence.json +20 -0
  86. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-001.json +15 -0
  87. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-002.json +15 -0
  88. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-003.json +15 -0
  89. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-004.json +15 -0
  90. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-005.json +15 -0
  91. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-006.json +15 -0
  92. package/blueprints/application-datatable/contributions/tacs/tac-1801-application-datatable-shell.json +50 -0
  93. package/blueprints/application-datatable/contributions/tacs/tac-1802-application-datatable-query-adapter.json +39 -0
  94. package/blueprints/application-datatable/contributions/tacs/tac-1803-application-datatable-selection-model.json +28 -0
  95. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17101.json +44 -0
  96. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17102.json +44 -0
  97. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17103.json +44 -0
  98. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17104.json +44 -0
  99. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17105.json +44 -0
  100. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17106.json +44 -0
  101. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17107.json +44 -0
  102. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17108.json +44 -0
  103. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17109.json +44 -0
  104. package/blueprints/application-datatable/docs/topics.md +35 -0
  105. package/blueprints/application-datatable/guide/application-datatable.md +38 -0
  106. package/blueprints/application-datatable/probe-packs/application-datatable.pack.mjs +240 -0
  107. package/blueprints/application-error-handling/docs/topics.md +5 -0
  108. package/blueprints/application-notifications-in-app/CHANGELOG.md +9 -0
  109. package/blueprints/application-notifications-in-app/README.md +80 -0
  110. package/blueprints/application-notifications-in-app/blueprint.json +30 -0
  111. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2101-application-notifications-in-app-live-region-role-mapping.json +25 -0
  112. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2102-application-notifications-in-app-toast-timeout-floor.json +25 -0
  113. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2103-application-notifications-in-app-retention-window.json +25 -0
  114. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-001.json +15 -0
  115. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-002.json +15 -0
  116. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-003.json +15 -0
  117. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-004.json +15 -0
  118. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-005.json +15 -0
  119. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +46 -0
  120. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +52 -0
  121. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2103-application-notifications-in-app-preferences.json +40 -0
  122. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +35 -0
  123. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +35 -0
  124. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +35 -0
  125. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20104.json +35 -0
  126. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +35 -0
  127. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20106.json +26 -0
  128. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20107.json +26 -0
  129. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20108.json +26 -0
  130. package/blueprints/application-notifications-in-app/docs/topics.md +39 -0
  131. package/blueprints/application-notifications-in-app/guide/application-notifications-in-app.md +47 -0
  132. package/blueprints/application-notifications-in-app/probe-packs/application-notifications-in-app.pack.mjs +328 -0
  133. package/blueprints/application-spa/docs/topics.md +5 -0
  134. package/blueprints/delivery-ci-workflows/docs/topics.md +5 -0
  135. package/blueprints/deploy-cloudflare-workers/docs/topics.md +5 -0
  136. package/blueprints/email-smtp-resend/docs/topics.md +5 -0
  137. package/blueprints/observability-essentials/docs/topics.md +5 -0
  138. package/blueprints/observability-logging/CHANGELOG.md +5 -0
  139. package/blueprints/observability-logging/README.md +1 -1
  140. package/blueprints/observability-logging/blueprint.json +113 -21
  141. package/blueprints/observability-logging/docs/topics.md +5 -0
  142. package/blueprints/observability-probe-endpoints/docs/topics.md +5 -0
  143. package/blueprints/persistence-data-d1/docs/topics.md +5 -0
  144. package/blueprints/persistence-data-sqlite/docs/topics.md +5 -0
  145. package/blueprints/security-auth-clerk/CHANGELOG.md +5 -0
  146. package/blueprints/security-auth-clerk/blueprint.json +2 -1
  147. package/blueprints/security-auth-clerk/docs/topics.md +5 -0
  148. package/blueprints/security-auth-keycloak/CHANGELOG.md +5 -0
  149. package/blueprints/security-auth-keycloak/blueprint.json +2 -1
  150. package/blueprints/security-auth-keycloak/docs/topics.md +5 -0
  151. package/blueprints/security-auth-magic-link/CHANGELOG.md +5 -0
  152. package/blueprints/security-auth-magic-link/blueprint.json +2 -1
  153. package/blueprints/security-auth-magic-link/docs/topics.md +5 -0
  154. package/blueprints/security-auth-oauth2/CHANGELOG.md +5 -0
  155. package/blueprints/security-auth-oauth2/blueprint.json +2 -1
  156. package/blueprints/security-auth-oauth2/docs/topics.md +5 -0
  157. package/blueprints/security-secrets-management/docs/topics.md +5 -0
  158. package/fixtures/canary-manifest.json +9 -9
  159. package/package.json +2 -2
  160. package/rcf/code-nodes/cn-098.json +13 -0
  161. package/rcf/code-nodes/cn-099.json +13 -0
  162. package/rcf/code-nodes/cn-100.json +13 -0
  163. package/rcf/code-nodes/cn-101.json +13 -0
  164. package/rcf/code-nodes/cn-102.json +13 -0
  165. package/rcf/code-nodes/cn-103.json +13 -0
  166. package/rcf/code-nodes/cn-104.json +13 -0
  167. package/rcf/code-nodes/cn-105.json +13 -0
  168. package/rcf/code-nodes/cn-106.json +13 -0
  169. package/rcf/code-nodes/cn-107.json +14 -0
  170. package/rcf/code-nodes/cn-108.json +13 -0
  171. package/rcf/code-nodes/cn-109.json +12 -0
  172. package/rcf/code-nodes/cn-110.json +12 -0
  173. package/rcf/code-nodes/cn-111.json +14 -0
  174. package/rcf/code-nodes/cn-112.json +14 -0
  175. package/rcf/code-nodes/cn-113.json +12 -0
  176. package/rcf/code-nodes/cn-114.json +13 -0
  177. package/rcf/code-nodes/cn-115.json +13 -0
  178. package/rcf/code-nodes/cn-116.json +12 -0
  179. package/rcf/code-nodes/cn-117.json +13 -0
  180. package/rcf/code-nodes/cn-118.json +13 -0
  181. package/rcf/code-nodes/cn-119.json +13 -0
  182. package/rcf/code-nodes/cn-120.json +13 -0
  183. package/rcf/code-nodes/cn-121.json +12 -0
  184. package/rcf/code-nodes/cn-122.json +12 -0
  185. package/rcf/code-nodes/cn-123.json +13 -0
  186. package/rcf/code-nodes/cn-124.json +13 -0
  187. package/rcf/code-nodes/cn-125.json +13 -0
  188. package/rcf/code-nodes/cn-126.json +13 -0
  189. package/rcf/code-nodes/cn-127.json +12 -0
  190. package/rcf/code-nodes/cn-128.json +14 -0
  191. package/rcf/code-nodes/cn-129.json +14 -0
  192. package/rcf/code-nodes/cn-130.json +14 -0
  193. package/rcf/code-nodes/cn-131.json +15 -0
  194. package/rcf/code-nodes/cn-132.json +12 -0
  195. package/rcf/code-nodes/cn-133.json +13 -0
  196. package/rcf/evals/eval-001.json +55 -0
  197. package/rcf/fbs/fbs-035.json +18 -0
  198. package/rcf/fbs/fbs-036.json +22 -0
  199. package/rcf/fbs/fbs-037.json +19 -0
  200. package/rcf/fbs/fbs-038.json +19 -0
  201. package/rcf/fbs/fbs-039.json +21 -0
  202. package/rcf/fbs/fbs-040.json +20 -0
  203. package/rcf/fbs/fbs-041.json +13 -0
  204. package/rcf/fbs/fbs-042.json +13 -0
  205. package/rcf/requirements/req-016.json +37 -0
  206. package/rcf/requirements/req-017.json +18 -0
  207. package/rcf/requirements/req-018.json +18 -0
  208. package/rcf/requirements/req-019.json +38 -0
  209. package/rcf/requirements/req-020.json +13 -0
  210. package/rcf/requirements/req-021.json +13 -0
  211. package/rcf/requirements/req-022.json +13 -0
  212. package/rcf/requirements/req-023.json +14 -0
  213. package/rcf/test-suites/ts-045.json +46 -0
  214. package/rcf/test-suites/ts-046.json +78 -0
  215. package/rcf/test-suites/ts-047.json +54 -0
  216. package/rcf/test-suites/ts-048.json +54 -0
  217. package/rcf/test-suites/ts-049.json +70 -0
  218. package/rcf/test-suites/ts-050.json +69 -0
  219. package/rcf/test-suites/ts-051.json +22 -0
  220. package/rcf/test-suites/ts-052.json +20 -0
  221. package/rcf/user-stories/us-1601.json +37 -0
  222. package/rcf/user-stories/us-1701.json +56 -0
  223. package/rcf/user-stories/us-1801.json +40 -0
  224. package/rcf/user-stories/us-1901.json +40 -0
  225. package/rcf/user-stories/us-2001.json +50 -0
  226. package/rcf/user-stories/us-2101.json +45 -0
  227. package/rcf/user-stories/us-2201.json +60 -0
  228. package/rcf/user-stories/us-2301.json +51 -0
  229. package/releases/releases.yaml +20 -1
  230. package/src/blueprint/apply.js +98 -1
  231. package/src/blueprint/capabilities.js +318 -0
  232. package/src/blueprint/loader.js +247 -0
  233. package/src/browser-verify/boot.js +180 -0
  234. package/src/browser-verify/index.js +13 -0
  235. package/src/browser-verify/manifest-writer.js +31 -6
  236. package/src/browser-verify/pack-browser.js +294 -0
  237. package/src/browser-verify/pack-loader.js +176 -0
  238. package/src/browser-verify/pack-runner.js +193 -0
  239. package/src/browser-verify/pack-schema.js +155 -0
  240. package/src/browser-verify/runner.js +24 -1
  241. package/src/cli/blueprint.js +92 -0
  242. package/src/cli/browser-verify.js +147 -7
  243. package/src/cli/create.js +14 -0
  244. package/src/cli/eval-coverage.js +221 -0
  245. package/src/cli/eval.js +43 -0
  246. package/src/cli/finalise.js +64 -0
  247. package/src/cli/help.js +4 -0
  248. package/src/core/errors/index.js +7 -0
  249. package/src/core/store/ids.js +5 -1
  250. package/src/core/store/init.js +4 -0
  251. package/src/core/store/loader.js +4 -0
  252. package/src/core/store/validator.js +8 -1
  253. package/src/core/store/walker.js +71 -2
  254. package/src/core/store/writer.js +4 -0
  255. package/src/eval/judge.js +338 -0
  256. package/src/finalise/index.js +8 -0
  257. package/src/finalise/ingest.js +27 -0
  258. package/src/finalise/ship-without-eval.js +123 -0
  259. package/src/query/eval-coverage.js +162 -0
  260. package/src/verify/chain/index.js +67 -0
  261. package/src/verify/cli/run.js +15 -0
  262. package/src/verify/engine/index.js +10 -0
  263. package/src/verify/verdict/index.js +46 -0
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-09-04T21:08:13.117Z",
3
+ "updatedAt": "2026-09-04T21:08:13.139Z",
4
+ "description": "The rcf-lite shelf ships the application-charts v1.0.0 blueprint (blueprints/application-charts/) with 15 contributions (4 REQs, 6 USs binding runtime-observable ACs, 2 TACs, 3 ADRs), a shipped Playwright probe pack (blueprints/application-charts/probe-packs/application-charts.pack.mjs) whose three checks (AC-18102-1 non-colour distinction, AC-18103-1 text-alternative table, AC-18104-1 keyboard traversal with reduced motion) are anchored to blueprint AC ids per T-0 AC-1701-3, and a dependency-free sample-app fixture (packages/rcf-lite/test/fixtures/probe-pack-application-charts/) the pack probes at the shelf gate. The blueprint is the ratification of the visual round T-2 (spec 2026-09-04 section 5.2), the second shipped consumer of T-0's probe-pack runner extension, and the leaf blueprint the application-dashboard T-3 consumes.",
5
+ "category": "functional",
6
+ "domain": "application",
7
+ "priority": "must",
8
+ "reqId": "REQ-019",
9
+ "prdId": "PRD-001",
10
+ "title": "Application-charts v1.0.0 blueprint on the shelf with its Playwright probe pack and sample-app fixture",
11
+ "version": "0.1.0",
12
+ "status": "draft",
13
+ "shapeClassification": {
14
+ "shapes": [
15
+ "webUi",
16
+ "persistence"
17
+ ],
18
+ "reason": "keyword-scan",
19
+ "classifiedAt": "2026-09-04T21:08:13.137Z",
20
+ "signals": [
21
+ {
22
+ "source": "description",
23
+ "shape": "webUi",
24
+ "match": "table"
25
+ },
26
+ {
27
+ "source": "description",
28
+ "shape": "persistence",
29
+ "match": "table"
30
+ },
31
+ {
32
+ "source": "description",
33
+ "shape": "webUi",
34
+ "match": "dashboard"
35
+ }
36
+ ]
37
+ }
38
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "createdAt": "2026-09-04T22:10:00.000Z",
3
+ "updatedAt": "2026-09-04T22:10:00.000Z",
4
+ "reqId": "REQ-020",
5
+ "prdId": "PRD-001",
6
+ "title": "Application-dashboard v1.0.0 blueprint on the shelf with its packaged design-guidance asset, Playwright probe pack and sample-app fixture",
7
+ "description": "The rcf-lite shelf ships the application-dashboard v1.0.0 blueprint (blueprints/application-dashboard/) with 18 contributions (5 REQs on the dashboard shell composition, the primary-KPI visual hierarchy, the per-tile four-state contract, the timeframe and filter chrome fan-out, and the export handle with format delegation to charts; 7 USs binding runtime-observable ACs plus one US on packaged-guidance adherence; 3 TACs on the tile grid with CSS Grid position semantics and breakpoint reflow, the filter chrome and timeframe picker with the refetch fan-out contract, and the export handle; 3 ADRs on the primary-KPI kinds enum, the timeframe presets and the export formats). Ships a packaged design-guidance asset at blueprints/application-dashboard/assets/guidance/dashboard-design.md covering primary KPI placement, tile density and count limits, timeframe and filter chrome, loading/empty/error states, colour and contrast, when a table beats a chart with delegation to application-datatable, refresh cadence and staleness, and anti-patterns (five https citations from NN/g, Few, Tufte, GOV.UK, WCAG). Ships a Playwright probe pack under blueprints/application-dashboard/probe-packs/application-dashboard.pack.mjs whose three checks (AC-19102-1 primary-KPI position by DOM order and CSS Grid position at 1440/1024/360, AC-19104-1 timeframe refetch fan-out with same boundary and matching as-of ISO-8601 stamp, AC-19103-1 per-tile four-state contract with role region, aria-live polite and non-colour distinction) are anchored to blueprint AC ids per T-0 AC-1701-3. Ships a dependency-free sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-dashboard/ with break switches for the negative runs. Extends the pack-browser seam with a resize(width, height) method (via the pinned Playwright MCP's browser_resize tool on the MCP route and page.setViewportSize on the project route) so probe packs can probe breakpoint reflow honestly. Third shipped consumer of T-0's probe-pack runner extension; consumes application-charts on the chart region and references application-datatable in the packaged guidance.",
8
+ "category": "functional",
9
+ "domain": "application",
10
+ "priority": "must",
11
+ "version": "0.1.0",
12
+ "status": "draft"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "createdAt": "2026-09-04T23:59:00.000Z",
3
+ "updatedAt": "2026-09-04T23:59:00.000Z",
4
+ "reqId": "REQ-021",
5
+ "prdId": "PRD-001",
6
+ "title": "Application-notifications-in-app v1.0.0 blueprint on the shelf with its Playwright probe pack and sample-app fixture",
7
+ "description": "The rcf-lite shelf ships the application-notifications-in-app v1.0.0 blueprint (blueprints/application-notifications-in-app/) with 19 contributions (5 REQs on live-region preseeding, the transient toast contract, the notification centre inbox with acknowledge round-trip, the per-user preferences UI with sibling-channel delegation, and the delivery-attempt log; 8 USs binding runtime-observable ACs plus three cross-cutting cases on the page load with backlog, the background event and the disjoint-content contract; 3 TACs on the live-region wrappers and the toast factory, the centre inbox with retention and acknowledge round-trip, and the preferences UI with sibling delegation; 3 ADRs on the priority-to-role mapping polite/status vs assertive/alert, the WCAG 2.2.1 six-second toast timeout floor, and the ADR-2103 thirty-day retention window). Reserves the family prefix application-notifications- for the sibling channels the shelf will grow into (email, push, webhook) as documented in the blueprint README and the shelf band registry. Ships a Playwright probe pack under blueprints/application-notifications-in-app/probe-packs/application-notifications-in-app.pack.mjs whose three checks (AC-20101-1 live-region preseeding on every declared route, AC-20102-1 transient toast contract with priority-to-role mapping and timeout floor measured via data-shown-at/data-dismissed-at timestamps, AC-20103-1 centre acknowledge round-trip through data-notification-id enumeration and reconciliation of client + server request logs) are anchored to blueprint AC ids per T-0 AC-1701-3. Ships a dependency-free sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-notifications-in-app/ with four break switches for the negative runs (preseed, role, timeout, ack). Fourth shipped consumer of T-0's probe-pack runner extension; consumes the logging companion for the delivery-log write path and the errorHandling companion for the assertive-slot alert boundary; adds no runner surface (reuses the T-3 pack-browser resize seam only for future minor bumps, none in v1.0.0).",
8
+ "category": "functional",
9
+ "domain": "application",
10
+ "priority": "must",
11
+ "version": "0.1.0",
12
+ "status": "draft"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "createdAt": "2026-09-05T01:30:00.000Z",
3
+ "updatedAt": "2026-09-05T01:30:00.000Z",
4
+ "reqId": "REQ-022",
5
+ "prdId": "PRD-001",
6
+ "title": "Capability-declaration mechanism (capabilities[], elicits[], apply-time discovery, refusal and custom-auth elicitation) and four auth-blueprint 1.1.0 minors adopting it",
7
+ "description": "The rcf-lite blueprint loader accepts two additive optional top-level fields on blueprint.json: capabilities[] (a non-empty array of lower camelCase strings on the ^[a-z][a-zA-Z0-9]*$ pattern, matching the section 6a role naming convention; a blueprint declares what identity or platform capability it provides so consumer blueprints can gate surfaces on it) and elicits[] (a non-empty array of {id, prompt, kind: enum|string|boolean, default, when?} entries the apply verb reads at apply time to prompt the operator for per-project answers). The loader validates SHAPE; the vocabulary lives in the section 6a table (principalDirectory, roleModel, tenancy, auditLog) extended in the same docs edit. A third additive top-level field requiresAppliedCapabilities[] tells apply that the blueprint refuses to apply when none of the currently-applied blueprints declares any of the required capabilities (unless an allowSkipFlag matching --allow-no-auth-yet is passed); apply then reads back each applied blueprint's source blueprint.json (the applied-blueprint-record schema is closed and refuses new fields; the source-manifest read-back precedent from the T-2 core-companions train applies here) to compute the appliedCapabilities union across the project. When the union is empty AND the blueprint is admin-console AND --allow-no-auth-yet was not passed, the apply exits 3 with a stderr message naming security-auth-* (the spec 5.5.1 verbatim message) and lists the currently-applied blueprints. When --allow-no-auth-yet is passed, apply stamps a note field onto the applied record so a later rcf define validate can flag surfaces that never activated. The elicitation phase prompts on a TTY and reads --answer <id>=<value> (repeatable) plus --answers <file> (JSON object) non-interactively; each elicit's `when` predicate evaluates against the discovered applied-capability set so elicits like the tenancy shape only prompt when the tenancy capability is applied. Apply persists appliedCapabilities and appliedElicitations into a sidecar file at rcf/blueprints/${slug}.applied.json (the applied-blueprint-record schema is closed under additionalProperties:false so the manifest cannot carry them; the sidecar is read by consumer surfaces at runtime). The four shelf auth blueprints adopt capabilities[] in v1.1.0 minor bumps landing in the same PR per spec Q2 default: security-auth-magic-link 1.0.0 -> 1.1.0 capabilities: [principalDirectory]; security-auth-clerk 1.1.0 -> 1.2.0 capabilities: [principalDirectory, roleModel]; security-auth-oauth2 1.0.0 -> 1.1.0 capabilities: [principalDirectory, roleModel]; security-auth-keycloak 1.0.0 -> 1.1.0 capabilities: [principalDirectory, roleModel]. Per section 6 of blueprint-authoring.md, an additive optional field with no global-topic change is a minor bump.",
8
+ "category": "functional",
9
+ "domain": "application",
10
+ "priority": "must",
11
+ "version": "0.1.0",
12
+ "status": "draft"
13
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "createdAt": "2026-09-05T01:30:00.000Z",
3
+ "updatedAt": "2026-09-05T01:30:00.000Z",
4
+ "reqId": "REQ-023",
5
+ "prdId": "PRD-001",
6
+ "title": "Application-admin-console v1.0.0 blueprint on the shelf with capability-gated surfaces, a Playwright probe pack and a sample-app fixture",
7
+ "description": "The rcf-lite shelf ships the application-admin-console v1.0.0 blueprint (blueprints/application-admin-console/) with 23 contributions (6 REQs on the console shell with no dead links to unapplied capabilities, the users surface conditional on principalDirectory, the roles surface conditional on roleModel with Owner + Admin + Member + Viewer baseline, the orgs surface conditional on tenancy, the audit-log surface conditional on the auditLog logging companion, and the access-denied and request-access states per WCAG; 9 USs 21101-21109 binding runtime-observable ACs plus the conditional-refusal apply-time behaviour; 4 TACs 2201-2204 on the console shell reading the surface manifest, the apply-time capability discovery, the permission matrix as an ARIA APG grid, and the audit view consuming application-datatable; 4 ADRs 2201-2204 on the capability vocabulary, baseline roles with elicited additions, invite transport with email default delegated to the email sibling and elicited, and audit-log retention window elicited). The blueprint declares requiresAppliedCapabilities: [principalDirectory] and allowSkipFlag: allow-no-auth-yet so a bare-SPA apply refuses with exit 3 and the spec 5.5.1 verbatim message naming security-auth-*; the override records a note on the applied record. Declares elicits[] gating baselineRoles (only when roleModel is applied), tenancyShape (only when tenancy is applied), inviteTransport, and auditRetentionDays (only when auditLog is applied). Declares suggestedCompanions logging and errorHandling with the ratified spec section 5.5 reasons; providesRoles absent per spec 5.5.3 (the console is a consumer of principalDirectory, never a provider). Ships a Playwright probe pack under blueprints/application-admin-console/probe-packs/application-admin-console.pack.mjs whose four checks (AC-21102-1 users directory, AC-21103-1 permission matrix, AC-21104-1 org switcher, AC-21105-1 audit-log surface) each carry an appliesTo predicate that reads manifest.blueprints[] and the read-back capabilities so an inapplicable check records applicable: false and the aggregate verdict treats it as neither pass nor fail. Ships a dependency-free sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-admin-console/ with a CAPS env or query switch selecting which surfaces exist (mirrors the applied capability set so the sample app plays every fixture), a console shell whose nav only links applied surfaces, a users directory table with per-row invite and deactivate controls enumerated by data-user-id, a permission matrix rendered as an ARIA APG grid with role=grid, role=row, role=gridcell, role=rowheader on role rows and role=columnheader on permission columns announcing the exact permission string on focus (WCAG 4.1.3), an org switcher (only under tenancy), an audit-log table with actor / target / before / after / timestamp / correlation id enumerated by data-audit-id, an access-denied route with a request-access control, request log on window.__adminFetches and /__requests, and break switches for the negative runs (matrix-grid, denied, audit-fields). Reads applied capabilities from the rcf/blueprints/application-admin-console.applied.json sidecar or from an ADMIN_CONSOLE_CAPS env override so the fixture can play fixtures (b) SPA + magic-link, (c) SPA + clerk + logging, and (d) custom-auth elicited capabilities. Fifth shipped consumer of T-0's probe-pack runner extension; consumes application-datatable (T-1) for the users directory and audit views."
8
+ ,
9
+ "category": "functional",
10
+ "domain": "application",
11
+ "priority": "must",
12
+ "version": "0.1.0",
13
+ "status": "draft"
14
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "createdAt": "2026-09-04T16:22:23.766Z",
3
+ "updatedAt": "2026-09-04T17:21:35.618Z",
4
+ "purpose": "Cover the four ACs on US-1601 via the unit and integration suites landed in this train. L1 through L3 are deterministic tests over pure or seam-injected code paths; L4 tests the judge invocation shape via a stubbed spawn seam (a real subprocess round-trip is exercised out-of-band as the section 11 real-claude smoke).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-1601-1",
8
+ "AC-1601-2",
9
+ "AC-1601-3",
10
+ "AC-1601-4"
11
+ ],
12
+ "id": "TS-045",
13
+ "usId": "US-1601",
14
+ "title": "rcf-lite consumer wiring for the rcf-schemas 0.6.0 EVAL node",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-045-computeevalcoverage-across-the-four",
18
+ "acId": "AC-1601-1",
19
+ "description": "computeEvalCoverage across the four outcome buckets (covered, covered-optional, missing, not-required) and the classifyEvalDoc pending/superseded/resolving classification",
20
+ "status": "pending",
21
+ "testPointer": "test/query/eval-coverage.test.js::nonDeterministic AC without a bound EVAL reports missing and fails the gate"
22
+ },
23
+ {
24
+ "id": "TC-045-per-ac-verdicts-carries-the-two-new-eval",
25
+ "acId": "AC-1601-2",
26
+ "description": "PER_AC_VERDICTS carries the two new EVAL classes; evalPerAcVerdict returns null for deterministic ACs; fires EVAL-MISSING when nonDeterministic AC has no resolving EVAL; fires EVAL-BELOW-THRESHOLD on a failing run",
27
+ "status": "pending",
28
+ "testPointer": "test/verify/verdict/eval-per-ac.test.js::derivePerAcVerdicts folds EVAL classes alongside the pre-existing per-AC verdicts"
29
+ },
30
+ {
31
+ "id": "TC-045-findevalrefusalacs-and",
32
+ "acId": "AC-1601-3",
33
+ "description": "findEvalRefusalAcs and reportHasEvalRefusal read the two EVAL classes off perAcVerdicts[]; composeShipWithoutEvalRecord carries the operator reason and declared per-AC verdicts; nextShipWithoutEvalId increments monotonically",
34
+ "status": "pending",
35
+ "testPointer": "test/cli/finalise-eval-refusal.test.js::finalise --ship-without-eval \"harness offline\" exits 0 and appends a monotonic swe-* record on manifest.shipWithoutEval[]"
36
+ },
37
+ {
38
+ "id": "TC-045-runonecase-spawns-the-invoker-claude-or",
39
+ "acId": "AC-1601-4",
40
+ "description": "runOneCase spawns the invoker (claude or codex) via the seam, validates response against the declared schema, composeRunRecord verdict resolves to pass on met threshold and fail on critical criterion failure",
41
+ "status": "pending",
42
+ "testPointer": "test/eval/judge.test.js::runOneCase returns the parsed graded envelope on a valid response"
43
+ }
44
+ ],
45
+ "status": "draft"
46
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "createdAt": "2026-09-04T18:00:42.492Z",
3
+ "updatedAt": "2026-09-04T18:51:45.216Z",
4
+ "purpose": "Cover AC-1701-1..8 via unit tests over the pack schema validator, the pack loader (both extensions, cross-check, applicability seams), the runner pack pass (aggregate verdict extension, browser and fetch injection, preChecks with dependsOn), the CLI --probe-pack option (unknown-name refusal, pack restriction, applicable=false record path), the Playwright-MCP pack-browser stdio client (evaluate-result parsing), and the boot fallback (reachability probe, spawn-and-wait, waitForSelector soft-timeout, cleanup on completion).",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-1701-1",
8
+ "AC-1701-2",
9
+ "AC-1701-3",
10
+ "AC-1701-4",
11
+ "AC-1701-5",
12
+ "AC-1701-6",
13
+ "AC-1701-7",
14
+ "AC-1701-8"
15
+ ],
16
+ "id": "TS-046",
17
+ "usId": "US-1701",
18
+ "title": "Blueprint-shipped probe pack loader, scoping, cross-check, runner pass and CLI --probe-pack",
19
+ "testCases": [
20
+ {
21
+ "id": "TC-046-pack-loader-loads-both-pack-js-and-pack",
22
+ "acId": "AC-1701-1",
23
+ "description": "Pack loader loads both .pack.js and .pack.mjs; validates packName pattern and blueprint-slug prefix; refuses non-array checks[] with exit 2 diagnostic",
24
+ "status": "pending",
25
+ "testPointer": "test/browser-verify/pack-loader.test.js::loadProbePacks accepts .pack.js and .pack.mjs and reports one loaded pack per legal module"
26
+ },
27
+ {
28
+ "id": "TC-046-applicability-predicate-source-scan",
29
+ "acId": "AC-1701-2",
30
+ "description": "Applicability predicate source-scan refuses unqualified predicate () => true and refuses a predicate that references none of route, tacIds, blueprint:; appliesTo returning false records applicable=false",
31
+ "status": "pending",
32
+ "testPointer": "test/browser-verify/pack-loader.test.js::applicability predicate refuses unqualified default and records applicable=false when appliesTo returns false"
33
+ },
34
+ {
35
+ "id": "TC-046-loader-refuses-at-exit-2-a-pack-whose",
36
+ "acId": "AC-1701-3",
37
+ "description": "Loader refuses at exit 2 a pack whose checks[].id names an AC id the blueprint does not contribute; the diagnostic names the offending id and the contributed AC ids",
38
+ "status": "pending",
39
+ "testPointer": "test/browser-verify/pack-loader.test.js::loader refuses a pack whose check id names an AC the blueprint does not contribute"
40
+ },
41
+ {
42
+ "id": "TC-046-runner-pack-pass-invokes-each-check-s",
43
+ "acId": "AC-1701-4",
44
+ "description": "Runner pack pass invokes each check's run with injected browser and fetch, folds results into probePacks[], and aggregate verdict extension blocks on severity block fail and warns on severity warn fail",
45
+ "status": "pending",
46
+ "testPointer": "test/browser-verify/pack-runner.test.js::runProbePacksForFbs folds probePacks[] onto the record and the aggregate verdict extension blocks on a block-severity pack fail"
47
+ },
48
+ {
49
+ "id": "TC-046-cli-probe-pack-option-restricts-to-one",
50
+ "acId": "AC-1701-5",
51
+ "description": "CLI --probe-pack option restricts to one pack by name; unknown name exits 2 with a diagnostic naming the discovered packs; when omitted every discovered pack runs",
52
+ "status": "pending",
53
+ "testPointer": "test/cli/browser-verify-probe-pack.test.js::rcf verify browser --probe-pack restricts to one pack and exits 2 on unknown pack name"
54
+ },
55
+ {
56
+ "id": "TC-046-prechecks-runs-before-browser-checks-a",
57
+ "acId": "AC-1701-6",
58
+ "description": "preChecks[] runs before browser checks; a failing pre-check skips only browser checks that name it under dependsOn with verdict skipped and detail skipped-by-pre-check; other checks still run",
59
+ "status": "pending",
60
+ "testPointer": "test/browser-verify/pack-runner.test.js::preChecks fast-fail skips browser checks that dependsOn a failing pre-check"
61
+ },
62
+ {
63
+ "id": "TC-046-pack-browser-evaluate-parser",
64
+ "acId": "AC-1701-7",
65
+ "description": "The Playwright-MCP stdio client parses browser_evaluate result blocks (both the '### Result' fenced form used by MCP 0.0.80+ and the legacy 'Result:' trailer) into typed JS values so a pack's check can assert on the value directly",
66
+ "status": "pending",
67
+ "testPointer": "test/browser-verify/pack-browser.test.js::parseEvaluateResult returns a parsed JSON value when the MCP block ends with Result: <json>"
68
+ },
69
+ {
70
+ "id": "TC-046-boot-skips-when-runtime-reachable",
71
+ "acId": "AC-1701-8",
72
+ "description": "bootIfNeeded returns already-up when the runtime URL responds with any HTTP status; returns no-boot / no-boot-command when the pack declares no boot / no bootCommand; spawns bootCommand and reports started when the URL flips to reachable; SIGTERMs the child on stop()",
73
+ "status": "pending",
74
+ "testPointer": "test/browser-verify/boot.test.js::bootIfNeeded spawns bootCommand, polls until waitForUrl responds, then reports started"
75
+ }
76
+ ],
77
+ "status": "draft"
78
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "createdAt": "2026-09-04T20:05:51.932Z",
3
+ "updatedAt": "2026-09-04T20:09:33.956Z",
4
+ "purpose": "Cover AC-1801-1..5 via unit tests over the shipped application-datatable blueprint's contribution counts (six REQs, nine USs, three TACs, four ADRs, 27 ACs total), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids, the pack schema accepting the pack's applicability predicate (references route and tacIds), and the sample-app fixture's exported startServer plus /api/rows shape.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-1801-1",
8
+ "AC-1801-2",
9
+ "AC-1801-3",
10
+ "AC-1801-4",
11
+ "AC-1801-5"
12
+ ],
13
+ "id": "TS-047",
14
+ "usId": "US-1801",
15
+ "title": "application-datatable v1.0.0 shelf shape and probe pack cross-check",
16
+ "testCases": [
17
+ {
18
+ "id": "TC-047-blueprint-json-declares-slug-application",
19
+ "acId": "AC-1801-1",
20
+ "description": "blueprint.json declares slug application-datatable, version 1.0.0, category application, 22 contributions in 6 REQ / 9 US / 3 TAC / 4 ADR groups, and suggestedCompanions declares logging and errorHandling",
21
+ "status": "pending",
22
+ "testPointer": "test/blueprint/application-datatable-anatomy.test.js::application-datatable: blueprint.json declares the ratified shape (TC-047-blueprint-json-shape)"
23
+ },
24
+ {
25
+ "id": "TC-047-fresh-init-project-applies-the-blueprint",
26
+ "acId": "AC-1801-2",
27
+ "description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 6 REQs and 9 USs land under the application-datatable prefix",
28
+ "status": "pending",
29
+ "testPointer": "test/blueprint/application-datatable-anatomy.test.js::application-datatable: applies cleanly on a fresh init project and adds 22 documents to the tree (TC-047-applies-clean)"
30
+ },
31
+ {
32
+ "id": "TC-047-every-pack-check-id-resolves-to-an-ac-id",
33
+ "acId": "AC-1801-3",
34
+ "description": "Every pack check id resolves to an AC id contributed by the blueprint; expected six check ids in the same order as the spec",
35
+ "status": "pending",
36
+ "testPointer": "test/blueprint/application-datatable-anatomy.test.js::application-datatable: every AC id in each contributed US matches the pack check ids and vice versa where anchored (TC-047-pack-checks-cross-check)"
37
+ },
38
+ {
39
+ "id": "TC-047-sample-app-fixture-startserver-serves",
40
+ "acId": "AC-1801-4",
41
+ "description": "Sample-app fixture startServer serves /api/rows honouring sort, q, page and pageSize; loaders discovery finds the shipped pack against an applied scratch project",
42
+ "status": "pending",
43
+ "testPointer": "test/blueprint/application-datatable-anatomy.test.js::application-datatable sample-app fixture: startServer returns rows on /api/rows with sort, q, page and pageSize (TC-047-fixture-api-rows)"
44
+ },
45
+ {
46
+ "id": "TC-047-pack-loader-against-blueprint-discovers",
47
+ "acId": "AC-1801-5",
48
+ "description": "pack loader against blueprint discovers exactly one pack with six checks; the pack cross-check test proves the pack refuses ship on broken fixture at the section 9 T-1 row 3 gate the reviewer runs against a live server",
49
+ "status": "pending",
50
+ "testPointer": "test/blueprint/application-datatable-anatomy.test.js::application-datatable: pack loader discovers the shipped pack against an applied scratch project (TC-047-pack-loader-discovers)"
51
+ }
52
+ ],
53
+ "status": "draft"
54
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "createdAt": "2026-09-04T21:08:44.011Z",
3
+ "updatedAt": "2026-09-04T21:09:34.444Z",
4
+ "purpose": "Cover AC-1901-1..5 via unit tests over the shipped application-charts blueprint's contribution counts (four REQs, six USs, two TACs, three ADRs, 15 contributions total), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids and every check carrying a description, the pack schema accepting the pack's applicability predicate (references route and tacIds), the sample-app fixture exporting startServer serving a chart route with two-series bar and line charts (colour plus pattern plus direct label) and a text-alternative table with keyboard focus and reduced-motion suppression, and the negative-run behaviour on the ?break=table, ?break=pattern and ?break=keyboard switches.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-1901-1",
8
+ "AC-1901-2",
9
+ "AC-1901-3",
10
+ "AC-1901-4",
11
+ "AC-1901-5"
12
+ ],
13
+ "id": "TS-048",
14
+ "usId": "US-1901",
15
+ "title": "application-charts v1.0.0 shelf shape and probe pack cross-check",
16
+ "testCases": [
17
+ {
18
+ "id": "TC-048-blueprint-json-shape",
19
+ "acId": "AC-1901-1",
20
+ "description": "blueprint.json declares slug application-charts, version 1.0.0, category application, 15 contributions in 4 REQ / 6 US / 2 TAC / 3 ADR groups, and suggestedCompanions declares logging and errorHandling",
21
+ "status": "pending",
22
+ "testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts: blueprint.json declares the ratified shape (TC-048-blueprint-json-shape)"
23
+ },
24
+ {
25
+ "id": "TC-048-applies-clean",
26
+ "acId": "AC-1901-2",
27
+ "description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 4 REQs and 6 USs land under the application-charts prefix",
28
+ "status": "pending",
29
+ "testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts: applies cleanly on a fresh init project and adds 15 documents to the tree (TC-048-applies-clean)"
30
+ },
31
+ {
32
+ "id": "TC-048-pack-checks-cross-check",
33
+ "acId": "AC-1901-3",
34
+ "description": "Every pack check id resolves to an AC id contributed by the blueprint; expected three check ids in the same order as the spec (AC-18102-1, AC-18103-1, AC-18104-1) and every check carries a description field",
35
+ "status": "pending",
36
+ "testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts: every AC id in each contributed US matches the pack check ids and every check carries a description (TC-048-pack-checks-cross-check)"
37
+ },
38
+ {
39
+ "id": "TC-048-fixture-charts-render",
40
+ "acId": "AC-1901-4",
41
+ "description": "Sample-app fixture startServer renders a chart route with two-series bar and line charts (colour plus pattern plus direct label), a visually-hidden focus-reachable table, keyboard-focusable data points and a reduced-motion CSS rule; loader discovery finds the shipped pack against an applied scratch project",
42
+ "status": "pending",
43
+ "testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts sample-app fixture: startServer renders the chart shell (TC-048-fixture-charts-render)"
44
+ },
45
+ {
46
+ "id": "TC-048-negative-runs",
47
+ "acId": "AC-1901-5",
48
+ "description": "The pack refuses ship on each broken variant: ?break=table triggers verdict fail on AC-18103-1; ?break=pattern triggers verdict fail on AC-18102-1; ?break=keyboard triggers verdict fail on AC-18104-1; every failure records severity block and the aggregate verdict is block",
49
+ "status": "pending",
50
+ "testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts sample-app fixture: break switches refuse ship on each surface (TC-048-negative-runs)"
51
+ }
52
+ ],
53
+ "status": "draft"
54
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "createdAt": "2026-09-04T22:10:00.000Z",
3
+ "updatedAt": "2026-09-04T22:10:00.000Z",
4
+ "purpose": "Cover AC-2001-1..7 via unit tests over the shipped application-dashboard blueprint's contribution counts (five REQs, seven USs, three TACs, three ADRs, 18 contributions total), the packaged design-guidance asset shape (eight sections and at least five https citations), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids and every check carrying a description, the pack schema accepting the pack's applicability predicate (references tacIds), the sample-app fixture exporting startServer serving a dashboard route with a primary-KPI-top-left tile grid, a paired chart region, a timeframe preset picker refetching every tile with the same from/to boundary and matching as-of stamp, per-tile four states, an export handle, a request log surface and a reflow to one column at 360, and the negative-run behaviour on the ?break=kpi-position, ?break=fanout and ?break=state-aria switches, plus a unit test for the pack-browser resize seam extension.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-2001-1",
8
+ "AC-2001-2",
9
+ "AC-2001-3",
10
+ "AC-2001-4",
11
+ "AC-2001-5",
12
+ "AC-2001-6",
13
+ "AC-2001-7"
14
+ ],
15
+ "id": "TS-049",
16
+ "usId": "US-2001",
17
+ "title": "application-dashboard v1.0.0 shelf shape, packaged guidance, probe pack cross-check and resize seam",
18
+ "testCases": [
19
+ {
20
+ "id": "TC-049-blueprint-json-shape",
21
+ "acId": "AC-2001-1",
22
+ "description": "blueprint.json declares slug application-dashboard, version 1.0.0, category application, 18 contributions in 5 REQ / 7 US / 3 TAC / 3 ADR groups, providesRoles empty array, suggestedCompanions declares logging and errorHandling",
23
+ "status": "pending",
24
+ "testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: blueprint.json declares the ratified shape (TC-049-blueprint-json-shape)"
25
+ },
26
+ {
27
+ "id": "TC-049-applies-clean",
28
+ "acId": "AC-2001-2",
29
+ "description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 5 REQs and 7 USs land under the application-dashboard prefix",
30
+ "status": "pending",
31
+ "testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: applies cleanly on a fresh init project and adds 18 documents to the tree (TC-049-applies-clean)"
32
+ },
33
+ {
34
+ "id": "TC-049-guidance-asset",
35
+ "acId": "AC-2001-3",
36
+ "description": "assets/guidance/dashboard-design.md carries the eight ratified section headings and at least five https:// citations from the named sources",
37
+ "status": "pending",
38
+ "testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: packaged design-guidance asset carries eight sections and five https citations (TC-049-guidance-asset)"
39
+ },
40
+ {
41
+ "id": "TC-049-pack-checks-cross-check",
42
+ "acId": "AC-2001-4",
43
+ "description": "Every pack check id resolves to an AC id contributed by the blueprint; expected three check ids in the spec's order (AC-19102-1, AC-19104-1, AC-19103-1); every check carries a description field; applicability predicate references tacIds",
44
+ "status": "pending",
45
+ "testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: every pack check id matches a contributed AC id, every check carries a description, appliesTo binds tacIds (TC-049-pack-checks-cross-check)"
46
+ },
47
+ {
48
+ "id": "TC-049-fixture-dashboard-render",
49
+ "acId": "AC-2001-5",
50
+ "description": "Sample-app fixture startServer renders a dashboard route with a primary KPI top-left tile, a paired chart region, timeframe preset controls, per-tile state switches, an export handle and a request log; loader discovery finds the shipped pack against an applied scratch project",
51
+ "status": "pending",
52
+ "testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard sample-app fixture: startServer renders the dashboard shell (TC-049-fixture-dashboard-render)"
53
+ },
54
+ {
55
+ "id": "TC-049-negative-runs",
56
+ "acId": "AC-2001-6",
57
+ "description": "The pack refuses ship on each broken variant: ?break=kpi-position triggers verdict fail on AC-19102-1; ?break=fanout triggers verdict fail on AC-19104-1; ?break=state-aria triggers verdict fail on AC-19103-1; every failure records severity block and the aggregate verdict is block",
58
+ "status": "pending",
59
+ "testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard sample-app fixture: break switches refuse ship on each surface (TC-049-negative-runs)"
60
+ },
61
+ {
62
+ "id": "TC-049-resize-seam",
63
+ "acId": "AC-2001-7",
64
+ "description": "pack-browser exposes resize(width, height); the project-route handle drives page.setViewportSize with the given dimensions and the same handle can be re-queried through window.innerWidth after a resize call",
65
+ "status": "pending",
66
+ "testPointer": "test/browser-verify/pack-browser-resize.test.js::pack-browser: resize dimension normalisation rounds finite positive numbers (TC-049-resize-seam)"
67
+ }
68
+ ],
69
+ "status": "draft"
70
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "createdAt": "2026-09-04T23:59:00.000Z",
3
+ "updatedAt": "2026-09-04T23:59:00.000Z",
4
+ "purpose": "Cover AC-2101-1..6 via unit tests over the shipped application-notifications-in-app blueprint's contribution counts (five REQs, eight USs, three TACs, three ADRs, 19 contributions total), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids, every check carrying a description, and the AC-20101-1 description containing the word 'preseeded' per section 9 T-4 row, the pack schema accepting the pack's applicability predicate (references BOTH tacIds AND route), the sample-app fixture exporting startServer serving the three routes with the live-region preseeding, the notification centre backlog, the acknowledge round-trip and the preferences UI, and the negative-run behaviour on the ?break=preseed, ?break=role, ?break=timeout and ?break=ack switches, plus the family-prefix reservation documented in the blueprint README and every shelf topics.md registry row.",
5
+ "testLevel": "unit",
6
+ "acIds": [
7
+ "AC-2101-1",
8
+ "AC-2101-2",
9
+ "AC-2101-3",
10
+ "AC-2101-4",
11
+ "AC-2101-5",
12
+ "AC-2101-6"
13
+ ],
14
+ "id": "TS-050",
15
+ "usId": "US-2101",
16
+ "title": "application-notifications-in-app v1.0.0 shelf shape, probe pack cross-check, sample-app fixture and family-prefix reservation",
17
+ "testCases": [
18
+ {
19
+ "id": "TC-050-blueprint-json-shape",
20
+ "acId": "AC-2101-1",
21
+ "description": "blueprint.json declares slug application-notifications-in-app, version 1.0.0, category application, 19 contributions in 5 REQ / 8 US / 3 TAC / 3 ADR groups, providesRoles absent, suggestedCompanions declares logging and errorHandling",
22
+ "status": "pending",
23
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: blueprint.json declares the ratified shape (TC-050-blueprint-json-shape)"
24
+ },
25
+ {
26
+ "id": "TC-050-applies-clean",
27
+ "acId": "AC-2101-2",
28
+ "description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 5 REQs and 8 USs land under the application-notifications-in-app prefix",
29
+ "status": "pending",
30
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: applies cleanly on a fresh init project and adds 19 documents to the tree (TC-050-applies-clean)"
31
+ },
32
+ {
33
+ "id": "TC-050-pack-checks-cross-check",
34
+ "acId": "AC-2101-3",
35
+ "description": "Every pack check id resolves to an AC id contributed by the blueprint; expected three check ids (AC-20101-1, AC-20102-1, AC-20103-1); every check carries a description; AC-20101-1 description contains the word 'preseeded' per spec section 9 T-4 row; applicability predicate references BOTH tacIds and route",
36
+ "status": "pending",
37
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: every pack check id matches a contributed AC id, description discipline holds, appliesTo binds tacIds AND route (TC-050-pack-checks-cross-check)"
38
+ },
39
+ {
40
+ "id": "TC-050-fixture-preseeding",
41
+ "acId": "AC-2101-4",
42
+ "description": "Sample-app fixture startServer serves the main, centre and preferences routes; every route preseeds both live-region wrappers empty at load; the centre lists the seeded backlog with data-notification-id enumeration and acknowledge / mark-read / mark-all-read controls; the preferences route renders category silence toggles and sibling-channel sections disabled",
43
+ "status": "pending",
44
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app sample-app fixture: preseeds live regions on every route (TC-050-fixture-preseeding)"
45
+ },
46
+ {
47
+ "id": "TC-050-fixture-acknowledge",
48
+ "acId": "AC-2101-4",
49
+ "description": "POST /api/notifications/acknowledge updates the seeded delivery-log row's acknowledgedAt and returns {ok:true}; GET /api/delivery-log returns the seeded rows; /__requests mirrors the server-side record log",
50
+ "status": "pending",
51
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app sample-app fixture: acknowledge round-trips through /api/notifications/acknowledge and delivery-log endpoint returns the seeded rows (TC-050-fixture-acknowledge)"
52
+ },
53
+ {
54
+ "id": "TC-050-negative-runs",
55
+ "acId": "AC-2101-5",
56
+ "description": "?break=preseed drops the wrappers from the initial DOM; ?break=role inverts the priority-to-role mapping in the client script (an error toast lands in the polite wrapper as role=status); ?break=timeout advertises a two-second floor on data-toast-timeout-floor-seconds; ?break=ack renders the acknowledge control with no click POST",
57
+ "status": "pending",
58
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app sample-app fixture: break switches surface the four defects on the DOM (TC-050-negative-runs)"
59
+ },
60
+ {
61
+ "id": "TC-050-family-prefix-reservation",
62
+ "acId": "AC-2101-6",
63
+ "description": "The family-prefix reservation is present in the blueprint README (a paragraph naming application-notifications- reserved for the sibling channels -email, -push, -webhook) and in the shelf band registry table in every applying blueprint's docs/topics.md",
64
+ "status": "pending",
65
+ "testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: family-prefix reservation documented in blueprint README and own topics.md (TC-050-family-prefix-reservation)"
66
+ }
67
+ ],
68
+ "status": "draft"
69
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "createdAt": "2026-09-05T01:30:00.000Z",
3
+ "updatedAt": "2026-09-05T01:30:00.000Z",
4
+ "purpose": "Cover AC-2201-1..9 via unit tests over the blueprint loader accepting capabilities[], elicits[] and requiresAppliedCapabilities with shape validation, applyBlueprint discovering applied capabilities from the applied blueprints source blueprint.json files, refusing on a bare-SPA project with the spec 5.5.1 message, honouring --allow-no-auth-yet, running the elicitation phase with --answer and --answers, writing the sidecar rcf/blueprints/${slug}.applied.json with appliedCapabilities and appliedElicitations, the four shelf auth blueprints declaring their capabilities[] in their v1.1.0 minor bumps with matching CHANGELOG entries, and docs/blueprint-authoring.md section 6a carrying the extended capability vocabulary table.",
5
+ "testLevel": "unit",
6
+ "acIds": ["AC-2201-1", "AC-2201-2", "AC-2201-3", "AC-2201-4", "AC-2201-5", "AC-2201-6", "AC-2201-7", "AC-2201-8", "AC-2201-9"],
7
+ "id": "TS-051",
8
+ "usId": "US-2201",
9
+ "title": "Capability-declaration mechanism loader and apply verb behaviour; four auth-blueprint 1.1.0 minor adoption",
10
+ "testCases": [
11
+ {"id": "TC-051-loader-capabilities-shape", "acId": "AC-2201-1", "description": "loader accepts capabilities[] on shape; refuses empty array, refuses non-string entries, refuses non-camelCase strings", "status": "pending", "testPointer": "test/blueprint/capabilities-loader.test.js::loader accepts capabilities[] shape and refuses malformed variants (TC-051-loader-capabilities-shape)"},
12
+ {"id": "TC-051-loader-elicits-shape", "acId": "AC-2201-2", "description": "loader accepts elicits[] on shape; refuses empty array, refuses invalid kind, refuses em-dash in prompt, refuses missing options on kind=enum", "status": "pending", "testPointer": "test/blueprint/capabilities-loader.test.js::loader accepts elicits[] shape and refuses malformed variants (TC-051-loader-elicits-shape)"},
13
+ {"id": "TC-051-loader-requires-shape", "acId": "AC-2201-3", "description": "loader accepts requiresAppliedCapabilities object shape; refuses empty capabilities array, refuses non-kebab allowSkipFlag", "status": "pending", "testPointer": "test/blueprint/capabilities-loader.test.js::loader accepts requiresAppliedCapabilities shape and refuses malformed variants (TC-051-loader-requires-shape)"},
14
+ {"id": "TC-051-apply-discovery-refuse", "acId": "AC-2201-4", "description": "applyBlueprint returns a requiresAppliedCapabilities rcfError when no applied blueprint declares any required capability and allowNoAuthYet is false; message body includes the spec 5.5.1 verbatim opening line and lists the currently-applied blueprints", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply refuses with requiresAppliedCapabilities rcfError on a bare project (TC-051-apply-discovery-refuse)"},
15
+ {"id": "TC-051-apply-allow-skip", "acId": "AC-2201-5", "description": "applyBlueprint with allowNoAuthYet true writes contributions and sidecar with allowNoAuthYet true and a notes string naming the no-auth-yet state; manifest applied record is untouched", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply honours allowNoAuthYet and writes sidecar with notes (TC-051-apply-allow-skip)"},
16
+ {"id": "TC-051-elicit-answers", "acId": "AC-2201-6", "description": "applyBlueprint reads elicitAnswers map; every elicit whose when-predicate resolves true against discovered capabilities is coerced by kind; missing required answer returns validation rcfError naming id", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply elicitation phase coerces answers by kind and refuses missing required (TC-051-elicit-answers)"},
17
+ {"id": "TC-051-sidecar-write", "acId": "AC-2201-7", "description": "applyBlueprint writes rcf/blueprints/${slug}.applied.json with slug, version, appliedAt, appliedCapabilities and appliedElicitations; re-apply on same version rewrites the file idempotently", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply writes sidecar with appliedCapabilities and appliedElicitations idempotently (TC-051-sidecar-write)"},
18
+ {"id": "TC-051-auth-minors", "acId": "AC-2201-8", "description": "The four shelf auth blueprints declare capabilities[] and correct new versions; each CHANGELOG.md carries a new entry naming the capabilities added and citing spec section 5.5.2", "status": "pending", "testPointer": "test/blueprint/capabilities-auth-minors.test.js::the four shelf auth blueprints declare capabilities[] and matching CHANGELOG entries (TC-051-auth-minors)"},
19
+ {"id": "TC-051-docs-section-6a", "acId": "AC-2201-9", "description": "packages/rcf-lite/docs/blueprint-authoring.md section 6a includes the capability vocabulary table with the four capability strings and their shelf providers; the section text cross-references capabilities[] and requiresAppliedCapabilities as loader fields", "status": "pending", "testPointer": "test/blueprint/capabilities-auth-minors.test.js::docs blueprint-authoring section 6a carries the capability vocabulary table (TC-051-docs-section-6a)"}
20
+ ],
21
+ "status": "draft"
22
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "createdAt": "2026-09-05T01:30:00.000Z",
3
+ "updatedAt": "2026-09-05T01:30:00.000Z",
4
+ "purpose": "Cover AC-2301-1..7 via unit tests over the shipped application-admin-console blueprint.json contribution shape (23 contributions in 6 REQ / 9 US / 4 TAC / 4 ADR groups), the requiresAppliedCapabilities and elicits[] declarations, the pack-loader accepting the shipped pack file with every check id cross-checked against blueprint AC ids, the pack appliesTo predicate discipline (references BOTH tacIds and route), the sample-app fixture serving the console shell with the ARIA APG grid permission matrix, the CAPS switch surface selector, the users directory, org switcher, audit-log table with correlation id, access-denied and request-access control, and the negative-run behaviour on the ?break=matrix-grid, ?break=denied and ?break=audit-fields switches.",
5
+ "testLevel": "unit",
6
+ "acIds": ["AC-2301-1", "AC-2301-2", "AC-2301-3", "AC-2301-4", "AC-2301-5", "AC-2301-6", "AC-2301-7"],
7
+ "id": "TS-052",
8
+ "usId": "US-2301",
9
+ "title": "application-admin-console v1.0.0 shelf shape, capability discovery, probe pack cross-check and sample-app fixture",
10
+ "testCases": [
11
+ {"id": "TC-052-blueprint-json-shape", "acId": "AC-2301-1", "description": "blueprint.json declares 23 contributions with requiresAppliedCapabilities and elicits[]", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::blueprint.json declares 23 contributions with requiresAppliedCapabilities and elicits[] (TC-052-blueprint-json-shape)"},
12
+ {"id": "TC-052-applies-clean-with-override", "acId": "AC-2301-2", "description": "Fresh init project applies admin-console --allow-no-auth-yet and writes sidecar with allowNoAuthYet true", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::apply --allow-no-auth-yet on bare SPA writes sidecar with allowNoAuthYet:true and empty appliedCapabilities (TC-052-applies-clean-with-override)"},
13
+ {"id": "TC-052-refuses-bare-spa", "acId": "AC-2301-3", "description": "Fresh init project without auth refuses admin-console apply with exit 3 and spec 5.5.1 message", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::apply refuses on bare SPA with spec 5.5.1 verbatim message and lists applied blueprints (TC-052-refuses-bare-spa)"},
14
+ {"id": "TC-052-capability-discovery", "acId": "AC-2301-4", "description": "Discovery reads applied capabilities from applied blueprints", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::apply on magic-link project yields [principalDirectory] and on clerk+logging project yields [principalDirectory,roleModel,auditLog] (TC-052-capability-discovery)"},
15
+ {"id": "TC-052-pack-checks-cross-check", "acId": "AC-2301-5", "description": "Every pack check id matches contributed AC id and applies gates on capability", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::every pack check id matches a contributed AC id and appliesTo predicate gates on the applied capability (TC-052-pack-checks-cross-check)"},
16
+ {"id": "TC-052-fixture-surfaces", "acId": "AC-2301-6", "description": "Sample-app fixture serves the console shell with grid matrix and required data attributes", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::sample-app fixture serves console shell with ARIA APG grid permission matrix and required data attributes (TC-052-fixture-surfaces)"},
17
+ {"id": "TC-052-negative-runs", "acId": "AC-2301-7", "description": "Break switches surface the three defects on the DOM", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::sample-app fixture break switches surface the three defects on the DOM (TC-052-negative-runs)"}
18
+ ],
19
+ "status": "draft"
20
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "createdAt": "2026-09-04T16:21:28.205Z",
3
+ "updatedAt": "2026-09-04T16:22:01.527Z",
4
+ "description": "As a project owner shipping non-deterministic behaviour, I want rcf-lite to speak the eval-node surface at every stage of the build cycle so that a non-deterministic AC is graded, audited, verdict-annotated and merge-gated without me holding four disconnected mental models. The surface is one train: audit reports coverage, verify annotates per-AC verdicts, finalise refuses on missing / failing evals with an opt-out, and define authors the determinism flag.",
5
+ "usId": "US-1601",
6
+ "prdId": "PRD-001",
7
+ "reqId": "REQ-016",
8
+ "version": "0.1.0",
9
+ "status": "draft",
10
+ "title": "The four-track eval-node surface (audit / verdict / finalise / define) reads a single spec across four independent consumers",
11
+ "asA": "project owner shipping non-deterministic behaviour on an rcf-lite project",
12
+ "iWant": "rcf-lite to speak the eval-node surface at every stage of the build cycle",
13
+ "soThat": "a non-deterministic AC is graded, audited, verdict-annotated and merge-gated without me holding four disconnected mental models",
14
+ "acceptanceCriteria": [
15
+ {
16
+ "id": "AC-1601-1",
17
+ "description": "`rcf audit eval coverage --strict` exits 0 on a chain with zero nonDeterministic ACs and exits 4 on any nonDeterministic AC without a resolving EVAL (a non-superseded EVAL whose most recent runRecord entry is not pending). Non-strict runs always exit 0; the mermaid format colours the AC glyph green (deterministic), amber (covered) or red (missing).",
18
+ "testable": true
19
+ },
20
+ {
21
+ "id": "AC-1601-2",
22
+ "description": "The verify verdict layer emits EVAL-MISSING on any nonDeterministic AC without a resolving EVAL and EVAL-BELOW-THRESHOLD on any nonDeterministic AC whose bound EVAL last ran with verdict fail. Deterministic ACs never emit either verdict. Both entries ride report.perAcVerdicts[] without expanding the top-level VERDICTS set (backward compatibility on validateReportShape). runStats.evalCoverage rolls up the counts and the CLI prints the preflight line on stderr.",
23
+ "testable": true
24
+ },
25
+ {
26
+ "id": "AC-1601-3",
27
+ "description": "rcf finalise refuses (exit 4) with the spec-verbatim message when the verify report carries EVAL-MISSING or EVAL-BELOW-THRESHOLD, and accepts --ship-without-eval <reason> (mandatory reason string; exit 2 without one, refused when the value looks like a flag). The acknowledgement lands on the manifest under shipWithoutEval[] with a monotonic id, the reason, the declared per-AC verdicts and the report path.",
28
+ "testable": true
29
+ },
30
+ {
31
+ "id": "AC-1601-4",
32
+ "description": "The LLM-as-judge run path spawns claude (or codex) on PATH, passes the per-case payload on stdin, captures stdout, validates against the declared response schema and composes a runRecord[] entry (aggregateScore, criticalFailures, verdict). No API keys or HTTP APIs enter rcf-lite; the estate subscription-only rule holds. The grader's aggregate verdict is a non-deterministic judgement over graded output, which is the correct home for an EVAL contract on the dogfood tree.",
33
+ "testable": true,
34
+ "determinism": "nonDeterministic"
35
+ }
36
+ ]
37
+ }