rcf-lite 0.21.0 → 0.22.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 (342) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/blueprints/application-account-settings/CHANGELOG.md +12 -0
  3. package/blueprints/application-account-settings/README.md +114 -0
  4. package/blueprints/application-account-settings/blueprint.json +234 -0
  5. package/blueprints/application-account-settings/contributions/adrs/adr-2601-application-account-settings-capability-vocabulary.json +20 -0
  6. package/blueprints/application-account-settings/contributions/adrs/adr-2602-application-account-settings-security-surface-shape.json +20 -0
  7. package/blueprints/application-account-settings/contributions/adrs/adr-2603-application-account-settings-theme-persistence.json +20 -0
  8. package/blueprints/application-account-settings/contributions/adrs/adr-2604-application-account-settings-reauth-window.json +20 -0
  9. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-001.json +18 -0
  10. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-002.json +18 -0
  11. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-003.json +18 -0
  12. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-004.json +18 -0
  13. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-005.json +18 -0
  14. package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-006.json +18 -0
  15. package/blueprints/application-account-settings/contributions/tacs/tac-2601-application-account-settings-shell.json +41 -0
  16. package/blueprints/application-account-settings/contributions/tacs/tac-2602-application-account-settings-capability-discovery.json +28 -0
  17. package/blueprints/application-account-settings/contributions/tacs/tac-2603-application-account-settings-hosted-ui-bridge.json +35 -0
  18. package/blueprints/application-account-settings/contributions/tacs/tac-2604-application-account-settings-session-store.json +40 -0
  19. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25101.json +34 -0
  20. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25102.json +27 -0
  21. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25103.json +27 -0
  22. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25104.json +27 -0
  23. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25105.json +33 -0
  24. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25106.json +27 -0
  25. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25107.json +27 -0
  26. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25108.json +27 -0
  27. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25109.json +33 -0
  28. package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25110.json +27 -0
  29. package/blueprints/application-account-settings/docs/topics.md +48 -0
  30. package/blueprints/application-account-settings/guide/application-account-settings.md +30 -0
  31. package/blueprints/application-account-settings/probe-packs/application-account-settings.pack.mjs +246 -0
  32. package/blueprints/application-admin-console/docs/topics.md +7 -0
  33. package/blueprints/application-api-rest/docs/topics.md +8 -1
  34. package/blueprints/application-charts/docs/topics.md +7 -0
  35. package/blueprints/application-dashboard/docs/topics.md +7 -0
  36. package/blueprints/application-datatable/docs/topics.md +7 -0
  37. package/blueprints/application-empty-error-states/CHANGELOG.md +9 -0
  38. package/blueprints/application-empty-error-states/README.md +88 -0
  39. package/blueprints/application-empty-error-states/blueprint.json +119 -0
  40. package/blueprints/application-empty-error-states/contributions/adrs/adr-2301-application-empty-error-states-status-contract.json +25 -0
  41. package/blueprints/application-empty-error-states/contributions/adrs/adr-2302-application-empty-error-states-stack-trace-visibility.json +25 -0
  42. package/blueprints/application-empty-error-states/contributions/adrs/adr-2303-application-empty-error-states-offline-strategy.json +25 -0
  43. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-001.json +18 -0
  44. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-002.json +18 -0
  45. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-003.json +18 -0
  46. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-004.json +18 -0
  47. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-005.json +18 -0
  48. package/blueprints/application-empty-error-states/contributions/tacs/tac-2301-application-empty-error-states-state-machine.json +46 -0
  49. package/blueprints/application-empty-error-states/contributions/tacs/tac-2302-application-empty-error-states-recovery-router.json +36 -0
  50. package/blueprints/application-empty-error-states/contributions/tacs/tac-2303-application-empty-error-states-offline-buffer.json +40 -0
  51. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22101.json +29 -0
  52. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22102.json +29 -0
  53. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22103.json +29 -0
  54. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22104.json +29 -0
  55. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22105.json +29 -0
  56. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22106.json +29 -0
  57. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22107.json +29 -0
  58. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22108.json +29 -0
  59. package/blueprints/application-empty-error-states/docs/topics.md +53 -0
  60. package/blueprints/application-empty-error-states/guide/application-empty-error-states.md +50 -0
  61. package/blueprints/application-empty-error-states/probe-packs/application-empty-error-states.pack.mjs +284 -0
  62. package/blueprints/application-error-handling/docs/topics.md +7 -0
  63. package/blueprints/application-file-upload/CHANGELOG.md +9 -0
  64. package/blueprints/application-file-upload/README.md +85 -0
  65. package/blueprints/application-file-upload/blueprint.json +114 -0
  66. package/blueprints/application-file-upload/contributions/adrs/adr-2401-application-file-upload-transport.json +25 -0
  67. package/blueprints/application-file-upload/contributions/adrs/adr-2402-application-file-upload-accepted-set.json +25 -0
  68. package/blueprints/application-file-upload/contributions/adrs/adr-2403-application-file-upload-virus-scan.json +25 -0
  69. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +18 -0
  70. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +18 -0
  71. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +18 -0
  72. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +18 -0
  73. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +18 -0
  74. package/blueprints/application-file-upload/contributions/tacs/tac-2401-application-file-upload-input.json +46 -0
  75. package/blueprints/application-file-upload/contributions/tacs/tac-2402-application-file-upload-transport.json +47 -0
  76. package/blueprints/application-file-upload/contributions/tacs/tac-2403-application-file-upload-progress-announcer.json +46 -0
  77. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23101.json +28 -0
  78. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23102.json +28 -0
  79. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23103.json +29 -0
  80. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23104.json +28 -0
  81. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23105.json +29 -0
  82. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23106.json +28 -0
  83. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23107.json +28 -0
  84. package/blueprints/application-file-upload/docs/topics.md +58 -0
  85. package/blueprints/application-file-upload/guide/application-file-upload.md +48 -0
  86. package/blueprints/application-file-upload/probe-packs/application-file-upload.pack.mjs +238 -0
  87. package/blueprints/application-forms-wizard/CHANGELOG.md +9 -0
  88. package/blueprints/application-forms-wizard/README.md +102 -0
  89. package/blueprints/application-forms-wizard/blueprint.json +120 -0
  90. package/blueprints/application-forms-wizard/contributions/adrs/adr-2501-application-forms-wizard-navigation.json +25 -0
  91. package/blueprints/application-forms-wizard/contributions/adrs/adr-2502-application-forms-wizard-save-and-return.json +25 -0
  92. package/blueprints/application-forms-wizard/contributions/adrs/adr-2503-application-forms-wizard-step-indicator.json +25 -0
  93. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +18 -0
  94. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +18 -0
  95. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +18 -0
  96. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +18 -0
  97. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +18 -0
  98. package/blueprints/application-forms-wizard/contributions/tacs/tac-2501-application-forms-wizard-task-list.json +46 -0
  99. package/blueprints/application-forms-wizard/contributions/tacs/tac-2502-application-forms-wizard-error-summary.json +40 -0
  100. package/blueprints/application-forms-wizard/contributions/tacs/tac-2503-application-forms-wizard-draft-store.json +40 -0
  101. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24101.json +28 -0
  102. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24102.json +29 -0
  103. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24103.json +28 -0
  104. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24104.json +29 -0
  105. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24105.json +28 -0
  106. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24106.json +28 -0
  107. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24107.json +28 -0
  108. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24108.json +29 -0
  109. package/blueprints/application-forms-wizard/docs/topics.md +49 -0
  110. package/blueprints/application-forms-wizard/guide/application-forms-wizard.md +48 -0
  111. package/blueprints/application-forms-wizard/probe-packs/application-forms-wizard.pack.mjs +233 -0
  112. package/blueprints/application-notifications-in-app/docs/topics.md +7 -0
  113. package/blueprints/application-onboarding-tour/CHANGELOG.md +12 -0
  114. package/blueprints/application-onboarding-tour/README.md +77 -0
  115. package/blueprints/application-onboarding-tour/blueprint.json +164 -0
  116. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2701-application-onboarding-tour-dismissal-policy.json +20 -0
  117. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2702-application-onboarding-tour-completion-store-shape.json +20 -0
  118. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2703-application-onboarding-tour-checklist-anchor.json +20 -0
  119. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-001.json +18 -0
  120. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-002.json +18 -0
  121. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-003.json +18 -0
  122. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-004.json +18 -0
  123. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2701-application-onboarding-tour-step-runner.json +41 -0
  124. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2702-application-onboarding-tour-checklist-slot.json +35 -0
  125. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2703-application-onboarding-tour-completion-store.json +34 -0
  126. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26101.json +27 -0
  127. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26102.json +27 -0
  128. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26103.json +27 -0
  129. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26104.json +27 -0
  130. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26105.json +27 -0
  131. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26106.json +27 -0
  132. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26107.json +27 -0
  133. package/blueprints/application-onboarding-tour/docs/topics.md +48 -0
  134. package/blueprints/application-onboarding-tour/guide/application-onboarding-tour.md +59 -0
  135. package/blueprints/application-onboarding-tour/probe-packs/application-onboarding-tour.pack.mjs +231 -0
  136. package/blueprints/application-spa/docs/topics.md +8 -1
  137. package/blueprints/delivery-ci-workflows/docs/topics.md +8 -1
  138. package/blueprints/deploy-cloudflare-workers/docs/topics.md +8 -1
  139. package/blueprints/email-smtp-resend/docs/topics.md +8 -1
  140. package/blueprints/object-storage-s3/CHANGELOG.md +13 -0
  141. package/blueprints/object-storage-s3/README.md +108 -0
  142. package/blueprints/object-storage-s3/blueprint.json +72 -0
  143. package/blueprints/object-storage-s3/contributions/adrs/adr-2901-object-storage-s3-adapter.json +30 -0
  144. package/blueprints/object-storage-s3/contributions/adrs/adr-2902-object-storage-s3-presigned-ttl-floor.json +25 -0
  145. package/blueprints/object-storage-s3/contributions/adrs/adr-2903-object-storage-s3-multipart-threshold.json +25 -0
  146. package/blueprints/object-storage-s3/contributions/adrs/adr-2904-object-storage-s3-contract.json +25 -0
  147. package/blueprints/object-storage-s3/contributions/probes/event-secrecy.mjs +103 -0
  148. package/blueprints/object-storage-s3/contributions/probes/facade-round-trip.mjs +43 -0
  149. package/blueprints/object-storage-s3/contributions/probes/multipart-upload.mjs +84 -0
  150. package/blueprints/object-storage-s3/contributions/probes/presigned-url.mjs +101 -0
  151. package/blueprints/object-storage-s3/contributions/probes/probe-utils.mjs +85 -0
  152. package/blueprints/object-storage-s3/contributions/probes/put-get-round-trip.mjs +84 -0
  153. package/blueprints/object-storage-s3/contributions/probes/r2-real-account-smoke.mjs +64 -0
  154. package/blueprints/object-storage-s3/contributions/probes/run-event-secrecy.mjs +4 -0
  155. package/blueprints/object-storage-s3/contributions/probes/run-facade-round-trip.mjs +10 -0
  156. package/blueprints/object-storage-s3/contributions/probes/run-multipart-upload.mjs +4 -0
  157. package/blueprints/object-storage-s3/contributions/probes/run-presigned-url.mjs +4 -0
  158. package/blueprints/object-storage-s3/contributions/probes/run-put-get-round-trip.mjs +7 -0
  159. package/blueprints/object-storage-s3/contributions/probes/run-r2-real-account-smoke.mjs +4 -0
  160. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-001.json +18 -0
  161. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-002.json +18 -0
  162. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-003.json +18 -0
  163. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-004.json +18 -0
  164. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-005.json +18 -0
  165. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +18 -0
  166. package/blueprints/object-storage-s3/contributions/tacs/tac-2901-object-storage-s3-facade.json +57 -0
  167. package/blueprints/object-storage-s3/contributions/tacs/tac-2902-object-storage-s3-multipart-uploader.json +36 -0
  168. package/blueprints/object-storage-s3/contributions/tacs/tac-2903-object-storage-s3-event-sink.json +36 -0
  169. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28101.json +34 -0
  170. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28102.json +43 -0
  171. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28103.json +25 -0
  172. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28104.json +34 -0
  173. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28105.json +25 -0
  174. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28106.json +34 -0
  175. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28107.json +34 -0
  176. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28108.json +34 -0
  177. package/blueprints/object-storage-s3/docs/topics.md +62 -0
  178. package/blueprints/object-storage-s3/guide/object-storage-s3.md +207 -0
  179. package/blueprints/observability-essentials/docs/topics.md +8 -1
  180. package/blueprints/observability-logging/CHANGELOG.md +4 -0
  181. package/blueprints/observability-logging/README.md +3 -0
  182. package/blueprints/observability-logging/blueprint.json +3 -2
  183. package/blueprints/observability-logging/docs/topics.md +7 -0
  184. package/blueprints/observability-probe-endpoints/docs/topics.md +8 -1
  185. package/blueprints/persistence-data-d1/docs/topics.md +8 -1
  186. package/blueprints/persistence-data-postgres/CHANGELOG.md +12 -0
  187. package/blueprints/persistence-data-postgres/README.md +101 -0
  188. package/blueprints/persistence-data-postgres/blueprint.json +80 -0
  189. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2801-persistence-data-postgres-driver.json +30 -0
  190. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2802-persistence-data-postgres-migration-shape.json +25 -0
  191. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2803-persistence-data-postgres-runner-mode.json +25 -0
  192. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2804-persistence-data-postgres-recovery.json +25 -0
  193. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2805-persistence-data-postgres-connection-pool-posture.json +25 -0
  194. package/blueprints/persistence-data-postgres/contributions/probes/facade-round-trip.mjs +56 -0
  195. package/blueprints/persistence-data-postgres/contributions/probes/migration-apply.mjs +75 -0
  196. package/blueprints/persistence-data-postgres/contributions/probes/pool-posture-smoke.mjs +56 -0
  197. package/blueprints/persistence-data-postgres/contributions/probes/prepared-statement-scan.mjs +186 -0
  198. package/blueprints/persistence-data-postgres/contributions/probes/probe-utils.mjs +76 -0
  199. package/blueprints/persistence-data-postgres/contributions/probes/recovery-restore-round-trip.mjs +173 -0
  200. package/blueprints/persistence-data-postgres/contributions/probes/run-facade-round-trip.mjs +10 -0
  201. package/blueprints/persistence-data-postgres/contributions/probes/run-migration-apply.mjs +10 -0
  202. package/blueprints/persistence-data-postgres/contributions/probes/run-pool-posture-smoke.mjs +9 -0
  203. package/blueprints/persistence-data-postgres/contributions/probes/run-prepared-statement-scan.mjs +10 -0
  204. package/blueprints/persistence-data-postgres/contributions/probes/run-recovery-restore-round-trip.mjs +9 -0
  205. package/blueprints/persistence-data-postgres/contributions/probes/run-transaction-atomicity.mjs +10 -0
  206. package/blueprints/persistence-data-postgres/contributions/probes/transaction-atomicity.mjs +79 -0
  207. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-001.json +18 -0
  208. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-002.json +18 -0
  209. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +18 -0
  210. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-004.json +18 -0
  211. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-005.json +18 -0
  212. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-006.json +18 -0
  213. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-007.json +18 -0
  214. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2801-persistence-data-postgres-facade.json +58 -0
  215. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2802-persistence-data-postgres-migration-runner.json +40 -0
  216. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2803-persistence-data-postgres-transaction-helper.json +35 -0
  217. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2804-persistence-data-postgres-recovery-runner.json +40 -0
  218. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27101.json +34 -0
  219. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27102.json +25 -0
  220. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27103.json +25 -0
  221. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27104.json +25 -0
  222. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27105.json +25 -0
  223. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27106.json +25 -0
  224. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27107.json +25 -0
  225. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27108.json +25 -0
  226. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27109.json +25 -0
  227. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27110.json +25 -0
  228. package/blueprints/persistence-data-postgres/docs/topics.md +64 -0
  229. package/blueprints/persistence-data-postgres/guide/persistence-data-postgres.md +172 -0
  230. package/blueprints/persistence-data-sqlite/docs/topics.md +8 -1
  231. package/blueprints/security-auth-clerk/CHANGELOG.md +4 -0
  232. package/blueprints/security-auth-clerk/README.md +3 -0
  233. package/blueprints/security-auth-clerk/blueprint.json +147 -30
  234. package/blueprints/security-auth-clerk/docs/topics.md +8 -1
  235. package/blueprints/security-auth-keycloak/CHANGELOG.md +4 -0
  236. package/blueprints/security-auth-keycloak/README.md +3 -0
  237. package/blueprints/security-auth-keycloak/blueprint.json +182 -37
  238. package/blueprints/security-auth-keycloak/docs/topics.md +8 -1
  239. package/blueprints/security-auth-magic-link/CHANGELOG.md +4 -0
  240. package/blueprints/security-auth-magic-link/README.md +3 -0
  241. package/blueprints/security-auth-magic-link/blueprint.json +159 -33
  242. package/blueprints/security-auth-magic-link/docs/topics.md +8 -1
  243. package/blueprints/security-auth-oauth2/CHANGELOG.md +4 -0
  244. package/blueprints/security-auth-oauth2/README.md +3 -0
  245. package/blueprints/security-auth-oauth2/blueprint.json +158 -32
  246. package/blueprints/security-auth-oauth2/docs/topics.md +8 -1
  247. package/blueprints/security-secrets-management/CHANGELOG.md +11 -0
  248. package/blueprints/security-secrets-management/blueprint.json +2 -1
  249. package/blueprints/security-secrets-management/docs/topics.md +8 -1
  250. package/fixtures/canary-manifest.json +9 -9
  251. package/package.json +1 -1
  252. package/rcf/code-nodes/cn-134.json +13 -0
  253. package/rcf/code-nodes/cn-135.json +12 -0
  254. package/rcf/code-nodes/cn-136.json +13 -0
  255. package/rcf/code-nodes/cn-137.json +13 -0
  256. package/rcf/code-nodes/cn-138.json +12 -0
  257. package/rcf/code-nodes/cn-139.json +12 -0
  258. package/rcf/code-nodes/cn-140.json +13 -0
  259. package/rcf/code-nodes/cn-141.json +13 -0
  260. package/rcf/code-nodes/cn-142.json +12 -0
  261. package/rcf/code-nodes/cn-143.json +13 -0
  262. package/rcf/code-nodes/cn-144.json +13 -0
  263. package/rcf/code-nodes/cn-145.json +12 -0
  264. package/rcf/code-nodes/cn-146.json +12 -0
  265. package/rcf/code-nodes/cn-147.json +13 -0
  266. package/rcf/code-nodes/cn-148.json +13 -0
  267. package/rcf/code-nodes/cn-149.json +12 -0
  268. package/rcf/code-nodes/cn-150.json +13 -0
  269. package/rcf/code-nodes/cn-151.json +13 -0
  270. package/rcf/code-nodes/cn-152.json +12 -0
  271. package/rcf/code-nodes/cn-153.json +12 -0
  272. package/rcf/code-nodes/cn-154.json +13 -0
  273. package/rcf/code-nodes/cn-155.json +14 -0
  274. package/rcf/code-nodes/cn-156.json +13 -0
  275. package/rcf/code-nodes/cn-157.json +13 -0
  276. package/rcf/code-nodes/cn-158.json +12 -0
  277. package/rcf/code-nodes/cn-159.json +13 -0
  278. package/rcf/code-nodes/cn-160.json +12 -0
  279. package/rcf/code-nodes/cn-161.json +12 -0
  280. package/rcf/code-nodes/cn-162.json +13 -0
  281. package/rcf/code-nodes/cn-163.json +12 -0
  282. package/rcf/code-nodes/cn-164.json +13 -0
  283. package/rcf/code-nodes/cn-165.json +12 -0
  284. package/rcf/code-nodes/cn-166.json +12 -0
  285. package/rcf/code-nodes/cn-167.json +12 -0
  286. package/rcf/code-nodes/cn-168.json +12 -0
  287. package/rcf/code-nodes/cn-169.json +12 -0
  288. package/rcf/code-nodes/cn-170.json +12 -0
  289. package/rcf/code-nodes/cn-171.json +12 -0
  290. package/rcf/code-nodes/cn-172.json +12 -0
  291. package/rcf/code-nodes/cn-173.json +12 -0
  292. package/rcf/code-nodes/cn-174.json +12 -0
  293. package/rcf/code-nodes/cn-175.json +13 -0
  294. package/rcf/code-nodes/cn-176.json +12 -0
  295. package/rcf/code-nodes/cn-177.json +12 -0
  296. package/rcf/code-nodes/cn-178.json +12 -0
  297. package/rcf/code-nodes/cn-179.json +12 -0
  298. package/rcf/code-nodes/cn-180.json +13 -0
  299. package/rcf/code-nodes/cn-181.json +12 -0
  300. package/rcf/code-nodes/cn-182.json +13 -0
  301. package/rcf/code-nodes/cn-183.json +12 -0
  302. package/rcf/code-nodes/cn-184.json +13 -0
  303. package/rcf/code-nodes/cn-185.json +12 -0
  304. package/rcf/code-nodes/cn-186.json +12 -0
  305. package/rcf/code-nodes/cn-200.json +14 -0
  306. package/rcf/code-nodes/cn-201.json +13 -0
  307. package/rcf/code-nodes/cn-202.json +14 -0
  308. package/rcf/code-nodes/cn-203.json +14 -0
  309. package/rcf/code-nodes/cn-204.json +13 -0
  310. package/rcf/code-nodes/cn-205.json +14 -0
  311. package/rcf/fbs/fbs-043.json +23 -0
  312. package/rcf/fbs/fbs-044.json +23 -0
  313. package/rcf/fbs/fbs-045.json +23 -0
  314. package/rcf/fbs/fbs-046.json +24 -0
  315. package/rcf/fbs/fbs-047.json +24 -0
  316. package/rcf/fbs/fbs-060.json +22 -0
  317. package/rcf/fbs/fbs-061.json +20 -0
  318. package/rcf/requirements/req-024.json +69 -0
  319. package/rcf/requirements/req-025.json +59 -0
  320. package/rcf/requirements/req-026.json +154 -0
  321. package/rcf/requirements/req-027.json +33 -0
  322. package/rcf/requirements/req-028.json +13 -0
  323. package/rcf/requirements/req-040.json +13 -0
  324. package/rcf/requirements/req-041.json +125 -0
  325. package/rcf/test-suites/ts-053.json +70 -0
  326. package/rcf/test-suites/ts-054.json +70 -0
  327. package/rcf/test-suites/ts-055.json +77 -0
  328. package/rcf/test-suites/ts-056.json +78 -0
  329. package/rcf/test-suites/ts-057.json +78 -0
  330. package/rcf/test-suites/ts-070.json +62 -0
  331. package/rcf/test-suites/ts-071.json +62 -0
  332. package/rcf/user-stories/us-2401.json +62 -0
  333. package/rcf/user-stories/us-2501.json +58 -0
  334. package/rcf/user-stories/us-2601.json +51 -0
  335. package/rcf/user-stories/us-2701.json +55 -0
  336. package/rcf/user-stories/us-2801.json +55 -0
  337. package/rcf/user-stories/us-4001.json +69 -0
  338. package/rcf/user-stories/us-4101.json +69 -0
  339. package/releases/releases.yaml +11 -1
  340. package/src/blueprint/apply.js +10 -1
  341. package/src/blueprint/capabilities.js +41 -2
  342. package/src/cli/blueprint.js +8 -1
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-forms-wizard-REQ-004",
3
+ "prdId": "PRD-001",
4
+ "title": "Summary-review contract: a summary-list rendering per step with Change links returning to each step and retaining every other answer on save",
5
+ "description": "After every step is Completed (per REQ-001) the wizard renders a summary-review surface: one summary-list section per step, each row a definition-list entry naming the field label and the operator's answer, and a Change link per row that navigates to the step with the field focused. Editing on the target step and saving returns to the summary-review surface with every other answer retained; only the edited answer is updated. The summary-list shape follows the GOV.UK Design System summary-list pattern. Per WCAG 2.2 SC 3.3.4 Error Prevention (Legal, Financial, Data): the summary-review is the last checkpoint before submission and every answer is reversible up to submit.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round 4 spec section 5.3, REQ 4.",
10
+ "tags": [
11
+ "blueprint:application-forms-wizard",
12
+ "category:04-summary-review"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-06T18:00:00Z",
17
+ "updatedAt": "2026-09-06T18:00:00Z"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-forms-wizard-REQ-005",
3
+ "prdId": "PRD-001",
4
+ "title": "Save-and-return contract: a server-side draft table or a client-side local buffer with a sync tick; refuses to ship if neither is wired",
5
+ "description": "The wizard commits partial answers between steps to a draft store so an operator can leave the surface and return without losing progress. Two transports ship: a server-side draft table (POST /drafts persists per-operator per-wizard rows, GET /drafts hydrates on return) and a client-side local buffer (localStorage keyed by operator identifier and wizard slug with a per-write sync tick). ADR-2502 commits to no recommendedDefault because the abandoned-draft loss class is genuinely per-project. A wizard that ships without either transport is refused at build gate: the draft-store TAC is a required companion. Per WCAG 2.2 SC 3.3.7 Redundant Entry: information the operator has already entered is preserved across sessions and not re-solicited.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round 4 spec section 5.3, REQ 5.",
10
+ "tags": [
11
+ "blueprint:application-forms-wizard",
12
+ "category:05-save-and-return"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-06T18:00:00Z",
17
+ "updatedAt": "2026-09-06T18:00:00Z"
18
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "tacId": "TAC-2501-application-forms-wizard-task-list",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Wizard task-list shell",
8
+ "purpose": "Owns the task-list surface of the wizard: the ordered enumeration of steps, the per-step completion-state slot from the closed GOV.UK vocabulary, the ARIA progressbar wrapper, and the linear-or-free navigation gate. Every AC on REQ-001 anchors on this TAC, and every AC that reads step order anchors here.",
9
+ "responsibilities": [
10
+ "Enumerate every step in a stable order derived from the elicited step manifest and render one [data-step-slug] row per step (AC-24101-1).",
11
+ "Render [data-step-state] on every row from the closed enum {Cannot start yet, Not started, In progress, Completed} (AC-24101-1).",
12
+ "Render an ARIA progressbar wrapper on the surface with aria-valuenow (completed count), aria-valuemax (total step count) and aria-valuetext naming the completion in words (AC-24101-1).",
13
+ "Honour the ADR-2501 linear-vs-free branch by rendering rows whose prerequisites are unfinished as non-anchor spans on linear and as anchors on free (AC-24106-1).",
14
+ "Delegate to TAC-2503 to hydrate step states from the draft store on entry and to persist step completion transitions on advance."
15
+ ],
16
+ "internalStructure": "One task-list module the shell mounts on the /task-list route. On mount it reads the step manifest, reads the draft store for the operator's per-step answers, computes the per-step completion state from the answers, renders the enumeration, and wires the row-click handler to the linear-vs-free branch. On step advance the module recomputes the state for the just-completed step and updates the progressbar aria-valuenow. Framework is not prescribed; the module's interfaces are what the project realises against React, Vue, Svelte or vanilla DOM.",
17
+ "interfaces": [
18
+ {
19
+ "name": "renderTaskList",
20
+ "kind": "factory",
21
+ "description": "renderTaskList({ manifest, answers, nav }) -> void. Renders the shell and wires the row handlers."
22
+ },
23
+ {
24
+ "name": "computeStepState",
25
+ "kind": "factory",
26
+ "description": "computeStepState({ step, answers }) -> stateString. Returns one of {Cannot start yet, Not started, In progress, Completed}."
27
+ },
28
+ {
29
+ "name": "statesEnum",
30
+ "kind": "shape",
31
+ "description": "The four state strings are the closed enum {\"Cannot start yet\", \"Not started\", \"In progress\", \"Completed\"}. A fifth state is a v1.1.0 minor bump."
32
+ }
33
+ ],
34
+ "dependencies": [
35
+ {
36
+ "name": "Draft store",
37
+ "kind": "tac",
38
+ "tacId": "TAC-2503-application-forms-wizard-draft-store",
39
+ "description": "The task-list reads the draft store on entry and writes on advance."
40
+ }
41
+ ],
42
+ "tradeoffs": "One task-list module keeps the enumeration deterministic and lint-checkable but ties every step to a manifest entry the project supplies. A project rendering the wizard without a task-list (a single-flow submit surface with no completion overview) does not apply this TAC; the wizard-shell TACs still hold. Known mechanism-reach gap: the pack asserts row order and state strings but does not additionally probe that focus moves to the task-list on route entry; a v1.1.0 minor bump can drive the accessibility tree.",
43
+ "notes": "See README Known mechanism-reach gaps.",
44
+ "createdAt": "2026-09-06T18:00:00Z",
45
+ "updatedAt": "2026-09-06T18:00:00Z"
46
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "tacId": "TAC-2502-application-forms-wizard-error-summary",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Wizard error-summary contract",
8
+ "purpose": "Owns the top-of-page error-summary contract on submit refusal: the summary region, the skip-link binding per failed field, the aria-invalid and aria-describedby marking on the fields themselves, the focus move to the summary heading, and the validation-timing gate the SPA forms-engine drives per REQ-002. Every AC on REQ-002 and REQ-003 anchors on this TAC.",
9
+ "responsibilities": [
10
+ "Render [data-surface=\"error-summary\"] at the top of the step on submit refusal with a heading and one skip-link anchor per failed field (AC-24103-1).",
11
+ "Mark every failed field with aria-invalid=\"true\" and aria-describedby pointing at its per-field error message id (AC-24103-1).",
12
+ "Move focus to the summary heading on submit failure (AC-24103-1).",
13
+ "Delegate validation to the SPA forms-engine TAC-205 on the on-blur, on-change and on-submit triggers per REQ-002 (AC-24102-1); this TAC does not re-implement validation, it consumes the engine.",
14
+ "Clear aria-invalid on a field when its message clears and remove the anchor from the summary on the next successful submit."
15
+ ],
16
+ "internalStructure": "One error-summary module the shell mounts inside the step surface. On submit refusal the module reads the engine's error set, renders the anchor list, moves focus, and wires the anchor click to focus the corresponding field. On subsequent input events after the first failure the module re-runs the engine per-field and updates the message; on the next submit the module rebuilds the error set from scratch. Framework is not prescribed; the interfaces are what the project realises.",
17
+ "interfaces": [
18
+ {
19
+ "name": "renderSummary",
20
+ "kind": "factory",
21
+ "description": "renderSummary({ errors, headingId }) -> void. Renders the summary region and wires focus."
22
+ },
23
+ {
24
+ "name": "bindField",
25
+ "kind": "factory",
26
+ "description": "bindField({ field, message }) -> void. Sets aria-invalid and aria-describedby."
27
+ }
28
+ ],
29
+ "dependencies": [
30
+ {
31
+ "name": "Applied SPA forms-engine",
32
+ "kind": "external",
33
+ "description": "The error-summary consumes the applied application-spa forms-engine (TAC-205 in that blueprint) to run per-field validation; this TAC does not ship its own engine. A project without application-spa applied wires an engine of its own choice against this TAC's interfaces (renderSummary and bindField)."
34
+ }
35
+ ],
36
+ "tradeoffs": "Consuming the SPA forms-engine keeps a project on the shelf free from a second overlapping engine but ties this TAC to the SPA blueprint's validation shape. Known mechanism-reach gap: the pack asserts the summary and the aria bindings but does not additionally probe the focus-order sweep across every field in the DOM after focus moves to the heading; a v1.1.0 minor bump can walk the tab order and diff.",
37
+ "notes": "See README Known mechanism-reach gaps.",
38
+ "createdAt": "2026-09-06T18:00:00Z",
39
+ "updatedAt": "2026-09-06T18:00:00Z"
40
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "tacId": "TAC-2503-application-forms-wizard-draft-store",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Wizard draft store",
8
+ "purpose": "Owns the save-and-return contract: the transport branch (server-side draft table or client-side local buffer), the sync tick on write, the hydrate-on-return path, and the in-progress list enumeration. Every AC on REQ-005 anchors on this TAC. Delegates the no-in-progress empty case to the application-empty-error-states empty-list state.",
9
+ "responsibilities": [
10
+ "On step advance persist the operator's partial answers per REQ-005 via the elicited transport (POST /drafts on server; localStorage write on local) (AC-24105-1).",
11
+ "On wizard entry hydrate the operator's answers from the draft store (GET /drafts on server; localStorage read on local) so the task-list computes the correct completion state (AC-24101-1, AC-24105-1).",
12
+ "Render a [data-sync-tick] element on the client-local branch carrying an ISO-8601 timestamp updated on every write (AC-24105-1).",
13
+ "Enumerate the operator's drafts on the /in-progress list surface (AC-24107-1) and delegate the zero-drafts case to the application-empty-error-states empty-list state (AC-24108-1).",
14
+ "Refuse to render the wizard when neither transport is wired (a project applying application-forms-wizard without a draft-store elicit answer fails at build gate per ADR-2502)."
15
+ ],
16
+ "internalStructure": "One draft-store module the shell mounts on wizard entry. On mount the module reads the ADR-2502 elicit answer, resolves the transport factory (server-draft-table or client-local-buffer), and exposes the four operations {read, write, list, remove} to the task-list and summary-review modules. The server branch POSTs and GETs against operator-configured /drafts endpoints; the local branch reads and writes window.localStorage under the namespaced key draft:<wizard-slug>:<step-slug>. Neither transport ships a sync engine; the flush semantics are those of the underlying transport (server persistence on POST, browser persistence on the local write).",
17
+ "interfaces": [
18
+ {
19
+ "name": "resolveTransport",
20
+ "kind": "factory",
21
+ "description": "resolveTransport({ elicit }) -> { read, write, list, remove }. Returns the transport bound to the elicited branch."
22
+ },
23
+ {
24
+ "name": "transportsEnum",
25
+ "kind": "shape",
26
+ "description": "The transport branches are the closed enum {server-draft-table, client-local-buffer}. A third branch is a v1.1.0 minor bump."
27
+ }
28
+ ],
29
+ "dependencies": [
30
+ {
31
+ "name": "Applied application-empty-error-states blueprint",
32
+ "kind": "external",
33
+ "description": "The zero-drafts case on /in-progress delegates to the empty-list state contributed by application-empty-error-states (TAC-2301 state machine, [data-surface=\"empty-list\"] wrapper with a [data-recovery=\"create\"] control). A project applying application-forms-wizard without application-empty-error-states also applied sees the /in-progress empty branch render a fallback empty message, which fails the sibling's runtime enforcement pack."
34
+ }
35
+ ],
36
+ "tradeoffs": "Two transports keep the shelf blueprint reachable by every project shape (a hobby SPA with no server can ship the local branch; an enterprise SPA with an audit trail ships the server branch) at the price of a per-project elicit at apply time. Known mechanism-reach gap: the pack asserts POST /drafts and GET /drafts round-trip on the server branch and the localStorage write on the local branch, but does not additionally probe cross-tab hydration on the local branch or server-side dedupe on the server branch; both are v1.1.0 minor-bump candidates.",
37
+ "notes": "See README Known mechanism-reach gaps.",
38
+ "createdAt": "2026-09-06T18:00:00Z",
39
+ "updatedAt": "2026-09-06T18:00:00Z"
40
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24101",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "The task-list surface renders every step with one of the four GOV.UK completion states and an ARIA progressbar naming the completion count",
8
+ "asA": "operator working through a multi-step form",
9
+ "iWant": "a task-list surface that shows me every step in order, tells me for each step whether I Cannot start yet, have Not started, am In progress or have Completed it, and announces the total number completed",
10
+ "soThat": "I can see at a glance where I am, decide which step to pick up next, and know when I have nothing left to do before the summary review",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24101-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given the wizard task-list route, the rendered surface exposes [data-surface=\"task-list\"] carrying a [role=\"progressbar\"] with aria-valuenow, aria-valuemax and aria-valuetext, and one child element per step carrying [data-step-slug] and [data-step-state] whose value is one of the closed set {Cannot start yet, Not started, In progress, Completed}. The pack drives the real browser to /task-list and reads the state string per step, the progressbar values, and the enumerated step order."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2501-application-forms-wizard-task-list"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-forms-wizard",
24
+ "contract:task-list"
25
+ ],
26
+ "createdAt": "2026-09-06T18:00:00Z",
27
+ "updatedAt": "2026-09-06T18:00:00Z"
28
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24102",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-002",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Each step validates its own answers on blur before the first submit, then on change after the first failure, and rebuilds the error set from scratch on submit",
8
+ "asA": "operator filling in a step whose answers I have partially entered",
9
+ "iWant": "field-level messages to appear when I leave a field (not while I am mid-typing), then to update as I correct them after I have already tried to submit, and every message rebuilt from scratch on the next submit",
10
+ "soThat": "I am not scolded while typing, I see my corrections take effect immediately after a submit failure, and I trust that what shows on the page is what the engine last checked",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24102-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "On the wizard step route, focusing a field then blurring it without a valid entry renders a field-level error message referenced by aria-describedby without setting aria-invalid=\"true\" before the first submit (the pack asserts the message element is present and referenced). After a submit attempt fails on the field, subsequent input events on the same field update the message text on every change (the pack drives a first-submit-fail then a valid input and reads the message element's textContent transitioning to empty). On the next submit the engine rebuilds the error set from scratch (the pack asserts a previously failing field that has been corrected no longer appears in the summary)."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2501-application-forms-wizard-task-list",
21
+ "TAC-2502-application-forms-wizard-error-summary"
22
+ ],
23
+ "tags": [
24
+ "blueprint:application-forms-wizard",
25
+ "contract:validation-timing"
26
+ ],
27
+ "createdAt": "2026-09-06T18:00:00Z",
28
+ "updatedAt": "2026-09-06T18:00:00Z"
29
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24103",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-003",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "On submit refusal the step renders a top-of-page error summary with one skip link per failed field, aria-invalid on the field, and focus moved to the summary heading",
8
+ "asA": "operator who has submitted a step with an invalid entry",
9
+ "iWant": "a top-of-page summary of every failed field with a skip link that lands me on the field itself, the failed fields marked so a screen reader announces the error class, and focus placed on the summary heading so I hear the summary before anything else",
10
+ "soThat": "I can walk the failures in order, land directly on the field that needs fixing, and hear what went wrong before the rest of the page reads out",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24103-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given a submit refusal on the wizard step, the rendered surface exposes [data-surface=\"error-summary\"] with a heading (h2 or role=heading), one anchor element per failed field with href pointing at the field's id, and every failed field carries aria-invalid=\"true\" plus aria-describedby referencing its per-field error message. Focus after submit lands on the summary heading (document.activeElement matches the summary heading selector). The pack drives /step/2 with empty required inputs, submits and reads the summary heading, the anchor href list, the field aria-invalid attribute and the active-element selector."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2502-application-forms-wizard-error-summary"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-forms-wizard",
24
+ "contract:error-summary"
25
+ ],
26
+ "createdAt": "2026-09-06T18:00:00Z",
27
+ "updatedAt": "2026-09-06T18:00:00Z"
28
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24104",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-004",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "After every step is Completed the wizard renders a summary-review surface with one summary-list section per step and a Change link per row that retains every other answer on save",
8
+ "asA": "operator who has finished every step in the wizard",
9
+ "iWant": "a summary-review surface that lists every step's answers as a definition list, with a Change link per row that takes me back to the step with the field focused, and my other answers still present when I save",
10
+ "soThat": "I can review everything I entered before I submit, revise a single answer without losing the rest, and satisfy myself the submission is what I intended",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24104-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given every step is Completed, /summary renders [data-surface=\"summary-review\"] with one [data-summary-list-section] per step; each section holds a <dl> summary list carrying [data-summary-row] entries with a <dt> label and a <dd> value; every row carries a [data-recovery=\"change\"] link whose href routes back to the step. After clicking a Change link, editing that field and saving, the operator returns to /summary and every other row's value is preserved verbatim. The pack drives /summary, reads the row count and dl structure, follows one Change link, updates one field, saves, and diffs the summary rows before and after to prove only the edited row changed."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2501-application-forms-wizard-task-list",
21
+ "TAC-2503-application-forms-wizard-draft-store"
22
+ ],
23
+ "tags": [
24
+ "blueprint:application-forms-wizard",
25
+ "contract:summary-review"
26
+ ],
27
+ "createdAt": "2026-09-06T18:00:00Z",
28
+ "updatedAt": "2026-09-06T18:00:00Z"
29
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24105",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-005",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Save-and-return is wired via a server-side draft table or a client-side local buffer with a sync tick; the pack refuses to ship if neither is present",
8
+ "asA": "operator who has partially completed a wizard and will return later",
9
+ "iWant": "my partial answers persisted between steps and across sessions, either to a server-side draft table or to a local buffer that surfaces a sync tick when it writes",
10
+ "soThat": "closing the tab or losing the network mid-way does not force me to start again from the first step",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24105-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "On ?draft-store=server, entering an answer on step 1 and advancing issues a POST /drafts request whose body carries the operator identifier, the wizard slug, the step slug and the answer field; a subsequent GET /drafts on the same operator returns the persisted answer (the pack drives step 1, types into a field, advances, then re-issues a fresh GET /drafts and reads the JSON body). On ?draft-store=local, the same input path writes into window.localStorage under a namespaced key (draft:<wizard-slug>:<step-slug>) and renders a [data-sync-tick] element carrying an ISO-8601 timestamp updated on every write. When both transports are absent (?draft-store=none) the pack fails at severity block naming the missing transport."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2503-application-forms-wizard-draft-store"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-forms-wizard",
24
+ "contract:save-and-return"
25
+ ],
26
+ "createdAt": "2026-09-06T18:00:00Z",
27
+ "updatedAt": "2026-09-06T18:00:00Z"
28
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24106",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Linear-vs-free step navigation is a per-project elicit; the task-list respects it by disabling out-of-order entry on linear and permitting it on free",
8
+ "asA": "operator whose project has committed to a step order posture",
9
+ "iWant": "the task-list to disable step links whose prerequisites are unfinished when the project runs linear, or to permit any step at any time when the project runs free",
10
+ "soThat": "the surface matches the project's committed posture and does not let me enter a step whose prerequisites the domain forbids",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24106-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "On the ?nav=linear branch, task-list rows whose [data-step-state] is Cannot start yet render as non-anchor spans (no clickable href) and the pack asserts a click on the row does not change the URL. On the ?nav=free branch every row renders as an anchor and a click on any row navigates to that step's route. ADR-2501 records the elicit and the shipped default is linear."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2501-application-forms-wizard-task-list"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-forms-wizard",
24
+ "case:linear-vs-free-navigation"
25
+ ],
26
+ "createdAt": "2026-09-06T18:00:00Z",
27
+ "updatedAt": "2026-09-06T18:00:00Z"
28
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24107",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-005",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "The in-progress forms list surfaces every wizard the operator has started but not yet submitted with a resume link back to the task-list",
8
+ "asA": "operator returning to the application with more than one wizard on the go",
9
+ "iWant": "an index surface listing every wizard I have started but not submitted, each with the wizard title, the step I was on and a resume link",
10
+ "soThat": "I can walk back into the one I meant to finish without hunting through the navigation",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24107-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given at least one draft persisted per REQ-005, /in-progress renders [data-surface=\"in-progress-list\"] with one [data-wizard-row] per draft carrying the wizard title, the step slug the operator was on and a [data-recovery=\"resume\"] link whose href routes back to the wizard's task-list surface. The row count matches the number of drafts held in the draft store."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2503-application-forms-wizard-draft-store"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-forms-wizard",
24
+ "case:in-progress-list"
25
+ ],
26
+ "createdAt": "2026-09-06T18:00:00Z",
27
+ "updatedAt": "2026-09-06T18:00:00Z"
28
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "usId": "application-forms-wizard-US-24108",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-forms-wizard-REQ-005",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "When no drafts are held the in-progress list surface delegates to the application-empty-error-states empty-list state and offers a create-affordance back to a fresh wizard",
8
+ "asA": "operator returning to the application with no wizards in flight",
9
+ "iWant": "the in-progress list to render the empty-list surface from the empty-and-error-states sibling with a control that starts a fresh wizard",
10
+ "soThat": "the empty case reads consistently with every other empty listing in the application and I have one obvious next action",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-24108-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given zero drafts in the draft store, /in-progress renders [data-surface=\"empty-list\"] (the empty-list wrapper contributed by application-empty-error-states) with a [data-recovery=\"create\"] control whose href routes to the first step of a fresh wizard. The pack asserts the wrapper and the control are present on the honest render and refuses when either is missing."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2503-application-forms-wizard-draft-store"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-forms-wizard",
24
+ "case:no-in-progress-forms-empty-state",
25
+ "consumes:application-empty-error-states"
26
+ ],
27
+ "createdAt": "2026-09-06T18:00:00Z",
28
+ "updatedAt": "2026-09-06T18:00:00Z"
29
+ }
@@ -0,0 +1,49 @@
1
+ # application-forms-wizard: coordination vocabulary
2
+
3
+ ## Global topics
4
+
5
+ The blueprint claims no new global topics at v1.0.0. Every ADR (navigation posture, save-and-return transport, step-indicator shape) is non-global.
6
+
7
+ ## Deliberately unclaimed topics
8
+
9
+ - `formsEngine` (the validation and field-component engine). Reserved for `application-spa` which owns the engine via TAC-205; this blueprint reads the engine through TAC-2502 and adds the wizard-shell contract on top.
10
+ - `draftSyncEngine` (a shared sync engine across UI and persistence blueprints). Reserved for a future `application-draft-sync` v1.0.0 if three or more consumer blueprints start elicitizing the same cross-tab or server-side sync shape.
11
+ - `emptyStateWrapper` (the DOM shape of the empty-list wrapper). Reserved for `application-empty-error-states` which owns it via TAC-2301; this blueprint delegates the no-in-progress empty case to the sibling and does not re-claim the wrapper.
12
+
13
+ ## Shelf id band and suffix block
14
+
15
+ | Blueprint | US band | ADR/TAC suffix block | Status | Global topics |
16
+ |---|---|---|---|---|
17
+ | application-datatable | 17101-17899 | 18xx | shipped v1.0.0 | none |
18
+ | application-charts | 18101-18899 | 19xx | shipped v1.0.0 | none |
19
+ | application-dashboard | 19101-19899 | 20xx | shipped v1.0.0 | none |
20
+ | application-notifications-in-app | 20101-20899 | 21xx | shipped v1.0.0 | none |
21
+ | application-admin-console | 21101-21899 | 22xx | shipped v1.0.0 | none |
22
+ | application-empty-error-states | 22101-22899 | 23xx | shipped v1.0.0 | none |
23
+ | application-file-upload | 23101-23899 | 24xx | shipped v1.0.0 | none |
24
+ | application-forms-wizard | 24101-24899 | 25xx | shipped v1.0.0 | none |
25
+ | application-account-settings | 25101-25899 | 26xx | shipped v1.0.0 | none |
26
+ | application-onboarding-tour | 26101-26899 | 27xx | shipped v1.0.0 | none |
27
+ | persistence-data-postgres | 27101-27899 | 28xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
28
+ | object-storage-s3 | 28101-28899 | 29xx | shipped v1.0.0 | `objectStorage` |
29
+
30
+ The shelf-wide band registry lives in `packages/rcf-lite/docs/blueprint-authoring.md` section 5.
31
+
32
+ ## Composition with application-spa
33
+
34
+ `application-spa` REQ-006 ships the forms-engine (TAC-205) and the field-component library. Applying this blueprint alongside `application-spa` composes cleanly: SPA holds the engine and the field components; this blueprint holds the wizard shell, the task-list, the error-summary contract, the summary review and the save-and-return draft store. No `scope: "global"` ADR conflict.
35
+
36
+ ## Composition with application-empty-error-states
37
+
38
+ The `no-in-progress-forms` case on the /in-progress list surface delegates to the sibling's `empty-list` state (`[data-surface="empty-list"]` with a `[data-recovery="create"]` control). Per the sibling's `docs/topics.md`: SPA holds the tab-title convention, the component contracts and the state-visual tokens; this sibling holds the state list, the recovery-action router and the runtime enforcement pack. This blueprint's TAC-2503 reads that state on the zero-drafts branch and does not re-claim the wrapper.
39
+
40
+ ## Probe pack
41
+
42
+ `probe-packs/application-forms-wizard.pack.mjs` ships four surface-observable checks anchored to blueprint AC ids, one per core contract:
43
+
44
+ - `AC-24101-1` task-list (per-step state from {Cannot start yet, Not started, In progress, Completed}, ARIA progressbar wrapper, ordered step enumeration)
45
+ - `AC-24103-1` error-summary (top-of-page summary, skip links per failed field, aria-invalid on the field, aria-describedby to the field-level error message, focus to summary heading)
46
+ - `AC-24104-1` summary-review (summary-list rows per step, Change link per row, answer retention across an edit-and-save round-trip)
47
+ - `AC-24105-1` save-and-return (server-draft-table transport POST/GET round-trip, client-local-buffer transport localStorage write with a sync tick)
48
+
49
+ The pack applies to any FBS binding `TAC-2501-application-forms-wizard-task-list` or whose navModel routes name an operator-configured wizard-route path (matching `/(task-list|step|summary|in-progress|wizard)`). See `packages/rcf-lite/docs/blueprint-authoring.md` section 8c for the pack authoring rules.
@@ -0,0 +1,48 @@
1
+ # application-forms-wizard: operator guide
2
+
3
+ ## When to reach for it
4
+
5
+ Your project ships a workflow whose completion spans two or more surfaces the operator moves between with save points in between: a signup or onboarding flow, a checkout, an account setup, a compliance-heavy submission, an application review. You want the GOV.UK-vocabulary task-list up front (Cannot start yet, Not started, In progress, Completed) so the operator sees where they are at a glance, the per-step validation timing on-blur then on-change so the messages behave predictably, the top-of-page error summary with skip links so a screen-reader user hears the failures in order, the summary review with row-level change and answer retention so the operator can revise before submit, and the save-and-return draft store so a closed tab or a lost network does not force them to start again.
6
+
7
+ ## The four contracts
8
+
9
+ - **Task-list contract (REQ-001).** Every step is enumerated with a state from the closed vocabulary. The ARIA progressbar wrapper carries the completion count.
10
+ - **Validation timing (REQ-002).** On-blur before first submit, on-change after first failure, full pass on submit. Delegates to the SPA blueprint's forms-engine TAC-205.
11
+ - **Error-summary contract (REQ-003).** Top-of-page summary, skip links per failed field, aria-invalid on the field, focus to summary heading on submit failure.
12
+ - **Summary-review contract (REQ-004).** Summary-list rows per step, Change link per row, answer retention on save.
13
+ - **Save-and-return contract (REQ-005).** Server-side draft table or client-side local buffer with a per-write sync tick. The pack refuses to ship if neither is wired.
14
+
15
+ ## When NOT to reach for it
16
+
17
+ Your workflow is a single-page form the operator fills in one go with no cross-step dependencies. A wizard shell adds mechanism without payoff; a single-step submit with the same forms-engine and the same error-summary reads better.
18
+
19
+ Your workflow is a linear questionnaire where every step is optional and the operator can jump anywhere at any time. Consider the free-navigation branch (ADR-2501) or an alternative surface that does not enumerate completion states.
20
+
21
+ Your workflow ships without any draft store because every submission is single-session (a payment authorisation with a strict short expiry, say). The blueprint refuses to apply without a transport; either wire one or pick a different surface.
22
+
23
+ ## What stays your call
24
+
25
+ - The step manifest (elicited at apply time). The blueprint ships an example three-step manifest on the fixture; your project supplies its own.
26
+ - The step-indicator shape (task-list, ARIA progressbar-only, breadcrumb; ADR-2503).
27
+ - The linear-vs-free navigation posture (ADR-2501). The default is linear.
28
+ - The save-and-return transport (server-draft-table, client-local-buffer; ADR-2502). No default is committed.
29
+ - The visual design of each surface. The blueprint contributes WHAT surfaces under WHAT condition; the palette, spacing and typography are your design system's call.
30
+ - The per-field validation rules (which fields are required, format constraints). The blueprint contributes the timing rule and the summary shape; the field-level rules are your project's call, wired through the SPA forms-engine.
31
+
32
+ ## What a good outcome looks like
33
+
34
+ The pack fires on every FBS whose surface renders a wizard task-list or a wizard step, and every check returns `pass` on the honest render and `fail` on the corresponding break switch. Your operator walks the task-list, sees the completion states in order, blur-triggers validation without being interrupted mid-typing, and on submit failure lands on the error summary with the failed fields in order. On summary review the operator revises one answer without losing the rest and submits with confidence. On network loss or a closed tab the draft persists and the operator picks up where they left off.
35
+
36
+ ## Mechanism-reach gaps
37
+
38
+ The blueprint README lists the runtime-observable ACs the pack does NOT bind directly. Every gap is a candidate for a v1.1.0 minor bump extending the pack. Combine with `application-spa` to inherit the forms-engine and the field-component library, and with `application-empty-error-states` for the no-in-progress empty case.
39
+
40
+ ## Promotion signals
41
+
42
+ - A wizard state past the four closed strings recurs across three or more consumer wizards (a Skipped or Locked state, say). Candidate: a v1.1.0 minor bump extending REQ-001's state enum.
43
+ - The save-and-return contract wants a shared sync engine across a persistence blueprint and this UI blueprint. Candidate: a dedicated `application-draft-sync` blueprint absorbing the transport.
44
+ - The step-indicator enum wants a per-step count element outside the task-list. Candidate: a v1.1.0 minor bump extending ADR-2503's shape enum.
45
+
46
+ ## Costs to be honest about
47
+
48
+ A three-step wizard is a couple of days of project-side wiring per framework even after adopting the TACs. The pack is Playwright-first, so a project without a running dev server at gate time cannot fire it. The save-and-return contract's server branch needs a persistence adapter; the local branch needs a serialisation shape agreed with the forms-engine and a per-project namespacing rule for shared devices.