rcf-lite 0.21.0 → 0.23.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 (458) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/bin/rcf.js +13 -2
  3. package/blueprints/application-account-settings/CHANGELOG.md +12 -0
  4. package/blueprints/application-account-settings/README.md +114 -0
  5. package/blueprints/application-account-settings/blueprint.json +234 -0
  6. package/blueprints/application-account-settings/contributions/adrs/adr-2601-application-account-settings-capability-vocabulary.json +20 -0
  7. package/blueprints/application-account-settings/contributions/adrs/adr-2602-application-account-settings-security-surface-shape.json +20 -0
  8. package/blueprints/application-account-settings/contributions/adrs/adr-2603-application-account-settings-theme-persistence.json +20 -0
  9. package/blueprints/application-account-settings/contributions/adrs/adr-2604-application-account-settings-reauth-window.json +20 -0
  10. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-001.json +18 -0
  11. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-002.json +18 -0
  12. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-003.json +18 -0
  13. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-004.json +18 -0
  14. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-005.json +18 -0
  15. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-006.json +18 -0
  16. package/blueprints/application-account-settings/contributions/tacs/tac-2601-application-account-settings-shell.json +41 -0
  17. package/blueprints/application-account-settings/contributions/tacs/tac-2602-application-account-settings-capability-discovery.json +28 -0
  18. package/blueprints/application-account-settings/contributions/tacs/tac-2603-application-account-settings-hosted-ui-bridge.json +35 -0
  19. package/blueprints/application-account-settings/contributions/tacs/tac-2604-application-account-settings-session-store.json +40 -0
  20. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25101.json +34 -0
  21. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25102.json +27 -0
  22. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25103.json +27 -0
  23. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25104.json +27 -0
  24. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25105.json +33 -0
  25. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25106.json +27 -0
  26. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25107.json +27 -0
  27. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25108.json +27 -0
  28. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25109.json +33 -0
  29. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25110.json +27 -0
  30. package/blueprints/application-account-settings/docs/topics.md +50 -0
  31. package/blueprints/application-account-settings/guide/application-account-settings.md +30 -0
  32. package/blueprints/application-account-settings/probe-packs/application-account-settings.pack.mjs +246 -0
  33. package/blueprints/application-admin-console/docs/topics.md +9 -0
  34. package/blueprints/application-api-rest/docs/topics.md +10 -1
  35. package/blueprints/application-charts/docs/topics.md +9 -0
  36. package/blueprints/application-dashboard/docs/topics.md +9 -0
  37. package/blueprints/application-datatable/docs/topics.md +9 -0
  38. package/blueprints/application-empty-error-states/CHANGELOG.md +9 -0
  39. package/blueprints/application-empty-error-states/README.md +88 -0
  40. package/blueprints/application-empty-error-states/blueprint.json +119 -0
  41. package/blueprints/application-empty-error-states/contributions/adrs/adr-2301-application-empty-error-states-status-contract.json +25 -0
  42. package/blueprints/application-empty-error-states/contributions/adrs/adr-2302-application-empty-error-states-stack-trace-visibility.json +25 -0
  43. package/blueprints/application-empty-error-states/contributions/adrs/adr-2303-application-empty-error-states-offline-strategy.json +25 -0
  44. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-001.json +18 -0
  45. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-002.json +18 -0
  46. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-003.json +18 -0
  47. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-004.json +18 -0
  48. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-005.json +18 -0
  49. package/blueprints/application-empty-error-states/contributions/tacs/tac-2301-application-empty-error-states-state-machine.json +46 -0
  50. package/blueprints/application-empty-error-states/contributions/tacs/tac-2302-application-empty-error-states-recovery-router.json +36 -0
  51. package/blueprints/application-empty-error-states/contributions/tacs/tac-2303-application-empty-error-states-offline-buffer.json +40 -0
  52. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22101.json +29 -0
  53. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22102.json +29 -0
  54. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22103.json +29 -0
  55. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22104.json +29 -0
  56. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22105.json +29 -0
  57. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22106.json +29 -0
  58. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22107.json +29 -0
  59. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22108.json +29 -0
  60. package/blueprints/application-empty-error-states/docs/topics.md +55 -0
  61. package/blueprints/application-empty-error-states/guide/application-empty-error-states.md +50 -0
  62. package/blueprints/application-empty-error-states/probe-packs/application-empty-error-states.pack.mjs +284 -0
  63. package/blueprints/application-error-handling/docs/topics.md +9 -0
  64. package/blueprints/application-file-upload/CHANGELOG.md +9 -0
  65. package/blueprints/application-file-upload/README.md +85 -0
  66. package/blueprints/application-file-upload/blueprint.json +114 -0
  67. package/blueprints/application-file-upload/contributions/adrs/adr-2401-application-file-upload-transport.json +25 -0
  68. package/blueprints/application-file-upload/contributions/adrs/adr-2402-application-file-upload-accepted-set.json +25 -0
  69. package/blueprints/application-file-upload/contributions/adrs/adr-2403-application-file-upload-virus-scan.json +25 -0
  70. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +18 -0
  71. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +18 -0
  72. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +18 -0
  73. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +18 -0
  74. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +18 -0
  75. package/blueprints/application-file-upload/contributions/tacs/tac-2401-application-file-upload-input.json +46 -0
  76. package/blueprints/application-file-upload/contributions/tacs/tac-2402-application-file-upload-transport.json +47 -0
  77. package/blueprints/application-file-upload/contributions/tacs/tac-2403-application-file-upload-progress-announcer.json +46 -0
  78. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23101.json +28 -0
  79. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23102.json +28 -0
  80. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23103.json +29 -0
  81. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23104.json +28 -0
  82. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23105.json +29 -0
  83. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23106.json +28 -0
  84. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23107.json +28 -0
  85. package/blueprints/application-file-upload/docs/topics.md +60 -0
  86. package/blueprints/application-file-upload/guide/application-file-upload.md +48 -0
  87. package/blueprints/application-file-upload/probe-packs/application-file-upload.pack.mjs +238 -0
  88. package/blueprints/application-forms-wizard/CHANGELOG.md +9 -0
  89. package/blueprints/application-forms-wizard/README.md +102 -0
  90. package/blueprints/application-forms-wizard/blueprint.json +120 -0
  91. package/blueprints/application-forms-wizard/contributions/adrs/adr-2501-application-forms-wizard-navigation.json +25 -0
  92. package/blueprints/application-forms-wizard/contributions/adrs/adr-2502-application-forms-wizard-save-and-return.json +25 -0
  93. package/blueprints/application-forms-wizard/contributions/adrs/adr-2503-application-forms-wizard-step-indicator.json +25 -0
  94. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +18 -0
  95. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +18 -0
  96. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +18 -0
  97. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +18 -0
  98. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +18 -0
  99. package/blueprints/application-forms-wizard/contributions/tacs/tac-2501-application-forms-wizard-task-list.json +46 -0
  100. package/blueprints/application-forms-wizard/contributions/tacs/tac-2502-application-forms-wizard-error-summary.json +40 -0
  101. package/blueprints/application-forms-wizard/contributions/tacs/tac-2503-application-forms-wizard-draft-store.json +40 -0
  102. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24101.json +28 -0
  103. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24102.json +29 -0
  104. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24103.json +28 -0
  105. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24104.json +29 -0
  106. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24105.json +28 -0
  107. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24106.json +28 -0
  108. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24107.json +28 -0
  109. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24108.json +29 -0
  110. package/blueprints/application-forms-wizard/docs/topics.md +51 -0
  111. package/blueprints/application-forms-wizard/guide/application-forms-wizard.md +48 -0
  112. package/blueprints/application-forms-wizard/probe-packs/application-forms-wizard.pack.mjs +233 -0
  113. package/blueprints/application-notifications-in-app/docs/topics.md +9 -0
  114. package/blueprints/application-onboarding-tour/CHANGELOG.md +12 -0
  115. package/blueprints/application-onboarding-tour/README.md +77 -0
  116. package/blueprints/application-onboarding-tour/blueprint.json +164 -0
  117. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2701-application-onboarding-tour-dismissal-policy.json +20 -0
  118. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2702-application-onboarding-tour-completion-store-shape.json +20 -0
  119. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2703-application-onboarding-tour-checklist-anchor.json +20 -0
  120. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-001.json +18 -0
  121. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-002.json +18 -0
  122. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-003.json +18 -0
  123. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-004.json +18 -0
  124. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2701-application-onboarding-tour-step-runner.json +41 -0
  125. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2702-application-onboarding-tour-checklist-slot.json +35 -0
  126. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2703-application-onboarding-tour-completion-store.json +34 -0
  127. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26101.json +27 -0
  128. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26102.json +27 -0
  129. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26103.json +27 -0
  130. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26104.json +27 -0
  131. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26105.json +27 -0
  132. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26106.json +27 -0
  133. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26107.json +27 -0
  134. package/blueprints/application-onboarding-tour/docs/topics.md +50 -0
  135. package/blueprints/application-onboarding-tour/guide/application-onboarding-tour.md +59 -0
  136. package/blueprints/application-onboarding-tour/probe-packs/application-onboarding-tour.pack.mjs +231 -0
  137. package/blueprints/application-spa/docs/topics.md +11 -2
  138. package/blueprints/delivery-ci-workflows/docs/topics.md +10 -1
  139. package/blueprints/deploy-cloudflare-workers/CHANGELOG.md +69 -0
  140. package/blueprints/deploy-cloudflare-workers/README.md +12 -0
  141. package/blueprints/deploy-cloudflare-workers/blueprint.json +234 -36
  142. package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json +30 -0
  143. package/blueprints/deploy-cloudflare-workers/contributions/probes/assets-manifest-scan.mjs +207 -0
  144. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-013.json +18 -0
  145. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-014.json +18 -0
  146. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12113.json +36 -0
  147. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12114.json +27 -0
  148. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12115.json +27 -0
  149. package/blueprints/deploy-cloudflare-workers/docs/topics.md +11 -2
  150. package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +25 -0
  151. package/blueprints/email-smtp-resend/docs/topics.md +10 -1
  152. package/blueprints/jobs-background/CHANGELOG.md +16 -0
  153. package/blueprints/jobs-background/README.md +105 -0
  154. package/blueprints/jobs-background/blueprint.json +149 -0
  155. package/blueprints/jobs-background/contributions/adrs/adr-3101-jobs-background-model.json +27 -0
  156. package/blueprints/jobs-background/contributions/adrs/adr-3102-jobs-background-scheduler-mode.json +25 -0
  157. package/blueprints/jobs-background/contributions/adrs/adr-3103-jobs-background-requires-applied-capabilities.json +25 -0
  158. package/blueprints/jobs-background/contributions/adrs/adr-3104-jobs-background-timeout-floor.json +25 -0
  159. package/blueprints/jobs-background/contributions/probes/apply-time-override.mjs +95 -0
  160. package/blueprints/jobs-background/contributions/probes/apply-time-refusal.mjs +82 -0
  161. package/blueprints/jobs-background/contributions/probes/event-secrecy.mjs +69 -0
  162. package/blueprints/jobs-background/contributions/probes/fake-clock-cron.mjs +65 -0
  163. package/blueprints/jobs-background/contributions/probes/probe-utils.mjs +91 -0
  164. package/blueprints/jobs-background/contributions/probes/retry-and-fail.mjs +65 -0
  165. package/blueprints/jobs-background/contributions/probes/run-apply-time-override.mjs +10 -0
  166. package/blueprints/jobs-background/contributions/probes/run-apply-time-refusal.mjs +11 -0
  167. package/blueprints/jobs-background/contributions/probes/run-event-secrecy.mjs +11 -0
  168. package/blueprints/jobs-background/contributions/probes/run-fake-clock-cron.mjs +11 -0
  169. package/blueprints/jobs-background/contributions/probes/run-retry-and-fail.mjs +11 -0
  170. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-001.json +18 -0
  171. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-002.json +18 -0
  172. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-003.json +18 -0
  173. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-004.json +18 -0
  174. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-005.json +18 -0
  175. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-006.json +18 -0
  176. package/blueprints/jobs-background/contributions/tacs/tac-3101-jobs-background-job-definition.json +50 -0
  177. package/blueprints/jobs-background/contributions/tacs/tac-3102-jobs-background-scheduler.json +50 -0
  178. package/blueprints/jobs-background/contributions/tacs/tac-3103-jobs-background-run-log.json +49 -0
  179. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30101.json +25 -0
  180. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30102.json +25 -0
  181. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30103.json +25 -0
  182. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30104.json +25 -0
  183. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30105.json +25 -0
  184. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30106.json +25 -0
  185. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30107.json +25 -0
  186. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30108.json +25 -0
  187. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30109.json +25 -0
  188. package/blueprints/jobs-background/docs/topics.md +62 -0
  189. package/blueprints/jobs-background/guide/jobs-background.md +147 -0
  190. package/blueprints/messaging-queue-cloudflare/CHANGELOG.md +15 -0
  191. package/blueprints/messaging-queue-cloudflare/README.md +125 -0
  192. package/blueprints/messaging-queue-cloudflare/blueprint.json +67 -0
  193. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3001-messaging-queue-cloudflare-adapter.json +30 -0
  194. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3002-messaging-queue-cloudflare-delivery-semantics.json +25 -0
  195. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3003-messaging-queue-cloudflare-max-attempts-floor.json +25 -0
  196. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3004-messaging-queue-cloudflare-batch-defaults.json +25 -0
  197. package/blueprints/messaging-queue-cloudflare/contributions/probes/event-secrecy.mjs +137 -0
  198. package/blueprints/messaging-queue-cloudflare/contributions/probes/probe-utils.mjs +82 -0
  199. package/blueprints/messaging-queue-cloudflare/contributions/probes/producer-facade-ready.mjs +35 -0
  200. package/blueprints/messaging-queue-cloudflare/contributions/probes/publish-to-delivery.mjs +94 -0
  201. package/blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs +54 -0
  202. package/blueprints/messaging-queue-cloudflare/contributions/probes/retry-and-dlq.mjs +87 -0
  203. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-event-secrecy.mjs +5 -0
  204. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-producer-facade-ready.mjs +11 -0
  205. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-publish-to-delivery.mjs +5 -0
  206. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-real-account-concurrency-smoke.mjs +5 -0
  207. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-retry-and-dlq.mjs +5 -0
  208. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-001.json +18 -0
  209. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-002.json +18 -0
  210. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-003.json +18 -0
  211. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-004.json +18 -0
  212. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-005.json +18 -0
  213. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +18 -0
  214. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3001-messaging-queue-cloudflare-producer-facade.json +56 -0
  215. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3002-messaging-queue-cloudflare-consumer-registration.json +40 -0
  216. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3003-messaging-queue-cloudflare-event-sink.json +39 -0
  217. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29101.json +34 -0
  218. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29102.json +34 -0
  219. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29103.json +25 -0
  220. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29104.json +25 -0
  221. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29105.json +25 -0
  222. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29106.json +25 -0
  223. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29107.json +25 -0
  224. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29108.json +25 -0
  225. package/blueprints/messaging-queue-cloudflare/docs/topics.md +62 -0
  226. package/blueprints/messaging-queue-cloudflare/guide/messaging-queue-cloudflare.md +110 -0
  227. package/blueprints/object-storage-s3/CHANGELOG.md +13 -0
  228. package/blueprints/object-storage-s3/README.md +108 -0
  229. package/blueprints/object-storage-s3/blueprint.json +72 -0
  230. package/blueprints/object-storage-s3/contributions/adrs/adr-2901-object-storage-s3-adapter.json +30 -0
  231. package/blueprints/object-storage-s3/contributions/adrs/adr-2902-object-storage-s3-presigned-ttl-floor.json +25 -0
  232. package/blueprints/object-storage-s3/contributions/adrs/adr-2903-object-storage-s3-multipart-threshold.json +25 -0
  233. package/blueprints/object-storage-s3/contributions/adrs/adr-2904-object-storage-s3-contract.json +25 -0
  234. package/blueprints/object-storage-s3/contributions/probes/event-secrecy.mjs +103 -0
  235. package/blueprints/object-storage-s3/contributions/probes/facade-round-trip.mjs +43 -0
  236. package/blueprints/object-storage-s3/contributions/probes/multipart-upload.mjs +84 -0
  237. package/blueprints/object-storage-s3/contributions/probes/presigned-url.mjs +101 -0
  238. package/blueprints/object-storage-s3/contributions/probes/probe-utils.mjs +85 -0
  239. package/blueprints/object-storage-s3/contributions/probes/put-get-round-trip.mjs +84 -0
  240. package/blueprints/object-storage-s3/contributions/probes/r2-real-account-smoke.mjs +64 -0
  241. package/blueprints/object-storage-s3/contributions/probes/run-event-secrecy.mjs +4 -0
  242. package/blueprints/object-storage-s3/contributions/probes/run-facade-round-trip.mjs +10 -0
  243. package/blueprints/object-storage-s3/contributions/probes/run-multipart-upload.mjs +4 -0
  244. package/blueprints/object-storage-s3/contributions/probes/run-presigned-url.mjs +4 -0
  245. package/blueprints/object-storage-s3/contributions/probes/run-put-get-round-trip.mjs +7 -0
  246. package/blueprints/object-storage-s3/contributions/probes/run-r2-real-account-smoke.mjs +4 -0
  247. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-001.json +18 -0
  248. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-002.json +18 -0
  249. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-003.json +18 -0
  250. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-004.json +18 -0
  251. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-005.json +18 -0
  252. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +18 -0
  253. package/blueprints/object-storage-s3/contributions/tacs/tac-2901-object-storage-s3-facade.json +57 -0
  254. package/blueprints/object-storage-s3/contributions/tacs/tac-2902-object-storage-s3-multipart-uploader.json +36 -0
  255. package/blueprints/object-storage-s3/contributions/tacs/tac-2903-object-storage-s3-event-sink.json +36 -0
  256. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28101.json +34 -0
  257. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28102.json +43 -0
  258. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28103.json +25 -0
  259. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28104.json +34 -0
  260. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28105.json +25 -0
  261. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28106.json +34 -0
  262. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28107.json +34 -0
  263. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28108.json +34 -0
  264. package/blueprints/object-storage-s3/docs/topics.md +64 -0
  265. package/blueprints/object-storage-s3/guide/object-storage-s3.md +207 -0
  266. package/blueprints/observability-essentials/docs/topics.md +10 -1
  267. package/blueprints/observability-logging/CHANGELOG.md +4 -0
  268. package/blueprints/observability-logging/README.md +3 -0
  269. package/blueprints/observability-logging/blueprint.json +3 -2
  270. package/blueprints/observability-logging/docs/topics.md +9 -0
  271. package/blueprints/observability-probe-endpoints/docs/topics.md +10 -1
  272. package/blueprints/persistence-data-d1/docs/topics.md +10 -1
  273. package/blueprints/persistence-data-postgres/CHANGELOG.md +12 -0
  274. package/blueprints/persistence-data-postgres/README.md +101 -0
  275. package/blueprints/persistence-data-postgres/blueprint.json +80 -0
  276. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2801-persistence-data-postgres-driver.json +30 -0
  277. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2802-persistence-data-postgres-migration-shape.json +25 -0
  278. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2803-persistence-data-postgres-runner-mode.json +25 -0
  279. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2804-persistence-data-postgres-recovery.json +25 -0
  280. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2805-persistence-data-postgres-connection-pool-posture.json +25 -0
  281. package/blueprints/persistence-data-postgres/contributions/probes/facade-round-trip.mjs +56 -0
  282. package/blueprints/persistence-data-postgres/contributions/probes/migration-apply.mjs +75 -0
  283. package/blueprints/persistence-data-postgres/contributions/probes/pool-posture-smoke.mjs +56 -0
  284. package/blueprints/persistence-data-postgres/contributions/probes/prepared-statement-scan.mjs +186 -0
  285. package/blueprints/persistence-data-postgres/contributions/probes/probe-utils.mjs +76 -0
  286. package/blueprints/persistence-data-postgres/contributions/probes/recovery-restore-round-trip.mjs +173 -0
  287. package/blueprints/persistence-data-postgres/contributions/probes/run-facade-round-trip.mjs +10 -0
  288. package/blueprints/persistence-data-postgres/contributions/probes/run-migration-apply.mjs +10 -0
  289. package/blueprints/persistence-data-postgres/contributions/probes/run-pool-posture-smoke.mjs +9 -0
  290. package/blueprints/persistence-data-postgres/contributions/probes/run-prepared-statement-scan.mjs +10 -0
  291. package/blueprints/persistence-data-postgres/contributions/probes/run-recovery-restore-round-trip.mjs +9 -0
  292. package/blueprints/persistence-data-postgres/contributions/probes/run-transaction-atomicity.mjs +10 -0
  293. package/blueprints/persistence-data-postgres/contributions/probes/transaction-atomicity.mjs +79 -0
  294. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-001.json +18 -0
  295. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-002.json +18 -0
  296. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +18 -0
  297. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-004.json +18 -0
  298. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-005.json +18 -0
  299. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-006.json +18 -0
  300. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-007.json +18 -0
  301. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2801-persistence-data-postgres-facade.json +58 -0
  302. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2802-persistence-data-postgres-migration-runner.json +40 -0
  303. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2803-persistence-data-postgres-transaction-helper.json +35 -0
  304. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2804-persistence-data-postgres-recovery-runner.json +40 -0
  305. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27101.json +34 -0
  306. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27102.json +25 -0
  307. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27103.json +25 -0
  308. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27104.json +25 -0
  309. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27105.json +25 -0
  310. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27106.json +25 -0
  311. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27107.json +25 -0
  312. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27108.json +25 -0
  313. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27109.json +25 -0
  314. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27110.json +25 -0
  315. package/blueprints/persistence-data-postgres/docs/topics.md +66 -0
  316. package/blueprints/persistence-data-postgres/guide/persistence-data-postgres.md +172 -0
  317. package/blueprints/persistence-data-sqlite/docs/topics.md +10 -1
  318. package/blueprints/security-auth-clerk/CHANGELOG.md +4 -0
  319. package/blueprints/security-auth-clerk/README.md +3 -0
  320. package/blueprints/security-auth-clerk/blueprint.json +147 -30
  321. package/blueprints/security-auth-clerk/docs/topics.md +10 -1
  322. package/blueprints/security-auth-keycloak/CHANGELOG.md +4 -0
  323. package/blueprints/security-auth-keycloak/README.md +3 -0
  324. package/blueprints/security-auth-keycloak/blueprint.json +182 -37
  325. package/blueprints/security-auth-keycloak/docs/topics.md +10 -1
  326. package/blueprints/security-auth-magic-link/CHANGELOG.md +4 -0
  327. package/blueprints/security-auth-magic-link/README.md +3 -0
  328. package/blueprints/security-auth-magic-link/blueprint.json +159 -33
  329. package/blueprints/security-auth-magic-link/docs/topics.md +10 -1
  330. package/blueprints/security-auth-oauth2/CHANGELOG.md +4 -0
  331. package/blueprints/security-auth-oauth2/README.md +3 -0
  332. package/blueprints/security-auth-oauth2/blueprint.json +158 -32
  333. package/blueprints/security-auth-oauth2/docs/topics.md +10 -1
  334. package/blueprints/security-secrets-management/CHANGELOG.md +11 -0
  335. package/blueprints/security-secrets-management/blueprint.json +2 -1
  336. package/blueprints/security-secrets-management/docs/topics.md +10 -1
  337. package/fixtures/canary-manifest.json +9 -9
  338. package/package.json +1 -1
  339. package/rcf/code-nodes/cn-134.json +13 -0
  340. package/rcf/code-nodes/cn-135.json +12 -0
  341. package/rcf/code-nodes/cn-136.json +13 -0
  342. package/rcf/code-nodes/cn-137.json +13 -0
  343. package/rcf/code-nodes/cn-138.json +12 -0
  344. package/rcf/code-nodes/cn-139.json +12 -0
  345. package/rcf/code-nodes/cn-140.json +13 -0
  346. package/rcf/code-nodes/cn-141.json +13 -0
  347. package/rcf/code-nodes/cn-142.json +12 -0
  348. package/rcf/code-nodes/cn-143.json +13 -0
  349. package/rcf/code-nodes/cn-144.json +13 -0
  350. package/rcf/code-nodes/cn-145.json +12 -0
  351. package/rcf/code-nodes/cn-146.json +12 -0
  352. package/rcf/code-nodes/cn-147.json +13 -0
  353. package/rcf/code-nodes/cn-148.json +13 -0
  354. package/rcf/code-nodes/cn-149.json +12 -0
  355. package/rcf/code-nodes/cn-150.json +13 -0
  356. package/rcf/code-nodes/cn-151.json +13 -0
  357. package/rcf/code-nodes/cn-152.json +12 -0
  358. package/rcf/code-nodes/cn-153.json +12 -0
  359. package/rcf/code-nodes/cn-154.json +13 -0
  360. package/rcf/code-nodes/cn-155.json +14 -0
  361. package/rcf/code-nodes/cn-156.json +13 -0
  362. package/rcf/code-nodes/cn-157.json +13 -0
  363. package/rcf/code-nodes/cn-158.json +12 -0
  364. package/rcf/code-nodes/cn-159.json +13 -0
  365. package/rcf/code-nodes/cn-160.json +12 -0
  366. package/rcf/code-nodes/cn-161.json +12 -0
  367. package/rcf/code-nodes/cn-162.json +13 -0
  368. package/rcf/code-nodes/cn-163.json +12 -0
  369. package/rcf/code-nodes/cn-164.json +13 -0
  370. package/rcf/code-nodes/cn-165.json +12 -0
  371. package/rcf/code-nodes/cn-166.json +12 -0
  372. package/rcf/code-nodes/cn-167.json +12 -0
  373. package/rcf/code-nodes/cn-168.json +12 -0
  374. package/rcf/code-nodes/cn-169.json +12 -0
  375. package/rcf/code-nodes/cn-170.json +12 -0
  376. package/rcf/code-nodes/cn-171.json +12 -0
  377. package/rcf/code-nodes/cn-172.json +12 -0
  378. package/rcf/code-nodes/cn-173.json +12 -0
  379. package/rcf/code-nodes/cn-174.json +12 -0
  380. package/rcf/code-nodes/cn-175.json +13 -0
  381. package/rcf/code-nodes/cn-176.json +12 -0
  382. package/rcf/code-nodes/cn-177.json +12 -0
  383. package/rcf/code-nodes/cn-178.json +12 -0
  384. package/rcf/code-nodes/cn-179.json +12 -0
  385. package/rcf/code-nodes/cn-180.json +13 -0
  386. package/rcf/code-nodes/cn-181.json +12 -0
  387. package/rcf/code-nodes/cn-182.json +13 -0
  388. package/rcf/code-nodes/cn-183.json +12 -0
  389. package/rcf/code-nodes/cn-184.json +13 -0
  390. package/rcf/code-nodes/cn-185.json +12 -0
  391. package/rcf/code-nodes/cn-186.json +12 -0
  392. package/rcf/code-nodes/cn-200.json +14 -0
  393. package/rcf/code-nodes/cn-201.json +13 -0
  394. package/rcf/code-nodes/cn-202.json +14 -0
  395. package/rcf/code-nodes/cn-203.json +14 -0
  396. package/rcf/code-nodes/cn-204.json +13 -0
  397. package/rcf/code-nodes/cn-205.json +14 -0
  398. package/rcf/code-nodes/cn-206.json +14 -0
  399. package/rcf/code-nodes/cn-207.json +13 -0
  400. package/rcf/code-nodes/cn-208.json +14 -0
  401. package/rcf/code-nodes/cn-209.json +14 -0
  402. package/rcf/code-nodes/cn-210.json +13 -0
  403. package/rcf/code-nodes/cn-211.json +12 -0
  404. package/rcf/code-nodes/cn-212.json +12 -0
  405. package/rcf/code-nodes/cn-213.json +12 -0
  406. package/rcf/code-nodes/cn-214.json +15 -0
  407. package/rcf/code-nodes/cn-215.json +13 -0
  408. package/rcf/code-nodes/cn-216.json +14 -0
  409. package/rcf/code-nodes/cn-217.json +13 -0
  410. package/rcf/fbs/fbs-043.json +23 -0
  411. package/rcf/fbs/fbs-044.json +23 -0
  412. package/rcf/fbs/fbs-045.json +23 -0
  413. package/rcf/fbs/fbs-046.json +24 -0
  414. package/rcf/fbs/fbs-047.json +24 -0
  415. package/rcf/fbs/fbs-060.json +22 -0
  416. package/rcf/fbs/fbs-061.json +20 -0
  417. package/rcf/fbs/fbs-062.json +20 -0
  418. package/rcf/fbs/fbs-063.json +22 -0
  419. package/rcf/fbs/fbs-064.json +23 -0
  420. package/rcf/requirements/req-024.json +69 -0
  421. package/rcf/requirements/req-025.json +59 -0
  422. package/rcf/requirements/req-026.json +154 -0
  423. package/rcf/requirements/req-027.json +33 -0
  424. package/rcf/requirements/req-028.json +13 -0
  425. package/rcf/requirements/req-029.json +57 -0
  426. package/rcf/requirements/req-030.json +67 -0
  427. package/rcf/requirements/req-040.json +13 -0
  428. package/rcf/requirements/req-041.json +125 -0
  429. package/rcf/requirements/req-042.json +59 -0
  430. package/rcf/requirements/req-043.json +39 -0
  431. package/rcf/test-suites/ts-053.json +70 -0
  432. package/rcf/test-suites/ts-054.json +70 -0
  433. package/rcf/test-suites/ts-055.json +77 -0
  434. package/rcf/test-suites/ts-056.json +78 -0
  435. package/rcf/test-suites/ts-057.json +78 -0
  436. package/rcf/test-suites/ts-070.json +62 -0
  437. package/rcf/test-suites/ts-071.json +62 -0
  438. package/rcf/test-suites/ts-072.json +62 -0
  439. package/rcf/test-suites/ts-073.json +38 -0
  440. package/rcf/test-suites/ts-074.json +30 -0
  441. package/rcf/test-suites/ts-075.json +38 -0
  442. package/rcf/test-suites/ts-076.json +70 -0
  443. package/rcf/user-stories/us-2401.json +62 -0
  444. package/rcf/user-stories/us-2501.json +58 -0
  445. package/rcf/user-stories/us-2601.json +51 -0
  446. package/rcf/user-stories/us-2701.json +55 -0
  447. package/rcf/user-stories/us-2801.json +55 -0
  448. package/rcf/user-stories/us-2901.json +45 -0
  449. package/rcf/user-stories/us-2902.json +36 -0
  450. package/rcf/user-stories/us-3001.json +45 -0
  451. package/rcf/user-stories/us-4001.json +69 -0
  452. package/rcf/user-stories/us-4101.json +69 -0
  453. package/rcf/user-stories/us-4201.json +69 -0
  454. package/rcf/user-stories/us-4301.json +78 -0
  455. package/releases/releases.yaml +21 -1
  456. package/src/blueprint/apply.js +13 -1
  457. package/src/blueprint/capabilities.js +66 -2
  458. package/src/cli/blueprint.js +15 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,42 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.23.0] - 2026-09-07
