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,13 @@
1
+ {
2
+ "reqId": "REQ-158",
3
+ "prdId": "PRD-001",
4
+ "title": "Reports reach the owning repo",
5
+ "description": "A finding is filed on the repo that owns the code the finding is about: Stravica/rcf-lite for shelf blueprints and core, and the library-declared repo for library blueprints. Library owners declare their destination via an optional issues field on library.json; the consuming project does not guess. Applied blueprints without a declared destination fall back to derivation from the library git source when unambiguous, else route to the outbox and name the library publisher contact. Doctor lists any registered library missing a destination as a warn-only finding.",
6
+ "category": "functional",
7
+ "domain": "functional",
8
+ "priority": "must",
9
+ "version": "0.1.0",
10
+ "status": "draft",
11
+ "createdAt": "2026-09-16T13:45:23.000Z",
12
+ "updatedAt": "2026-09-16T13:45:23.000Z"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "reqId": "REQ-159",
3
+ "prdId": "PRD-001",
4
+ "title": "Consent-gated submission under the reporter identity",
5
+ "description": "Nothing is submitted without an explicit yes. When yes is given, issues are filed under the operator own GitHub login via the ambient gh CLI; the tool never asks for or stores a token, never calls the network for authentication, and never speaks for anyone but the operator. Labels are requested best-effort and per-repo label discovery drops names the destination does not carry; the title prefix and body fingerprint stay load-bearing for triage. Submit refuses without --yes unless a TTY operator confirms.",
6
+ "category": "functional",
7
+ "domain": "functional",
8
+ "priority": "must",
9
+ "version": "0.1.0",
10
+ "status": "draft",
11
+ "createdAt": "2026-09-16T13:45:23.000Z",
12
+ "updatedAt": "2026-09-16T13:45:23.000Z"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "reqId": "REQ-160",
3
+ "prdId": "PRD-001",
4
+ "title": "No path leaves the operator stuck",
5
+ "description": "Every failure mode of the submit path routes to a local bundle file with a one-line message that names the reason, the repo URL to paste into, and where the bundle was written. gh missing, gh not logged in, repo unreachable, viewerPermission NONE on a private repo, issues disabled, create or comment failure and unresolved destination all map to a bundle rather than a stall. Bundled entries are terminal (not re-asked) so the operator is never nagged about the same finding; a hand-driven re-submit is supported for one entry once access exists.",
6
+ "category": "functional",
7
+ "domain": "functional",
8
+ "priority": "must",
9
+ "version": "0.1.0",
10
+ "status": "draft",
11
+ "createdAt": "2026-09-16T13:45:23.000Z",
12
+ "updatedAt": "2026-09-16T13:45:23.000Z"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "reqId": "REQ-161",
3
+ "prdId": "PRD-001",
4
+ "title": "One ask per session, at a pause, never automatic",
5
+ "description": "The operator is asked at most once per session and only when the agent is genuinely idle: not in the middle of a fix and not on the same day the entry was recorded unless a blocker forces it. The quiet rule (15 minute age or queue complete or carried over or --ask-now) is configurable via quietMinutes in rcf/feedback-settings.json. The ask is offered by the harness hook on Stop and by RULE 17 in the managed block as the belt-and-braces fallback. rcf feedback opt-out silences the ask permanently for a project; RCF_FEEDBACK_ASK=0 silences it per user or per CI run; RCF_FEEDBACK_DISABLE=1 turns even the local log off.",
6
+ "category": "functional",
7
+ "domain": "functional",
8
+ "priority": "must",
9
+ "version": "0.1.0",
10
+ "status": "draft",
11
+ "createdAt": "2026-09-16T13:45:23.000Z",
12
+ "updatedAt": "2026-09-16T13:45:23.000Z"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "reqId": "REQ-162",
3
+ "prdId": "PRD-001",
4
+ "title": "Agents know when to log and when to ask",
5
+ "description": "RULE 17 in the managed instructions block tells every harness (Claude Code and Codex) when to run rcf feedback add, how to ask exactly once at a natural pause, and which of preview, submit --yes, defer and opt-out to run in each branch. The rule is static text (no versions, no dates) so the block hash moves once on the release that ships it, and it is loaded into CLAUDE.md and AGENTS.md by rcf init through the existing managed-block mechanism. It names all four verbs and the redaction posture so an agent under pace still follows the shape when the harness hook has not been trusted.",
6
+ "category": "functional",
7
+ "domain": "functional",
8
+ "priority": "must",
9
+ "version": "0.1.0",
10
+ "status": "draft",
11
+ "createdAt": "2026-09-16T13:45:23.000Z",
12
+ "updatedAt": "2026-09-16T13:45:23.000Z"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:20:45Z",
3
+ "updatedAt": "2026-09-16T22:20:45Z",
4
+ "description": "Referee-guarantees docs page (how-it-works/what-the-referee-guarantees) promises that `rcf define validate` proves every reference in every document resolves, so a walked tree that passes has nothing pointing at nothing. The 0.27.0 walker checks the parent-id fields and the FBS / TS / EVAL / CN cross-links, but two ADR-schema-declared reference fields, supersededBy and relatedAdrs, are declared in the ADR schema without being walked: a bad target passes validate. This train closes the gap by walking both fields inside collectBrokenReferences, keeping the existing brokenReference error kind, and reporting the exact ADR file + field on failure. Chain: referee-guarantees docs claims C-7 and C-38 (audit at reviews/2026-09-15-docs-claims-audit/how-it-works__what-the-referee-guarantees.json). No schema change (the schema already declares both fields); rcf-lite behaviour widens, and any project whose ADRs have stale supersession pointers surfaces the defect the next time validate runs.",
5
+ "category": "functional",
6
+ "domain": "functional",
7
+ "priority": "must",
8
+ "reqId": "REQ-163",
9
+ "prdId": "PRD-001",
10
+ "title": "Referee guarantee: `rcf define validate` walks every schema-declared reference field on ADR (supersededBy, relatedAdrs) so the docs-page 'nothing points at nothing' claim holds",
11
+ "version": "0.1.0",
12
+ "status": "draft"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:28:54Z",
3
+ "updatedAt": "2026-09-16T22:28:54Z",
4
+ "description": "Referee-guarantees docs page states without qualification that a requirement counts as covered only when every acceptance criterion beneath it has a resolving Test Case, and that a stub or stale pointer fails the coverage gate exactly as a missing test does when the displayed command (`rcf audit coverage`) is run. The 0.27.0 shipped default is shallow-any, so the plain command does not enforce that; strict is per-AC-strict but is opt-in via `--strict`. This train flips the shipped default: strict is the default, `--mode shallow-any` is the explicit opt-out for author-time exploration (prints gaps, exits 0), and the legacy `--strict` flag stays as a no-op alias so existing CI, blueprints and dogfood scripts stay green. `--mode shallow-any --strict` is a usage refusal (exit 2) so a scripted invocation cannot silently disagree with itself. CHANGELOG carries a migration note under [Unreleased]. Repo's own CI dogfood invocation is updated to the shipped default. Closes referee-guarantees docs claims C-11 and C-14 (audit at reviews/2026-09-15-docs-claims-audit/how-it-works__what-the-referee-guarantees.json).",
5
+ "category": "functional",
6
+ "domain": "functional",
7
+ "priority": "must",
8
+ "reqId": "REQ-164",
9
+ "prdId": "PRD-001",
10
+ "title": "Referee guarantee: `rcf audit coverage` is strict-by-default; `--mode shallow-any` is the explicit opt-out; `--strict` remains a no-op alias",
11
+ "version": "0.1.0",
12
+ "status": "draft"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:38:04Z",
3
+ "updatedAt": "2026-09-16T22:38:04Z",
4
+ "description": "Referee-guarantees docs page promises that `rcf build finalise` is the only path that writes verified, that a chain that says verified traces to an actual post-merge runtime check, and that the finalise gate refuses on the three per-AC verdicts the aggregator already emits: UI-BASELINE-UNMET (docs claim C-28; also covers a block-severity probe-pack failure, C-36), BROWSER-VERIFICATION-MISSING (C-29) and SCOPE-MISMATCH (C-30). The 0.27.0 finalise CLI only branched on MOCK-ONLY-DECLARED / BLOCKED-BY-DECLARATION and EVAL-MISSING / EVAL-BELOW-THRESHOLD; the three new verdicts were derived on the report but did not gate finalise. The manual override path (`rcf define update FBS.executionStatus=verified`) was accepted by the writer, defeating the C-22 promise. This train wires the three per-AC refusals in finalise (no ack path: the refusals are honest; fix the AC or its scope), gates the manual override behind `--acknowledge-verified-override` on `rcf define update` (per the escalation clause: existing WSD projects may still need the escape valve; the writer's default is now the documented behaviour), and adds a git default-branch precondition to finalise with `--allow-pre-merge` as the deliberate pre-merge dry-run opt-out. Closes referee-guarantees docs claims C-22 / C-26 / C-28 / C-29 / C-30 / C-36 (audit at reviews/2026-09-15-docs-claims-audit/how-it-works__what-the-referee-guarantees.json). C-33 (shipWithoutEval manifest field) remains open: the write path already exists (skips schema validation), but the rcf-schemas 0.6.2 manifest schema does not yet declare the field; the exact delta needed lands in the ship-without-eval.js comment and in the report for this dispatch. C-38 (per-check applicable:false in browserVerificationProbePackCheck) is also blocked on the rcf-schemas bump; source comments already flag it.",
5
+ "category": "functional",
6
+ "domain": "functional",
7
+ "priority": "must",
8
+ "reqId": "REQ-165",
9
+ "prdId": "PRD-001",
10
+ "title": "Referee guarantee: `rcf build finalise` refuses UI-BASELINE-UNMET / BROWSER-VERIFICATION-MISSING / SCOPE-MISMATCH; verified traces to a post-merge run; manual override is gated",
11
+ "version": "0.1.0",
12
+ "status": "draft"
13
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "tacId": "TAC-4101-feedback-cli",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback CLI verb family",
8
+ "purpose": "Own the rcf feedback core verb and its sub-dispatcher (add, list, preview, submit, defer, discard, opt-in, opt-out, hook, status), exposing the surface the agent, the operator and the harness hooks all call.",
9
+ "responsibilities": [
10
+ "Register feedback in bin/rcf.js CORE map alongside init, doctor, guidance, mcp, version",
11
+ "Parse and validate sub-verb flags and enums before touching store or network",
12
+ "Return the documented exit codes per sub-verb (0 success, 2 usage, 3 outcome with residual pending)",
13
+ "Export HELP text for the help-parity test and mirror the core verb help conventions",
14
+ "Route each sub-verb to store, redact, render, destination, gh, hook without any cross-module state"
15
+ ],
16
+ "internalStructure": "src/cli/feedback.js is a sub-dispatcher with a HELP export and one handler per sub-verb; each handler reads flags, calls into src/feedback/* pure modules, and prints the shaped result. Handlers never shell out directly; the gh call sits behind src/feedback/gh.js.",
17
+ "interfaces": [
18
+ {
19
+ "name": "feedbackMain",
20
+ "kind": "function",
21
+ "description": "Argv-driven main; matches the core-verb signature the top-level dispatcher expects."
22
+ },
23
+ {
24
+ "name": "HELP",
25
+ "kind": "constant",
26
+ "description": "Static help text asserted by the help-parity test."
27
+ }
28
+ ],
29
+ "dependencies": [
30
+ {
31
+ "name": "TAC-4102-feedback-store",
32
+ "kind": "tac",
33
+ "tacId": "TAC-4102-feedback-store",
34
+ "description": "All state reads and writes."
35
+ },
36
+ {
37
+ "name": "TAC-4103-feedback-redact",
38
+ "kind": "tac",
39
+ "tacId": "TAC-4103-feedback-redact",
40
+ "description": "Preview and submit pipelines."
41
+ },
42
+ {
43
+ "name": "TAC-4104-feedback-fingerprint",
44
+ "kind": "tac",
45
+ "tacId": "TAC-4104-feedback-fingerprint",
46
+ "description": "Fingerprint per entry."
47
+ },
48
+ {
49
+ "name": "TAC-4105-feedback-render",
50
+ "kind": "tac",
51
+ "tacId": "TAC-4105-feedback-render",
52
+ "description": "Title, body and bundle rendering."
53
+ },
54
+ {
55
+ "name": "TAC-4106-feedback-destination",
56
+ "kind": "tac",
57
+ "tacId": "TAC-4106-feedback-destination",
58
+ "description": "Destination resolution."
59
+ },
60
+ {
61
+ "name": "TAC-4107-feedback-gh",
62
+ "kind": "tac",
63
+ "tacId": "TAC-4107-feedback-gh",
64
+ "description": "The single gh shell-out seam."
65
+ },
66
+ {
67
+ "name": "TAC-4108-feedback-hook",
68
+ "kind": "tac",
69
+ "tacId": "TAC-4108-feedback-hook",
70
+ "description": "Hook handler; called by hook sub-verb."
71
+ }
72
+ ],
73
+ "tradeoffs": "A single core verb keeps the surface easy to reference in RULE 17 and in docs; the cost is a moderately sized sub-dispatcher, matched by preflight and other multi-verb families already in the tree.",
74
+ "notes": "The verb is core, not grouped, because it spans discover-to-audit and is invoked from harness hooks; OLD_FLAT_MAP is untouched (no legacy form existed). Design section 9 decision: no MCP tool for feedback in v1 (rejected: an rcf_feedback_add MCP tool, adds a second code path to test before the first has users; add when an MCP-only harness appears).",
75
+ "createdAt": "2026-09-16T13:45:23.000Z",
76
+ "updatedAt": "2026-09-16T14:14:36Z"
77
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "tacId": "TAC-4102-feedback-store",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback local store",
8
+ "purpose": "Own the on-disk feedback log at .rcf/feedback/entries.jsonl (append-only, one JSON object per line, folded by id), the per-session ask ledger at .rcf/feedback/state.json, and the outbox bundle directory .rcf/feedback/outbox/. Contribute the gitignore entry so the store never rides a git push.",
9
+ "responsibilities": [
10
+ "Append entry and state lines atomically with no reader ever seeing a partial line",
11
+ "Fold entries.jsonl by id, last line wins, when returning current state",
12
+ "Export feedbackGitignoreEntry so managed-gitignore aggregation picks up the path on doctor --fix",
13
+ "Refuse a first write when the gitignore does not cover .rcf/feedback/ and --force is absent",
14
+ "Provide state helpers for asked-records, deferred-until-session, discarded, submitted and bundled transitions"
15
+ ],
16
+ "internalStructure": "src/feedback/store.js exposes readEntries(root), appendEntry(root, entry), appendState(root, transition) and readSettings(root); a small ensureGitignore(root, opts) enforces the pre-write check. Outbox writes go through a separate helper that computes the filename from the destination slug and the ISO timestamp.",
17
+ "interfaces": [
18
+ {
19
+ "name": "readEntries",
20
+ "kind": "function",
21
+ "description": "Load and fold the JSONL log to current-state entries."
22
+ },
23
+ {
24
+ "name": "appendEntry",
25
+ "kind": "function",
26
+ "description": "Append one entry object as a JSONL line."
27
+ },
28
+ {
29
+ "name": "appendState",
30
+ "kind": "function",
31
+ "description": "Append one state-transition line for an existing id."
32
+ },
33
+ {
34
+ "name": "feedbackGitignoreEntry",
35
+ "kind": "constant",
36
+ "description": "Managed-gitignore contribution consumed by src/setup/managed-gitignore.js."
37
+ }
38
+ ],
39
+ "dependencies": [
40
+ {
41
+ "name": "node:fs/promises",
42
+ "kind": "external",
43
+ "description": "Filesystem I/O; the store is deliberately synchronous where safe."
44
+ }
45
+ ],
46
+ "tradeoffs": "Append-only JSONL is trivial to write correctly and to inspect by eye; the cost is a fold on every read, which is negligible at the entry counts a single project will ever see.",
47
+ "notes": "Gitignored, not committed. Raw entries can hold what redaction removes; committing them would leak on the next push for a public project.",
48
+ "createdAt": "2026-09-16T13:45:23.000Z",
49
+ "updatedAt": "2026-09-16T13:45:23.000Z"
50
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "tacId": "TAC-4103-feedback-redact",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback redactor",
8
+ "purpose": "Rule-based, deterministic redaction of any string that would leave the machine (issue title, body, evidence pointers). No LLM anywhere; the ledger of every replacement is what the operator sees on preview.",
9
+ "responsibilities": [
10
+ "Apply the eight redaction rules from design section 5 to title, body and evidence strings",
11
+ "Return a ledger of { rule, before, after, count } entries for the operator disclosure",
12
+ "Refuse on residual-secret matches (second pass) with a line pointer so the offending body is not sent",
13
+ "Ship a bundled allowlist of vendor hosts and honour the extension array on rcf/feedback-settings.json"
14
+ ],
15
+ "internalStructure": "src/feedback/redact.js is a pure module: redact(text, context) -> { text, ledger[] } plus small per-rule helpers. src/feedback/redact-allowlist.json ships the vendor host set; the extension array is merged at call time.",
16
+ "interfaces": [
17
+ {
18
+ "name": "redact",
19
+ "kind": "function",
20
+ "description": "Redact one string with the eight rules; return the redacted text and the ledger."
21
+ },
22
+ {
23
+ "name": "RedactionContext",
24
+ "kind": "type",
25
+ "description": "projectRoot, projectName, operatorName, gitRemote, allowHosts."
26
+ }
27
+ ],
28
+ "dependencies": [
29
+ {
30
+ "name": "node:crypto",
31
+ "kind": "external",
32
+ "description": "Entropy heuristic implementation for rule 5 (secret-looking strings)."
33
+ }
34
+ ],
35
+ "tradeoffs": "Rule-based redaction is testable with a fixture corpus and deterministic under review; the cost is that it will occasionally over-redact (a benign name that matches an entropy rule), which is what the disclosure ledger exists to catch.",
36
+ "notes": "The stored entry is never mutated by redaction; the rendered output is what leaves.",
37
+ "createdAt": "2026-09-16T13:45:23.000Z",
38
+ "updatedAt": "2026-09-16T13:45:23.000Z"
39
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "tacId": "TAC-4104-feedback-fingerprint",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback fingerprint",
8
+ "purpose": "Deterministic 12-hex fingerprint per entry that keys the same-defect fold on issue create.",
9
+ "responsibilities": [
10
+ "Compute the first 12 hex characters of sha-256 over the canonical fingerprint input",
11
+ "Exclude blueprint version from the input so a defect across versions folds",
12
+ "Fall back to normalised-title tokens when the anchor is absent, and warn in preview"
13
+ ],
14
+ "internalStructure": "src/feedback/fingerprint.js is pure and tiny: fingerprint(entry) -> hex12 plus normaliseTitle(title) helper for the fallback.",
15
+ "interfaces": [
16
+ {
17
+ "name": "fingerprint",
18
+ "kind": "function",
19
+ "description": "Compute the entry fingerprint from its canonical input."
20
+ }
21
+ ],
22
+ "dependencies": [
23
+ {
24
+ "name": "node:crypto",
25
+ "kind": "external",
26
+ "description": "sha-256 for the fingerprint hash."
27
+ }
28
+ ],
29
+ "tradeoffs": "A tiny fingerprint (12 hex = 48 bits) risks a collision at very large corpuses; at the scale of a single blueprint tracker it is safe, and issues carry the full-anchor context in the body so a maintainer resolves a rare collision by hand.",
30
+ "notes": "The fingerprint appears twice in the body (visible line and HTML comment) so maintainer edits do not lose it.",
31
+ "createdAt": "2026-09-16T13:45:23.000Z",
32
+ "updatedAt": "2026-09-16T13:45:23.000Z"
33
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "tacId": "TAC-4105-feedback-render",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback renderer",
8
+ "purpose": "Deterministic templates for issue title and body, the +1 comment body, and the outbox bundle file. The output is what preview shows and what leaves on submit.",
9
+ "responsibilities": [
10
+ "Render the issue title as \"[<effective-slug>] <title>\" for blueprints and \"[rcf-lite] <title>\" for core",
11
+ "Render the body with the Evidence and Environment tables, the visible fingerprint line and its HTML-comment twin",
12
+ "Render the outbox bundle header and one section per entry (title first, then body) so a paste is one-shot",
13
+ "Consume redacted strings and the redaction ledger; never re-run redaction itself"
14
+ ],
15
+ "internalStructure": "src/feedback/render.js exposes renderIssue(entry, redacted), renderComment(entry, redacted, deltaOnly), renderBundle(destinationInfo, entries). All output is UTF-8, LF line endings, ASCII hyphens only (register rule and fingerprint stability).",
16
+ "interfaces": [
17
+ {
18
+ "name": "renderIssue",
19
+ "kind": "function",
20
+ "description": "Return { title, body, labels[] } for a create call."
21
+ },
22
+ {
23
+ "name": "renderComment",
24
+ "kind": "function",
25
+ "description": "Return the comment body for a +1 add."
26
+ },
27
+ {
28
+ "name": "renderBundle",
29
+ "kind": "function",
30
+ "description": "Return the markdown bundle string for outbox files."
31
+ }
32
+ ],
33
+ "dependencies": [
34
+ {
35
+ "name": "TAC-4103-feedback-redact",
36
+ "kind": "tac",
37
+ "tacId": "TAC-4103-feedback-redact",
38
+ "description": "The renderer consumes redacted strings the caller supplies."
39
+ }
40
+ ],
41
+ "tradeoffs": "Static templates keep the shape reviewable by eye and byte-comparable in tests; the cost is that template drift requires golden updates, which is exactly the discipline the tests exist for.",
42
+ "notes": "The docs-site \"submit a blueprint idea\" form reuses these templates verbatim so triage sees one shape from both producers.",
43
+ "createdAt": "2026-09-16T13:45:23.000Z",
44
+ "updatedAt": "2026-09-16T13:45:23.000Z"
45
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "tacId": "TAC-4106-feedback-destination",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback destination resolver",
8
+ "purpose": "Resolve a pending entry to its destination repo and visibility, using the library.json issues field, the rcf/blueprint-libraries.json snapshot, the manifest sourceRef derivation, and the shelf-and-core constant.",
9
+ "responsibilities": [
10
+ "Walk entry.target -> manifest.blueprints[] -> registry entry -> issuesRepo, with sourceRef derivation as fallback",
11
+ "Return a { repo, visibility, derived, reason } shape; unresolved carries a reason for the doctor row",
12
+ "Route --kind core and shelf blueprints to the constant sourced from package.json:bugs.url (a test pins the constant)",
13
+ "Report the doctor feedback-destinations warn row for every registered library without a resolvable destination"
14
+ ],
15
+ "internalStructure": "src/feedback/destination.js is a pure resolver; the constant lives at the top of the module and is exported for the test to compare against package.json.",
16
+ "interfaces": [
17
+ {
18
+ "name": "resolve",
19
+ "kind": "function",
20
+ "description": "Given an entry and the manifest+registry, return the destination shape."
21
+ },
22
+ {
23
+ "name": "CORE_REPO",
24
+ "kind": "constant",
25
+ "description": "The Stravica/rcf-lite constant; pinned to package.json:bugs.url in a test."
26
+ }
27
+ ],
28
+ "dependencies": [
29
+ {
30
+ "name": "src/blueprint/library-registry.js",
31
+ "kind": "external",
32
+ "description": "RegistryEntry read for issuesRepo and issuesVisibility fields."
33
+ }
34
+ ],
35
+ "tradeoffs": "A declared destination on library.json requires library owners to author one field; the cost is a one-time PR per library, in exchange for correctness on every consuming project.",
36
+ "notes": "A library mirrored from a fork would have derivation pointing at the fork; the declared issues field is why derivation is only a fallback.",
37
+ "createdAt": "2026-09-16T13:45:23.000Z",
38
+ "updatedAt": "2026-09-16T13:45:23.000Z"
39
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "tacId": "TAC-4107-feedback-gh",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback gh adapter",
8
+ "purpose": "The single place that shells out to gh. Named seam via RCF_FEEDBACK_GH_MODULE so every test replaces gh with a fake that records calls.",
9
+ "responsibilities": [
10
+ "Provide ghLabelList, ghIssueSearch, ghIssueCreate, ghIssueComment, ghRepoView (viewerPermission, visibility, hasIssuesEnabled), ghAuthStatus",
11
+ "Never read GH_TOKEN or GITHUB_TOKEN; never spawn gh auth login; never mutate process.env",
12
+ "Return typed results, not raw shell output; errors carry the classified reason (network, 4xx, 5xx, ratelimit, notFound)"
13
+ ],
14
+ "internalStructure": "src/feedback/gh.js exports the interface; RCF_FEEDBACK_GH_MODULE names an alternative module (import() at test time) that exports the same signatures. This mirrors the verifier launchAgent override in src/verify/engine/launcher.js.",
15
+ "interfaces": [
16
+ {
17
+ "name": "ghIssueCreate",
18
+ "kind": "function",
19
+ "description": "Create one issue on a repo with title, body and labels; return { url, number }."
20
+ },
21
+ {
22
+ "name": "ghIssueSearch",
23
+ "kind": "function",
24
+ "description": "Search issues on a repo by body query; return matches."
25
+ },
26
+ {
27
+ "name": "ghIssueComment",
28
+ "kind": "function",
29
+ "description": "Comment on an issue; return { url }."
30
+ }
31
+ ],
32
+ "dependencies": [
33
+ {
34
+ "name": "gh",
35
+ "kind": "external",
36
+ "description": "The GitHub CLI; the tool never handles tokens itself."
37
+ }
38
+ ],
39
+ "tradeoffs": "gh is a dependency the reporter chooses to install; the cost is a fallback bundle path when gh is missing, which the design considers a feature rather than a bug.",
40
+ "notes": "A future MCP-only harness would call the CLI too; a native gh-lib port is not planned for v1.",
41
+ "createdAt": "2026-09-16T13:45:23.000Z",
42
+ "updatedAt": "2026-09-16T13:45:23.000Z"
43
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "tacId": "TAC-4108-feedback-hook",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "name": "Feedback harness hook",
8
+ "purpose": "The single hook handler for both Claude Code and Codex, exposing the quiet rule as a pure function and the per-harness output shape as a thin wrapper.",
9
+ "responsibilities": [
10
+ "Read harness JSON from stdin (session_id, cwd, hook_event_name, stop_hook_active, last_assistant_message) and never block longer than 1 second",
11
+ "Apply the quiet rule (design section 3.5) and return ask or silent",
12
+ "Emit the exit-2-plus-stderr shape for Claude Code and the JSON block shape for Codex",
13
+ "Install itself under .claude/settings.json and .codex/hooks.json via a mergeable installer that never clobbers other hooks",
14
+ "Report missing-hook and foreign-hook conditions to doctor and repair missing hooks under --fix"
15
+ ],
16
+ "internalStructure": "src/feedback/hook.js exports shouldAsk(state) -> \"ask\"|\"silent\" (pure) and emit(harness, decision, entries) (side-effect). src/setup/feedback-hooks.js merges the entries into .claude/settings.json and .codex/hooks.json; doctor reuses the installer helpers for the report.",
17
+ "interfaces": [
18
+ {
19
+ "name": "shouldAsk",
20
+ "kind": "function",
21
+ "description": "Pure decision on the quiet rule; unit-tested across the full table."
22
+ },
23
+ {
24
+ "name": "emit",
25
+ "kind": "function",
26
+ "description": "Per-harness output; exit code and shape."
27
+ },
28
+ {
29
+ "name": "installHooks",
30
+ "kind": "function",
31
+ "description": "Merge the hook entries into the two harness config files."
32
+ }
33
+ ],
34
+ "dependencies": [
35
+ {
36
+ "name": "TAC-4102-feedback-store",
37
+ "kind": "tac",
38
+ "tacId": "TAC-4102-feedback-store",
39
+ "description": "Read state and settings; write the asked ledger."
40
+ }
41
+ ],
42
+ "tradeoffs": "Two harness config files to maintain and one handler; the cost is small (one merge pattern per file) and the benefit is one implementation of the quiet rule for both harnesses.",
43
+ "notes": "The asked record is appended before the emit path, so a crash between emit and reply cannot cause a second ask.",
44
+ "createdAt": "2026-09-16T13:45:23.000Z",
45
+ "updatedAt": "2026-09-16T13:45:23.000Z"
46
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:20:45Z",
3
+ "updatedAt": "2026-09-17T01:05:07Z",
4
+ "tacId": "TAC-4109-referee-validate-adr-crosslinks",
5
+ "prdId": "PRD-001",
6
+ "tadId": "TAD-001",
7
+ "version": "0.1.0",
8
+ "status": "draft",
9
+ "name": "referee-validate ADR cross-link walker",
10
+ "purpose": "Extend the load-then-invert walker's referential-integrity pass (`collectBrokenReferences` in `packages/rcf-lite/src/core/store/walker.js`) to walk the strong ADR cross-link the 0.27.0 walker skipped: `supersededBy` (single ADR id). A present target must resolve to a loaded ADR; a mismatch surfaces as a `brokenReference` error named to the ADR file, keyed by field. An absent or empty field is silent. The soft back-reference `relatedAdrs` is deliberately left unwalked at this phase (AC-16301-2 compatibility carry) so the ratified `rcf define blueprint supersede` workflow keeps working; tightening it is a schemas follow-up.",
11
+ "responsibilities": [
12
+ "Inside `collectBrokenReferences`, after the existing ADR->TAD parent check, walk `supersededBy` when it is a non-empty string and delegate to the existing `check` helper with expectedKind `adr` (AC-16301-1).",
13
+ "Leave `relatedAdrs` unwalked here (AC-16301-2 compatibility carry): the ratified `rcf define blueprint supersede` workflow writes a project ADR whose `relatedAdrs` lists both the applied blueprint ADR and the not-yet-on-disk incoming blueprint ADR, so walking would refuse the workflow between the supersede write and the closing re-add. Tightening moves to the schemas follow-up (value-narrow to applied ADR ids, or a workflow-aware exception on the supersede write path).",
14
+ "Reuse the existing `brokenReference` error shape (kind, documentId, filePath, field, rule) so downstream consumers of `formatErrors` need no change.",
15
+ "Ensure the widened check contributes to `tree.brokenIds` exactly the way the existing checks do."
16
+ ],
17
+ "internalStructure": "One additional call block appended to the existing ADR loop inside `collectBrokenReferences`, delegating `supersededBy` to the `check` helper. The `check` helper is unchanged. `supersededBy` is not required by the ADR schema, so an omitted or empty field never emits an error; the check runs only on a present target. `relatedAdrs` is intentionally not walked at this phase (see responsibilities and AC-16301-2).",
18
+ "interfaces": [],
19
+ "notes": "Existing WSD projects that carry stale `supersededBy` pointers will start failing validate on upgrade; that is the intended behaviour (the referee-guarantees docs page promises exactly this refusal). Failures name the ADR file and the field so the fix is a one-line edit or a `define update` write. `relatedAdrs` is untouched by this train and is picked up in the schemas follow-up."
20
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:28:54Z",
3
+ "updatedAt": "2026-09-16T22:28:54Z",
4
+ "tacId": "TAC-4110-referee-coverage-mode-selector",
5
+ "prdId": "PRD-001",
6
+ "tadId": "TAD-001",
7
+ "version": "0.1.0",
8
+ "status": "draft",
9
+ "name": "coverage --mode selector",
10
+ "purpose": "Add an explicit `--mode <strict|shallow-any>` option to `rcf audit coverage` in `packages/rcf-lite/src/cli/coverage.js`, resolve the strictness in one place before invoking `computeCoverage`, and keep the legacy `--strict` flag as a no-op alias for the new default. The plain command runs strict-by-default; `--mode shallow-any` is the explicit opt-out; `--mode shallow-any --strict` is a usage refusal (exit 2).",
11
+ "responsibilities": [
12
+ "Extend OPTION_SPEC with `mode: { type: 'string' }` and keep `strict: { type: 'boolean' }` for backward compatibility (AC-16401-1, AC-16401-2).",
13
+ "Validate `--mode` against the enum {strict, shallow-any}; reject unknowns with exit 2 (AC-16401-3).",
14
+ "Refuse `--mode shallow-any --strict` with exit 2 and a usage message that names both flags (AC-16401-3).",
15
+ "Resolve strictness once: `strict = flags.mode === 'shallow-any' ? false : true`. Pass the resolved value into `computeCoverage` and the strict-gate exit-4 branch, and into the strict-only verification-integrity matrix (AC-16401-1, AC-16401-2).",
16
+ "Update the HELP block, the module-level comment, and the human-readable error messages so the flag family and its default are self-documenting."
17
+ ],
18
+ "internalStructure": "One-shot resolution in main(). No changes to `computeCoverage` or the query layer. The legacy `--strict` flag routes through the same resolver as absence-of-flag, so existing CI invocations (including the repo's own dogfood step) are byte-forward-compatible.",
19
+ "interfaces": [],
20
+ "notes": "The repo's own CI dogfood step in `.github/workflows/ci.yml` is updated to the shipped default (plain `rcf audit coverage`) so the referee-guarantees page and the CI match. Existing blueprints and downstream projects that still spell `--strict` keep working."
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:38:04Z",
3
+ "updatedAt": "2026-09-16T22:38:04Z",
4
+ "tacId": "TAC-4111-referee-finalise-per-ac-refusals",
5
+ "prdId": "PRD-001",
6
+ "tadId": "TAD-001",
7
+ "version": "0.1.0",
8
+ "status": "draft",
9
+ "name": "finalise per-AC refusals for UI-BASELINE-UNMET / BROWSER-VERIFICATION-MISSING / SCOPE-MISMATCH",
10
+ "purpose": "Add three refusal branches to `packages/rcf-lite/src/cli/finalise.js` that read `passLoaded.report.perAcVerdicts[]` after the existing MOCK-ONLY and EVAL branches and refuse promotion (exit 4) when any per-AC verdict matches one of {UI-BASELINE-UNMET, BROWSER-VERIFICATION-MISSING, SCOPE-MISMATCH}. Each refusal leaves the FBS at its current status, prints a stderr message that names the AC(s), the count and the referee-guarantees claim ids, and appends the `summariseReport` block for context. The three ingest helpers land in `packages/rcf-lite/src/finalise/ingest.js` as `findUiBaselineUnmetAcs` / `reportHasUiBaselineUnmet` and `findBrowserVerificationMissingAcs` / `reportHasBrowserVerificationMissing`; `findScopeMismatchAcs` / `reportHasScopeMismatch` already exist and are reused as-is. All three helpers and the finalise-side booleans are re-exported through `src/finalise/index.js`.",
11
+ "responsibilities": [
12
+ "Add findUiBaselineUnmetAcs and reportHasUiBaselineUnmet to ingest.js (AC-16501-1, AC-16501-3).",
13
+ "Add findBrowserVerificationMissingAcs and reportHasBrowserVerificationMissing to ingest.js (AC-16501-2).",
14
+ "Add three finalise refusal branches after the EVAL refusal branch, in the order UI-BASELINE-UNMET, BROWSER-VERIFICATION-MISSING, SCOPE-MISMATCH; each names the referee-guarantees claim ids in the stderr message so a downstream reader can trace the refusal to the docs promise it enforces (AC-16501-1, AC-16501-2, AC-16501-3).",
15
+ "Re-export the new helpers through src/finalise/index.js.",
16
+ "The refusals do NOT expose a --ship-without-* opt-out: the docs page names no sister opt-out for these three (unlike MOCK-ONLY / EVAL). If a project needs to ship anyway, the fix is on the tree (widen the TC, land the browser check, fix the baseline)."
17
+ ],
18
+ "internalStructure": "Three straight-line branches modelled on the existing MOCK-ONLY / EVAL refusal shape. Each reads perAcVerdicts, filters by verdict, prints a message, appends summariseReport, and returns 4. Graceful on the pre-0.7.0 report shape (no perAcVerdicts): the helpers return an empty array and the branches fall through to the next check.",
19
+ "interfaces": [],
20
+ "notes": "Behavioural addition, not a change: existing verify reports that never emit these verdicts are unaffected. Existing WSD projects whose verify layer already emits UI-BASELINE-UNMET / BROWSER-VERIFICATION-MISSING / SCOPE-MISMATCH will see finalise refuse where it previously silently promoted; that is the referee-guarantees claim holding."
21
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "createdAt": "2026-09-16T22:38:04Z",
3
+ "updatedAt": "2026-09-16T22:38:04Z",
4
+ "tacId": "TAC-4112-referee-finalise-verified-invariant",
5
+ "prdId": "PRD-001",
6
+ "tadId": "TAD-001",
7
+ "version": "0.1.0",
8
+ "status": "draft",
9
+ "name": "finalise verified-invariant: writer refusal + merge-state precondition",
10
+ "purpose": "Gate the two paths that let the 0.27.0 chain say verified without an actual post-merge runtime check. (a) Refuse a define-update patch that writes FBS.executionStatus=verified unless the caller passes options.allowVerifiedOverride=true; the finalise CLI is the sole caller that sets that seam. The define-update CLI exposes the escape valve as --acknowledge-verified-override, matching the escalation clause on this train (existing WSD projects may still need a manual escape hatch for repair scenarios). (b) In `packages/rcf-lite/src/cli/finalise.js`, spawn a git rev-parse subprocess just before the executionStatus write and refuse promotion (exit 4) when the branch is not one of {main, master}. --allow-pre-merge is the deliberate pre-merge dry-run opt-out; the decision is logged on stdout so the operator sees it. Absent a git checkout the check degrades to a warn line rather than a hard fail.",
11
+ "responsibilities": [
12
+ "Add the FBS.executionStatus=verified refusal to updateDocument in `packages/rcf-lite/src/core/store/writer.js`, gated on options.allowVerifiedOverride (AC-16502-1, AC-16502-2).",
13
+ "Add --acknowledge-verified-override to the define-update CLI, threading options.allowVerifiedOverride through (AC-16502-1).",
14
+ "Wire the finalise CLI's own updateDocument call to pass options.allowVerifiedOverride:true (backward compatibility for the finalise happy path).",
15
+ "Add resolveGitBranch helper in finalise.js as a testable seam (deps.spawn) around child_process.spawn (AC-16502-3).",
16
+ "Add the branch-name refusal branch just before the executionStatus write; support --allow-pre-merge and degrade to a warn line when the branch cannot be resolved (AC-16502-3).",
17
+ "Update HELP for both CLIs so the flags and their intent are self-documenting."
18
+ ],
19
+ "internalStructure": "Writer refusal fires at the very top of the patch-apply path in updateDocument, before deep-merge and dot-path assignments run, so no partial state ever lands. The finalise-side branch check uses child_process.spawn (imported at module top) with the deps.spawn seam consumers can override in tests; the shape mirrors spawnVerify's own seam. The default-branch set is small and conventional ({main, master}) rather than reading the git remote's symbolic ref (which fails offline and adds a round-trip on every finalise).",
20
+ "interfaces": [],
21
+ "notes": "Behavioural addition, not a change on the finalise happy path (finalise passes the override flag through). Downstream projects that ran `rcf define update <fbs> --set executionStatus=verified` without --acknowledge-verified-override will see the write refused; the fix is either finalise or the new opt-out flag. Downstream projects whose finalise ran off a non-default branch will see the pre-merge refusal; --allow-pre-merge is the documented dry-run seam."
22
+ }