rcf-lite 0.27.0 → 0.28.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 (601) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +10 -0
  3. package/bin/rcf.js +2 -0
  4. package/blueprints/application-account-settings/CHANGELOG.md +35 -6
  5. package/blueprints/application-account-settings/README.md +1 -1
  6. package/blueprints/application-account-settings/blueprint.json +4 -2
  7. package/blueprints/application-account-settings/contributions/adrs/adr-2602-application-account-settings-security-surface-shape.json +1 -1
  8. package/blueprints/application-account-settings/contributions/probes/probe-utils.mjs +177 -0
  9. package/blueprints/application-account-settings/contributions/probes/profile-form-autocomplete.mjs +67 -0
  10. package/blueprints/application-account-settings/contributions/probes/run-profile-form-autocomplete.mjs +5 -0
  11. package/blueprints/application-account-settings/contributions/probes/run-sessions-adapter-uniform.mjs +5 -0
  12. package/blueprints/application-account-settings/contributions/probes/run-sessions-surface-shape.mjs +5 -0
  13. package/blueprints/application-account-settings/contributions/probes/run-shell-tablist-per-capability.mjs +5 -0
  14. package/blueprints/application-account-settings/contributions/probes/run-theme-radiogroup.mjs +5 -0
  15. package/blueprints/application-account-settings/contributions/probes/sessions-adapter-uniform.mjs +130 -0
  16. package/blueprints/application-account-settings/contributions/probes/sessions-surface-shape.mjs +70 -0
  17. package/blueprints/application-account-settings/contributions/probes/shell-tablist-per-capability.mjs +60 -0
  18. package/blueprints/application-account-settings/contributions/probes/theme-radiogroup.mjs +126 -0
  19. package/blueprints/application-admin-console/CHANGELOG.md +32 -6
  20. package/blueprints/application-admin-console/README.md +1 -1
  21. package/blueprints/application-admin-console/blueprint.json +4 -2
  22. package/blueprints/application-admin-console/contributions/adrs/adr-2201-application-admin-console-capability-vocabulary.json +1 -1
  23. package/blueprints/application-admin-console/contributions/probes/audit-log-surface.mjs +79 -0
  24. package/blueprints/application-admin-console/contributions/probes/org-switcher-surface.mjs +83 -0
  25. package/blueprints/application-admin-console/contributions/probes/permission-matrix-grid.mjs +67 -0
  26. package/blueprints/application-admin-console/contributions/probes/probe-utils.mjs +177 -0
  27. package/blueprints/application-admin-console/contributions/probes/run-audit-log-surface.mjs +5 -0
  28. package/blueprints/application-admin-console/contributions/probes/run-org-switcher-surface.mjs +5 -0
  29. package/blueprints/application-admin-console/contributions/probes/run-permission-matrix-grid.mjs +5 -0
  30. package/blueprints/application-admin-console/contributions/probes/run-sign-in-access-gated-surface.mjs +5 -0
  31. package/blueprints/application-admin-console/contributions/probes/run-users-directory-surface.mjs +5 -0
  32. package/blueprints/application-admin-console/contributions/probes/sign-in-access-gated-surface.mjs +117 -0
  33. package/blueprints/application-admin-console/contributions/probes/users-directory-surface.mjs +145 -0
  34. package/blueprints/application-api-rest/CHANGELOG.md +16 -8
  35. package/blueprints/application-api-rest/README.md +3 -3
  36. package/blueprints/application-api-rest/blueprint.json +3 -2
  37. package/blueprints/application-api-rest/contributions/adrs/adr-302-application-api-rest-auth-model.json +1 -1
  38. package/blueprints/application-api-rest/contributions/probes/cursor-pagination-round-trip.mjs +154 -0
  39. package/blueprints/application-api-rest/contributions/probes/health-probes-distinct.mjs +124 -0
  40. package/blueprints/application-api-rest/contributions/probes/probe-utils.mjs +177 -0
  41. package/blueprints/application-api-rest/contributions/probes/problem-details-on-error.mjs +77 -0
  42. package/blueprints/application-api-rest/contributions/probes/request-id-echoed.mjs +76 -0
  43. package/blueprints/application-api-rest/contributions/probes/run-cursor-pagination-round-trip.mjs +5 -0
  44. package/blueprints/application-api-rest/contributions/probes/run-health-probes-distinct.mjs +5 -0
  45. package/blueprints/application-api-rest/contributions/probes/run-problem-details-on-error.mjs +5 -0
  46. package/blueprints/application-api-rest/contributions/probes/run-request-id-echoed.mjs +5 -0
  47. package/blueprints/application-api-rest/docs/topics.md +1 -1
  48. package/blueprints/application-charts/CHANGELOG.md +35 -9
  49. package/blueprints/application-charts/README.md +6 -6
  50. package/blueprints/application-charts/blueprint.json +5 -3
  51. package/blueprints/application-charts/contributions/adrs/adr-1901-application-charts-engine-choice.json +1 -1
  52. package/blueprints/application-charts/contributions/probes/keyboard-traversal.mjs +151 -0
  53. package/blueprints/application-charts/contributions/probes/non-colour-distinction.mjs +67 -0
  54. package/blueprints/application-charts/contributions/probes/probe-utils.mjs +177 -0
  55. package/blueprints/application-charts/contributions/probes/run-keyboard-traversal.mjs +5 -0
  56. package/blueprints/application-charts/contributions/probes/run-non-colour-distinction.mjs +5 -0
  57. package/blueprints/application-charts/contributions/probes/run-text-alternative-table.mjs +5 -0
  58. package/blueprints/application-charts/contributions/probes/text-alternative-table.mjs +139 -0
  59. package/blueprints/application-charts/contributions/requirements/application-charts-req-001.json +1 -1
  60. package/blueprints/application-charts/contributions/requirements/application-charts-req-002.json +1 -1
  61. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18101.json +5 -5
  62. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18106.json +1 -1
  63. package/blueprints/application-charts/guide/application-charts.md +1 -1
  64. package/blueprints/application-dashboard/CHANGELOG.md +20 -10
  65. package/blueprints/application-dashboard/README.md +6 -6
  66. package/blueprints/application-dashboard/assets/guidance/dashboard-design.md +2 -2
  67. package/blueprints/application-dashboard/blueprint.json +3 -2
  68. package/blueprints/application-dashboard/contributions/adrs/adr-2001-application-dashboard-primary-kpi-enum.json +1 -1
  69. package/blueprints/application-dashboard/contributions/adrs/adr-2002-application-dashboard-timeframe-presets.json +1 -1
  70. package/blueprints/application-dashboard/contributions/probes/export-handle-formats.mjs +75 -0
  71. package/blueprints/application-dashboard/contributions/probes/four-tile-states.mjs +75 -0
  72. package/blueprints/application-dashboard/contributions/probes/primary-kpi-top-left.mjs +58 -0
  73. package/blueprints/application-dashboard/contributions/probes/probe-utils.mjs +177 -0
  74. package/blueprints/application-dashboard/contributions/probes/run-export-handle-formats.mjs +4 -0
  75. package/blueprints/application-dashboard/contributions/probes/run-four-tile-states.mjs +4 -0
  76. package/blueprints/application-dashboard/contributions/probes/run-primary-kpi-top-left.mjs +4 -0
  77. package/blueprints/application-dashboard/contributions/probes/run-shell-five-regions.mjs +4 -0
  78. package/blueprints/application-dashboard/contributions/probes/shell-five-regions.mjs +93 -0
  79. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-002.json +1 -1
  80. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-003.json +1 -1
  81. package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +1 -1
  82. package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +2 -2
  83. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19101.json +2 -2
  84. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19102.json +2 -2
  85. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19103.json +1 -1
  86. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19104.json +1 -1
  87. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19105.json +1 -1
  88. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +2 -2
  89. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19107.json +5 -5
  90. package/blueprints/application-dashboard/docs/topics.md +2 -2
  91. package/blueprints/application-dashboard/guide/application-dashboard.md +2 -2
  92. package/blueprints/application-datatable/CHANGELOG.md +19 -9
  93. package/blueprints/application-datatable/README.md +2 -2
  94. package/blueprints/application-datatable/blueprint.json +3 -2
  95. package/blueprints/application-datatable/contributions/probes/apg-table-shape.mjs +57 -0
  96. package/blueprints/application-datatable/contributions/probes/four-states-regions.mjs +80 -0
  97. package/blueprints/application-datatable/contributions/probes/probe-utils.mjs +177 -0
  98. package/blueprints/application-datatable/contributions/probes/run-apg-table-shape.mjs +4 -0
  99. package/blueprints/application-datatable/contributions/probes/run-four-states-regions.mjs +4 -0
  100. package/blueprints/application-datatable/contributions/probes/run-search-adapter-round-trip.mjs +4 -0
  101. package/blueprints/application-datatable/contributions/probes/run-sort-adapter-round-trip.mjs +4 -0
  102. package/blueprints/application-datatable/contributions/probes/search-adapter-round-trip.mjs +58 -0
  103. package/blueprints/application-datatable/contributions/probes/sort-adapter-round-trip.mjs +60 -0
  104. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-006.json +1 -1
  105. package/blueprints/application-datatable/docs/topics.md +1 -1
  106. package/blueprints/application-empty-error-states/CHANGELOG.md +33 -3
  107. package/blueprints/application-empty-error-states/blueprint.json +4 -2
  108. package/blueprints/application-empty-error-states/contributions/probes/empty-list-and-no-search.mjs +66 -0
  109. package/blueprints/application-empty-error-states/contributions/probes/error-boundary-alert.mjs +65 -0
  110. package/blueprints/application-empty-error-states/contributions/probes/forbidden-and-server-error.mjs +167 -0
  111. package/blueprints/application-empty-error-states/contributions/probes/not-found-and-recovery.mjs +61 -0
  112. package/blueprints/application-empty-error-states/contributions/probes/permission-denied-and-offline.mjs +155 -0
  113. package/blueprints/application-empty-error-states/contributions/probes/probe-utils.mjs +177 -0
  114. package/blueprints/application-empty-error-states/contributions/probes/run-empty-list-and-no-search.mjs +5 -0
  115. package/blueprints/application-empty-error-states/contributions/probes/run-error-boundary-alert.mjs +5 -0
  116. package/blueprints/application-empty-error-states/contributions/probes/run-forbidden-and-server-error.mjs +5 -0
  117. package/blueprints/application-empty-error-states/contributions/probes/run-not-found-and-recovery.mjs +5 -0
  118. package/blueprints/application-empty-error-states/contributions/probes/run-permission-denied-and-offline.mjs +5 -0
  119. package/blueprints/application-error-handling/CHANGELOG.md +45 -6
  120. package/blueprints/application-error-handling/blueprint.json +3 -2
  121. package/blueprints/application-error-handling/contributions/probes/category-vocabulary.mjs +90 -0
  122. package/blueprints/application-error-handling/contributions/probes/probe-utils.mjs +177 -0
  123. package/blueprints/application-error-handling/contributions/probes/record-shape-adr-1701.mjs +78 -0
  124. package/blueprints/application-error-handling/contributions/probes/run-category-vocabulary.mjs +5 -0
  125. package/blueprints/application-error-handling/contributions/probes/run-record-shape-adr-1701.mjs +5 -0
  126. package/blueprints/application-error-handling/contributions/probes/run-two-boundaries-registered.mjs +5 -0
  127. package/blueprints/application-error-handling/contributions/probes/two-boundaries-registered.mjs +343 -0
  128. package/blueprints/application-file-upload/CHANGELOG.md +28 -6
  129. package/blueprints/application-file-upload/README.md +1 -1
  130. package/blueprints/application-file-upload/blueprint.json +3 -2
  131. package/blueprints/application-file-upload/contributions/probes/assertive-completion-slot.mjs +78 -0
  132. package/blueprints/application-file-upload/contributions/probes/chunked-transport-endpoints.mjs +173 -0
  133. package/blueprints/application-file-upload/contributions/probes/per-file-progressbar.mjs +124 -0
  134. package/blueprints/application-file-upload/contributions/probes/probe-utils.mjs +177 -0
  135. package/blueprints/application-file-upload/contributions/probes/run-assertive-completion-slot.mjs +4 -0
  136. package/blueprints/application-file-upload/contributions/probes/run-chunked-transport-endpoints.mjs +4 -0
  137. package/blueprints/application-file-upload/contributions/probes/run-per-file-progressbar.mjs +4 -0
  138. package/blueprints/application-file-upload/contributions/probes/run-upload-surface-shape.mjs +4 -0
  139. package/blueprints/application-file-upload/contributions/probes/upload-surface-shape.mjs +55 -0
  140. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +1 -1
  141. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +1 -1
  142. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +1 -1
  143. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +1 -1
  144. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +1 -1
  145. package/blueprints/application-file-upload/probe-packs/application-file-upload.pack.mjs +1 -1
  146. package/blueprints/application-forms-wizard/CHANGELOG.md +20 -6
  147. package/blueprints/application-forms-wizard/README.md +2 -2
  148. package/blueprints/application-forms-wizard/blueprint.json +3 -2
  149. package/blueprints/application-forms-wizard/contributions/probes/draft-persistence-round-trip.mjs +110 -0
  150. package/blueprints/application-forms-wizard/contributions/probes/probe-utils.mjs +177 -0
  151. package/blueprints/application-forms-wizard/contributions/probes/run-draft-persistence-round-trip.mjs +4 -0
  152. package/blueprints/application-forms-wizard/contributions/probes/run-step-page-shape.mjs +4 -0
  153. package/blueprints/application-forms-wizard/contributions/probes/run-task-list-surface.mjs +4 -0
  154. package/blueprints/application-forms-wizard/contributions/probes/step-page-shape.mjs +61 -0
  155. package/blueprints/application-forms-wizard/contributions/probes/task-list-surface.mjs +109 -0
  156. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +1 -1
  157. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +1 -1
  158. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +1 -1
  159. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +1 -1
  160. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +1 -1
  161. package/blueprints/application-forms-wizard/probe-packs/application-forms-wizard.pack.mjs +1 -1
  162. package/blueprints/application-notifications-in-app/CHANGELOG.md +38 -5
  163. package/blueprints/application-notifications-in-app/README.md +4 -4
  164. package/blueprints/application-notifications-in-app/blueprint.json +4 -2
  165. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2101-application-notifications-in-app-live-region-role-mapping.json +1 -1
  166. package/blueprints/application-notifications-in-app/contributions/probes/centre-acknowledge-round-trip.mjs +210 -0
  167. package/blueprints/application-notifications-in-app/contributions/probes/live-region-preseeding.mjs +93 -0
  168. package/blueprints/application-notifications-in-app/contributions/probes/probe-utils.mjs +177 -0
  169. package/blueprints/application-notifications-in-app/contributions/probes/run-centre-acknowledge-round-trip.mjs +5 -0
  170. package/blueprints/application-notifications-in-app/contributions/probes/run-live-region-preseeding.mjs +5 -0
  171. package/blueprints/application-notifications-in-app/contributions/probes/run-toast-contract.mjs +5 -0
  172. package/blueprints/application-notifications-in-app/contributions/probes/toast-contract.mjs +92 -0
  173. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +3 -3
  174. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +1 -1
  175. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +1 -1
  176. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +1 -1
  177. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +1 -1
  178. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +1 -1
  179. package/blueprints/application-notifications-in-app/guide/application-notifications-in-app.md +3 -3
  180. package/blueprints/application-onboarding-tour/CHANGELOG.md +31 -5
  181. package/blueprints/application-onboarding-tour/README.md +1 -1
  182. package/blueprints/application-onboarding-tour/blueprint.json +5 -3
  183. package/blueprints/application-onboarding-tour/contributions/probes/checklist-anchor-open.mjs +81 -0
  184. package/blueprints/application-onboarding-tour/contributions/probes/completion-persistence.mjs +159 -0
  185. package/blueprints/application-onboarding-tour/contributions/probes/first-run-detection.mjs +67 -0
  186. package/blueprints/application-onboarding-tour/contributions/probes/probe-utils.mjs +177 -0
  187. package/blueprints/application-onboarding-tour/contributions/probes/run-checklist-anchor-open.mjs +5 -0
  188. package/blueprints/application-onboarding-tour/contributions/probes/run-completion-persistence.mjs +5 -0
  189. package/blueprints/application-onboarding-tour/contributions/probes/run-first-run-detection.mjs +5 -0
  190. package/blueprints/application-onboarding-tour/contributions/probes/run-stepper-role-dialog.mjs +5 -0
  191. package/blueprints/application-onboarding-tour/contributions/probes/stepper-role-dialog.mjs +45 -0
  192. package/blueprints/application-spa/CHANGELOG.md +20 -11
  193. package/blueprints/application-spa/README.md +9 -10
  194. package/blueprints/application-spa/blueprint.json +3 -2
  195. package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +1 -1
  196. package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +1 -1
  197. package/blueprints/application-spa/contributions/probes/designed-empty-state.mjs +72 -0
  198. package/blueprints/application-spa/contributions/probes/probe-utils.mjs +177 -0
  199. package/blueprints/application-spa/contributions/probes/route-inventory-published.mjs +185 -0
  200. package/blueprints/application-spa/contributions/probes/run-designed-empty-state.mjs +5 -0
  201. package/blueprints/application-spa/contributions/probes/run-route-inventory-published.mjs +5 -0
  202. package/blueprints/application-spa/contributions/probes/run-shell-nav-present.mjs +5 -0
  203. package/blueprints/application-spa/contributions/probes/shell-nav-present.mjs +69 -0
  204. package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +1 -1
  205. package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +2 -2
  206. package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +3 -3
  207. package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +2 -2
  208. package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +2 -2
  209. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +1 -1
  210. package/blueprints/application-spa/docs/topics.md +1 -1
  211. package/blueprints/delivery-ci-workflows/CHANGELOG.md +31 -11
  212. package/blueprints/delivery-ci-workflows/README.md +3 -3
  213. package/blueprints/delivery-ci-workflows/blueprint.json +3 -2
  214. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json +2 -2
  215. package/blueprints/delivery-ci-workflows/contributions/probes/node-gate-entrypoint.mjs +76 -0
  216. package/blueprints/delivery-ci-workflows/contributions/probes/probe-utils.mjs +56 -0
  217. package/blueprints/delivery-ci-workflows/contributions/probes/real-account-github-actions-run-record.mjs +139 -0
  218. package/blueprints/delivery-ci-workflows/contributions/probes/run-node-gate-entrypoint.mjs +3 -0
  219. package/blueprints/delivery-ci-workflows/contributions/probes/run-real-account-github-actions-run-record.mjs +3 -0
  220. package/blueprints/delivery-ci-workflows/contributions/probes/run-workflow-template-shape.mjs +3 -0
  221. package/blueprints/delivery-ci-workflows/contributions/probes/workflow-template-shape.mjs +94 -0
  222. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json +1 -1
  223. package/blueprints/delivery-ci-workflows/docs/topics.md +2 -3
  224. package/blueprints/deploy-cloudflare-workers/CHANGELOG.md +4 -4
  225. package/blueprints/deploy-cloudflare-workers/README.md +3 -3
  226. package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json +2 -2
  227. package/blueprints/deploy-cloudflare-workers/docs/topics.md +2 -2
  228. package/blueprints/deploy-hetzner-server/CHANGELOG.md +98 -7
  229. package/blueprints/deploy-hetzner-server/blueprint.json +7 -6
  230. package/blueprints/deploy-hetzner-server/contributions/probes/cloud-init-render-lint.mjs +46 -21
  231. package/blueprints/deploy-hetzner-server/contributions/probes/hcloud-dry-run-mock.mjs +344 -83
  232. package/blueprints/deploy-hetzner-server/contributions/probes/manifest-schema-validate.mjs +211 -42
  233. package/blueprints/deploy-hetzner-server/contributions/probes/probe-utils.mjs +140 -22
  234. package/blueprints/deploy-hetzner-server/contributions/probes/real-account-cloud-init-hardened.mjs +111 -30
  235. package/blueprints/deploy-hetzner-server/contributions/probes/real-account-snapshot-on-demand.mjs +158 -30
  236. package/blueprints/deploy-hetzner-server/contributions/probes/real-account-throwaway-server-provision.mjs +154 -32
  237. package/blueprints/edge-cloudflare-access/CHANGELOG.md +6 -5
  238. package/blueprints/edge-cloudflare-access/blueprint.json +1 -1
  239. package/blueprints/edge-cloudflare-access/contributions/probes/admin-console-gate-surface.mjs +9 -1
  240. package/blueprints/edge-cloudflare-access/docs/topics.md +1 -1
  241. package/blueprints/edge-cloudflare-rate-limiting/CHANGELOG.md +4 -7
  242. package/blueprints/edge-cloudflare-rate-limiting/docs/topics.md +1 -1
  243. package/blueprints/edge-cloudflare-tunnel/CHANGELOG.md +4 -6
  244. package/blueprints/edge-cloudflare-tunnel/README.md +1 -2
  245. package/blueprints/edge-cloudflare-tunnel/docs/topics.md +1 -1
  246. package/blueprints/edge-cloudflare-turnstile/CHANGELOG.md +2 -3
  247. package/blueprints/edge-cloudflare-turnstile/docs/topics.md +1 -1
  248. package/blueprints/email-smtp-resend/CHANGELOG.md +24 -8
  249. package/blueprints/email-smtp-resend/README.md +2 -2
  250. package/blueprints/email-smtp-resend/blueprint.json +3 -2
  251. package/blueprints/email-smtp-resend/contributions/probes/probe-utils.mjs +50 -0
  252. package/blueprints/email-smtp-resend/contributions/probes/real-account-resend-send.mjs +50 -0
  253. package/blueprints/email-smtp-resend/contributions/probes/run-real-account-resend-send.mjs +3 -0
  254. package/blueprints/email-smtp-resend/contributions/probes/run-smtp-round-trip.mjs +3 -0
  255. package/blueprints/email-smtp-resend/contributions/probes/run-unverified-sender-refusal.mjs +3 -0
  256. package/blueprints/email-smtp-resend/contributions/probes/smtp-round-trip.mjs +43 -0
  257. package/blueprints/email-smtp-resend/contributions/probes/unverified-sender-refusal.mjs +99 -0
  258. package/blueprints/email-smtp-resend/docs/topics.md +2 -3
  259. package/blueprints/jobs-background/CHANGELOG.md +66 -5
  260. package/blueprints/jobs-background/README.md +2 -2
  261. package/blueprints/jobs-background/blueprint.json +3 -2
  262. package/blueprints/jobs-background/contributions/probes/apply-time-override.mjs +38 -10
  263. package/blueprints/jobs-background/contributions/probes/apply-time-refusal.mjs +28 -6
  264. package/blueprints/jobs-background/contributions/probes/event-secrecy.mjs +16 -2
  265. package/blueprints/jobs-background/contributions/probes/fake-clock-cron.mjs +102 -21
  266. package/blueprints/jobs-background/contributions/probes/probe-utils.mjs +10 -2
  267. package/blueprints/jobs-background/contributions/probes/retry-and-fail-real-account.mjs +355 -0
  268. package/blueprints/jobs-background/contributions/probes/retry-and-fail.mjs +33 -2
  269. package/blueprints/jobs-background/contributions/probes/run-retry-and-fail-real-account.mjs +12 -0
  270. package/blueprints/jobs-background/docs/topics.md +1 -1
  271. package/blueprints/jobs-background/guide/jobs-background.md +1 -1
  272. package/blueprints/messaging-queue-cloudflare/CHANGELOG.md +25 -19
  273. package/blueprints/messaging-queue-cloudflare/README.md +12 -12
  274. package/blueprints/messaging-queue-cloudflare/blueprint.json +1 -1
  275. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3001-messaging-queue-cloudflare-adapter.json +2 -2
  276. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3002-messaging-queue-cloudflare-delivery-semantics.json +1 -1
  277. package/blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs +180 -12
  278. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +1 -1
  279. package/blueprints/messaging-queue-cloudflare/docs/topics.md +2 -2
  280. package/blueprints/messaging-queue-cloudflare/guide/messaging-queue-cloudflare.md +2 -2
  281. package/blueprints/object-storage-s3/CHANGELOG.md +75 -4
  282. package/blueprints/object-storage-s3/blueprint.json +3 -2
  283. package/blueprints/object-storage-s3/contributions/probes/event-secrecy.mjs +73 -12
  284. package/blueprints/object-storage-s3/contributions/probes/facade-round-trip.mjs +55 -7
  285. package/blueprints/object-storage-s3/contributions/probes/hetzner-object-storage-round-trip.mjs +102 -18
  286. package/blueprints/object-storage-s3/contributions/probes/multipart-upload.mjs +105 -36
  287. package/blueprints/object-storage-s3/contributions/probes/presigned-url.mjs +104 -55
  288. package/blueprints/object-storage-s3/contributions/probes/probe-utils.mjs +129 -7
  289. package/blueprints/object-storage-s3/contributions/probes/put-get-round-trip.mjs +80 -18
  290. package/blueprints/object-storage-s3/contributions/probes/r2-real-account-smoke.mjs +291 -37
  291. package/blueprints/object-storage-s3/contributions/probes/run-event-secrecy.mjs +8 -2
  292. package/blueprints/object-storage-s3/contributions/probes/run-facade-round-trip.mjs +5 -5
  293. package/blueprints/object-storage-s3/contributions/probes/run-hetzner-object-storage-round-trip.mjs +8 -5
  294. package/blueprints/object-storage-s3/contributions/probes/run-multipart-upload.mjs +8 -2
  295. package/blueprints/object-storage-s3/contributions/probes/run-presigned-url.mjs +8 -2
  296. package/blueprints/object-storage-s3/contributions/probes/run-put-get-round-trip.mjs +6 -3
  297. package/blueprints/object-storage-s3/contributions/probes/run-r2-real-account-smoke.mjs +10 -2
  298. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +1 -1
  299. package/blueprints/object-storage-s3/docs/topics.md +1 -1
  300. package/blueprints/object-storage-s3/guide/object-storage-s3.md +1 -1
  301. package/blueprints/observability-essentials/CHANGELOG.md +23 -7
  302. package/blueprints/observability-essentials/README.md +2 -2
  303. package/blueprints/observability-essentials/assets/probe-samples/probe-response-baseline.v2.json +1 -1
  304. package/blueprints/observability-essentials/blueprint.json +3 -2
  305. package/blueprints/observability-essentials/contributions/probes/liveness-probe.mjs +84 -0
  306. package/blueprints/observability-essentials/contributions/probes/metrics-endpoint.mjs +96 -0
  307. package/blueprints/observability-essentials/contributions/probes/probe-utils.mjs +52 -0
  308. package/blueprints/observability-essentials/contributions/probes/readiness-probe.mjs +171 -0
  309. package/blueprints/observability-essentials/contributions/probes/run-liveness-probe.mjs +3 -0
  310. package/blueprints/observability-essentials/contributions/probes/run-metrics-endpoint.mjs +3 -0
  311. package/blueprints/observability-essentials/contributions/probes/run-readiness-probe.mjs +3 -0
  312. package/blueprints/observability-essentials/docs/topics.md +2 -3
  313. package/blueprints/observability-logging/CHANGELOG.md +29 -4
  314. package/blueprints/observability-logging/README.md +2 -2
  315. package/blueprints/observability-logging/blueprint.json +3 -2
  316. package/blueprints/observability-logging/contributions/probes/correlation-id-flow.mjs +173 -0
  317. package/blueprints/observability-logging/contributions/probes/line-shape-and-fields.mjs +82 -0
  318. package/blueprints/observability-logging/contributions/probes/probe-utils.mjs +47 -0
  319. package/blueprints/observability-logging/contributions/probes/redaction-boundary.mjs +130 -0
  320. package/blueprints/observability-logging/contributions/probes/run-correlation-id-flow.mjs +3 -0
  321. package/blueprints/observability-logging/contributions/probes/run-line-shape-and-fields.mjs +3 -0
  322. package/blueprints/observability-logging/contributions/probes/run-redaction-boundary.mjs +3 -0
  323. package/blueprints/observability-probe-endpoints/CHANGELOG.md +23 -8
  324. package/blueprints/observability-probe-endpoints/README.md +3 -3
  325. package/blueprints/observability-probe-endpoints/blueprint.json +3 -2
  326. package/blueprints/observability-probe-endpoints/contributions/probes/kubernetes-startup-enabled.mjs +80 -0
  327. package/blueprints/observability-probe-endpoints/contributions/probes/partial-profile-refusal.mjs +101 -0
  328. package/blueprints/observability-probe-endpoints/contributions/probes/probe-utils.mjs +49 -0
  329. package/blueprints/observability-probe-endpoints/contributions/probes/profile-boot-materialisation.mjs +69 -0
  330. package/blueprints/observability-probe-endpoints/contributions/probes/run-kubernetes-startup-enabled.mjs +3 -0
  331. package/blueprints/observability-probe-endpoints/contributions/probes/run-partial-profile-refusal.mjs +3 -0
  332. package/blueprints/observability-probe-endpoints/contributions/probes/run-profile-boot-materialisation.mjs +3 -0
  333. package/blueprints/observability-probe-endpoints/docs/topics.md +2 -2
  334. package/blueprints/persistence-data-d1/CHANGELOG.md +16 -3
  335. package/blueprints/persistence-data-d1/README.md +2 -2
  336. package/blueprints/persistence-data-d1/blueprint.json +3 -2
  337. package/blueprints/persistence-data-d1/contributions/adrs/adr-1404-persistence-data-d1-store-boundary.json +1 -1
  338. package/blueprints/persistence-data-d1/contributions/probes/facade-round-trip.mjs +140 -0
  339. package/blueprints/persistence-data-d1/contributions/probes/migrations-forward-only.mjs +66 -0
  340. package/blueprints/persistence-data-d1/contributions/probes/probe-utils.mjs +51 -0
  341. package/blueprints/persistence-data-d1/contributions/probes/real-account-d1-round-trip.mjs +133 -0
  342. package/blueprints/persistence-data-d1/contributions/probes/run-facade-round-trip.mjs +3 -0
  343. package/blueprints/persistence-data-d1/contributions/probes/run-migrations-forward-only.mjs +3 -0
  344. package/blueprints/persistence-data-d1/contributions/probes/run-real-account-d1-round-trip.mjs +3 -0
  345. package/blueprints/persistence-data-d1/docs/topics.md +2 -3
  346. package/blueprints/persistence-data-postgres/CHANGELOG.md +84 -4
  347. package/blueprints/persistence-data-postgres/README.md +2 -2
  348. package/blueprints/persistence-data-postgres/blueprint.json +3 -2
  349. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2801-persistence-data-postgres-driver.json +1 -1
  350. package/blueprints/persistence-data-postgres/contributions/probes/facade-round-trip.mjs +87 -12
  351. package/blueprints/persistence-data-postgres/contributions/probes/migration-apply.mjs +245 -19
  352. package/blueprints/persistence-data-postgres/contributions/probes/pool-posture-smoke.mjs +109 -26
  353. package/blueprints/persistence-data-postgres/contributions/probes/prepared-statement-scan.mjs +151 -38
  354. package/blueprints/persistence-data-postgres/contributions/probes/probe-utils.mjs +24 -6
  355. package/blueprints/persistence-data-postgres/contributions/probes/recovery-restore-round-trip.mjs +261 -48
  356. package/blueprints/persistence-data-postgres/contributions/probes/transaction-atomicity.mjs +76 -20
  357. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +1 -1
  358. package/blueprints/persistence-data-postgres/docs/topics.md +1 -1
  359. package/blueprints/persistence-data-sqlite/CHANGELOG.md +16 -2
  360. package/blueprints/persistence-data-sqlite/README.md +2 -2
  361. package/blueprints/persistence-data-sqlite/blueprint.json +3 -2
  362. package/blueprints/persistence-data-sqlite/contributions/probes/boot-open-migrate.mjs +90 -0
  363. package/blueprints/persistence-data-sqlite/contributions/probes/facade-round-trip.mjs +82 -0
  364. package/blueprints/persistence-data-sqlite/contributions/probes/probe-utils.mjs +83 -0
  365. package/blueprints/persistence-data-sqlite/contributions/probes/run-boot-open-migrate.mjs +5 -0
  366. package/blueprints/persistence-data-sqlite/contributions/probes/run-facade-round-trip.mjs +5 -0
  367. package/blueprints/persistence-data-sqlite/contributions/probes/run-wal-checkpoint.mjs +5 -0
  368. package/blueprints/persistence-data-sqlite/contributions/probes/wal-checkpoint.mjs +137 -0
  369. package/blueprints/persistence-data-sqlite/docs/topics.md +2 -3
  370. package/blueprints/platform-cloudflare-cron-triggers/CHANGELOG.md +5 -5
  371. package/blueprints/platform-cloudflare-cron-triggers/README.md +2 -3
  372. package/blueprints/platform-cloudflare-cron-triggers/docs/topics.md +1 -1
  373. package/blueprints/platform-cloudflare-durable-objects/CHANGELOG.md +6 -10
  374. package/blueprints/platform-cloudflare-durable-objects/docs/topics.md +1 -1
  375. package/blueprints/platform-cloudflare-kv/CHANGELOG.md +16 -12
  376. package/blueprints/platform-cloudflare-kv/README.md +2 -4
  377. package/blueprints/platform-cloudflare-kv/blueprint.json +2 -2
  378. package/blueprints/platform-cloudflare-kv/docs/topics.md +1 -1
  379. package/blueprints/platform-docker-compose-host/CHANGELOG.md +92 -5
  380. package/blueprints/platform-docker-compose-host/blueprint.json +2 -2
  381. package/blueprints/platform-docker-compose-host/contributions/probes/caddyfile-validate.mjs +116 -29
  382. package/blueprints/platform-docker-compose-host/contributions/probes/compose-config-lint.mjs +181 -109
  383. package/blueprints/platform-docker-compose-host/contributions/probes/probe-utils.mjs +146 -26
  384. package/blueprints/platform-docker-compose-host/contributions/probes/real-account-minimal-stack-up.mjs +238 -24
  385. package/blueprints/platform-docker-compose-host/contributions/probes/real-account-reload-burst.mjs +207 -21
  386. package/blueprints/platform-docker-compose-host/contributions/probes/secrets-as-files-scan.mjs +246 -42
  387. package/blueprints/platform-docker-compose-host/docs/topics.md +1 -1
  388. package/blueprints/security-auth-clerk/CHANGELOG.md +18 -6
  389. package/blueprints/security-auth-clerk/README.md +3 -3
  390. package/blueprints/security-auth-clerk/assets/wiring/workers-wrangler-toml-shape.md +1 -1
  391. package/blueprints/security-auth-clerk/blueprint.json +3 -2
  392. package/blueprints/security-auth-clerk/contributions/probes/hosted-identity-ui-config.mjs +61 -0
  393. package/blueprints/security-auth-clerk/contributions/probes/probe-utils.mjs +188 -0
  394. package/blueprints/security-auth-clerk/contributions/probes/real-account-principal-directory-round-trip.mjs +216 -0
  395. package/blueprints/security-auth-clerk/contributions/probes/real-account-session-inventory.mjs +260 -0
  396. package/blueprints/security-auth-clerk/contributions/probes/role-model-adapter.mjs +53 -0
  397. package/blueprints/security-auth-clerk/contributions/probes/run-hosted-identity-ui-config.mjs +4 -0
  398. package/blueprints/security-auth-clerk/contributions/probes/run-real-account-principal-directory-round-trip.mjs +4 -0
  399. package/blueprints/security-auth-clerk/contributions/probes/run-real-account-session-inventory.mjs +4 -0
  400. package/blueprints/security-auth-clerk/contributions/probes/run-role-model-adapter.mjs +4 -0
  401. package/blueprints/security-auth-clerk/docs/topics.md +2 -3
  402. package/blueprints/security-auth-keycloak/CHANGELOG.md +18 -7
  403. package/blueprints/security-auth-keycloak/README.md +2 -2
  404. package/blueprints/security-auth-keycloak/blueprint.json +3 -2
  405. package/blueprints/security-auth-keycloak/contributions/probes/discovery-shape.mjs +68 -0
  406. package/blueprints/security-auth-keycloak/contributions/probes/introspection-shape.mjs +88 -0
  407. package/blueprints/security-auth-keycloak/contributions/probes/jwt-verifier-shape.mjs +86 -0
  408. package/blueprints/security-auth-keycloak/contributions/probes/probe-utils.mjs +180 -0
  409. package/blueprints/security-auth-keycloak/contributions/probes/real-account-realm-round-trip.mjs +91 -0
  410. package/blueprints/security-auth-keycloak/contributions/probes/role-adapter-shape.mjs +69 -0
  411. package/blueprints/security-auth-keycloak/contributions/probes/run-discovery-shape.mjs +4 -0
  412. package/blueprints/security-auth-keycloak/contributions/probes/run-introspection-shape.mjs +4 -0
  413. package/blueprints/security-auth-keycloak/contributions/probes/run-jwt-verifier-shape.mjs +4 -0
  414. package/blueprints/security-auth-keycloak/contributions/probes/run-real-account-realm-round-trip.mjs +4 -0
  415. package/blueprints/security-auth-keycloak/contributions/probes/run-role-adapter-shape.mjs +4 -0
  416. package/blueprints/security-auth-keycloak/docs/topics.md +1 -2
  417. package/blueprints/security-auth-magic-link/CHANGELOG.md +15 -4
  418. package/blueprints/security-auth-magic-link/README.md +2 -2
  419. package/blueprints/security-auth-magic-link/assets/principal-registry-samples/single-address.md +1 -1
  420. package/blueprints/security-auth-magic-link/blueprint.json +3 -2
  421. package/blueprints/security-auth-magic-link/contributions/probes/probe-utils.mjs +174 -0
  422. package/blueprints/security-auth-magic-link/contributions/probes/real-account-magic-link-send.mjs +139 -0
  423. package/blueprints/security-auth-magic-link/contributions/probes/run-real-account-magic-link-send.mjs +4 -0
  424. package/blueprints/security-auth-magic-link/contributions/probes/run-token-entropy-shape.mjs +4 -0
  425. package/blueprints/security-auth-magic-link/contributions/probes/run-token-issue-verify.mjs +4 -0
  426. package/blueprints/security-auth-magic-link/contributions/probes/token-entropy-shape.mjs +60 -0
  427. package/blueprints/security-auth-magic-link/contributions/probes/token-issue-verify.mjs +90 -0
  428. package/blueprints/security-auth-magic-link/docs/topics.md +1 -1
  429. package/blueprints/security-auth-oauth2/CHANGELOG.md +16 -5
  430. package/blueprints/security-auth-oauth2/README.md +2 -2
  431. package/blueprints/security-auth-oauth2/blueprint.json +3 -2
  432. package/blueprints/security-auth-oauth2/contributions/probes/authorisation-code-flow-shape.mjs +259 -0
  433. package/blueprints/security-auth-oauth2/contributions/probes/pkce-challenge-shape.mjs +58 -0
  434. package/blueprints/security-auth-oauth2/contributions/probes/probe-utils.mjs +190 -0
  435. package/blueprints/security-auth-oauth2/contributions/probes/provider-adapter-shape.mjs +64 -0
  436. package/blueprints/security-auth-oauth2/contributions/probes/real-account-authorisation-code-flow.mjs +93 -0
  437. package/blueprints/security-auth-oauth2/contributions/probes/run-authorisation-code-flow-shape.mjs +4 -0
  438. package/blueprints/security-auth-oauth2/contributions/probes/run-pkce-challenge-shape.mjs +4 -0
  439. package/blueprints/security-auth-oauth2/contributions/probes/run-provider-adapter-shape.mjs +4 -0
  440. package/blueprints/security-auth-oauth2/contributions/probes/run-real-account-authorisation-code-flow.mjs +4 -0
  441. package/blueprints/security-auth-oauth2/contributions/probes/run-session-bridge-shape.mjs +4 -0
  442. package/blueprints/security-auth-oauth2/contributions/probes/session-bridge-shape.mjs +78 -0
  443. package/blueprints/security-auth-oauth2/docs/topics.md +1 -2
  444. package/blueprints/security-secrets-management/CHANGELOG.md +15 -4
  445. package/blueprints/security-secrets-management/README.md +2 -2
  446. package/blueprints/security-secrets-management/blueprint.json +3 -2
  447. package/blueprints/security-secrets-management/contributions/probes/add-recipient-rotation.mjs +107 -0
  448. package/blueprints/security-secrets-management/contributions/probes/encrypt-decrypt-round-trip.mjs +122 -0
  449. package/blueprints/security-secrets-management/contributions/probes/key-rotation.mjs +93 -0
  450. package/blueprints/security-secrets-management/contributions/probes/mismatched-key-refusal.mjs +74 -0
  451. package/blueprints/security-secrets-management/contributions/probes/probe-utils.mjs +214 -0
  452. package/blueprints/security-secrets-management/contributions/probes/run-add-recipient-rotation.mjs +4 -0
  453. package/blueprints/security-secrets-management/contributions/probes/run-encrypt-decrypt-round-trip.mjs +4 -0
  454. package/blueprints/security-secrets-management/contributions/probes/run-key-rotation.mjs +4 -0
  455. package/blueprints/security-secrets-management/contributions/probes/run-mismatched-key-refusal.mjs +4 -0
  456. package/blueprints/security-secrets-management/docs/topics.md +2 -3
  457. package/fixtures/canary-manifest.json +9 -9
  458. package/guidance/harness-template.md +25 -0
  459. package/guidance/managed/agent-instructions-block.hash +1 -1
  460. package/guidance/managed/agent-instructions-block.md +25 -0
  461. package/package.json +2 -2
  462. package/rcf/adrs/adr-4101-feedback-store-gitignored.json +20 -0
  463. package/rcf/adrs/adr-4102-fingerprint-and-labels.json +25 -0
  464. package/rcf/adrs/adr-4103-redaction-rule-based.json +20 -0
  465. package/rcf/adrs/adr-4104-destination-on-library.json +25 -0
  466. package/rcf/adrs/adr-4105-gh-ambient-auth.json +20 -0
  467. package/rcf/adrs/adr-4106-bundled-entries-terminal.json +20 -0
  468. package/rcf/adrs/adr-4107-stop-is-ask-event.json +30 -0
  469. package/rcf/adrs/adr-4108-hooks-in-committed-config.json +25 -0
  470. package/rcf/adrs/adr-4109-referee-validate-adr-crosslinks.json +25 -0
  471. package/rcf/adrs/adr-4110-referee-coverage-strict-by-default.json +25 -0
  472. package/rcf/adrs/adr-4111-referee-finalise-refusals.json +20 -0
  473. package/rcf/adrs/adr-4112-referee-finalise-verified-invariant.json +30 -0
  474. package/rcf/code-nodes/cn-600.json +45 -0
  475. package/rcf/code-nodes/cn-601.json +18 -0
  476. package/rcf/code-nodes/cn-602.json +15 -0
  477. package/rcf/code-nodes/cn-603.json +12 -0
  478. package/rcf/code-nodes/cn-604.json +14 -0
  479. package/rcf/code-nodes/cn-605.json +17 -0
  480. package/rcf/code-nodes/cn-606.json +12 -0
  481. package/rcf/code-nodes/cn-607.json +12 -0
  482. package/rcf/code-nodes/cn-608.json +14 -0
  483. package/rcf/code-nodes/cn-609.json +17 -0
  484. package/rcf/code-nodes/cn-620.json +18 -0
  485. package/rcf/code-nodes/cn-621.json +14 -0
  486. package/rcf/code-nodes/cn-622.json +15 -0
  487. package/rcf/code-nodes/cn-623.json +16 -0
  488. package/rcf/code-nodes/cn-624.json +14 -0
  489. package/rcf/code-nodes/cn-625.json +15 -0
  490. package/rcf/code-nodes/cn-626.json +13 -0
  491. package/rcf/code-nodes/cn-627.json +13 -0
  492. package/rcf/code-nodes/cn-628.json +14 -0
  493. package/rcf/code-nodes/cn-629.json +12 -0
  494. package/rcf/code-nodes/cn-630.json +12 -0
  495. package/rcf/code-nodes/cn-631.json +13 -0
  496. package/rcf/code-nodes/cn-632.json +13 -0
  497. package/rcf/fbs/fbs-180.json +45 -0
  498. package/rcf/fbs/fbs-181.json +45 -0
  499. package/rcf/fbs/fbs-182.json +42 -0
  500. package/rcf/fbs/fbs-183.json +50 -0
  501. package/rcf/fbs/fbs-184.json +49 -0
  502. package/rcf/fbs/fbs-185.json +34 -0
  503. package/rcf/fbs/fbs-186.json +16 -0
  504. package/rcf/fbs/fbs-187.json +17 -0
  505. package/rcf/fbs/fbs-188.json +17 -0
  506. package/rcf/fbs/fbs-189.json +17 -0
  507. package/rcf/requirements/req-155.json +13 -0
  508. package/rcf/requirements/req-156.json +13 -0
  509. package/rcf/requirements/req-157.json +13 -0
  510. package/rcf/requirements/req-158.json +13 -0
  511. package/rcf/requirements/req-159.json +13 -0
  512. package/rcf/requirements/req-160.json +13 -0
  513. package/rcf/requirements/req-161.json +13 -0
  514. package/rcf/requirements/req-162.json +13 -0
  515. package/rcf/requirements/req-163.json +13 -0
  516. package/rcf/requirements/req-164.json +13 -0
  517. package/rcf/requirements/req-165.json +13 -0
  518. package/rcf/tacs/tac-4101-feedback-cli.json +77 -0
  519. package/rcf/tacs/tac-4102-feedback-store.json +50 -0
  520. package/rcf/tacs/tac-4103-feedback-redact.json +39 -0
  521. package/rcf/tacs/tac-4104-feedback-fingerprint.json +33 -0
  522. package/rcf/tacs/tac-4105-feedback-render.json +45 -0
  523. package/rcf/tacs/tac-4106-feedback-destination.json +39 -0
  524. package/rcf/tacs/tac-4107-feedback-gh.json +43 -0
  525. package/rcf/tacs/tac-4108-feedback-hook.json +46 -0
  526. package/rcf/tacs/tac-4109-referee-validate-adr-crosslinks.json +20 -0
  527. package/rcf/tacs/tac-4110-referee-coverage-mode-selector.json +21 -0
  528. package/rcf/tacs/tac-4111-referee-finalise-per-ac-refusals.json +21 -0
  529. package/rcf/tacs/tac-4112-referee-finalise-verified-invariant.json +22 -0
  530. package/rcf/test-suites/ts-140.json +9 -9
  531. package/rcf/test-suites/ts-150.json +9 -9
  532. package/rcf/test-suites/ts-185.json +54 -0
  533. package/rcf/test-suites/ts-186.json +58 -0
  534. package/rcf/test-suites/ts-187.json +44 -0
  535. package/rcf/test-suites/ts-188.json +166 -0
  536. package/rcf/test-suites/ts-189.json +38 -0
  537. package/rcf/test-suites/ts-190.json +30 -0
  538. package/rcf/test-suites/ts-191.json +51 -0
  539. package/rcf/test-suites/ts-192.json +37 -0
  540. package/rcf/test-suites/ts-193.json +60 -0
  541. package/rcf/test-suites/ts-194.json +67 -0
  542. package/rcf/test-suites/ts-195.json +52 -0
  543. package/rcf/test-suites/ts-196.json +58 -0
  544. package/rcf/test-suites/ts-197.json +66 -0
  545. package/rcf/test-suites/ts-198.json +87 -0
  546. package/rcf/test-suites/ts-199.json +51 -0
  547. package/rcf/test-suites/ts-200.json +30 -0
  548. package/rcf/test-suites/ts-201.json +38 -0
  549. package/rcf/test-suites/ts-202.json +38 -0
  550. package/rcf/test-suites/ts-203.json +38 -0
  551. package/rcf/user-stories/us-15501.json +60 -0
  552. package/rcf/user-stories/us-15502.json +33 -0
  553. package/rcf/user-stories/us-15503.json +33 -0
  554. package/rcf/user-stories/us-15601.json +51 -0
  555. package/rcf/user-stories/us-15701.json +42 -0
  556. package/rcf/user-stories/us-15801.json +42 -0
  557. package/rcf/user-stories/us-15802.json +33 -0
  558. package/rcf/user-stories/us-15901.json +33 -0
  559. package/rcf/user-stories/us-15902.json +51 -0
  560. package/rcf/user-stories/us-16001.json +51 -0
  561. package/rcf/user-stories/us-16101.json +42 -0
  562. package/rcf/user-stories/us-16102.json +33 -0
  563. package/rcf/user-stories/us-16103.json +42 -0
  564. package/rcf/user-stories/us-16104.json +42 -0
  565. package/rcf/user-stories/us-16201.json +33 -0
  566. package/rcf/user-stories/us-16301.json +36 -0
  567. package/rcf/user-stories/us-16401.json +45 -0
  568. package/rcf/user-stories/us-16501.json +45 -0
  569. package/rcf/user-stories/us-16502.json +45 -0
  570. package/releases/releases.yaml +11 -1
  571. package/src/blueprint/library-loader.js +48 -0
  572. package/src/blueprint/library-registry.js +13 -0
  573. package/src/browser-verify/pack-runner.js +7 -12
  574. package/src/build/mark.js +1 -1
  575. package/src/cli/blueprint-library.js +149 -0
  576. package/src/cli/coverage.js +49 -24
  577. package/src/cli/doctor.js +195 -7
  578. package/src/cli/feedback.js +2204 -0
  579. package/src/cli/finalise.js +158 -1
  580. package/src/cli/help.js +6 -0
  581. package/src/cli/init.js +63 -0
  582. package/src/cli/update.js +21 -1
  583. package/src/core/store/walker.js +33 -0
  584. package/src/core/store/writer.js +23 -0
  585. package/src/feedback/destination.js +361 -0
  586. package/src/feedback/fingerprint.js +132 -0
  587. package/src/feedback/gh.js +376 -0
  588. package/src/feedback/hook.js +183 -0
  589. package/src/feedback/labels.js +87 -0
  590. package/src/feedback/redact-allowlist.json +14 -0
  591. package/src/feedback/redact.js +1108 -0
  592. package/src/feedback/render.js +267 -0
  593. package/src/feedback/store.js +604 -0
  594. package/src/finalise/index.js +4 -0
  595. package/src/finalise/ingest.js +61 -0
  596. package/src/finalise/ship-without-eval.js +19 -7
  597. package/src/mcp/tools.js +8 -2
  598. package/src/setup/feedback-hooks.js +397 -0
  599. package/src/setup/managed-gitignore.js +3 -0
  600. package/src/view/html-page.js +5 -5
  601. package/src/view/style.css +2 -2