10
+
11
+ rcf-lite 0.23.0 adds the infrastructure spine four blueprints wide: a Postgres store with a facade contract and forward-only migrations, an S3-shape object store with a Cloudflare R2 first adapter, a Cloudflare Queues producer and consumer with dead-letter semantics, and a background-jobs discipline that refuses to apply until a queue is applied. Each blueprint verifies against the real engine with node-only probes, and the four surfaces compose through the capability mechanism the round-3 admin console shipped.
12
+
13
+ ### Added
14
+
15
+ - **Round 5 T-1: `persistence-data-postgres` v1.0.0 on the shelf (PR #155).** Postgres facade as the sole reader of the `pg` client, numbered forward-only migrations with per-file transactions, prepared-statement discipline enforced by a source-tree AST scan, a transactional-atomicity helper, scheduled `pg_dump` recovery plus vendor point-in-time recovery, and a connection-pool posture per deploy target. Declares `capabilities: ["relationalStore"]`. Conflicts by design with `persistence-data-sqlite` and `persistence-data-d1` on `persistenceStore` and `migrationDiscipline`. Reserves the round-6 Hyperdrive adapter slot at the driver ADR boundary. Six probes drive `postgres:17-alpine` in the shared `packages/rcf-lite/test/fixtures/infra-postgres/` fixture; probe reports land under `.rcf/reports/blueprints/persistence-data-postgres/` and set the round-5 ship-time evidence precedent.
16
+ - **Round 5 T-2: `object-storage-s3` v1.0.0 on the shelf, with `security-secrets-management` 1.0.1 folded into the same PR (PR #157).** S3-API facade, Cloudflare R2 as the first adapter, MinIO as the local dev target, put, get, delete, list, a presigned-URL contract with a bounded TTL, multipart upload above an elicited threshold, and metadata-only lifecycle events. Refuses composition without `security-secrets-management` applied; the override `--allow-no-secrets-yet` records a note on `source.notes`. In the same PR, `security-secrets-management` bumps to 1.0.1 declaring `capabilities: ["secretsProvider"]` so the bare-project refusal fires end to end. Declares `capabilities: ["objectStorage"]`. Mints the new global topic `objectStorageContract`. Five probes run against MinIO plus one accountBound-skipped R2 smoke.
17
+ - **Round 5 T-3: `messaging-queue-cloudflare` v1.0.0 on the shelf (PR #159).** Producer facade, consumer registration on the Worker's `queue` handler, publish, consume, ack, retry with the attempt counter, dead-letter contract per Cloudflare Queues docs (default retries 3, DLQ 4-day retention), batch consume, and metadata-only lifecycle events. One blueprint, contract plus first adapter. Declares `capabilities: ["queue"]`. Mints the new global topic `deliverySemantics`. Reserved slug `messaging-queue-postgres` sibling documented, deferred pending demand. Five probes drive `wrangler dev` locally plus one accountBound-skipped concurrency smoke that runs against a real account when `CI_HAS_CLOUDFLARE_ACCOUNT` is set.
18
+ - **Round 5 T-4: `jobs-background` v1.0.0 on the shelf (PR #163).** Job-definition contract (name, handler, input schema, retry policy, timeout), scheduler contract (cron and one-shot delayed), retry contract on top of the applied queue, and a metadata-only job-run event log. Refuses to apply on a bare project with exit 3 and the stable message id `jobs-background-no-queue`; the `--allow-no-queue-yet` override records a note on `source.notes`. Declares `capabilities: ["backgroundJobs"]`. Mints the new global topic `backgroundJobModel`. Reserves the round-6 Workflows scheduler-mode slot at the ADR boundary. Five probes: apply-time refusal, apply-time override, fake-clock cron, retry-and-fail, event-secrecy.
19
+ - **Authoring standard capability table extended.** `packages/rcf-lite/docs/blueprint-authoring.md` section 6a gains four new rows: `relationalStore`, `objectStorage`, `queue`, `backgroundJobs`. Chunk-zero-style append, loader unchanged.
20
+
21
+ #### Also in this release
22
+
23
+ - **Round 6 T-0: `deploy-cloudflare-workers` v1.1.0 to v1.2.0 (PR #164).** Additive minor bump that blesses the Workers-with-static-assets shape as the SPA-on-Workers deploy shape. Adds two new elicits (`assets-directory`, `run-worker-first`), ADR-1306 carrying the verbatim Cloudflare Pages landing-page recommendation, the `cf-platform` shared sample-app fixture under `packages/rcf-lite/test/fixtures/cf-platform/`, and the `assets-manifest-scan` probe that parses the applied fixture wrangler.toml and asserts the `[assets]` block presence, `run_worker_first` presence and absence of the Pages-only `pages_build_output_dir` field. No capability minted, no new global topic, no runtime dependency added; the shipped v1.1.0 contribution set carries through unchanged.
24
+
25
+ ### Fixed
26
+
27
+ - **CLI stdout truncation on large outputs (PR #159).** `bin/rcf.js` now flushes stdout before `process.exit` at both exit sites. Previously, stdout was truncated at the 65536-byte pipe buffer on outputs past that size; first hit by `rcf audit coverage --format mermaid` on the umbrella tree.
28
+
29
+ ## [0.22.0] - 2026-09-07
30
+
31
+ rcf-lite 0.22.0 fills the visual shelf with five application blueprints (empty and error states, file upload with a WCAG keyboard gate, a multi-step forms wizard, a self-service account settings area, and a first-run onboarding tour). Account settings reuses the admin-console capability-gating mechanism, so the five settings surfaces only render when the applied auth blueprint declares the capability. The four shipped auth blueprints and the logging blueprint pick up additive capability declarations in the same release.
32
+
33
+ Also present on the shelf at this version, ahead of their own 0.23.0 release notes: `persistence-data-postgres` 1.0.0, `object-storage-s3` 1.0.0, and the `security-secrets-management` 1.0.1 minor.
34
+
35
+ ### Added
36
+
37
+ - **Visual round 4 T-1: `application-empty-error-states` v1.0.0 on the shelf (PR #154).** Ships the eight-state contract (not-found, forbidden, server-error, offline, permission-denied, empty-list, no-search-results, error-boundary), one Playwright probe pack with eight surface-observable checks, three TACs, three ADRs, an RFC 9110 status contract, WCAG 2.2 AA compliance, and the offline write-buffer contract for reconnection.
38
+ - **Visual round 4 T-2: `application-file-upload` v1.0.0 on the shelf (PR #156).** Ships the WCAG 2.5.7 keyboard-alternative gate, a chunked and resumable transport contract, MIME-type, size and virus-scan refusal, tus.io as the elicited alternative transport, four pack checks, and four break switches. Informational: shortened ADR id suffixes on file-upload; elicits declared via ADR entry flags on non-capability blueprints; tus fail-message ordering.
39
+ - **Visual round 4 T-3: `application-forms-wizard` v1.0.0 on the shelf (PR #158).** Ships the GOV.UK task-list and summary-list patterns, per-step validation timing, an error-summary with skip-links, and a save-and-return contract that refuses to ship a default because the draft-store transport is elicited.
40
+ - **Visual round 4 T-4: `application-account-settings` v1.0.0 on the shelf (PR #160).** Ships the five conditional surfaces (profile, security, sessions, notification preferences, theme), reusing the admin-console capability-gating mechanism, a bare-SPA refusal with the `--allow-no-auth-yet` override, a hosted-UI bridge, and five pack checks. Informational: the theme check reads the attribute only.
41
+ - **Visual round 4 T-4 auth minors, in the same PR (PR #160).** `security-auth-clerk` 1.3.0, `security-auth-keycloak` 1.2.0, `security-auth-oauth2` 1.2.0, `security-auth-magic-link` 1.2.0 and `observability-logging` 1.2.0. Additive `capabilities[]` declarations for `credentialSelfService`, `sessionInventory` and `hostedIdentityUi` per vendor and provider; the settings blueprint discovers the applied capability set at apply time and only offers the surfaces the applied auth supports.
42
+ - **Visual round 4 T-5: `application-onboarding-tour` v1.0.0 on the shelf (PR #161).** Ships an ARIA APG dialog-modal tooltip-as-dialog, keyboard-only Escape and focus-return contract, a checklist-on-dashboard collapse-to-settings fallback, completion-state persistence with per-principal or local-storage layers, and four pack checks.
43
+
44
+
9
45
  ## [0.21.0] - 2026-09-05
10
46
 
11
47
  rcf-lite 0.21.0 adds five visual-feature blueprints to the shelf (data table, charts, dashboard with packaged design guidance, in-app notifications, admin console) and the mechanism that proves them: a blueprint can now ship a Playwright probe pack that rcf verify runs against your running app in a real browser, and the ship gate refuses while a surface check fails. The admin console only offers the surfaces your applied auth blueprint can support. Blueprints can now ask you questions at apply time. The schema floor moves to rcf-schemas 0.6.1.
package/bin/rcf.js CHANGED
@@ -267,9 +267,20 @@ export function isSameEntryPoint(metaUrl, argvPath) {
267
267
  const isMain = process.argv[1] && isSameEntryPoint(import.meta.url, process.argv[1]);
268
268
  if (isMain) {
269
269
  main(process.argv.slice(2))
270
- .then((code) => process.exit(code))
270
+ .then((code) => {
271
+ // Await stdout drain before exit so large payloads (mermaid or
272
+ // JSON output above ~64KiB) are not truncated when a parent
273
+ // captures stdout via child_process execFile / spawn. process.exit
274
+ // otherwise races the OS pipe flush and drops the tail; the
275
+ // golden fixture tests hit this once the dogfood tree crosses
276
+ // the pipe buffer size. write('', cb) fires the callback once
277
+ // pending buffer flushes, then process.exit(code) tears down
278
+ // immediately - keeping the long-running mcp stdio subcommand
279
+ // path unchanged (mcp resolves once its own done promise fires).
280
+ process.stdout.write('', () => process.exit(code));
281
+ })
271
282
  .catch((err) => {
272
283
  process.stderr.write(`[rcf] unexpected failure: ${err.message}\n${err.stack}\n`);
273
- process.exit(1);
284
+ process.stdout.write('', () => process.exit(1));
274
285
  });
275
286
  }
@@ -0,0 +1,12 @@
1
+ # application-account-settings CHANGELOG
2
+
3
+ ## 1.0.0 (visual round T-4, spec 2026-09-06 section 5.4)
4
+
5
+ - First shipped version. Introduces the account-settings shell (ARIA APG tabs, WCAG 2.4.6 landmark), the profile surface (WCAG 1.3.5 autocomplete tokens, aria-live save-status), the security surface (self-service branch and hosted-UI branch through ADR-2602's elicited security-surface-shape), the sessions surface (ARIA APG dialog-modal terminate flow, aria-live session-terminated announcement, current-session cannot terminate itself), the notification-preferences surface (per-category silence, per-channel opt-in) and the theme surface (light/dark/system radiogroup persisted per ADR-2603's elicited theme-persistence).
6
+ - Declares `requiresAppliedCapabilities: [principalDirectory]` with `refusalMessageId: application-account-settings-bare-spa` and `allowSkipFlag: allow-no-auth-yet`. The refusal template ships in this PR's mechanism minor at `packages/rcf-lite/src/blueprint/capabilities.js` (`buildRefusalMessage`). The Q3 gate (a project declaring neither `credentialSelfService` nor `hostedIdentityUi`) is enforced through the shell's tab-suppression rule (AC-25101-1 probed by the pack), the mechanism's silent gating of the `security-surface-shape` elicit (its `when` predicate refuses), and the surface-side hosted-UI bridge TAC-2603 refusal (documented mechanism-reach gap under AC-25110-1).
7
+ - Ships four capability-gated custom-auth elicits (`custom-auth-provides-principal-directory`, `custom-auth-provides-credential-self-service`, `custom-auth-provides-session-inventory`, `custom-auth-provides-hosted-identity-ui`) that let a project ship its own auth surface without a shelf `security-auth-*` blueprint.
8
+ - Ships four regular elicits (`security-surface-shape`, `hosted-identity-url`, `theme-persistence`, `reauth-window`) whose `when` predicates gate on the applied capability set.
9
+ - Ships a Playwright probe pack under `probe-packs/application-account-settings.pack.mjs` with five checks anchored to `AC-25101-1` (shell tabs mirror caps), `AC-25102-1` (profile autocomplete tokens), `AC-25105-1` (security branch matches applied + elicit), `AC-25106-1` (sessions rows and dialog-modal) and `AC-25108-1` (theme radiogroup and persistence). Every check gates via `readAppliedCapabilities(projectRoot)`; an absent capability records `verdict: skipped` per spec section 3.3.
10
+ - Ships a dependency-free sample-app fixture at `packages/rcf-lite/test/fixtures/probe-pack-application-account-settings/` realising the five conditional surfaces honestly plus four break switches (`?break=leak-tab`, `?break=no-autocomplete`, `?break=no-dialog`, `?break=no-persist`) driving the negative runs.
11
+ - Composes on `application-empty-error-states` (T-1) for the forbidden and empty-history states; no bespoke access-denied UI is invented here.
12
+ - Rides with the auth blueprints minor bumps (`security-auth-clerk` 1.3.0, `security-auth-keycloak` 1.2.0, `security-auth-oauth2` 1.2.0, `security-auth-magic-link` 1.2.0 doc-only) and the `observability-logging` 1.2.0 minor bump (declares `sessionInventory` as the logging-projection provider), extending the section 6a capability table with `credentialSelfService`, `sessionInventory` and `hostedIdentityUi`.
@@ -0,0 +1,114 @@
1
+ # Account settings blueprint (v1.0.0)
2
+
3
+ Vendor-neutral account-settings surface for an rcf-lite application. Surfaces are CONDITIONAL on what the applied identity blueprints and companion blueprints declare via `capabilities[]`. Ships the settings shell with an ARIA APG tabs region (no dead links to unapplied capabilities), a WCAG 1.3.5 profile surface (always active), a security surface with a self-service branch (password change, MFA) and a hosted-UI branch (link-out or embed), a sessions surface with an ARIA APG dialog-modal terminate flow, a notification preferences surface and a theme surface with light/dark/system. Reuses the visual round T-5 capability grammar and the apply-time discovery, refusal and custom-auth elicitation the spec section 5.4 ratifies. Ships a Playwright probe pack under `probe-packs/application-account-settings.pack.mjs` whose five checks are capability-gated: an absent capability records `verdict: skipped` and the aggregate verdict treats it as neither pass nor fail (spec section 3.3).
4
+
5
+ ## Apply
6
+
7
+ ```
8
+ rcf define blueprint add <path-to>/blueprints/application-account-settings
9
+ ```
10
+
11
+ Refuses with exit 3 and the spec 5.4.1 verbatim message on a project with no applied blueprint declaring `principalDirectory` unless `--allow-no-auth-yet` is passed for a scaffolding pass. Prompts the elicitation phase for parameters whose `when` predicate resolves true against the discovered applied-capability set. Writes a sidecar `rcf/blueprints/application-account-settings.applied.json` capturing the discovered `appliedCapabilities`, the elicit answers, and (when overridden) the scaffolding note. Consumes the `logging` and `errorHandling` companions when they resolve to an applied provider or a registered library; falls back to the shelf providers otherwise.
12
+
13
+ ## Anatomy
14
+
15
+ | Piece | Where | What |
16
+ |---|---|---|
17
+ | Metadata | `blueprint.json` | Slug, version 1.0.0, category `application`, `requiresAppliedCapabilities: [principalDirectory]`, `elicits[]` (four custom-auth capability provides plus security-surface-shape, hosted-identity-url, theme-persistence, reauth-window), `suggestedCompanions: [logging, errorHandling]`, 24 contributions in the 25xxx / 26xx bands |
18
+ | Doc set | `contributions/` | 6 REQs, 10 USs (13 runtime-observable ACs), 4 TACs, 4 ADRs |
19
+ | Probe pack | `probe-packs/application-account-settings.pack.mjs` | Five capability-gated browser-verify checks anchored to AC-25101-1, AC-25102-1, AC-25105-1, AC-25106-1, AC-25108-1 |
20
+ | Guide | `guide/application-account-settings.md` | Operator-facing: when to reach, when not, mechanism-reach gaps |
21
+ | Coordination vocabulary | `docs/topics.md` | Shelf id band registry update; no new global topics claimed; cross-references application-empty-error-states (T-1) and application-admin-console (T-5) |
22
+ | Sample-app fixture | `packages/rcf-lite/test/fixtures/probe-pack-application-account-settings/` | Dependency-free Node HTTP server the pack is probed against on the shelf gate |
23
+
24
+ ## Conditionality: what surfaces render when
25
+
26
+ | Applied capability | Surface | Rendered by |
27
+ |---|---|---|
28
+ | `principalDirectory` | Profile (`/account/profile`) always available | Any applied auth blueprint (magic-link, clerk, oauth2, keycloak). |
29
+ | `credentialSelfService` OR `hostedIdentityUi` | Security (`/account/security`) | credentialSelfService: Keycloak from 1.2.0, OAuth2 from 1.2.0 (provider-conditional). hostedIdentityUi: Clerk from 1.3.0, OAuth2 from 1.2.0 (provider-conditional). Neither present: security tab suppressed AND the Q3 refusal fires at apply if the operator answers `--answer security-surface-shape=...`. |
30
+ | `sessionInventory` | Sessions (`/account/sessions`) | Clerk from 1.3.0, Keycloak from 1.2.0, OAuth2 from 1.2.0, or observability-logging from 1.2.0 (as the logging-projection provider). Magic-link does NOT declare it. |
31
+ | `application-notifications-in-app` applied | Notification preferences (`/account/notifications`) | Suppressed when the notifications-in-app blueprint is not applied. |
32
+ | `application-spa` applied | Theme (`/account/theme`) | Suppressed when the SPA blueprint is not applied. |
33
+ | (none) | Unauthenticated principal | Composes on `application-empty-error-states` (T-1) forbidden state; no bespoke access-denied UI. |
34
+
35
+ ## Bare-SPA refusal
36
+
37
+ On a project with only `application-spa` applied (no auth), the apply exits 3 with:
38
+
39
+ ```
40
+ application-account-settings requires at least one applied security-auth-* blueprint,
41
+ or an operator override with --allow-no-auth-yet.
42
+
43
+ Applied blueprints on this project:
44
+ application-spa v1.5.0
45
+
46
+ Suggested next steps:
47
+ 1. Apply an auth blueprint first:
48
+ rcf define blueprint add security-auth-magic-link
49
+ (or security-auth-clerk, security-auth-oauth2, security-auth-keycloak)
50
+ 2. Override for a scaffolding pass (surfaces will refuse at apply until an
51
+ auth blueprint is applied):
52
+ rcf define blueprint add application-account-settings --allow-no-auth-yet
53
+ ```
54
+
55
+ The override records a note on the sidecar's `notes` field so `rcf define validate` reads back and flags surfaces that never activated.
56
+
57
+ ## Q3 gate: security surface has no home
58
+
59
+ A project that declares `principalDirectory` (so apply is not refused at the bare-SPA gate) but NEITHER `credentialSelfService` NOR `hostedIdentityUi`:
60
+
61
+ 1. Silently drops any `--answer security-surface-shape=<any>` at apply (the general elicits mechanism gates the answer via the `when` predicate; the sidecar records no `security-surface-shape` entry).
62
+ 2. Renders the shell WITHOUT a security tab (AC-25101-1, probed by the pack).
63
+ 3. Refuses the security surface at load time through TAC-2603 hosted-ui-bridge if a project-side FBS renders `/account/security` regardless (project-side enforcement per AC-25110-1 known mechanism-reach gap, spec section 5.4.1).
64
+
65
+ No `auth managed elsewhere` placeholder ships from the shipped shell surface. Per Baz decision Q3 in the ratified spec, the shell never lies about a surface that has no home.
66
+
67
+ ## Custom-auth projects (auth outside the shelf)
68
+
69
+ A project that ships its own auth surface (no shelf `security-auth-*` blueprint applied) supplies capability answers via the elicitation phase:
70
+
71
+ ```
72
+ rcf define blueprint add ./blueprints/application-account-settings \
73
+ --answer custom-auth-provides-principal-directory=true \
74
+ --answer custom-auth-provides-credential-self-service=true \
75
+ --answer security-surface-shape=self-service
76
+ ```
77
+
78
+ Answers land on `rcf/blueprints/application-account-settings.applied.json`'s `appliedElicitations{}` map. The `when` predicate on each elicit gates whether the prompt fires: `security-surface-shape` only fires when `credentialSelfService` OR `hostedIdentityUi` is applied (through the shelf or through the custom-auth elicits); `hosted-identity-url` only fires when `hostedIdentityUi` is applied; `theme-persistence` is unconditional (a project that does not apply the SPA blueprint records the answer and the shell simply suppresses the theme tab).
79
+
80
+ ## The one runtime gate
81
+
82
+ `probe-packs/application-account-settings.pack.mjs` ships five checks the `rcf verify browser` runner invokes on any FBS whose surface matches the pack's `appliesTo` predicate (an FBS that binds `TAC-2601-application-account-settings-shell` or whose nav model routes name an `/account`, `/settings` or `/profile` path). Each check ALSO carries its own `appliesTo` predicate that reads the applied capability sidecar and returns false when the required capability is absent; the check records `verdict: skipped` and the aggregate verdict treats it as neither pass nor fail (spec section 3.3, T-5 residual cure).
83
+
84
+ Each check drives the real Playwright browser the runner provisions (through the pinned Playwright MCP or the consuming project's own `playwright` installation), reads the accessibility tree and the DOM, and returns a verdict.
85
+
86
+ ## Quality bar
87
+
88
+ ARIA APG tabs pattern on the shell (TAC-2601); role="tablist" on the nav landmark with `aria-label="Account settings"`, role="tab" on each entry with `aria-selected="true"` on the active tab (WCAG 2.4.6). ARIA APG dialog-modal on the sessions terminate flow (TAC-2604, AC-25105-2); role="dialog" with aria-modal="true" and aria-labelledby to the heading, focus-trap, focus-return on close, polite live-region announcement on the confirm. WCAG 1.3.5 autocomplete tokens on every editable identifier on the profile surface (AC-25102-1). WCAG 3.3.8 Accessible Authentication Minimum on the security surface (ADR-2602). WCAG 3.3.4 Error Prevention on high-value changes gated by the reauth-window elicit (ADR-2604). The security-surface-shape default is elicited (ADR-2602 records no default: the shape leaks the vendor's identity architecture and no default is honest across all four combinations).
89
+
90
+ ## Known mechanism-reach gaps
91
+
92
+ Runtime-observable ACs the pack does NOT bind directly (checklist section 6.g), listed individually:
93
+
94
+ - **AC-25101-2 (single primary nav landmark accessible name shape).** The pack's AC-25101-1 asserts the landmark's `aria-label` is present; a future v1.1.0 minor bump can add a heading-order assertion (h1 page, h2 active tab).
95
+ - **AC-25103-1 (self-service branch details beyond password + MFA regions).** The pack's AC-25105-1 confirms the two roles render; a future v1.1.0 minor bump can extend AC-25105-1 with a keyboard-flow assertion.
96
+ - **AC-25104-1 (hosted-embed sandbox token beyond allow-scripts).** The pack's AC-25105-1 confirms `allow-scripts` in the sandbox; the wider token set is documented on ADR-2602 but not additionally asserted.
97
+ - **AC-25105-2 (session-terminate focus-trap behaviour).** The pack's AC-25106-1 asserts the dialog is present and correctly wired; the focus-trap and focus-return behaviour is asserted at fixture-read time and by the project-side smoke tests, not by the pack's browser evaluate at v1.
98
+ - **AC-25107-1 (notification-preferences surface capability discovery).** The pack does NOT probe the notifications surface at v1.0.0; the shell tabs check (AC-25101-1) confirms the tab renders only when `application-notifications-in-app` is applied via the fixture's `?apps=` switch. A future v1.1.0 minor bump can add a dedicated notifications surface check.
99
+ - **AC-25109-1 and AC-25109-2 (apply-time refusal and override).** Probed by the mechanism unit tests, not by the browser pack. The gate reviewer runs the CLI directly.
100
+ - **AC-25110-1 (Q3 apply-time refusal for a missing security capability).** Probed by the mechanism unit tests via the extended `runElicitationPhase` refusal path (added in this PR), not by the browser pack.
101
+
102
+ ## Known schema follow-ups
103
+
104
+ The applied-blueprint sidecar at `rcf/blueprints/application-account-settings.applied.json` uses the schema shape T-5 admin-console established (no `verdict: skipped` field on the applied-record; the pack runtime records `verdict: skipped` per-check per spec section 3.3, and rcf-schemas 0.6.1 has no `applicable: false` field for the record). A future rcf-schemas minor may adopt the `appliedCapabilities[]` field on the applied-blueprint record directly; the sidecar path stays supported for backward compatibility.
105
+
106
+ ## Companions
107
+
108
+ `suggestedCompanions` declares `logging` (every rendered account surface writes one request-scoped log line with the correlation identifier; the sessions surface reads a session inventory from `observability-logging` 1.2.0+ when configured) and `errorHandling` (profile-save, security-flow and session-terminate failures construct internal error records). Neither is required to apply the blueprint; the audit-history surface is deferred to v1.1.0.
109
+
110
+ ## Consumers
111
+
112
+ The forbidden and empty-history states MAP to `application-empty-error-states` (T-1)'s `forbidden` and `empty-list` states. Every project applying `application-account-settings` MUST also apply `application-empty-error-states` if they want the shipped access-denied state; the shell composes on the empty-error-states components rather than inventing bespoke UI.
113
+
114
+ The sessions and notification-preferences surfaces reuse the `application-datatable` (round-3 T-1) table shell contract when the project renders them through the datatable factory.
@@ -0,0 +1,234 @@
1
+ {
2
+ "slug": "application-account-settings",
3
+ "version": "1.0.0",
4
+ "category": "application",
5
+ "requiresAppliedCapabilities": {
6
+ "capabilities": [
7
+ "principalDirectory"
8
+ ],
9
+ "allowSkipFlag": "allow-no-auth-yet",
10
+ "refusalMessageId": "application-account-settings-bare-spa"
11
+ },
12
+ "elicits": [
13
+ {
14
+ "id": "custom-auth-provides-principal-directory",
15
+ "prompt": "Custom auth: does your projects own auth identify principals a users surface (and the account-settings profile surface) can read?",
16
+ "kind": "boolean",
17
+ "default": false,
18
+ "providesCapability": "principalDirectory"
19
+ },
20
+ {
21
+ "id": "custom-auth-provides-credential-self-service",
22
+ "prompt": "Custom auth: does your projects own auth expose a credential self-service surface (password change, MFA management, email change) the security tab can render in-place?",
23
+ "kind": "boolean",
24
+ "default": false,
25
+ "providesCapability": "credentialSelfService"
26
+ },
27
+ {
28
+ "id": "custom-auth-provides-session-inventory",
29
+ "prompt": "Custom auth: does your projects own auth (or logging companion) expose an inventory of active sessions with device labels and a terminate action?",
30
+ "kind": "boolean",
31
+ "default": false,
32
+ "providesCapability": "sessionInventory"
33
+ },
34
+ {
35
+ "id": "custom-auth-provides-hosted-identity-ui",
36
+ "prompt": "Custom auth: does your project point at a hosted identity portal (sign-in, sign-up, account, security) the security tab can link out to or embed?",
37
+ "kind": "boolean",
38
+ "default": false,
39
+ "providesCapability": "hostedIdentityUi"
40
+ },
41
+ {
42
+ "id": "security-surface-shape",
43
+ "prompt": "Security surface shape: self-service (renders the in-place password change and MFA surface), hosted-link-out (renders a link to your hosted portal) or hosted-embed (renders your hosted portal in an iframe).",
44
+ "kind": "enum",
45
+ "options": [
46
+ "self-service",
47
+ "hosted-link-out",
48
+ "hosted-embed"
49
+ ],
50
+ "when": {
51
+ "requiresCapability": [
52
+ "credentialSelfService",
53
+ "hostedIdentityUi"
54
+ ]
55
+ }
56
+ },
57
+ {
58
+ "id": "hosted-identity-url",
59
+ "prompt": "Hosted identity URL: the destination the security surface links out to or embeds when security-surface-shape is hosted-*. Ignored on self-service.",
60
+ "kind": "string",
61
+ "default": "",
62
+ "when": {
63
+ "requiresCapability": [
64
+ "hostedIdentityUi"
65
+ ]
66
+ }
67
+ },
68
+ {
69
+ "id": "theme-persistence",
70
+ "prompt": "Theme persistence: spa-local-storage (per-browser default), server-scoped (per-principal), or none (defers to prefers-color-scheme).",
71
+ "kind": "enum",
72
+ "options": [
73
+ "spa-local-storage",
74
+ "server-scoped",
75
+ "none"
76
+ ],
77
+ "default": "spa-local-storage"
78
+ },
79
+ {
80
+ "id": "reauth-window",
81
+ "prompt": "Re-authenticate window in minutes for high-value changes (password change, MFA change, session terminate, account delete). Enter never, 5, 15 or 60.",
82
+ "kind": "enum",
83
+ "options": [
84
+ "never",
85
+ "5",
86
+ "15",
87
+ "60"
88
+ ],
89
+ "default": "15"
90
+ }
91
+ ],
92
+ "suggestedCompanions": [
93
+ {
94
+ "role": "logging",
95
+ "reason": "Every rendered account surface writes one request-scoped log line with the correlation identifier; a logging companion supplies the factory the pipeline calls. When the logging companion also declares sessionInventory (observability-logging 1.2.0+), the sessions surface reads the inventory from the log projection."
96
+ },
97
+ {
98
+ "role": "errorHandling",
99
+ "reason": "Profile-save failures, security-flow failures and session-terminate failures construct internal error records; an error-handling companion supplies the record factory and the boundary the empty-error-states blueprint renders."
100
+ }
101
+ ],
102
+ "contributions": [
103
+ {
104
+ "id": "application-account-settings-REQ-001",
105
+ "kind": "req",
106
+ "path": "requirements/application-account-settings-req-001.json"
107
+ },
108
+ {
109
+ "id": "application-account-settings-REQ-002",
110
+ "kind": "req",
111
+ "path": "requirements/application-account-settings-req-002.json"
112
+ },
113
+ {
114
+ "id": "application-account-settings-REQ-003",
115
+ "kind": "req",
116
+ "path": "requirements/application-account-settings-req-003.json"
117
+ },
118
+ {
119
+ "id": "application-account-settings-REQ-004",
120
+ "kind": "req",
121
+ "path": "requirements/application-account-settings-req-004.json"
122
+ },
123
+ {
124
+ "id": "application-account-settings-REQ-005",
125
+ "kind": "req",
126
+ "path": "requirements/application-account-settings-req-005.json"
127
+ },
128
+ {
129
+ "id": "application-account-settings-REQ-006",
130
+ "kind": "req",
131
+ "path": "requirements/application-account-settings-req-006.json"
132
+ },
133
+ {
134
+ "id": "application-account-settings-US-25101",
135
+ "kind": "us",
136
+ "path": "user-stories/application-account-settings-us-25101.json"
137
+ },
138
+ {
139
+ "id": "application-account-settings-US-25102",
140
+ "kind": "us",
141
+ "path": "user-stories/application-account-settings-us-25102.json"
142
+ },
143
+ {
144
+ "id": "application-account-settings-US-25103",
145
+ "kind": "us",
146
+ "path": "user-stories/application-account-settings-us-25103.json"
147
+ },
148
+ {
149
+ "id": "application-account-settings-US-25104",
150
+ "kind": "us",
151
+ "path": "user-stories/application-account-settings-us-25104.json"
152
+ },
153
+ {
154
+ "id": "application-account-settings-US-25105",
155
+ "kind": "us",
156
+ "path": "user-stories/application-account-settings-us-25105.json"
157
+ },
158
+ {
159
+ "id": "application-account-settings-US-25106",
160
+ "kind": "us",
161
+ "path": "user-stories/application-account-settings-us-25106.json"
162
+ },
163
+ {
164
+ "id": "application-account-settings-US-25107",
165
+ "kind": "us",
166
+ "path": "user-stories/application-account-settings-us-25107.json"
167
+ },
168
+ {
169
+ "id": "application-account-settings-US-25108",
170
+ "kind": "us",
171
+ "path": "user-stories/application-account-settings-us-25108.json"
172
+ },
173
+ {
174
+ "id": "application-account-settings-US-25109",
175
+ "kind": "us",
176
+ "path": "user-stories/application-account-settings-us-25109.json"
177
+ },
178
+ {
179
+ "id": "application-account-settings-US-25110",
180
+ "kind": "us",
181
+ "path": "user-stories/application-account-settings-us-25110.json"
182
+ },
183
+ {
184
+ "id": "TAC-2601-application-account-settings-shell",
185
+ "kind": "tac",
186
+ "path": "tacs/tac-2601-application-account-settings-shell.json"
187
+ },
188
+ {
189
+ "id": "TAC-2602-application-account-settings-capability-discovery",
190
+ "kind": "tac",
191
+ "path": "tacs/tac-2602-application-account-settings-capability-discovery.json"
192
+ },
193
+ {
194
+ "id": "TAC-2603-application-account-settings-hosted-ui-bridge",
195
+ "kind": "tac",
196
+ "path": "tacs/tac-2603-application-account-settings-hosted-ui-bridge.json"
197
+ },
198
+ {
199
+ "id": "TAC-2604-application-account-settings-session-store",
200
+ "kind": "tac",
201
+ "path": "tacs/tac-2604-application-account-settings-session-store.json"
202
+ },
203
+ {
204
+ "id": "ADR-2601-application-account-settings-capability-vocabulary",
205
+ "kind": "adr",
206
+ "path": "adrs/adr-2601-application-account-settings-capability-vocabulary.json",
207
+ "standardsTraceClause": "generic enterprise practice"
208
+ },
209
+ {
210
+ "id": "ADR-2602-application-account-settings-security-surface-shape",
211
+ "kind": "adr",
212
+ "path": "adrs/adr-2602-application-account-settings-security-surface-shape.json",
213
+ "recommendedDefault": false,
214
+ "elicited": true,
215
+ "standardsTraceClause": "WCAG 3.3.8 Accessible Authentication (Minimum)"
216
+ },
217
+ {
218
+ "id": "ADR-2603-application-account-settings-theme-persistence",
219
+ "kind": "adr",
220
+ "path": "adrs/adr-2603-application-account-settings-theme-persistence.json",
221
+ "recommendedDefault": true,
222
+ "elicited": true,
223
+ "standardsTraceClause": "generic enterprise practice"
224
+ },
225
+ {
226
+ "id": "ADR-2604-application-account-settings-reauth-window",
227
+ "kind": "adr",
228
+ "path": "adrs/adr-2604-application-account-settings-reauth-window.json",
229
+ "recommendedDefault": true,
230
+ "elicited": true,
231
+ "standardsTraceClause": "WCAG 3.3.4 Error Prevention (Legal, Financial, Data)"
232
+ }
233
+ ]
234
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "adrId": "ADR-2601-application-account-settings-capability-vocabulary",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Capability vocabulary: credentialSelfService, sessionInventory, hostedIdentityUi additions plus auditLog reuse",
8
+ "context": "The account-settings blueprint composes on the section 6a capability grammar visual round T-5 ratified. The T-4 spec (section 5.4.2) adds three capability strings the auth vendors need to declare in order for the security and sessions surfaces to render, and reuses auditLog where a project wants a self-view audit history rendered on the account surface (deferred: not a v1 surface but named in the vocabulary so a future minor bump can wire it without a chunk-zero edit).",
9
+ "decision": "v1.0.0 ratifies three additions to the section 6a capability table: credentialSelfService (in-place password change, MFA management, email change surface), sessionInventory (active-session listing with device labels and a terminate write), and hostedIdentityUi (link-out or embed to a hosted account portal). The auditLog capability continues to route via observability-logging. The three new strings follow the same shape rule (lower camelCase, ^[a-z][a-zA-Z0-9]*$) validated on the loader; the vocabulary lives in the section 6a table extended in the same PR.",
10
+ "consequences": "A bare-magic-link project gets a profile surface only; a Keycloak project gets profile plus security (self-service) plus sessions; a Clerk project gets profile plus security (hosted-link-out or embed) plus sessions; an OAuth2 project gets what the vendor declares. A future account-audit-history surface lands as a v1.1.0 minor bump reusing auditLog with no new vocabulary.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Alternative approach considered",
14
+ "summary": "A single accountSelfService capability covering the security AND sessions AND theme surfaces was considered but conflates surfaces that vendors ship on different roadmaps: Keycloak has credentialSelfService without hostedIdentityUi, Clerk has hostedIdentityUi without a self-service equivalent. Separating them lets each vendor declare what it actually ships and lets the blueprint compose honestly.",
15
+ "reasonNotChosen": "See the decision text; the chosen shape composes cleanly with the applied blueprint set the spec section 5.4 names."
16
+ }
17
+ ],
18
+ "createdAt": "2026-09-06T20:55:46Z",
19
+ "updatedAt": "2026-09-06T20:55:46Z"
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "adrId": "ADR-2602-application-account-settings-security-surface-shape",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Security surface shape: password vs passkey vs hosted-UI vs link-out per applied auth",
8
+ "context": "The security surface has four legal shapes depending on the applied auth: self-service password (Keycloak, OAuth2 with a self-service endpoint), self-service passkey (WebAuthn where the auth blueprint declares credentialSelfService and the operator has stood up a passkey flow), hosted link-out to a portal (Clerk, Auth0), or hosted embed of the same portal in an iframe. The spec section 5.4 marks security-surface-shape as elicited with no recommended default because the security surface leaks the vendors identity architecture and no default is honest across all four applied-auth combinations.",
9
+ "decision": "security-surface-shape is elicited (enum: self-service | hosted-link-out | hosted-embed). No recommended default. Recording no default is the point: the operator picks the shape that matches the applied auth vendors surface. When the elicit is answered but no applied blueprint declares credentialSelfService (for self-service) or hostedIdentityUi (for the two hosted branches), apply refuses (AC-25110-1). The hosted-embed sandbox default is allow-scripts allow-forms allow-same-origin; a project that needs a different token set writes a project-scoped ADR overriding the sandbox.",
10
+ "consequences": "The operator makes an explicit choice at apply that reads on the sidecar; downstream review has a stable record of which security-surface-shape was elicited. A project that mis-answers (elicits hosted-link-out on a Keycloak project) hits the AC-25110-1 refusal at apply, not at runtime.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Alternative approach considered",
14
+ "summary": "Auto-selecting the shape from the applied capability set was considered (self-service when credentialSelfService applied, else hosted-link-out when hostedIdentityUi applied) but the choice is a UX decision the operator owns, not a mechanism inference. Encoding it in the elicit keeps the choice legible.",
15
+ "reasonNotChosen": "See the decision text; the chosen shape composes cleanly with the applied blueprint set the spec section 5.4 names."
16
+ }
17
+ ],
18
+ "createdAt": "2026-09-06T20:55:46Z",
19
+ "updatedAt": "2026-09-06T20:55:46Z"
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "adrId": "ADR-2603-application-account-settings-theme-persistence",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Theme persistence: spa-local-storage default, server-scoped or none",
8
+ "context": "The theme surface persists the light/dark/system choice. The applied SPA blueprint owns per-tab hydration; the account-settings blueprint owns the operator surface for choosing the theme and the persistence hand-off. The spec section 5.4 marks theme-persistence as elicited with recommendedDefault true on spa-local-storage because per-browser persistence is the least-surprising default and it does not require a server round-trip.",
9
+ "decision": "theme-persistence is elicited (enum: spa-local-storage | server-scoped | none). Recommended default: spa-local-storage. The applied SPA blueprint reads the persisted choice at hydrate time and applies data-theme on the html element before first paint (no flash of unstyled content). A server-scoped persistence writes the choice on the principals record so it follows the user across devices; the account-settings blueprint records the choice through its themeAdapter interface. A \"none\" choice reflects the projects prefers-color-scheme by default and never persists.",
10
+ "consequences": "A spa-local-storage project honours the users choice per browser tab family, which is the vernacular expectation. A server-scoped project pays the cost of a per-preference write. A none project honours the OS.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Alternative approach considered",
14
+ "summary": "Auto-detecting from the applied blueprint set was considered but the choice is a UX decision.",
15
+ "reasonNotChosen": "See the decision text; the chosen shape composes cleanly with the applied blueprint set the spec section 5.4 names."
16
+ }
17
+ ],
18
+ "createdAt": "2026-09-06T20:55:46Z",
19
+ "updatedAt": "2026-09-06T20:55:46Z"
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "adrId": "ADR-2604-application-account-settings-reauth-window",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Re-authenticate before high-value changes (default: enabled)",
8
+ "context": "A high-value change (password change, MFA change, session terminate, account delete) that runs on the same session that opened the surface is a phishing risk when the session is stale. WCAG 3.3.4 (Error Prevention on legal, financial and data-changing actions) applies. The spec section 5.4 marks reauth-window as elicited with recommendedDefault true, meaning re-authenticate is enabled by default.",
9
+ "decision": "reauth-window is elicited (enum: never | 5m | 15m | 60m). Recommended default: 15m. A high-value change fires the re-authenticate flow when the session was last authenticated more than reauth-window minutes ago. A project that ships a short-lived session token (reauth-window irrelevant because the session itself expires within minutes) may set never; ADR records the choice and the risk. The re-authenticate flow itself is owned by the applied auth blueprint; this ADR names the trigger, not the implementation.",
10
+ "consequences": "A stolen laptop with an unlocked session cannot terminate every other session without re-authenticating within 15 minutes. The re-authenticate cost is a modal prompt on the operators sessions view, not a full sign-out flow.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Alternative approach considered",
14
+ "summary": "Always require re-authenticate was considered but every operators surface would trigger it; a windowed policy balances safety and workflow.",
15
+ "reasonNotChosen": "See the decision text; the chosen shape composes cleanly with the applied blueprint set the spec section 5.4 names."
16
+ }
17
+ ],
18
+ "createdAt": "2026-09-06T20:55:46Z",
19
+ "updatedAt": "2026-09-06T20:55:46Z"
20
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-account-settings-REQ-001",
3
+ "prdId": "PRD-001",
4
+ "title": "Settings shell with no dead links to unapplied capabilities and ARIA APG tabs",
5
+ "description": "The settings shell renders a single primary tabs region (ARIA APG tabs pattern) whose entries mirror the union of applied capabilities discovered via readAppliedCapabilities. A tab whose capability is not applied does NOT render (no dead link, no disabled shell). A principal without an authenticated session reaching /account routes to the access-denied state through application-empty-error-states (T-1) with a sign-in link; no bespoke access-denied UI is invented here. Landmark, headings, focus order per WCAG 2.4.6.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round 4 spec (2026-09-06) section 5.4, REQ 1 of the account-settings blueprint.",
10
+ "tags": [
11
+ "blueprint:application-account-settings",
12
+ "category:01-shell"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-06T20:55:46Z",
17
+ "updatedAt": "2026-09-06T20:55:46Z"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-account-settings-REQ-002",
3
+ "prdId": "PRD-001",
4
+ "title": "Profile surface always available with autocomplete tokens per WCAG 1.3.5",
5
+ "description": "The profile surface (/account/profile) is unconditional (any authenticated principal reaches it) and renders a form with WCAG 1.3.5 autocomplete tokens on every editable identifier (name, email, bday, country). Save success announces via aria-live polite (\"Profile saved\"). Save failure per field renders aria-invalid true with aria-describedby to the per-field error message and focus moves to the first invalid field (WCAG 3.3.1 Error Identification).",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round 4 spec (2026-09-06) section 5.4, REQ 2 of the account-settings blueprint.",
10
+ "tags": [
11
+ "blueprint:application-account-settings",
12
+ "category:02-profile"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-06T20:55:46Z",
17
+ "updatedAt": "2026-09-06T20:55:46Z"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-account-settings-REQ-003",
3
+ "prdId": "PRD-001",
4
+ "title": "Security surface conditional on credentialSelfService OR hostedIdentityUi",
5
+ "description": "The security surface (/account/security) renders when the applied capability set contains credentialSelfService (self-service branch: password change, MFA setup, session-based sign-out) or hostedIdentityUi (link-out or embed branch: rendering an operator-elicited href or handle). When NEITHER capability is applied, the security tab does not render and the surface refuses at apply with the two-remedy message (declare a capability, or drop the security tab from scope) per spec Q3.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round 4 spec (2026-09-06) section 5.4, REQ 3 of the account-settings blueprint.",
10
+ "tags": [
11
+ "blueprint:application-account-settings",
12
+ "category:03-security"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-06T20:55:46Z",
17
+ "updatedAt": "2026-09-06T20:55:46Z"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-account-settings-REQ-004",
3
+ "prdId": "PRD-001",
4
+ "title": "Sessions surface conditional on sessionInventory",
5
+ "description": "The sessions surface (/account/sessions) renders when sessionInventory is applied. Lists active sessions in a table enumerated by data-session-id with device label, last-active timestamp and terminate control. Terminate opens an ARIA APG dialog-modal (role=dialog, aria-modal=true, aria-labelledby to the heading, focus trap, focus returns to the row on close) confirming the action; on submit the row disappears from the table and a polite \"Session ended\" announcement fires (WCAG 4.1.3 Status Messages).",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round 4 spec (2026-09-06) section 5.4, REQ 4 of the account-settings blueprint.",
10
+ "tags": [
11
+ "blueprint:application-account-settings",
12
+ "category:04-sessions"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-06T20:55:46Z",
17
+ "updatedAt": "2026-09-06T20:55:46Z"
18
+ }