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,41 @@
1
+ {
2
+ "tacId": "TAC-2601-application-account-settings-shell",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Account settings shell",
8
+ "purpose": "Owns the rendered settings surface: the top-level tabs landmark, the surface-manifest read at load, the conditional rendering of every applied surface (profile always; security, sessions, notifications, theme conditional), the tabs interaction contract (ARIA APG), and the shared page layout every surface renders within. The shell is the base surface every AC in this blueprint anchors on.",
9
+ "responsibilities": [
10
+ "Read the applied capability sidecar (rcf/blueprints/application-account-settings.applied.json) at load and configure the tab set (AC-25101-1).",
11
+ "Render a single primary navigation landmark carrying an accessible name and rendering only applied surfaces (AC-25101-1, AC-25101-2).",
12
+ "Render the profile surface unconditionally as the active tab on /account (AC-25102-1).",
13
+ "Delegate the security, sessions, notification-preferences and theme surfaces to their respective TACs (TAC-2603, TAC-2604) or render inline for notifications and theme.",
14
+ "Route unauthenticated principals to the empty-error-states forbidden state (T-1) rather than inventing a bespoke denied UI."
15
+ ],
16
+ "internalStructure": "One shell module that mounts the surface, reads the applied capabilities sidecar, and renders the tabs landmark, the page-layout scaffolding, and the tabpanel-level containers for each conditional surface. The framework is not prescribed; the shell interfaces are what the project realises against React, Vue, Svelte or vanilla DOM.",
17
+ "interfaces": [
18
+ {
19
+ "name": "renderShell",
20
+ "kind": "factory",
21
+ "description": "renderShell({ capsSidecarUrl, surfaceRegistry, sessionGuard, themeAdapter, notificationsAdapter }) -> { mount(rootElement), unmount() }. The project supplies the capsSidecarUrl (where the sidecar is served from), the surfaceRegistry (maps a capability string to a surface component), the sessionGuard (returns whether the current principal has an authenticated session), the themeAdapter (persists the theme per the elicited persistence strategy) and the notificationsAdapter (reads and writes preferences through the applied notifications blueprint)."
22
+ },
23
+ {
24
+ "name": "capabilitiesSidecar",
25
+ "kind": "shape",
26
+ "description": "{ slug, version, appliedAt, appliedCapabilities: string[], appliedElicitations: {}, allowNoAuthYet?: boolean, notes?: string }. Written by apply, read by the shell."
27
+ }
28
+ ],
29
+ "dependencies": [
30
+ {
31
+ "name": "Capability discovery",
32
+ "kind": "tac",
33
+ "tacId": "TAC-2602-application-account-settings-capability-discovery",
34
+ "description": "The shell reads the surface-manifest through discovery."
35
+ }
36
+ ],
37
+ "tradeoffs": "The shell reads the sidecar file the apply verb writes; a runtime probe against manifest.blueprints[] would be more dynamic but ties the shell to the deploy-target having filesystem read access, which not every deploy target grants. The sidecar contract is deterministic and cacheable.",
38
+ "notes": "Composes on application-empty-error-states (T-1) for the forbidden and empty-list states rather than inventing bespoke denied UI. Known mechanism-reach gap: the shell contract cannot prove keyboard focus does not escape the tabs region in every framework rendering; project-side smoke tests supplement the pack. See README Known mechanism-reach gaps.",
39
+ "createdAt": "2026-09-06T20:55:46Z",
40
+ "updatedAt": "2026-09-06T20:55:46Z"
41
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "tacId": "TAC-2602-application-account-settings-capability-discovery",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Account settings capability discovery",
8
+ "purpose": "The apply-time reader that translates the applied blueprint set and any custom-auth elicits into an appliedCapabilities[] array, and enforces the requiresAppliedCapabilities gate.",
9
+ "responsibilities": [
10
+ "Read the union of capabilities[] declarations across applied blueprints (AC-25101-1, AC-25107-1, AC-25108-1).",
11
+ "Add capabilities the operator asserted through the four custom-auth-provides-* elicits (AC-25101-1).",
12
+ "Refuse at apply when no applied blueprint declares principalDirectory and --allow-no-auth-yet is not passed (AC-25109-1).",
13
+ "Write the sidecar file capturing appliedCapabilities, appliedElicitations, allowNoAuthYet and any scaffolding note (AC-25109-2)."
14
+ ],
15
+ "internalStructure": "One helper module reused verbatim from application-admin-console (readAppliedCapabilities), read from the applied sidecar file by the pack and the shell.",
16
+ "interfaces": [
17
+ {
18
+ "name": "readAppliedCapabilities",
19
+ "kind": "function",
20
+ "description": "readAppliedCapabilities(projectRoot) -> Promise<string[]>. Reads rcf/blueprints/application-account-settings.applied.json and returns appliedCapabilities[] or []. Never throws."
21
+ }
22
+ ],
23
+ "dependencies": [],
24
+ "tradeoffs": "The sidecar path is stable and versioned; a schema minor bump on rcf-schemas can promote appliedCapabilities[] onto the applied-record shape directly, at which point the helper reads the manifest record instead. Kept file-scoped for v1.",
25
+ "notes": "Known mechanism-reach gap: a project that declares a capability outside the section 6a vocabulary passes the loader shape check but the shell records no surface for it. Documented in README.",
26
+ "createdAt": "2026-09-06T20:55:46Z",
27
+ "updatedAt": "2026-09-06T20:55:46Z"
28
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "tacId": "TAC-2603-application-account-settings-hosted-ui-bridge",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Hosted identity UI bridge",
8
+ "purpose": "The security surface bridge between the applied auth blueprint and the operator-elicited hosted-UI destination.",
9
+ "responsibilities": [
10
+ "When credentialSelfService is applied, render the self-service branch (password change, MFA management) (AC-25103-1).",
11
+ "When hostedIdentityUi is applied AND security-surface-shape=hosted-link-out, render an <a data-role=\"hosted-link-out\" href=\"{hosted-identity-url}\"> with rel=\"noopener\" (AC-25104-1).",
12
+ "When hostedIdentityUi is applied AND security-surface-shape=hosted-embed, render an <iframe data-role=\"hosted-embed\" title=\"Account security\" src=\"{hosted-identity-url}\" sandbox=\"allow-scripts allow-forms allow-same-origin\"> (AC-25104-1).",
13
+ "Refuse at apply when the operator answers security-surface-shape but no applied blueprint declares credentialSelfService or hostedIdentityUi (AC-25110-1)."
14
+ ],
15
+ "internalStructure": "One security-surface module reading the elicited security-surface-shape and hosted-identity-url from the sidecar and dispatching to the appropriate render helper. The framework is not prescribed.",
16
+ "interfaces": [
17
+ {
18
+ "name": "renderSecuritySurface",
19
+ "kind": "factory",
20
+ "description": "renderSecuritySurface({ appliedCapabilities, appliedElicitations }) -> { mount(root), unmount() }. Reads security-surface-shape and hosted-identity-url from appliedElicitations."
21
+ }
22
+ ],
23
+ "dependencies": [
24
+ {
25
+ "name": "Capability discovery",
26
+ "kind": "tac",
27
+ "tacId": "TAC-2602-application-account-settings-capability-discovery",
28
+ "description": "The bridge reads the applied capability set from the sidecar the discovery helper writes."
29
+ }
30
+ ],
31
+ "tradeoffs": "A hosted-embed carries the sandbox attribute at a conservative default (allow-scripts allow-forms allow-same-origin); a hosted-UI provider that requires additional sandbox tokens is a v1.1.0 minor bump (extending the elicits with a sandbox-tokens field). ADR-2602 records the choice.",
32
+ "notes": "Known mechanism-reach gap: the bridge cannot itself prove the hosted UI actually loads at the elicited URL; the pack asserts the DOM shape and the operator asserts the URL is reachable.",
33
+ "createdAt": "2026-09-06T20:55:46Z",
34
+ "updatedAt": "2026-09-06T20:55:46Z"
35
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "tacId": "TAC-2604-application-account-settings-session-store",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Session store contract",
8
+ "purpose": "The sessions surface bridge between the applied blueprints session-inventory source and the terminate-write flow.",
9
+ "responsibilities": [
10
+ "Read the active-session inventory from the applied provider (an auth blueprint declaring sessionInventory, or observability-logging 1.2.0+ as the logging-projection provider) (AC-25105-1, AC-25106-1).",
11
+ "Render one row per session enumerated by data-session-id with device and last-active columns and a terminate action (AC-25105-1).",
12
+ "Open an ARIA APG dialog-modal on terminate with focus-trap, aria-labelledby to the heading and focus-return to the neighbouring row on close (AC-25105-2).",
13
+ "Announce the terminate-success via <div role=\"status\" aria-live=\"polite\" data-role=\"session-terminated-announce\">Session ended</div> (AC-25105-2)."
14
+ ],
15
+ "internalStructure": "One sessions-surface module with a read-inventory helper and a terminate-write helper. The read-inventory helper dispatches to the applied providers session-inventory API; the terminate-write helper dispatches to the same providers terminate API. The framework is not prescribed.",
16
+ "interfaces": [
17
+ {
18
+ "name": "renderSessionsSurface",
19
+ "kind": "factory",
20
+ "description": "renderSessionsSurface({ inventoryAdapter, terminateAdapter }) -> { mount(root), unmount() }. The project supplies the two adapters against the applied provider."
21
+ },
22
+ {
23
+ "name": "sessionRecord",
24
+ "kind": "shape",
25
+ "description": "{ sessionId, deviceLabel, lastActive (ISO-8601), currentSession (boolean) }. The current session cannot be terminated by itself (the operator signs out from the shell instead); the pack asserts the surface renders every session, the terminate control is present on every non-current row, and the current row (data-current-session=\"true\") does not carry the terminate action."
26
+ }
27
+ ],
28
+ "dependencies": [
29
+ {
30
+ "name": "Capability discovery",
31
+ "kind": "tac",
32
+ "tacId": "TAC-2602-application-account-settings-capability-discovery",
33
+ "description": "The sessions surface reads the applied capability set to gate on sessionInventory."
34
+ }
35
+ ],
36
+ "tradeoffs": "Re-authenticate before terminate is elicited (reauth-window ADR-2604) with a default of true. A project that ships a short-lived session token can set reauth-window=never; ADR-2604 records the choice and its risk.",
37
+ "notes": "Known mechanism-reach gap: the read-inventory adapter contract cannot prove the applied provider actually returns a device label the operator will recognise (User-Agent parsing varies); the pack asserts the DOM shape.",
38
+ "createdAt": "2026-09-06T20:55:46Z",
39
+ "updatedAt": "2026-09-06T20:55:46Z"
40
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "usId": "application-account-settings-US-25101",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Settings shell renders only applied surfaces and the profile tab is always active",
8
+ "asA": "authenticated principal reaching my account page",
9
+ "iWant": "a settings shell whose tabs mirror the union of applied capabilities and whose profile tab is always active",
10
+ "soThat": "I can find the surfaces my project has actually shipped without dead links, and I never see a tab whose feature is not wired up",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25101-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given an authenticated principal AND an applied auth blueprint declaring principalDirectory, GET /account renders the shell as an ARIA APG tabs region [role=\"tablist\"] with one [role=\"tab\"] per applied capability plus the always-on profile tab; a tab whose capability is not in the applied set does NOT render (no disabled shell). Probed by pack check AC-25101-1."
17
+ },
18
+ {
19
+ "id": "AC-25101-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "The shell landmark is <nav data-role=\"account-settings-nav\" aria-label=\"Account settings\"> with a single accessible name; heading order follows h1 (page) then h2 (active tab) per WCAG 2.4.6."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2601-application-account-settings-shell",
27
+ "TAC-2602-application-account-settings-capability-discovery"
28
+ ],
29
+ "tags": [
30
+ "blueprint:application-account-settings"
31
+ ],
32
+ "createdAt": "2026-09-06T20:55:46Z",
33
+ "updatedAt": "2026-09-06T20:55:46Z"
34
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25102",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-002",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Profile surface renders form with WCAG 1.3.5 autocomplete tokens on every identifier",
8
+ "asA": "authenticated principal editing my profile",
9
+ "iWant": "name, email, birthday and country inputs whose autocomplete tokens follow WCAG 1.3.5 exactly, and save success and failure announcements that keyboard-only and screen-reader users can rely on",
10
+ "soThat": "my browser autofill fires correctly and my success and failure feedback is announced",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25102-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "GET /account/profile renders a <form data-surface=\"profile\"> with inputs carrying autocomplete tokens \"name\" on the full-name field, \"email\" on the email field, \"bday\" on the birthday field and \"country\" on the country field; save-success renders <div role=\"status\" aria-live=\"polite\">Profile saved</div>; save-failure per field carries aria-invalid=\"true\" and aria-describedby pointing to a rendered error message. Probed by pack check AC-25102-1."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2601-application-account-settings-shell"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25103",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-003",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Security surface self-service branch renders when credentialSelfService applied",
8
+ "asA": "authenticated principal managing my credentials in-place",
9
+ "iWant": "a security surface rendering a self-service password-change and MFA-management branch when the applied auth blueprint declares credentialSelfService",
10
+ "soThat": "I can change my password and manage second factors without leaving the product",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25103-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "When credentialSelfService is in the applied capability set, GET /account/security renders <div data-surface=\"security\" data-branch=\"self-service\"> containing a [data-role=\"change-password\"] form and a [data-role=\"mfa-management\"] region. Absent from render when credentialSelfService is not applied. Probed by pack check AC-25105-1 (unified security check)."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2603-application-account-settings-hosted-ui-bridge"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25104",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-003",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Security surface hosted-UI branch renders when hostedIdentityUi applied",
8
+ "asA": "authenticated principal reaching security surfaces on a hosted identity provider",
9
+ "iWant": "a link-out or embed branch that hands me to the hosted account page cleanly",
10
+ "soThat": "the shipped surface takes me to the provider that owns credential storage",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25104-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "When hostedIdentityUi is in the applied capability set AND the operator elicited security-surface-shape=hosted-link-out, GET /account/security renders <a data-role=\"hosted-link-out\" href=\"{hosted-identity-url}\" rel=\"noopener\"> with an accessible label carrying the destination provider name; when security-surface-shape=hosted-embed, renders <iframe data-role=\"hosted-embed\" title=\"Account security\" src=\"{hosted-identity-url}\" sandbox=\"allow-scripts allow-forms allow-same-origin\">. Probed by pack check AC-25105-1."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2603-application-account-settings-hosted-ui-bridge"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "usId": "application-account-settings-US-25105",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-004",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Sessions surface lists active sessions and terminates via dialog-modal when sessionInventory applied",
8
+ "asA": "authenticated principal reviewing my active sessions",
9
+ "iWant": "a listing of every active session by device and last-active timestamp with a terminate control that confirms via a modal",
10
+ "soThat": "I can sign out a device I no longer control without leaving the surface",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25105-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "When sessionInventory is in the applied capability set, GET /account/sessions renders <div data-surface=\"sessions\"> containing a table whose rows are enumerated by data-session-id, each row carrying [data-column=\"device\"], [data-column=\"lastActive\"] and a [data-action=\"terminate\"] control. Absent when sessionInventory is not applied. Probed by pack check AC-25106-1."
17
+ },
18
+ {
19
+ "id": "AC-25105-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "Clicking [data-action=\"terminate\"] opens <div role=\"dialog\" aria-modal=\"true\" data-role=\"terminate-confirm\" aria-labelledby=\"terminate-confirm-heading\"> with the row focus-trapped inside the dialog; on confirm the row is removed and <div role=\"status\" aria-live=\"polite\" data-role=\"session-terminated-announce\">Session ended</div> is announced; focus returns to the neighbouring row on close."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2604-application-account-settings-session-store"
27
+ ],
28
+ "tags": [
29
+ "blueprint:application-account-settings"
30
+ ],
31
+ "createdAt": "2026-09-06T20:55:46Z",
32
+ "updatedAt": "2026-09-06T20:55:46Z"
33
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25106",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-004",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Sessions surface hoists session inventory from an applied logging companion",
8
+ "asA": "authenticated principal on a project where the logger is the session store",
9
+ "iWant": "the sessions surface to read the applied logging companion inventory when sessionInventory arrives from observability-logging rather than from an auth blueprint",
10
+ "soThat": "the composition is the same regardless of which applied blueprint declared sessionInventory",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25106-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "The sessions surface reads sessionInventory from the union of applied capabilities across auth AND logging providers; the render contract of AC-25105-1 is identical whether the capability was supplied by an auth blueprint (security-auth-clerk 1.3.0, security-auth-keycloak 1.2.0, security-auth-oauth2 1.2.0) or by observability-logging 1.2.0."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2604-application-account-settings-session-store"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25107",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-005",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Notification-preferences surface renders when application-notifications-in-app applied",
8
+ "asA": "authenticated principal managing notification preferences",
9
+ "iWant": "a preferences surface with per-category silence and per-channel opt-in controls only when the notifications blueprint is applied",
10
+ "soThat": "the shipped surface never lies about what preferences my product actually supports",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25107-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "When application-notifications-in-app is in the applied-blueprint set, GET /account/notifications renders <div data-surface=\"notifications\"> with [data-role=\"category-silence\"] entries per category and [data-role=\"channel-opt-in\"] entries per channel; save-success and save-failure announcements follow the profile surface contract. Absent when notifications-in-app is not applied. Probed by pack check AC-25107-1."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2601-application-account-settings-shell"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25108",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-006",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Theme surface renders light/dark/system radiogroup when application-spa applied",
8
+ "asA": "authenticated principal on an SPA project",
9
+ "iWant": "a theme surface with a light, dark and system option persisted per the theme-persistence elicit",
10
+ "soThat": "my theme choice sticks the way the project decided",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25108-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "When application-spa is in the applied-blueprint set, GET /account/theme renders <div data-surface=\"theme\" role=\"radiogroup\" aria-label=\"Theme\"> containing three <input type=\"radio\" name=\"theme\" value=\"light|dark|system\"> options; selecting an option flips the data-theme attribute on the html element and persists per the theme-persistence elicit (spa-local-storage default, server-scoped, or none). Probed by pack check AC-25108-1."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2601-application-account-settings-shell"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "usId": "application-account-settings-US-25109",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Bare-SPA apply-time refusal names the two remedies and honours --allow-no-auth-yet",
8
+ "asA": "operator applying the account-settings blueprint on a bare SPA",
9
+ "iWant": "a refusal that names the two remedies (apply an auth blueprint, or override for a scaffolding pass) and an override that records a note on the sidecar",
10
+ "soThat": "the account surfaces never activate silently on a project with no identity",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25109-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "rcf define blueprint add ./blueprints/application-account-settings on a project with no applied blueprint declaring principalDirectory exits 3 and prints the [application-account-settings-bare-spa] refusal message quoting the required capability, the applied-blueprint list and the two suggested next steps."
17
+ },
18
+ {
19
+ "id": "AC-25109-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "Passing --allow-no-auth-yet applies the blueprint and writes rcf/blueprints/application-account-settings.applied.json with allowNoAuthYet:true, empty appliedCapabilities and a scaffolding-pass note; rcf define validate flags the sidecar note on read-back."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2602-application-account-settings-capability-discovery"
27
+ ],
28
+ "tags": [
29
+ "blueprint:application-account-settings"
30
+ ],
31
+ "createdAt": "2026-09-06T20:55:46Z",
32
+ "updatedAt": "2026-09-06T20:55:46Z"
33
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-account-settings-US-25110",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-account-settings-REQ-003",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Q3 refusal at apply when no security capability declared and security-surface-shape elicited",
8
+ "asA": "operator applying on a project that declares principalDirectory but neither credentialSelfService nor hostedIdentityUi",
9
+ "iWant": "a Q3-per-spec refusal at apply naming the two remedies when the security-surface-shape elicit is answered",
10
+ "soThat": "no auth-managed-elsewhere placeholder ships silently",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-25110-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "When no applied blueprint declares credentialSelfService OR hostedIdentityUi and the operator answers --answer security-surface-shape=self-service (or =hosted-link-out or =hosted-embed), apply exits 3 with the two-remedy message: (a) apply an auth blueprint that declares one of the two security capabilities, or (b) drop the security tab from scope by not answering security-surface-shape."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2603-application-account-settings-hosted-ui-bridge"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-account-settings"
24
+ ],
25
+ "createdAt": "2026-09-06T20:55:46Z",
26
+ "updatedAt": "2026-09-06T20:55:46Z"
27
+ }
@@ -0,0 +1,48 @@
1
+ # application-account-settings: coordination vocabulary
2
+
3
+ ## Global topics
4
+
5
+ The blueprint claims no new global topics at v1.0.0. Account-settings is a consumer of the identity capability set the applied auth blueprints (and the observability-logging companion) declare through `capabilities[]`; every ADR (capability-vocabulary extension, security-surface-shape, theme-persistence, reauth-window) is non-global.
6
+
7
+ ## Deliberately unclaimed topics
8
+
9
+ - `themePersistence` (the shape of theme persistence). Reserved for the applied `application-spa` blueprint's own ADR set; the account-settings blueprint offers the operator surface for choosing the theme and hands the persistence to the SPA blueprint via the elicited `theme-persistence` answer.
10
+ - `sessionInventory` (the shape of a session-inventory record). Reserved for the applied provider's ADR set (an auth blueprint, or observability-logging as the logging-projection provider). The account-settings blueprint reads the inventory through the applied provider's interface.
11
+ - `credentialSelfService` (the shape of a credential surface). Reserved for the applied auth blueprint's ADR set for the same reason.
12
+ - `hostedIdentityUi` (the shape of a hosted identity portal). Reserved for the applied auth blueprint's ADR set for the same reason.
13
+
14
+ ## Shelf id band and suffix block
15
+
16
+ | Blueprint | US band | ADR/TAC suffix block | Status | Global topics |
17
+ |---|---|---|---|---|
18
+ | application-datatable | 17101-17899 | 18xx | shipped v1.0.0 | none |
19
+ | application-charts | 18101-18899 | 19xx | shipped v1.0.0 | none |
20
+ | application-dashboard | 19101-19899 | 20xx | shipped v1.0.0 | none |
21
+ | application-notifications-in-app | 20101-20899 | 21xx | shipped v1.0.0 | none |
22
+ | application-admin-console | 21101-21899 | 22xx | shipped v1.0.0 | none |
23
+ | application-empty-error-states | 22101-22899 | 23xx | shipped v1.0.0 | none |
24
+ | application-file-upload | 23101-23899 | 24xx | shipped v1.0.0 | none |
25
+ | application-forms-wizard | 24101-24899 | 25xx | shipped v1.0.0 | none |
26
+ | application-account-settings | 25101-25899 | 26xx | shipped v1.0.0 | none |
27
+ | application-onboarding-tour | 26101-26899 | 27xx | shipped v1.0.0 | none |
28
+ | persistence-data-postgres | 27101-27899 | 28xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
29
+ | object-storage-s3 | 28101-28899 | 29xx | shipped v1.0.0 | `objectStorageContract` |
30
+
31
+ The shelf-wide band registry lives in `packages/rcf-lite/docs/blueprint-authoring.md` section 5.
32
+
33
+ ## Cross-references
34
+
35
+ - `application-empty-error-states` (T-1, shipped v1.0.0): the shell composes on the `forbidden` and `empty-list` states rather than inventing bespoke access-denied UI. Every project applying `application-account-settings` should also apply `application-empty-error-states`.
36
+ - `application-admin-console` (T-5, shipped v1.0.0): shares the capability-declaration mechanism (`capabilities[]` on identity blueprints) and the apply-time discovery, refusal and custom-auth elicitation. The two blueprints are separate consumers (the account-settings surface is per-principal; the admin-console surface is per-operator-with-admin-scope) and never render the same surface.
37
+
38
+ ## Probe pack
39
+
40
+ `probe-packs/application-account-settings.pack.mjs` ships five capability-gated checks anchored to blueprint AC ids:
41
+
42
+ - `AC-25101-1` shell tabs mirror applied caps (always fires; guard on the leak branch)
43
+ - `AC-25102-1` profile autocomplete tokens (always fires)
44
+ - `AC-25105-1` security surface branch matches applied + elicit (fires when `credentialSelfService` or `hostedIdentityUi` is applied)
45
+ - `AC-25106-1` sessions rows and dialog-modal (fires when `sessionInventory` is applied)
46
+ - `AC-25108-1` theme radiogroup and persistence (fires when the theme-persistence elicit is answered, mirroring the `application-spa` applied gate)
47
+
48
+ The pack applies to any FBS binding `TAC-2601-application-account-settings-shell` or whose navModel routes name an `/account`, `/settings` or `/profile` path. See `packages/rcf-lite/docs/blueprint-authoring.md` section 8c for the pack authoring rules.
@@ -0,0 +1,30 @@
1
+ # application-account-settings: operator guide
2
+
3
+ ## When to reach for it
4
+
5
+ Your project applies at least one shelf `security-auth-*` blueprint (or a custom identity source declaring `principalDirectory` via the elicitation phase). You need an account-settings surface that lets each authenticated principal edit their profile, manage credentials, review sessions, adjust notification preferences and pick a theme. You want the surface to configure itself from the applied capability set rather than demand configuration.
6
+
7
+ ## When NOT to reach for it
8
+
9
+ You are shipping a fully-featured, opinionated account product (a bespoke SaaS account console with 15 tabs, tightly-coupled billing, invoice history and organisation settings). Adopt this blueprint only when a vendor-neutral shell composed from the applied identity blueprints suits your project better than a fixed opinionated console.
10
+
11
+ You want an anonymous product (no principal, no profile). The blueprint refuses at apply on a bare SPA; `--allow-no-auth-yet` accepts the refusal for a scaffolding pass but the surfaces will not activate until an identity capability is applied.
12
+
13
+ ## What stays your call
14
+
15
+ - Which shelf auth blueprint you apply first (or whether you supply custom auth via the four `custom-auth-provides-*` elicits).
16
+ - The `security-surface-shape` (self-service, hosted-link-out or hosted-embed). No recommended default: the shape leaks the vendor's identity architecture.
17
+ - The `hosted-identity-url` when the security surface is a hosted-link-out or hosted-embed.
18
+ - The `theme-persistence` strategy (spa-local-storage default, server-scoped, none).
19
+ - The `reauth-window` (never, 5, 15 or 60 minutes) applied to high-value changes.
20
+
21
+ ## Mechanism-reach gaps
22
+
23
+ The blueprint's 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; the shipped v1.0.0 pack anchors the five load-bearing surface checks. Combine with the round-3 T-1 datatable pack to reach the sessions and notification-preferences shells' state-region contract.
24
+
25
+ ## Promotion signals
26
+
27
+ - The security-surface-shape choice drifts across two or more projects on the same auth vendor: candidate for a per-vendor default on the auth blueprint's own elicit set (a Clerk 1.4.0 with a `hosted-link-out` recommended default, say).
28
+ - A dedicated `application-tenancy-orgs` blueprint ships: candidate for the account-settings shell to add an organisation-membership surface in a v1.1.0 minor bump.
29
+ - A dedicated audit-history surface is needed at the account scope: candidate for a v1.1.0 minor bump reusing the `auditLog` capability with no new vocabulary.
30
+ - The Q3 refusal fires often in support tickets: candidate for a shell-side "auth managed elsewhere" placeholder as an opt-in via a new elicit `security-surface-suppression=explicit-none`.