@@ -0,0 +1,37 @@
1
+ {
2
+ "createdAt": "2026-09-16T17:23:12Z",
3
+ "updatedAt": "2026-09-16T17:23:12Z",
4
+ "purpose": "Cover AC-15901-1 (submit --yes files entries under the ambient gh login, stamps submitted with issueUrl and dedupe, prints one line per entry, exit 0) and AC-15901-2 (submit without --yes on a non-TTY exits 2 naming --yes; env passed to gh has no synthesised GH_TOKEN or GITHUB_TOKEN key).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-15901-1",
8
+ "AC-15901-2"
9
+ ],
10
+ "id": "TS-192",
11
+ "usId": "US-15901",
12
+ "title": "Slice 4 (FBS-183): submit --yes files under the reporter's ambient gh login and refuses on a non-TTY without --yes; the CLI never synthesises GH_TOKEN or GITHUB_TOKEN",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-192-submit-yes-happy-path",
16
+ "acId": "AC-15901-1",
17
+ "description": "Cover AC-15901-1 via the CLI test: two pending entries, zero-hit search, distinct URLs returned; both entries fold to status submitted with issueUrl and dedupe: new; stdout carries two '<id> -> <url> (new)' lines.",
18
+ "status": "pending",
19
+ "testPointer": "test/cli/feedback-submit.test.js::AC-15901-1: submit --yes with zero-hit search creates each entry, marks submitted, prints URL"
20
+ },
21
+ {
22
+ "id": "TC-192-submit-refuses-without-yes",
23
+ "acId": "AC-15901-2",
24
+ "description": "Cover AC-15901-2 (refusal arm) via the CLI test: submit without --yes on a non-TTY child exits 2, stderr names --yes as required, and no gh call is made.",
25
+ "status": "pending",
26
+ "testPointer": "test/cli/feedback-submit.test.js::AC-15901-2: submit without --yes on a non-TTY exits 2, names --yes, no gh call is made"
27
+ },
28
+ {
29
+ "id": "TC-192-submit-no-token-synthesised",
30
+ "acId": "AC-15901-2",
31
+ "description": "Cover AC-15901-2 (env arm) via the CLI test: launch with a stripped env (no GH_TOKEN, no GITHUB_TOKEN); the fake ghIssueCreate call records ghToken:null and githubToken:null so the CLI never synthesised either.",
32
+ "status": "pending",
33
+ "testPointer": "test/cli/feedback-submit.test.js::AC-15901-2: the CLI does not synthesise GH_TOKEN or GITHUB_TOKEN before calling gh"
34
+ }
35
+ ],
36
+ "status": "draft"
37
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "createdAt": "2026-09-16T17:23:12Z",
3
+ "updatedAt": "2026-09-16T17:23:12Z",
4
+ "purpose": "Cover AC-15902-1 (label pre-check drops labels the destination repo does not carry and stamps droppedLabels[] on the entry state), AC-15902-2 (scripts/bootstrap-feedback-labels.mjs idempotently creates the six labels), AC-15902-3 (rendered issue title carries the prefix and the body carries the fingerprint on its own line and inside an HTML comment) and AC-15902-4 (the six-label catalogue is exported from src/feedback/labels.js and a grep test refuses bare literals for these names outside the allowed consumers).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-15902-1",
8
+ "AC-15902-2",
9
+ "AC-15902-3",
10
+ "AC-15902-4"
11
+ ],
12
+ "id": "TS-193",
13
+ "usId": "US-15902",
14
+ "title": "Slice 4 (FBS-183): label pre-check + bootstrap script + title/fingerprint handles + label-catalogue single-source guard",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-193-label-precheck-drops-missing",
18
+ "acId": "AC-15902-1",
19
+ "description": "Cover AC-15902-1 via the CLI test: the fake labelList returns { rcf-feedback, severity:major } but not area:core; submit creates the issue with the reduced label set and stamps droppedLabels: ['area:core'] on the entry state.",
20
+ "status": "pending",
21
+ "testPointer": "test/cli/feedback-submit.test.js::AC-15902-1: submit drops labels the destination does not carry and records droppedLabels"
22
+ },
23
+ {
24
+ "id": "TC-193-bootstrap-creates-six",
25
+ "acId": "AC-15902-2",
26
+ "description": "Cover AC-15902-2 (first run) via the unit test: with the fake labelList returning names:[], the bootstrap script creates all six labels via ghLabelCreate with descriptions and colours.",
27
+ "status": "pending",
28
+ "testPointer": "test/feedback/bootstrap-labels.test.js::AC-15902-2: bootstrap creates every missing label on the first run"
29
+ },
30
+ {
31
+ "id": "TC-193-bootstrap-idempotent-full",
32
+ "acId": "AC-15902-2",
33
+ "description": "Cover AC-15902-2 (idempotency) via the unit test: with the fake labelList returning every catalogue label, the bootstrap script makes zero ghLabelCreate calls.",
34
+ "status": "pending",
35
+ "testPointer": "test/feedback/bootstrap-labels.test.js::AC-15902-2: bootstrap makes zero create calls when every label is already present"
36
+ },
37
+ {
38
+ "id": "TC-193-bootstrap-partial-subset",
39
+ "acId": "AC-15902-2",
40
+ "description": "Cover AC-15902-2 (partial arm) via the unit test: with only two of the six labels present, the bootstrap script creates the missing four (area:blueprint, area:core, severity:major, severity:minor).",
41
+ "status": "pending",
42
+ "testPointer": "test/feedback/bootstrap-labels.test.js::AC-15902-2: bootstrap creates only the missing subset (partial second run)"
43
+ },
44
+ {
45
+ "id": "TC-193-title-prefix-and-fingerprint-twin",
46
+ "acId": "AC-15902-3",
47
+ "description": "Cover AC-15902-3 via the CLI test: the ghIssueCreate call sees a title starting with [rcf-lite] and a body carrying the fingerprint on its own line and inside an HTML comment (asserted end-to-end in the render unit test at test/feedback/render.test.js and reasserted at submit time here).",
48
+ "status": "pending",
49
+ "testPointer": "test/cli/feedback-submit.test.js::AC-15902-3: rendered title prefix and body fingerprint twin are on the create call"
50
+ },
51
+ {
52
+ "id": "TC-193-labels-catalogue-single-source",
53
+ "acId": "AC-15902-4",
54
+ "description": "Cover AC-15902-4 via the unit test: FEEDBACK_LABELS is the six-label frozen catalogue exported from src/feedback/labels.js, and a scanner walks src/, scripts/, bin/ refusing any bare literal for these names outside labels.js, its tests, the bootstrap script and render.js's re-export shim.",
55
+ "status": "pending",
56
+ "testPointer": "test/feedback/labels-catalogue.test.js::AC-15902-4: no bare literal for any catalogue label appears outside labels.js and its allowed consumers"
57
+ }
58
+ ],
59
+ "status": "draft"
60
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "createdAt": "2026-09-16T17:23:12Z",
3
+ "updatedAt": "2026-09-16T17:23:12Z",
4
+ "purpose": "Cover AC-16001-1 (four preflight branches each routing to a bundle with a distinct one-line message), AC-16001-2 (create/comment failure retries once without labels and then bundles that entry, other entries continue, exit 0 when every entry ended submitted or bundled), AC-16001-3 (bundled entries are terminal for the ask loop: list default hides them, list --all reports status bundled, submit picks up only pending entries on a subsequent run), and AC-16001-4 (destination unresolved case writes an unresolved-slug bundle with publisher contact on the same line as the outbox path, no gh call for that entry, exit 0).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16001-1",
8
+ "AC-16001-2",
9
+ "AC-16001-3",
10
+ "AC-16001-4"
11
+ ],
12
+ "id": "TS-194",
13
+ "usId": "US-16001",
14
+ "title": "Slice 4 (FBS-183): four preflight cases + retry-then-bundle + terminal bundled entries + unresolved-destination bundle",
15
+ "testCases": [
16
+ {
17
+ "id": "TC-194-preflight-gh-missing",
18
+ "acId": "AC-16001-1",
19
+ "description": "Cover AC-16001-1 case (1) via the CLI test: onPath fake returns { present: false }; the entry lands in .rcf/feedback/outbox/<ISO>-stravica-rcf-lite[-<id>].md; the bundle Reason not filed line names gh; stdout carries the outbox path and the issues/new URL on one line; entry state is bundled; exit 0.",
20
+ "status": "pending",
21
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-1a: gh missing on PATH routes to bundle"
22
+ },
23
+ {
24
+ "id": "TC-194-preflight-auth-off",
25
+ "acId": "AC-16001-1",
26
+ "description": "Cover AC-16001-1 case (2) via the CLI test: auth fake returns { authed: false }; bundle reason names 'run gh auth login'; entry state is bundled; exit 0.",
27
+ "status": "pending",
28
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-1b: gh auth status non-zero routes to bundle"
29
+ },
30
+ {
31
+ "id": "TC-194-preflight-private-none",
32
+ "acId": "AC-16001-1",
33
+ "description": "Cover AC-16001-1 case (3) via the CLI test: repoView returns visibility PRIVATE and viewerPermission NONE; bundle reason names 'no access to private repo'; exit 0.",
34
+ "status": "pending",
35
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-1c: private repo with viewerPermission NONE routes to bundle"
36
+ },
37
+ {
38
+ "id": "TC-194-preflight-issues-disabled",
39
+ "acId": "AC-16001-1",
40
+ "description": "Cover AC-16001-1 case (4) via the CLI test: repoView returns hasIssuesEnabled false; bundle reason names 'issues are disabled on <repo>'; exit 0.",
41
+ "status": "pending",
42
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-1d: hasIssuesEnabled false routes to bundle"
43
+ },
44
+ {
45
+ "id": "TC-194-retry-without-labels-then-bundle",
46
+ "acId": "AC-16001-2",
47
+ "description": "Cover AC-16001-2 via the CLI test: create fake returns ratelimit twice for entry A, twice for entry B, then success for entry C; A and B end bundled, C ends submitted; two bundle files under outbox (one per bundled entry); exit 0.",
48
+ "status": "pending",
49
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-2: create 429 retries without labels, still fails, bundles that entry; another submits"
50
+ },
51
+ {
52
+ "id": "TC-194-bundled-terminal-for-ask",
53
+ "acId": "AC-16001-3",
54
+ "description": "Cover AC-16001-3 via the CLI test: after a preflight-forced bundle for entry X, list --json (default pending) omits X; list --all --json includes X with status bundled; a subsequent submit --yes with a working fake only creates for the still-pending entry (bundled entries are terminal, not re-picked-up).",
55
+ "status": "pending",
56
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-3: list default hides bundled; submit <id> re-attempts one bundled entry"
57
+ },
58
+ {
59
+ "id": "TC-194-unresolved-destination-bundle",
60
+ "acId": "AC-16001-4",
61
+ "description": "Cover AC-16001-4 via the CLI test: an applied library whose registry entry carries neither issuesRepo nor a derivable github source, plus publisher.contact 'orphan-owners@example.com'; submit writes .rcf/feedback/outbox/<ISO>-unresolved[-<id>].md, prints publisher.contact on the same line as the outbox path, makes no gh create/comment/search call for that entry, entry state is bundled, exit 0.",
62
+ "status": "pending",
63
+ "testPointer": "test/cli/feedback-submit.test.js::AC-16001-4: unresolved destination writes an unresolved-slug bundle with publisher contact, no gh call"
64
+ }
65
+ ],
66
+ "status": "draft"
67
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "createdAt": "2026-09-16T19:20:00Z",
3
+ "updatedAt": "2026-09-16T19:20:00Z",
4
+ "purpose": "Cover AC-16101-1 (shouldAsk applies the design-3.5 quiet rule: silent unless not-opted-out + pending + not-asked-this-session + stop-hook-inactive AND one of ask-now/older-than-quietMinutes/queue-complete/carried-over), AC-16101-2 (Stop on Claude Code exits 2 with the ask on stderr; Stop on Codex emits { decision: 'block', reason } on stdout with exit 0; the asked ledger is appended in both cases) and AC-16101-3 (a same-session second Stop is silent, a fresh session_id re-asks, and a Stop with stop_hook_active is silent even on a fresh session).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16101-1",
8
+ "AC-16101-2",
9
+ "AC-16101-3"
10
+ ],
11
+ "id": "TS-195",
12
+ "usId": "US-16101",
13
+ "title": "Slice 5 (FBS-184): quiet-rule truth table plus per-harness Stop emit and same-session ledger idempotency",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-195-quiet-rule-truth-table",
17
+ "acId": "AC-16101-1",
18
+ "description": "Cover AC-16101-1 via the unit test: shouldAsk is total, deterministic and pure; a table walks opt-out (file/env), pending count, asked-this-session, stop-hook-active, ask-now, age-vs-quietMinutes (14 min: silent; 15 min: ask; 60 min: ask; quietMinutes 0/60 boundaries), queue-complete and carried-over rows and asserts the expected 'ask'/'silent' verdict on each; buildAskReason names all four next-step verbs and the do-not-ask clause.",
19
+ "status": "pending",
20
+ "testPointer": "test/feedback/hook-quiet-rule.test.js::AC-16101-1: shouldAsk is ask when the newest pending entry crosses quietMinutes"
21
+ },
22
+ {
23
+ "id": "TC-195-hook-stop-claude-code",
24
+ "acId": "AC-16101-2",
25
+ "description": "Cover AC-16101-2 (Claude Code half) via the CLI test: rcf feedback hook stop --harness claude-code with one pending entry and a mock Stop payload exits 2, writes the reason (all four verbs + do-not-ask) to stderr, writes nothing on stdout, and appends exactly one asked record to .rcf/feedback/state.json for the payload session_id.",
26
+ "status": "pending",
27
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16101-2: Stop on Claude Code exits 2 with the ask on stderr and appends ledger"
28
+ },
29
+ {
30
+ "id": "TC-195-hook-stop-codex",
31
+ "acId": "AC-16101-2",
32
+ "description": "Cover AC-16101-2 (Codex half) via the CLI test: rcf feedback hook stop --harness codex emits stdout JSON parseable as { decision: 'block', reason: <same clause> }, exits 0, writes nothing on stderr, and appends exactly one asked record to state.json for the payload session_id.",
33
+ "status": "pending",
34
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16101-2: Stop on Codex emits stdout JSON block, exit 0, ledger appended"
35
+ },
36
+ {
37
+ "id": "TC-195-hook-same-session-silent-then-fresh-reasks",
38
+ "acId": "AC-16101-3",
39
+ "description": "Cover AC-16101-3 via the CLI test: two Stop invocations with the same session_id in sequence produce ask (exit 2) then silent (exit 0, no stderr); a third invocation with a fresh session_id re-asks (exit 2) because the pending entry is carried over; state.json ends with exactly two asked records for the two distinct sessionIds.",
40
+ "status": "pending",
41
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16101-3: same-session second Stop is silent; a fresh session_id re-asks"
42
+ },
43
+ {
44
+ "id": "TC-195-hook-stop-hook-active-silent",
45
+ "acId": "AC-16101-3",
46
+ "description": "Cover AC-16101-3 (stop_hook_active branch) via the CLI test: a Stop payload with stop_hook_active: true and a fresh session_id and a pending --ask-now entry still exits 0 with no reason emitted; the loop-guard fires even when every other trigger would.",
47
+ "status": "pending",
48
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16101-3: Stop with stop_hook_active is silent even on a fresh session"
49
+ }
50
+ ],
51
+ "status": "draft"
52
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "createdAt": "2026-09-16T19:20:00Z",
3
+ "updatedAt": "2026-09-16T19:20:00Z",
4
+ "purpose": "Cover AC-16102-1 (rcf feedback opt-out writes rcf/feedback-settings.json ask: false with the defaults merged, the hook returns silent under ask: false, and add/preview keep working) and AC-16102-2 (RCF_FEEDBACK_DISABLE=1 makes add a no-op that prints 'feedback disabled by env' and writes nothing; RCF_FEEDBACK_ASK=0 silences the hook while leaving add working; precedence order env DISABLE > env ASK=0 > file ask false > file ask true).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16102-1",
8
+ "AC-16102-2"
9
+ ],
10
+ "id": "TS-196",
11
+ "usId": "US-16102",
12
+ "title": "Slice 5 (FBS-184): rcf feedback opt-out / opt-in write ask false / true; env DISABLE and env ASK override the file with the documented precedence",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-196-optout-writes-settings-and-silences-hook",
16
+ "acId": "AC-16102-1",
17
+ "description": "Cover AC-16102-1 via the CLI test: rcf feedback opt-out on a fresh project writes rcf/feedback-settings.json with { settingsVersion: 1, ask: false, quietMinutes: 15, redaction: { allowHosts: [] } }; a subsequent Stop hook on a pending --ask-now entry exits 0 silently; add and preview keep working under ask: false.",
18
+ "status": "pending",
19
+ "testPointer": "test/cli/feedback-opt-out.test.js::AC-16102-1: opt-out writes ask: false and preserves defaults; the hook goes silent"
20
+ },
21
+ {
22
+ "id": "TC-196-optin-restores-ask-true",
23
+ "acId": "AC-16102-1",
24
+ "description": "Cover AC-16102-1 (round-trip) via the CLI test: rcf feedback opt-in after an opt-out flips ask back to true and preserves quietMinutes and redaction.allowHosts on the file.",
25
+ "status": "pending",
26
+ "testPointer": "test/cli/feedback-opt-out.test.js::AC-16102-1: opt-in restores ask true and preserves other fields"
27
+ },
28
+ {
29
+ "id": "TC-196-env-disable-no-ops-add",
30
+ "acId": "AC-16102-2",
31
+ "description": "Cover AC-16102-2 (DISABLE branch) via the CLI test: rcf feedback add under RCF_FEEDBACK_DISABLE=1 prints exactly 'feedback disabled by env' on stdout, exits 0 and writes nothing under .rcf/feedback/.",
32
+ "status": "pending",
33
+ "testPointer": "test/cli/feedback-opt-out.test.js::AC-16102-2: RCF_FEEDBACK_DISABLE=1 makes `add` a no-op that prints the disabled line"
34
+ },
35
+ {
36
+ "id": "TC-196-env-ask-silences-hook-only",
37
+ "acId": "AC-16102-2",
38
+ "description": "Cover AC-16102-2 (ASK=0 branch) via the CLI test: with ask: true on the file, rcf feedback add works normally; rcf feedback hook stop under RCF_FEEDBACK_ASK=0 exits 0 silently on a pending --ask-now entry.",
39
+ "status": "pending",
40
+ "testPointer": "test/cli/feedback-opt-out.test.js::AC-16102-2: RCF_FEEDBACK_ASK=0 keeps add working, silences the hook"
41
+ },
42
+ {
43
+ "id": "TC-196-precedence-order",
44
+ "acId": "AC-16102-2",
45
+ "description": "Cover AC-16102-2 (precedence) via the CLI test: the same fixture with a pending --ask-now entry walks four combinations (no-env + file ask:true -> ask; file ask:false -> silent; file ask:true + env ASK=0 -> silent; env DISABLE -> silent) so the documented env-DISABLE > env-ASK > file precedence is asserted end-to-end.",
46
+ "status": "pending",
47
+ "testPointer": "test/cli/feedback-opt-out.test.js::AC-16102-2: env DISABLE > env ASK=0 > file ask false > file ask true (precedence)"
48
+ },
49
+ {
50
+ "id": "TC-196-status-reports-optout-source",
51
+ "acId": "AC-16102-2",
52
+ "description": "Cover AC-16102-2 (surfacing) via the CLI test: rcf feedback status --json reports optOutSource='file:rcf/feedback-settings.json' after opt-out; the same JSON call under env ASK=0 reports optOutSource='env:RCF_FEEDBACK_ASK=0'; under env DISABLE it reports 'env:RCF_FEEDBACK_DISABLE'.",
53
+ "status": "pending",
54
+ "testPointer": "test/cli/feedback-opt-out.test.js::AC-16102-2: status reports the opt-out source verbatim"
55
+ }
56
+ ],
57
+ "status": "draft"
58
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "createdAt": "2026-09-16T19:20:00Z",
3
+ "updatedAt": "2026-09-17T03:30:00Z",
4
+ "purpose": "Cover AC-16103-1 (rcf feedback hook session-end writes a byte-idempotent outbox bundle for the pending set and completes in well under the shared Claude Code 1.5s SessionEnd budget), AC-16103-2 (rcf feedback hook session-start on Claude Code prints a single carry-over context line; on Codex emits the additionalContext JSON shape; state.json is not mutated on session-start; with no carried-over entries the hook is silent) and AC-16103-3 (defer means \"not now, ask again next session\": deferredUntilSession entries carried over from a prior sessionId return to pending on SessionStart and on Stop; idempotent per session).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16103-1",
8
+ "AC-16103-2",
9
+ "AC-16103-3"
10
+ ],
11
+ "id": "TS-197",
12
+ "usId": "US-16103",
13
+ "title": "Slice 5 (FBS-184): SessionEnd flushes a bundle idempotently, SessionStart re-surfaces a carried-over ask per harness, and defer requeues on the next session",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-197-session-end-writes-idempotent-bundle",
17
+ "acId": "AC-16103-1",
18
+ "description": "Cover AC-16103-1 via the CLI test: rcf feedback hook session-end with one pending entry writes a single .rcf/feedback/outbox/<ISO>-session-end.md file with the design section 4.2 header; a re-run with the same pending set does not create a second file (byte-idempotent); the two-call round trip completes in well under the SessionEnd budget.",
19
+ "status": "pending",
20
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-1: SessionEnd writes one bundle and is byte-idempotent on a re-run"
21
+ },
22
+ {
23
+ "id": "TC-197-session-start-claude-code-line",
24
+ "acId": "AC-16103-2",
25
+ "description": "Cover AC-16103-2 (Claude Code shape) via the CLI test: rcf feedback hook session-start --harness claude-code with a pending entry recorded under a different sessionId prints the exact carry-over line naming the count and citing RULE 17 to stdout; exit 0; state.json is not created (the ledger is set on Stop, not on session-start).",
26
+ "status": "pending",
27
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-2: SessionStart on Claude Code prints the carry-over line for a new session"
28
+ },
29
+ {
30
+ "id": "TC-197-session-start-codex-additional-context",
31
+ "acId": "AC-16103-2",
32
+ "description": "Cover AC-16103-2 (Codex shape) via the CLI test: rcf feedback hook session-start --harness codex emits a stdout JSON with additionalContext carrying the same carry-over line.",
33
+ "status": "pending",
34
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-2: SessionStart on Codex emits the additionalContext JSON shape"
35
+ },
36
+ {
37
+ "id": "TC-197-session-start-silent-when-nothing-carried-over",
38
+ "acId": "AC-16103-2",
39
+ "description": "Cover AC-16103-2 (silence branch) via the CLI test: rcf feedback hook session-start on a project with no pending entries writes nothing on stdout and exits 0.",
40
+ "status": "pending",
41
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-2: SessionStart with no carried-over entries is silent"
42
+ },
43
+ {
44
+ "id": "TC-197-session-start-requeues-deferred-then-stop-asks",
45
+ "acId": "AC-16103-3",
46
+ "description": "Cover AC-16103-3 (SessionStart-path requeue) via the CLI test: add one entry and defer it in session A; run rcf feedback hook session-start --harness claude-code with session_id B; the entry is written back to pending (a { status: pending } state line appended, no sessionId field so the fold preserves A) and rcf feedback list shows it as pending; the stdout prints the carry-over line naming the count and RULE 17; a subsequent rcf feedback hook stop --harness claude-code with session_id B exits 2 with the ask on stderr and appends exactly one asked record for session B.",
47
+ "status": "pending",
48
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-3: SessionStart requeues a deferred entry from a prior session and Stop asks in the new session"
49
+ },
50
+ {
51
+ "id": "TC-197-stop-only-path-requeues-deferred",
52
+ "acId": "AC-16103-3",
53
+ "description": "Cover AC-16103-3 (Stop-only fallback) via the CLI test: add one entry and defer it in session A; skip the SessionStart hook entirely and run rcf feedback hook stop --harness claude-code with session_id B directly; the Stop hook requeues the deferred entry back to pending, exits 2 with the ask on stderr and appends one asked record for session B (the carried-over trigger fires the quiet rule regardless of age).",
54
+ "status": "pending",
55
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-3: Stop without a prior SessionStart still requeues a deferred entry and asks"
56
+ },
57
+ {
58
+ "id": "TC-197-session-start-idempotent-same-session",
59
+ "acId": "AC-16103-3",
60
+ "description": "Cover AC-16103-3 (idempotency per session) via the CLI test: add one entry and defer it in session A; run rcf feedback hook session-start --harness claude-code with session_id A (same as the defer's session); no requeue transition is written and stdout is empty. A second SessionStart in session B requeues once; a third SessionStart also in session B is a no-op (no new transition, silent stdout).",
61
+ "status": "pending",
62
+ "testPointer": "test/cli/feedback-hook.test.js::AC-16103-3: SessionStart is a no-op when the deferred session id matches the incoming session id"
63
+ }
64
+ ],
65
+ "status": "draft"
66
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "createdAt": "2026-09-16T19:20:00Z",
3
+ "updatedAt": "2026-09-16T19:20:00Z",
4
+ "purpose": "Cover AC-16104-1 (rcf init merges three feedback hook entries into .claude/settings.json and .codex/hooks.json with the design-3.5 shape, the matcher startup|resume on SessionStart, timeouts 10/5/5, is byte-idempotent on re-init, preserves neighbouring hooks and honours --bin-path with the node <path> pinned shape), AC-16104-2 (--no-feedback-hooks writes neither file and prints the RULE 17 fallback line once) and AC-16104-3 (rcf doctor --check feedback-hooks reports missing-hook per file per event when absent, --fix installs them, foreign-hook is refused with the entry left in place, a clean tree exits 0 with no writes, and a parse-error on the settings file is refused).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16104-1",
8
+ "AC-16104-2",
9
+ "AC-16104-3"
10
+ ],
11
+ "id": "TS-198",
12
+ "usId": "US-16104",
13
+ "title": "Slice 5 (FBS-184): rcf init installs the feedback hooks and rcf doctor feedback-hooks keeps them honest across clones",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-198-init-writes-both-configs",
17
+ "acId": "AC-16104-1",
18
+ "description": "Cover AC-16104-1 via the CLI test: rcf init on a fresh project writes three feedback hook entries into .claude/settings.json (Stop 10s, SessionEnd 5s, SessionStart 5s with matcher startup|resume) and three matching entries into .codex/hooks.json (Codex JSON shape); every command line is 'npx rcf-lite feedback hook <event> --harness <h>'.",
19
+ "status": "pending",
20
+ "testPointer": "test/cli/init-feedback-hooks.test.js::AC-16104-1: rcf init writes three feedback hook entries into both harness files"
21
+ },
22
+ {
23
+ "id": "TC-198-init-idempotent",
24
+ "acId": "AC-16104-1",
25
+ "description": "Cover AC-16104-1 (idempotency) via the CLI test: a second rcf init against the same tree produces no byte change on either .claude/settings.json or .codex/hooks.json.",
26
+ "status": "pending",
27
+ "testPointer": "test/cli/init-feedback-hooks.test.js::AC-16104-1: re-init on the same tree is byte-idempotent"
28
+ },
29
+ {
30
+ "id": "TC-198-init-preserves-existing-hooks",
31
+ "acId": "AC-16104-1",
32
+ "description": "Cover AC-16104-1 (preserve) via the CLI test: a pre-existing .claude/settings.json with an unrelated Stop hook AND an unrelated top-level key survives rcf init; the feedback Stop entry is added alongside the unrelated one, not in place of it.",
33
+ "status": "pending",
34
+ "testPointer": "test/cli/init-feedback-hooks.test.js::AC-16104-1: pre-existing hooks are preserved; feedback entries added alongside"
35
+ },
36
+ {
37
+ "id": "TC-198-init-bin-path-pins-node",
38
+ "acId": "AC-16104-1",
39
+ "description": "Cover AC-16104-1 (--bin-path pinned shape) via the CLI test: rcf init --bin-path /opt/pinned-rcf/rcf.js writes hook commands as 'node /opt/pinned-rcf/rcf.js feedback hook <event> --harness <h>' instead of the npx rcf-lite shape.",
40
+ "status": "pending",
41
+ "testPointer": "test/cli/init-feedback-hooks.test.js::AC-16104-1: --bin-path pins the hook command to node <path>"
42
+ },
43
+ {
44
+ "id": "TC-198-init-no-feedback-hooks",
45
+ "acId": "AC-16104-2",
46
+ "description": "Cover AC-16104-2 via the CLI test: rcf init --no-feedback-hooks exits 0, writes neither .claude/settings.json nor .codex/hooks.json, and prints the no-feedback-hooks fallback line naming RULE 17.",
47
+ "status": "pending",
48
+ "testPointer": "test/cli/init-feedback-hooks.test.js::AC-16104-2: --no-feedback-hooks writes neither file and prints the fallback line"
49
+ },
50
+ {
51
+ "id": "TC-198-doctor-missing-hooks",
52
+ "acId": "AC-16104-3",
53
+ "description": "Cover AC-16104-3 (missing-hook detection) via the CLI test: rcf doctor --check feedback-hooks --json against a project scaffolded without hook install reports exactly three missing-hook rows for .claude/settings.json and three for .codex/hooks.json; exit 3.",
54
+ "status": "pending",
55
+ "testPointer": "test/cli/doctor-feedback-hooks.test.js::AC-16104-3: doctor reports missing-hook per file per event when both configs are absent"
56
+ },
57
+ {
58
+ "id": "TC-198-doctor-fix-installs-and-reruns-clean",
59
+ "acId": "AC-16104-3",
60
+ "description": "Cover AC-16104-3 (--fix repair) via the CLI test: rcf doctor --check feedback-hooks --fix writes the missing entries; a re-run reports clean and exits 0.",
61
+ "status": "pending",
62
+ "testPointer": "test/cli/doctor-feedback-hooks.test.js::AC-16104-3: doctor --fix installs the missing entries and re-runs clean"
63
+ },
64
+ {
65
+ "id": "TC-198-doctor-foreign-hook-refused",
66
+ "acId": "AC-16104-3",
67
+ "description": "Cover AC-16104-3 (foreign-hook refusal) via the CLI test: after a clean init, mutating the Stop hook's command to add an unknown flag makes doctor --check feedback-hooks --fix --json emit exactly one foreign-hook drift row on .claude/settings.json; the mutated command survives (--fix did not overwrite it) and doctor exits 3.",
68
+ "status": "pending",
69
+ "testPointer": "test/cli/doctor-feedback-hooks.test.js::AC-16104-3: doctor refuses a foreign-hook entry and leaves it in place"
70
+ },
71
+ {
72
+ "id": "TC-198-doctor-clean-tree-no-writes",
73
+ "acId": "AC-16104-3",
74
+ "description": "Cover AC-16104-3 (clean tree) via the CLI test: rcf doctor --check feedback-hooks --fix on a freshly initialised project makes no byte changes to either config file and exits 0.",
75
+ "status": "pending",
76
+ "testPointer": "test/cli/doctor-feedback-hooks.test.js::AC-16104-3: a clean tree makes no writes and stays exit 0"
77
+ },
78
+ {
79
+ "id": "TC-198-doctor-parse-error-refused",
80
+ "acId": "AC-16104-3",
81
+ "description": "Cover AC-16104-3 (parse-error refusal) via the CLI test: an unparseable .claude/settings.json makes doctor --check feedback-hooks --fix emit one parse-error drift row on that file, leave the file untouched, and exit 3.",
82
+ "status": "pending",
83
+ "testPointer": "test/cli/doctor-feedback-hooks.test.js::AC-16104-3: doctor rejects an unparseable settings file with parse-error and refuses --fix"
84
+ }
85
+ ],
86
+ "status": "draft"
87
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "createdAt": "2026-09-16T21:06:54Z",
3
+ "updatedAt": "2026-09-16T21:06:54Z",
4
+ "purpose": "Cover AC-16201-1 (RULE 17 lands in guidance/managed/agent-instructions-block.md with the wording in design 3.4, byte-exact against test/fixtures/managed/rule-17.md; block hash regenerated; naming and static-wording invariants) and AC-16201-2 (rcf init writes RULE 17 into CLAUDE.md and AGENTS.md between the managed markers; an existing project on the pre-slice block picks up RULE 17 on rcf doctor --fix without --force in non-interactive mode).",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16201-1",
8
+ "AC-16201-2"
9
+ ],
10
+ "id": "TS-199",
11
+ "usId": "US-16201",
12
+ "title": "Slice 6 (FBS-185): RULE 17 landed in the managed block and reaches every project through init and doctor --fix",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-199-rule-17-slice-byte-exact-against-fixture",
16
+ "acId": "AC-16201-1",
17
+ "description": "Cover AC-16201-1 via the guidance test: the RULE 17 slice extracted from guidance/managed/agent-instructions-block.md is byte-for-byte identical to the design 3.4 fixture at test/fixtures/managed/rule-17.md.",
18
+ "status": "pending",
19
+ "testPointer": "test/guidance/rule-17.test.js::AC-16201-1: the RULE 17 slice of the block is byte-for-byte the fixture"
20
+ },
21
+ {
22
+ "id": "TC-199-rule-17-names-verbs-and-redaction-posture",
23
+ "acId": "AC-16201-1",
24
+ "description": "Cover AC-16201-1 (naming clause) via the guidance test: RULE 17 names rcf feedback add, preview, submit --yes, defer, opt-out and carries the redaction posture sentence and the one-ask-per-session posture.",
25
+ "status": "pending",
26
+ "testPointer": "test/guidance/rule-17.test.js::AC-16201-1: RULE 17 names all four verbs and the redaction posture"
27
+ },
28
+ {
29
+ "id": "TC-199-rule-17-static-wording-no-em-dash-no-version-no-date",
30
+ "acId": "AC-16201-1",
31
+ "description": "Cover AC-16201-1 (static-wording clause) via the guidance test: the RULE 17 fixture carries no em-dash, no ISO date and no semver, so the block hash moves exactly once on the release that ships the rule.",
32
+ "status": "pending",
33
+ "testPointer": "test/guidance/rule-17.test.js::AC-16201-1: RULE 17 carries no em-dash and no version or date string"
34
+ },
35
+ {
36
+ "id": "TC-199-init-writes-rule-17-into-both-instructions-files",
37
+ "acId": "AC-16201-2",
38
+ "description": "Cover AC-16201-2 (fresh-init path) via the CLI test: rcf init on a fresh project writes CLAUDE.md and AGENTS.md with the managed block; RULE 17 sits between the managed markers on both files and its slice is byte-identical to the fixture.",
39
+ "status": "pending",
40
+ "testPointer": "test/cli/init-rule-17.test.js::AC-16201-2: rcf init writes RULE 17 into CLAUDE.md and AGENTS.md between the managed markers"
41
+ },
42
+ {
43
+ "id": "TC-199-existing-project-picks-up-rule-17-on-doctor-fix",
44
+ "acId": "AC-16201-2",
45
+ "description": "Cover AC-16201-2 (upgrade path) via the CLI test: a project initialised on the pre-slice block (block minus RULE 17) reports stale-hash on rcf doctor and picks up RULE 17 on rcf doctor --fix without --force in non-interactive mode, on both CLAUDE.md and AGENTS.md.",
46
+ "status": "pending",
47
+ "testPointer": "test/cli/init-rule-17.test.js::AC-16201-2: an existing project on the pre-slice block reports stale-hash and picks up RULE 17 on doctor --fix"
48
+ }
49
+ ],
50
+ "status": "draft"
51
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:20:45Z",
3
+ "updatedAt": "2026-09-16T22:20:45Z",
4
+ "purpose": "Cover AC-16301-1 (supersededBy broken pointer surfaces as brokenReference with field=supersededBy) and AC-16301-2 (relatedAdrs unknown entry stays SILENT; the compatibility carry keeps the ratified `rcf define blueprint supersede` workflow unbroken). The tests scaffold a fresh RCF project with initProject, mutate adr-001.json's cross-links, then walkTree and assert the presence / absence of brokenReference entries accordingly.",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16301-1",
8
+ "AC-16301-2"
9
+ ],
10
+ "id": "TS-200",
11
+ "usId": "US-16301",
12
+ "title": "referee-validate ADR cross-link walker: AC-16301-1 supersededBy broken, AC-16301-2 relatedAdrs unknown",
13
+ "testCases": [
14
+ {
15
+ "id": "TC-200-superseded-by-broken",
16
+ "acId": "AC-16301-1",
17
+ "description": "Fresh project via initProject; set adr-001.json supersededBy to ADR-999; walkTree; assert errors contain a brokenReference with documentId=ADR-001 and field=supersededBy.",
18
+ "status": "pending",
19
+ "testPointer": "test/store/walker.test.js::walkTree flags an ADR with a broken supersededBy pointer as brokenReference (REQ-163 AC-16301-1)"
20
+ },
21
+ {
22
+ "id": "TC-200-related-adrs-silent",
23
+ "acId": "AC-16301-2",
24
+ "description": "Fresh project via initProject; set adr-001.json relatedAdrs to [ADR-777]; walkTree; assert NO brokenReference targets the relatedAdrs field on ADR-001 (compatibility carry: the ratified `rcf define blueprint supersede` workflow leaves a transient unresolved relatedAdrs pointer between the supersede write and the closing re-add step).",
25
+ "status": "pending",
26
+ "testPointer": "test/store/walker.test.js::walkTree stays silent on an ADR with an unknown id in relatedAdrs (referee-guarantee C-7 compatibility carry: soft-reference half deferred)"
27
+ }
28
+ ],
29
+ "status": "approved"
30
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:28:54Z",
3
+ "updatedAt": "2026-09-16T22:28:54Z",
4
+ "purpose": "Cover the strict-by-default default (AC-16401-1), the --mode shallow-any opt-out (AC-16401-2), and the conflict / unknown-mode usage refusals (AC-16401-3). Every test scaffolds a fresh RCF project and invokes the coverage bin as an out-of-process subprocess, matching the pattern the rest of `test/cli/coverage.test.js` uses.",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16401-1",
8
+ "AC-16401-2",
9
+ "AC-16401-3"
10
+ ],
11
+ "id": "TS-201",
12
+ "usId": "US-16401",
13
+ "title": "coverage --mode selector: strict-by-default, shallow-any opt-out, conflict refusal",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-201-strict-by-default-exit-4",
17
+ "acId": "AC-16401-1",
18
+ "description": "Fresh project via initProject (AC-101-1 uncovered by construction); invoke `rcf audit coverage` with no flag; assert exit code 4.",
19
+ "status": "pending",
20
+ "testPointer": "test/cli/coverage.test.js::rcf coverage (strict-by-default) with a gap exits 4"
21
+ },
22
+ {
23
+ "id": "TC-201-shallow-any-opt-out",
24
+ "acId": "AC-16401-2",
25
+ "description": "Fresh project via initProject; invoke `rcf audit coverage --mode shallow-any`; assert exit code 0 and stdout matches /Coverage mode: shallow-any/.",
26
+ "status": "pending",
27
+ "testPointer": "test/cli/coverage.test.js::rcf coverage --mode shallow-any prints gaps and exits 0 (explicit opt-out)"
28
+ },
29
+ {
30
+ "id": "TC-201-conflicting-flags-exit-2",
31
+ "acId": "AC-16401-3",
32
+ "description": "Fresh project via initProject; invoke `rcf audit coverage --mode shallow-any --strict`; assert exit code 2 and stderr matches /--mode shallow-any conflicts with --strict/.",
33
+ "status": "pending",
34
+ "testPointer": "test/cli/coverage.test.js::rcf coverage --mode shallow-any --strict exits 2 (conflicting flags)"
35
+ }
36
+ ],
37
+ "status": "approved"
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:38:04Z",
3
+ "updatedAt": "2026-09-16T22:38:04Z",
4
+ "purpose": "Cover AC-16501-1 (UI-BASELINE-UNMET refusal, C-28 + C-36), AC-16501-2 (BROWSER-VERIFICATION-MISSING refusal, C-29) and AC-16501-3 (SCOPE-MISMATCH refusal, C-30). Each test scaffolds a fresh RCF project with initProject, wires a stub verify subprocess that writes a passing report carrying the named per-AC verdict, invokes rcf build finalise, and asserts exit 4 with the expected stderr message.",
5
+ "testLevel": "integration",
6
+ "acIds": [
7
+ "AC-16501-1",
8
+ "AC-16501-2",
9
+ "AC-16501-3"
10
+ ],
11
+ "id": "TS-202",
12
+ "usId": "US-16501",
13
+ "title": "finalise per-AC refusals: UI-BASELINE-UNMET, BROWSER-VERIFICATION-MISSING, SCOPE-MISMATCH",
14
+ "testCases": [
15
+ {
16
+ "id": "TC-202-ui-baseline-unmet-refusal",
17
+ "acId": "AC-16501-1",
18
+ "description": "Fresh project via initProject with FBS-001 at complete; stub verify writes a passing report with perAcVerdicts = [{acId: AC-101-1, verdict: UI-BASELINE-UNMET}]; invoke rcf build finalise; assert exit 4, FBS at complete, stderr matches /UI-BASELINE-UNMET/ and /Referee-guarantees claims C-28 and C-36/.",
19
+ "status": "pending",
20
+ "testPointer": "test/cli/finalise-referee-refusals.test.js::finalise refuses to promote on a passing verify report that carries UI-BASELINE-UNMET (referee-guarantees C-28, C-36)"
21
+ },
22
+ {
23
+ "id": "TC-202-browser-verification-missing-refusal",
24
+ "acId": "AC-16501-2",
25
+ "description": "Same scaffold; perAcVerdicts = [{acId: AC-101-1, verdict: BROWSER-VERIFICATION-MISSING}]; assert exit 4, FBS at complete, stderr matches /BROWSER-VERIFICATION-MISSING/ and /Referee-guarantees claim C-29/.",
26
+ "status": "pending",
27
+ "testPointer": "test/cli/finalise-referee-refusals.test.js::finalise refuses to promote on a passing verify report that carries BROWSER-VERIFICATION-MISSING (referee-guarantees C-29)"
28
+ },
29
+ {
30
+ "id": "TC-202-scope-mismatch-refusal",
31
+ "acId": "AC-16501-3",
32
+ "description": "Same scaffold; perAcVerdicts = [{acId: AC-101-1, verdict: SCOPE-MISMATCH}]; assert exit 4, FBS at complete, stderr matches /SCOPE-MISMATCH/ and /Referee-guarantees claim C-30/.",
33
+ "status": "pending",
34
+ "testPointer": "test/cli/finalise-referee-refusals.test.js::finalise refuses to promote on a passing verify report that carries SCOPE-MISMATCH (referee-guarantees C-30)"
35
+ }
36
+ ],
37
+ "status": "approved"
38
+ }