rcf-lite 0.20.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 (532) hide show
  1. package/CHANGELOG.md +39 -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/CHANGELOG.md +11 -0
  33. package/blueprints/application-admin-console/README.md +98 -0
  34. package/blueprints/application-admin-console/blueprint.json +226 -0
  35. package/blueprints/application-admin-console/contributions/adrs/adr-2201-application-admin-console-capability-vocabulary.json +25 -0
  36. package/blueprints/application-admin-console/contributions/adrs/adr-2202-application-admin-console-baseline-roles.json +25 -0
  37. package/blueprints/application-admin-console/contributions/adrs/adr-2203-application-admin-console-invite-transport.json +20 -0
  38. package/blueprints/application-admin-console/contributions/adrs/adr-2204-application-admin-console-audit-retention.json +20 -0
  39. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-001.json +18 -0
  40. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-002.json +18 -0
  41. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-003.json +18 -0
  42. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-004.json +18 -0
  43. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-005.json +18 -0
  44. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-006.json +18 -0
  45. package/blueprints/application-admin-console/contributions/tacs/tac-2201-application-admin-console-shell.json +40 -0
  46. package/blueprints/application-admin-console/contributions/tacs/tac-2202-application-admin-console-capability-discovery.json +44 -0
  47. package/blueprints/application-admin-console/contributions/tacs/tac-2203-application-admin-console-permission-matrix.json +34 -0
  48. package/blueprints/application-admin-console/contributions/tacs/tac-2204-application-admin-console-audit-view.json +40 -0
  49. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21101.json +34 -0
  50. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21102.json +34 -0
  51. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21103.json +34 -0
  52. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21104.json +28 -0
  53. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21105.json +34 -0
  54. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21106.json +27 -0
  55. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21107.json +27 -0
  56. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21108.json +27 -0
  57. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21109.json +33 -0
  58. package/blueprints/application-admin-console/docs/topics.md +42 -0
  59. package/blueprints/application-admin-console/guide/application-admin-console.md +29 -0
  60. package/blueprints/application-admin-console/probe-packs/application-admin-console.pack.mjs +182 -0
  61. package/blueprints/application-api-rest/docs/topics.md +13 -1
  62. package/blueprints/application-charts/CHANGELOG.md +12 -0
  63. package/blueprints/application-charts/README.md +73 -0
  64. package/blueprints/application-charts/blueprint.json +26 -0
  65. package/blueprints/application-charts/contributions/adrs/adr-1901-application-charts-engine-choice.json +25 -0
  66. package/blueprints/application-charts/contributions/adrs/adr-1902-application-charts-accessible-palette.json +25 -0
  67. package/blueprints/application-charts/contributions/adrs/adr-1903-application-charts-motion.json +25 -0
  68. package/blueprints/application-charts/contributions/requirements/application-charts-req-001.json +15 -0
  69. package/blueprints/application-charts/contributions/requirements/application-charts-req-002.json +15 -0
  70. package/blueprints/application-charts/contributions/requirements/application-charts-req-003.json +15 -0
  71. package/blueprints/application-charts/contributions/requirements/application-charts-req-004.json +15 -0
  72. package/blueprints/application-charts/contributions/tacs/tac-1901-application-charts-render-shell.json +42 -0
  73. package/blueprints/application-charts/contributions/tacs/tac-1902-application-charts-keyboard-traversal.json +40 -0
  74. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18101.json +35 -0
  75. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18102.json +35 -0
  76. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18103.json +35 -0
  77. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18104.json +35 -0
  78. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18105.json +35 -0
  79. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18106.json +35 -0
  80. package/blueprints/application-charts/docs/topics.md +44 -0
  81. package/blueprints/application-charts/guide/application-charts.md +44 -0
  82. package/blueprints/application-charts/probe-packs/application-charts.pack.mjs +191 -0
  83. package/blueprints/application-dashboard/CHANGELOG.md +10 -0
  84. package/blueprints/application-dashboard/README.md +102 -0
  85. package/blueprints/application-dashboard/assets/guidance/dashboard-design.md +124 -0
  86. package/blueprints/application-dashboard/blueprint.json +29 -0
  87. package/blueprints/application-dashboard/contributions/adrs/adr-2001-application-dashboard-primary-kpi-enum.json +25 -0
  88. package/blueprints/application-dashboard/contributions/adrs/adr-2002-application-dashboard-timeframe-presets.json +25 -0
  89. package/blueprints/application-dashboard/contributions/adrs/adr-2003-application-dashboard-export-formats.json +25 -0
  90. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-001.json +15 -0
  91. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-002.json +15 -0
  92. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-003.json +15 -0
  93. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-004.json +15 -0
  94. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-005.json +15 -0
  95. package/blueprints/application-dashboard/contributions/tacs/tac-2001-application-dashboard-tile-grid.json +47 -0
  96. package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +41 -0
  97. package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +35 -0
  98. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19101.json +35 -0
  99. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19102.json +35 -0
  100. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19103.json +35 -0
  101. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19104.json +35 -0
  102. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19105.json +35 -0
  103. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +35 -0
  104. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19107.json +35 -0
  105. package/blueprints/application-dashboard/docs/topics.md +50 -0
  106. package/blueprints/application-dashboard/guide/application-dashboard.md +48 -0
  107. package/blueprints/application-dashboard/probe-packs/application-dashboard.pack.mjs +231 -0
  108. package/blueprints/application-datatable/CHANGELOG.md +8 -0
  109. package/blueprints/application-datatable/README.md +43 -0
  110. package/blueprints/application-datatable/blueprint.json +33 -0
  111. package/blueprints/application-datatable/contributions/adrs/adr-1801-application-datatable-pattern-choice.json +25 -0
  112. package/blueprints/application-datatable/contributions/adrs/adr-1802-application-datatable-url-state.json +20 -0
  113. package/blueprints/application-datatable/contributions/adrs/adr-1803-application-datatable-page-size.json +20 -0
  114. package/blueprints/application-datatable/contributions/adrs/adr-1804-application-datatable-selection-persistence.json +20 -0
  115. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-001.json +15 -0
  116. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-002.json +15 -0
  117. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-003.json +15 -0
  118. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-004.json +15 -0
  119. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-005.json +15 -0
  120. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-006.json +15 -0
  121. package/blueprints/application-datatable/contributions/tacs/tac-1801-application-datatable-shell.json +50 -0
  122. package/blueprints/application-datatable/contributions/tacs/tac-1802-application-datatable-query-adapter.json +39 -0
  123. package/blueprints/application-datatable/contributions/tacs/tac-1803-application-datatable-selection-model.json +28 -0
  124. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17101.json +44 -0
  125. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17102.json +44 -0
  126. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17103.json +44 -0
  127. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17104.json +44 -0
  128. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17105.json +44 -0
  129. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17106.json +44 -0
  130. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17107.json +44 -0
  131. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17108.json +44 -0
  132. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17109.json +44 -0
  133. package/blueprints/application-datatable/docs/topics.md +42 -0
  134. package/blueprints/application-datatable/guide/application-datatable.md +38 -0
  135. package/blueprints/application-datatable/probe-packs/application-datatable.pack.mjs +240 -0
  136. package/blueprints/application-empty-error-states/CHANGELOG.md +9 -0
  137. package/blueprints/application-empty-error-states/README.md +88 -0
  138. package/blueprints/application-empty-error-states/blueprint.json +119 -0
  139. package/blueprints/application-empty-error-states/contributions/adrs/adr-2301-application-empty-error-states-status-contract.json +25 -0
  140. package/blueprints/application-empty-error-states/contributions/adrs/adr-2302-application-empty-error-states-stack-trace-visibility.json +25 -0
  141. package/blueprints/application-empty-error-states/contributions/adrs/adr-2303-application-empty-error-states-offline-strategy.json +25 -0
  142. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-001.json +18 -0
  143. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-002.json +18 -0
  144. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-003.json +18 -0
  145. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-004.json +18 -0
  146. package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-005.json +18 -0
  147. package/blueprints/application-empty-error-states/contributions/tacs/tac-2301-application-empty-error-states-state-machine.json +46 -0
  148. package/blueprints/application-empty-error-states/contributions/tacs/tac-2302-application-empty-error-states-recovery-router.json +36 -0
  149. package/blueprints/application-empty-error-states/contributions/tacs/tac-2303-application-empty-error-states-offline-buffer.json +40 -0
  150. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22101.json +29 -0
  151. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22102.json +29 -0
  152. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22103.json +29 -0
  153. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22104.json +29 -0
  154. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22105.json +29 -0
  155. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22106.json +29 -0
  156. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22107.json +29 -0
  157. package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22108.json +29 -0
  158. package/blueprints/application-empty-error-states/docs/topics.md +53 -0
  159. package/blueprints/application-empty-error-states/guide/application-empty-error-states.md +50 -0
  160. package/blueprints/application-empty-error-states/probe-packs/application-empty-error-states.pack.mjs +284 -0
  161. package/blueprints/application-error-handling/docs/topics.md +12 -0
  162. package/blueprints/application-file-upload/CHANGELOG.md +9 -0
  163. package/blueprints/application-file-upload/README.md +85 -0
  164. package/blueprints/application-file-upload/blueprint.json +114 -0
  165. package/blueprints/application-file-upload/contributions/adrs/adr-2401-application-file-upload-transport.json +25 -0
  166. package/blueprints/application-file-upload/contributions/adrs/adr-2402-application-file-upload-accepted-set.json +25 -0
  167. package/blueprints/application-file-upload/contributions/adrs/adr-2403-application-file-upload-virus-scan.json +25 -0
  168. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +18 -0
  169. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +18 -0
  170. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +18 -0
  171. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +18 -0
  172. package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +18 -0
  173. package/blueprints/application-file-upload/contributions/tacs/tac-2401-application-file-upload-input.json +46 -0
  174. package/blueprints/application-file-upload/contributions/tacs/tac-2402-application-file-upload-transport.json +47 -0
  175. package/blueprints/application-file-upload/contributions/tacs/tac-2403-application-file-upload-progress-announcer.json +46 -0
  176. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23101.json +28 -0
  177. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23102.json +28 -0
  178. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23103.json +29 -0
  179. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23104.json +28 -0
  180. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23105.json +29 -0
  181. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23106.json +28 -0
  182. package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23107.json +28 -0
  183. package/blueprints/application-file-upload/docs/topics.md +58 -0
  184. package/blueprints/application-file-upload/guide/application-file-upload.md +48 -0
  185. package/blueprints/application-file-upload/probe-packs/application-file-upload.pack.mjs +238 -0
  186. package/blueprints/application-forms-wizard/CHANGELOG.md +9 -0
  187. package/blueprints/application-forms-wizard/README.md +102 -0
  188. package/blueprints/application-forms-wizard/blueprint.json +120 -0
  189. package/blueprints/application-forms-wizard/contributions/adrs/adr-2501-application-forms-wizard-navigation.json +25 -0
  190. package/blueprints/application-forms-wizard/contributions/adrs/adr-2502-application-forms-wizard-save-and-return.json +25 -0
  191. package/blueprints/application-forms-wizard/contributions/adrs/adr-2503-application-forms-wizard-step-indicator.json +25 -0
  192. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +18 -0
  193. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +18 -0
  194. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +18 -0
  195. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +18 -0
  196. package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +18 -0
  197. package/blueprints/application-forms-wizard/contributions/tacs/tac-2501-application-forms-wizard-task-list.json +46 -0
  198. package/blueprints/application-forms-wizard/contributions/tacs/tac-2502-application-forms-wizard-error-summary.json +40 -0
  199. package/blueprints/application-forms-wizard/contributions/tacs/tac-2503-application-forms-wizard-draft-store.json +40 -0
  200. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24101.json +28 -0
  201. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24102.json +29 -0
  202. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24103.json +28 -0
  203. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24104.json +29 -0
  204. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24105.json +28 -0
  205. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24106.json +28 -0
  206. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24107.json +28 -0
  207. package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24108.json +29 -0
  208. package/blueprints/application-forms-wizard/docs/topics.md +49 -0
  209. package/blueprints/application-forms-wizard/guide/application-forms-wizard.md +48 -0
  210. package/blueprints/application-forms-wizard/probe-packs/application-forms-wizard.pack.mjs +233 -0
  211. package/blueprints/application-notifications-in-app/CHANGELOG.md +9 -0
  212. package/blueprints/application-notifications-in-app/README.md +80 -0
  213. package/blueprints/application-notifications-in-app/blueprint.json +30 -0
  214. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2101-application-notifications-in-app-live-region-role-mapping.json +25 -0
  215. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2102-application-notifications-in-app-toast-timeout-floor.json +25 -0
  216. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2103-application-notifications-in-app-retention-window.json +25 -0
  217. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-001.json +15 -0
  218. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-002.json +15 -0
  219. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-003.json +15 -0
  220. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-004.json +15 -0
  221. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-005.json +15 -0
  222. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +46 -0
  223. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +52 -0
  224. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2103-application-notifications-in-app-preferences.json +40 -0
  225. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +35 -0
  226. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +35 -0
  227. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +35 -0
  228. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20104.json +35 -0
  229. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +35 -0
  230. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20106.json +26 -0
  231. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20107.json +26 -0
  232. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20108.json +26 -0
  233. package/blueprints/application-notifications-in-app/docs/topics.md +46 -0
  234. package/blueprints/application-notifications-in-app/guide/application-notifications-in-app.md +47 -0
  235. package/blueprints/application-notifications-in-app/probe-packs/application-notifications-in-app.pack.mjs +328 -0
  236. package/blueprints/application-onboarding-tour/CHANGELOG.md +12 -0
  237. package/blueprints/application-onboarding-tour/README.md +77 -0
  238. package/blueprints/application-onboarding-tour/blueprint.json +164 -0
  239. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2701-application-onboarding-tour-dismissal-policy.json +20 -0
  240. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2702-application-onboarding-tour-completion-store-shape.json +20 -0
  241. package/blueprints/application-onboarding-tour/contributions/adrs/adr-2703-application-onboarding-tour-checklist-anchor.json +20 -0
  242. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-001.json +18 -0
  243. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-002.json +18 -0
  244. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-003.json +18 -0
  245. package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-004.json +18 -0
  246. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2701-application-onboarding-tour-step-runner.json +41 -0
  247. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2702-application-onboarding-tour-checklist-slot.json +35 -0
  248. package/blueprints/application-onboarding-tour/contributions/tacs/tac-2703-application-onboarding-tour-completion-store.json +34 -0
  249. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26101.json +27 -0
  250. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26102.json +27 -0
  251. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26103.json +27 -0
  252. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26104.json +27 -0
  253. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26105.json +27 -0
  254. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26106.json +27 -0
  255. package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26107.json +27 -0
  256. package/blueprints/application-onboarding-tour/docs/topics.md +48 -0
  257. package/blueprints/application-onboarding-tour/guide/application-onboarding-tour.md +59 -0
  258. package/blueprints/application-onboarding-tour/probe-packs/application-onboarding-tour.pack.mjs +231 -0
  259. package/blueprints/application-spa/docs/topics.md +13 -1
  260. package/blueprints/delivery-ci-workflows/docs/topics.md +13 -1
  261. package/blueprints/deploy-cloudflare-workers/docs/topics.md +13 -1
  262. package/blueprints/email-smtp-resend/docs/topics.md +13 -1
  263. package/blueprints/object-storage-s3/CHANGELOG.md +13 -0
  264. package/blueprints/object-storage-s3/README.md +108 -0
  265. package/blueprints/object-storage-s3/blueprint.json +72 -0
  266. package/blueprints/object-storage-s3/contributions/adrs/adr-2901-object-storage-s3-adapter.json +30 -0
  267. package/blueprints/object-storage-s3/contributions/adrs/adr-2902-object-storage-s3-presigned-ttl-floor.json +25 -0
  268. package/blueprints/object-storage-s3/contributions/adrs/adr-2903-object-storage-s3-multipart-threshold.json +25 -0
  269. package/blueprints/object-storage-s3/contributions/adrs/adr-2904-object-storage-s3-contract.json +25 -0
  270. package/blueprints/object-storage-s3/contributions/probes/event-secrecy.mjs +103 -0
  271. package/blueprints/object-storage-s3/contributions/probes/facade-round-trip.mjs +43 -0
  272. package/blueprints/object-storage-s3/contributions/probes/multipart-upload.mjs +84 -0
  273. package/blueprints/object-storage-s3/contributions/probes/presigned-url.mjs +101 -0
  274. package/blueprints/object-storage-s3/contributions/probes/probe-utils.mjs +85 -0
  275. package/blueprints/object-storage-s3/contributions/probes/put-get-round-trip.mjs +84 -0
  276. package/blueprints/object-storage-s3/contributions/probes/r2-real-account-smoke.mjs +64 -0
  277. package/blueprints/object-storage-s3/contributions/probes/run-event-secrecy.mjs +4 -0
  278. package/blueprints/object-storage-s3/contributions/probes/run-facade-round-trip.mjs +10 -0
  279. package/blueprints/object-storage-s3/contributions/probes/run-multipart-upload.mjs +4 -0
  280. package/blueprints/object-storage-s3/contributions/probes/run-presigned-url.mjs +4 -0
  281. package/blueprints/object-storage-s3/contributions/probes/run-put-get-round-trip.mjs +7 -0
  282. package/blueprints/object-storage-s3/contributions/probes/run-r2-real-account-smoke.mjs +4 -0
  283. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-001.json +18 -0
  284. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-002.json +18 -0
  285. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-003.json +18 -0
  286. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-004.json +18 -0
  287. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-005.json +18 -0
  288. package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +18 -0
  289. package/blueprints/object-storage-s3/contributions/tacs/tac-2901-object-storage-s3-facade.json +57 -0
  290. package/blueprints/object-storage-s3/contributions/tacs/tac-2902-object-storage-s3-multipart-uploader.json +36 -0
  291. package/blueprints/object-storage-s3/contributions/tacs/tac-2903-object-storage-s3-event-sink.json +36 -0
  292. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28101.json +34 -0
  293. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28102.json +43 -0
  294. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28103.json +25 -0
  295. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28104.json +34 -0
  296. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28105.json +25 -0
  297. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28106.json +34 -0
  298. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28107.json +34 -0
  299. package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28108.json +34 -0
  300. package/blueprints/object-storage-s3/docs/topics.md +62 -0
  301. package/blueprints/object-storage-s3/guide/object-storage-s3.md +207 -0
  302. package/blueprints/observability-essentials/docs/topics.md +13 -1
  303. package/blueprints/observability-logging/CHANGELOG.md +9 -0
  304. package/blueprints/observability-logging/README.md +4 -1
  305. package/blueprints/observability-logging/blueprint.json +114 -21
  306. package/blueprints/observability-logging/docs/topics.md +12 -0
  307. package/blueprints/observability-probe-endpoints/docs/topics.md +13 -1
  308. package/blueprints/persistence-data-d1/docs/topics.md +13 -1
  309. package/blueprints/persistence-data-postgres/CHANGELOG.md +12 -0
  310. package/blueprints/persistence-data-postgres/README.md +101 -0
  311. package/blueprints/persistence-data-postgres/blueprint.json +80 -0
  312. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2801-persistence-data-postgres-driver.json +30 -0
  313. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2802-persistence-data-postgres-migration-shape.json +25 -0
  314. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2803-persistence-data-postgres-runner-mode.json +25 -0
  315. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2804-persistence-data-postgres-recovery.json +25 -0
  316. package/blueprints/persistence-data-postgres/contributions/adrs/adr-2805-persistence-data-postgres-connection-pool-posture.json +25 -0
  317. package/blueprints/persistence-data-postgres/contributions/probes/facade-round-trip.mjs +56 -0
  318. package/blueprints/persistence-data-postgres/contributions/probes/migration-apply.mjs +75 -0
  319. package/blueprints/persistence-data-postgres/contributions/probes/pool-posture-smoke.mjs +56 -0
  320. package/blueprints/persistence-data-postgres/contributions/probes/prepared-statement-scan.mjs +186 -0
  321. package/blueprints/persistence-data-postgres/contributions/probes/probe-utils.mjs +76 -0
  322. package/blueprints/persistence-data-postgres/contributions/probes/recovery-restore-round-trip.mjs +173 -0
  323. package/blueprints/persistence-data-postgres/contributions/probes/run-facade-round-trip.mjs +10 -0
  324. package/blueprints/persistence-data-postgres/contributions/probes/run-migration-apply.mjs +10 -0
  325. package/blueprints/persistence-data-postgres/contributions/probes/run-pool-posture-smoke.mjs +9 -0
  326. package/blueprints/persistence-data-postgres/contributions/probes/run-prepared-statement-scan.mjs +10 -0
  327. package/blueprints/persistence-data-postgres/contributions/probes/run-recovery-restore-round-trip.mjs +9 -0
  328. package/blueprints/persistence-data-postgres/contributions/probes/run-transaction-atomicity.mjs +10 -0
  329. package/blueprints/persistence-data-postgres/contributions/probes/transaction-atomicity.mjs +79 -0
  330. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-001.json +18 -0
  331. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-002.json +18 -0
  332. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +18 -0
  333. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-004.json +18 -0
  334. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-005.json +18 -0
  335. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-006.json +18 -0
  336. package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-007.json +18 -0
  337. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2801-persistence-data-postgres-facade.json +58 -0
  338. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2802-persistence-data-postgres-migration-runner.json +40 -0
  339. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2803-persistence-data-postgres-transaction-helper.json +35 -0
  340. package/blueprints/persistence-data-postgres/contributions/tacs/tac-2804-persistence-data-postgres-recovery-runner.json +40 -0
  341. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27101.json +34 -0
  342. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27102.json +25 -0
  343. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27103.json +25 -0
  344. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27104.json +25 -0
  345. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27105.json +25 -0
  346. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27106.json +25 -0
  347. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27107.json +25 -0
  348. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27108.json +25 -0
  349. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27109.json +25 -0
  350. package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27110.json +25 -0
  351. package/blueprints/persistence-data-postgres/docs/topics.md +64 -0
  352. package/blueprints/persistence-data-postgres/guide/persistence-data-postgres.md +172 -0
  353. package/blueprints/persistence-data-sqlite/docs/topics.md +13 -1
  354. package/blueprints/security-auth-clerk/CHANGELOG.md +9 -0
  355. package/blueprints/security-auth-clerk/README.md +3 -0
  356. package/blueprints/security-auth-clerk/blueprint.json +147 -29
  357. package/blueprints/security-auth-clerk/docs/topics.md +13 -1
  358. package/blueprints/security-auth-keycloak/CHANGELOG.md +9 -0
  359. package/blueprints/security-auth-keycloak/README.md +3 -0
  360. package/blueprints/security-auth-keycloak/blueprint.json +182 -36
  361. package/blueprints/security-auth-keycloak/docs/topics.md +13 -1
  362. package/blueprints/security-auth-magic-link/CHANGELOG.md +9 -0
  363. package/blueprints/security-auth-magic-link/README.md +3 -0
  364. package/blueprints/security-auth-magic-link/blueprint.json +159 -32
  365. package/blueprints/security-auth-magic-link/docs/topics.md +13 -1
  366. package/blueprints/security-auth-oauth2/CHANGELOG.md +9 -0
  367. package/blueprints/security-auth-oauth2/README.md +3 -0
  368. package/blueprints/security-auth-oauth2/blueprint.json +158 -31
  369. package/blueprints/security-auth-oauth2/docs/topics.md +13 -1
  370. package/blueprints/security-secrets-management/CHANGELOG.md +11 -0
  371. package/blueprints/security-secrets-management/blueprint.json +2 -1
  372. package/blueprints/security-secrets-management/docs/topics.md +13 -1
  373. package/fixtures/canary-manifest.json +9 -9
  374. package/package.json +2 -2
  375. package/rcf/code-nodes/cn-106.json +13 -0
  376. package/rcf/code-nodes/cn-107.json +14 -0
  377. package/rcf/code-nodes/cn-108.json +13 -0
  378. package/rcf/code-nodes/cn-109.json +12 -0
  379. package/rcf/code-nodes/cn-110.json +12 -0
  380. package/rcf/code-nodes/cn-111.json +14 -0
  381. package/rcf/code-nodes/cn-112.json +14 -0
  382. package/rcf/code-nodes/cn-113.json +12 -0
  383. package/rcf/code-nodes/cn-114.json +13 -0
  384. package/rcf/code-nodes/cn-115.json +13 -0
  385. package/rcf/code-nodes/cn-116.json +12 -0
  386. package/rcf/code-nodes/cn-117.json +13 -0
  387. package/rcf/code-nodes/cn-118.json +13 -0
  388. package/rcf/code-nodes/cn-119.json +13 -0
  389. package/rcf/code-nodes/cn-120.json +13 -0
  390. package/rcf/code-nodes/cn-121.json +12 -0
  391. package/rcf/code-nodes/cn-122.json +12 -0
  392. package/rcf/code-nodes/cn-123.json +13 -0
  393. package/rcf/code-nodes/cn-124.json +13 -0
  394. package/rcf/code-nodes/cn-125.json +13 -0
  395. package/rcf/code-nodes/cn-126.json +13 -0
  396. package/rcf/code-nodes/cn-127.json +12 -0
  397. package/rcf/code-nodes/cn-128.json +14 -0
  398. package/rcf/code-nodes/cn-129.json +14 -0
  399. package/rcf/code-nodes/cn-130.json +14 -0
  400. package/rcf/code-nodes/cn-131.json +15 -0
  401. package/rcf/code-nodes/cn-132.json +12 -0
  402. package/rcf/code-nodes/cn-133.json +13 -0
  403. package/rcf/code-nodes/cn-134.json +13 -0
  404. package/rcf/code-nodes/cn-135.json +12 -0
  405. package/rcf/code-nodes/cn-136.json +13 -0
  406. package/rcf/code-nodes/cn-137.json +13 -0
  407. package/rcf/code-nodes/cn-138.json +12 -0
  408. package/rcf/code-nodes/cn-139.json +12 -0
  409. package/rcf/code-nodes/cn-140.json +13 -0
  410. package/rcf/code-nodes/cn-141.json +13 -0
  411. package/rcf/code-nodes/cn-142.json +12 -0
  412. package/rcf/code-nodes/cn-143.json +13 -0
  413. package/rcf/code-nodes/cn-144.json +13 -0
  414. package/rcf/code-nodes/cn-145.json +12 -0
  415. package/rcf/code-nodes/cn-146.json +12 -0
  416. package/rcf/code-nodes/cn-147.json +13 -0
  417. package/rcf/code-nodes/cn-148.json +13 -0
  418. package/rcf/code-nodes/cn-149.json +12 -0
  419. package/rcf/code-nodes/cn-150.json +13 -0
  420. package/rcf/code-nodes/cn-151.json +13 -0
  421. package/rcf/code-nodes/cn-152.json +12 -0
  422. package/rcf/code-nodes/cn-153.json +12 -0
  423. package/rcf/code-nodes/cn-154.json +13 -0
  424. package/rcf/code-nodes/cn-155.json +14 -0
  425. package/rcf/code-nodes/cn-156.json +13 -0
  426. package/rcf/code-nodes/cn-157.json +13 -0
  427. package/rcf/code-nodes/cn-158.json +12 -0
  428. package/rcf/code-nodes/cn-159.json +13 -0
  429. package/rcf/code-nodes/cn-160.json +12 -0
  430. package/rcf/code-nodes/cn-161.json +12 -0
  431. package/rcf/code-nodes/cn-162.json +13 -0
  432. package/rcf/code-nodes/cn-163.json +12 -0
  433. package/rcf/code-nodes/cn-164.json +13 -0
  434. package/rcf/code-nodes/cn-165.json +12 -0
  435. package/rcf/code-nodes/cn-166.json +12 -0
  436. package/rcf/code-nodes/cn-167.json +12 -0
  437. package/rcf/code-nodes/cn-168.json +12 -0
  438. package/rcf/code-nodes/cn-169.json +12 -0
  439. package/rcf/code-nodes/cn-170.json +12 -0
  440. package/rcf/code-nodes/cn-171.json +12 -0
  441. package/rcf/code-nodes/cn-172.json +12 -0
  442. package/rcf/code-nodes/cn-173.json +12 -0
  443. package/rcf/code-nodes/cn-174.json +12 -0
  444. package/rcf/code-nodes/cn-175.json +13 -0
  445. package/rcf/code-nodes/cn-176.json +12 -0
  446. package/rcf/code-nodes/cn-177.json +12 -0
  447. package/rcf/code-nodes/cn-178.json +12 -0
  448. package/rcf/code-nodes/cn-179.json +12 -0
  449. package/rcf/code-nodes/cn-180.json +13 -0
  450. package/rcf/code-nodes/cn-181.json +12 -0
  451. package/rcf/code-nodes/cn-182.json +13 -0
  452. package/rcf/code-nodes/cn-183.json +12 -0
  453. package/rcf/code-nodes/cn-184.json +13 -0
  454. package/rcf/code-nodes/cn-185.json +12 -0
  455. package/rcf/code-nodes/cn-186.json +12 -0
  456. package/rcf/code-nodes/cn-200.json +14 -0
  457. package/rcf/code-nodes/cn-201.json +13 -0
  458. package/rcf/code-nodes/cn-202.json +14 -0
  459. package/rcf/code-nodes/cn-203.json +14 -0
  460. package/rcf/code-nodes/cn-204.json +13 -0
  461. package/rcf/code-nodes/cn-205.json +14 -0
  462. package/rcf/fbs/fbs-036.json +22 -0
  463. package/rcf/fbs/fbs-037.json +19 -0
  464. package/rcf/fbs/fbs-038.json +19 -0
  465. package/rcf/fbs/fbs-039.json +21 -0
  466. package/rcf/fbs/fbs-040.json +20 -0
  467. package/rcf/fbs/fbs-041.json +13 -0
  468. package/rcf/fbs/fbs-042.json +13 -0
  469. package/rcf/fbs/fbs-043.json +23 -0
  470. package/rcf/fbs/fbs-044.json +23 -0
  471. package/rcf/fbs/fbs-045.json +23 -0
  472. package/rcf/fbs/fbs-046.json +24 -0
  473. package/rcf/fbs/fbs-047.json +24 -0
  474. package/rcf/fbs/fbs-060.json +22 -0
  475. package/rcf/fbs/fbs-061.json +20 -0
  476. package/rcf/requirements/req-017.json +18 -0
  477. package/rcf/requirements/req-018.json +18 -0
  478. package/rcf/requirements/req-019.json +38 -0
  479. package/rcf/requirements/req-020.json +13 -0
  480. package/rcf/requirements/req-021.json +13 -0
  481. package/rcf/requirements/req-022.json +13 -0
  482. package/rcf/requirements/req-023.json +14 -0
  483. package/rcf/requirements/req-024.json +69 -0
  484. package/rcf/requirements/req-025.json +59 -0
  485. package/rcf/requirements/req-026.json +154 -0
  486. package/rcf/requirements/req-027.json +33 -0
  487. package/rcf/requirements/req-028.json +13 -0
  488. package/rcf/requirements/req-040.json +13 -0
  489. package/rcf/requirements/req-041.json +125 -0
  490. package/rcf/test-suites/ts-046.json +78 -0
  491. package/rcf/test-suites/ts-047.json +54 -0
  492. package/rcf/test-suites/ts-048.json +54 -0
  493. package/rcf/test-suites/ts-049.json +70 -0
  494. package/rcf/test-suites/ts-050.json +69 -0
  495. package/rcf/test-suites/ts-051.json +22 -0
  496. package/rcf/test-suites/ts-052.json +20 -0
  497. package/rcf/test-suites/ts-053.json +70 -0
  498. package/rcf/test-suites/ts-054.json +70 -0
  499. package/rcf/test-suites/ts-055.json +77 -0
  500. package/rcf/test-suites/ts-056.json +78 -0
  501. package/rcf/test-suites/ts-057.json +78 -0
  502. package/rcf/test-suites/ts-070.json +62 -0
  503. package/rcf/test-suites/ts-071.json +62 -0
  504. package/rcf/user-stories/us-1701.json +56 -0
  505. package/rcf/user-stories/us-1801.json +40 -0
  506. package/rcf/user-stories/us-1901.json +40 -0
  507. package/rcf/user-stories/us-2001.json +50 -0
  508. package/rcf/user-stories/us-2101.json +45 -0
  509. package/rcf/user-stories/us-2201.json +60 -0
  510. package/rcf/user-stories/us-2301.json +51 -0
  511. package/rcf/user-stories/us-2401.json +62 -0
  512. package/rcf/user-stories/us-2501.json +58 -0
  513. package/rcf/user-stories/us-2601.json +51 -0
  514. package/rcf/user-stories/us-2701.json +55 -0
  515. package/rcf/user-stories/us-2801.json +55 -0
  516. package/rcf/user-stories/us-4001.json +69 -0
  517. package/rcf/user-stories/us-4101.json +69 -0
  518. package/releases/releases.yaml +21 -1
  519. package/src/blueprint/apply.js +107 -1
  520. package/src/blueprint/capabilities.js +357 -0
  521. package/src/blueprint/loader.js +247 -0
  522. package/src/browser-verify/boot.js +180 -0
  523. package/src/browser-verify/index.js +13 -0
  524. package/src/browser-verify/manifest-writer.js +31 -6
  525. package/src/browser-verify/pack-browser.js +294 -0
  526. package/src/browser-verify/pack-loader.js +176 -0
  527. package/src/browser-verify/pack-runner.js +193 -0
  528. package/src/browser-verify/pack-schema.js +155 -0
  529. package/src/browser-verify/runner.js +24 -1
  530. package/src/cli/blueprint.js +99 -0
  531. package/src/cli/browser-verify.js +147 -7
  532. package/src/core/errors/index.js +7 -0
@@ -0,0 +1,33 @@
1
+ {
2
+ "usId": "application-admin-console-US-21109",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Console apply refuses on a bare SPA with the spec 5.5.1 message and honours --allow-no-auth-yet",
8
+ "asA": "operator applying the admin-console on a project with no auth blueprint yet",
9
+ "iWant": "the apply to refuse with exit 3 and a message naming security-auth-* explicitly, or to accept an --allow-no-auth-yet override that records a scaffolding-note on the sidecar",
10
+ "soThat": "a scaffolding pass can land the console files without hiding the fact that the surfaces will refuse at runtime until an auth blueprint is applied",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21109-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "rcf define blueprint add ./blueprints/application-admin-console on a project with no applied blueprint declaring principalDirectory (and without --allow-no-auth-yet) exits 3; the stderr message begins with \"application-admin-console requires at least one applied security-auth-*\", lists the currently-applied blueprints on the project, and prints the \"Suggested next steps\" block including the four shelf auth slugs. No contribution files are written; the sidecar is not created."
17
+ },
18
+ {
19
+ "id": "AC-21109-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "With --allow-no-auth-yet passed, the apply proceeds and writes rcf/blueprints/application-admin-console.applied.json with allowNoAuthYet:true and a notes string naming the \"no auth yet\" state; a later rcf define validate reads the sidecar and flags the ungated surfaces."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2202-application-admin-console-capability-discovery"
27
+ ],
28
+ "tags": [
29
+ "blueprint:application-admin-console"
30
+ ],
31
+ "createdAt": "2026-09-05T01:30:00Z",
32
+ "updatedAt": "2026-09-05T01:30:00Z"
33
+ }
@@ -0,0 +1,42 @@
1
+ # application-admin-console: coordination vocabulary
2
+
3
+ ## Global topics
4
+
5
+ The blueprint claims no new global topics at v1.0.0. The console is a consumer of the identity capability set the applied auth blueprints declare through `capabilities[]`; every ADR (capability vocabulary, baseline roles, invite transport, audit retention) is non-global.
6
+
7
+ ## Deliberately unclaimed topics
8
+
9
+ - `roleModel` (the shape of a role catalogue: id/label/permission tuples). Reserved for the applied auth blueprint's ADR set; the console reads the applied `roleModel` label vocabulary through the elicited `baseline-roles` answer and does not mint its own role-model global topic.
10
+ - `principalDirectory` (the shape of a principal record). Reserved for the applied auth blueprint's ADR set for the same reason.
11
+ - `tenancy` (the shape of an organisation abstraction). Reserved for a future `application-tenancy-orgs` blueprint (spec section 11).
12
+ - `auditLog` (the audit event stream shape). Reserved for the applied logging companion's ADR set, or a future dedicated audit-log blueprint.
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
+ ## Probe pack
34
+
35
+ `probe-packs/application-admin-console.pack.mjs` ships four capability-gated checks anchored to blueprint AC ids:
36
+
37
+ - `AC-21102-1` users directory (fires only when `principalDirectory` is applied)
38
+ - `AC-21103-1` permission matrix (fires only when `roleModel` is applied)
39
+ - `AC-21104-1` org switcher (fires only when `tenancy` is applied)
40
+ - `AC-21105-1` audit-log surface (fires only when `auditLog` is applied)
41
+
42
+ The pack applies to any FBS binding `TAC-2201-application-admin-console-shell` or whose navModel routes name an admin path. See `packages/rcf-lite/docs/blueprint-authoring.md` section 8c for the pack authoring rules.
@@ -0,0 +1,29 @@
1
+ # application-admin-console: 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 admin console that identifies principals, manages roles, and reads a change history. You want the console 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 admin product (Retool, an internal admin CMS, a bespoke ops console). Adopt this blueprint only when a vendor-neutral shell composed from the applied identity blueprint suits your project better than a fixed opinionated console.
10
+
11
+ You want an anonymous product (no principal directory, no roles). 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 elicitation phase).
16
+ - The elicited additional role labels beyond Owner + Admin + Member + Viewer.
17
+ - The invite transport (email, in-app-only, or custom).
18
+ - The tenancy shape (per-user, per-org, or both) if you apply a tenancy blueprint.
19
+ - The audit-log retention window (default 90 days).
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 four load-bearing surface checks. Combine with the T-1 datatable pack to reach the users and audit shells' state-region contract.
24
+
25
+ ## Promotion signals
26
+
27
+ - The role catalogue label vocabulary drifts across three or more applied auth blueprints: candidate for a `roleModel` global topic in a v1.1.0 minor.
28
+ - The tenancy shape needs a real shelf provider: candidate for the `application-tenancy-orgs` blueprint (spec section 11).
29
+ - A dedicated audit-log blueprint ships: candidate for the console to consume it directly via `capabilities: ["auditLog"]` rather than through the logging companion.
@@ -0,0 +1,182 @@
1
+ // application-admin-console probe pack (v1.0.0).
2
+ //
3
+ // Four capability-gated checks anchored to the blueprint AC ids:
4
+ // AC-21102-1 users directory (fires when principalDirectory applied)
5
+ // AC-21103-1 permission matrix (fires when roleModel applied)
6
+ // AC-21104-1 org switcher (fires when tenancy applied)
7
+ // AC-21105-1 audit-log surface (fires when auditLog applied)
8
+ //
9
+ // Every check drives the real Playwright browser the T-0 runner injects
10
+ // and reads its per-check applicability from the blueprint applied
11
+ // sidecar (rcf/blueprints/application-admin-console.applied.json)
12
+ // written by the apply verb: an absent capability records
13
+ // applicable: false and the aggregate verdict treats the check as
14
+ // neither pass nor fail (spec section 3.3).
15
+ //
16
+ // Sample-app fixture: packages/rcf-lite/test/fixtures/probe-pack-application-admin-console/.
17
+ // The fixture ships a CAPS env or ?caps= query switch mirroring the
18
+ // applied capability set so the pack can be probed for every fixture
19
+ // combination on the shelf gate.
20
+
21
+ import { readFile } from 'node:fs/promises';
22
+ import { join } from 'node:path';
23
+
24
+ async function readAppliedCapabilities(projectRoot) {
25
+ if (!projectRoot) return [];
26
+ try {
27
+ const raw = await readFile(join(projectRoot, 'rcf', 'blueprints', 'application-admin-console.applied.json'), 'utf8');
28
+ const doc = JSON.parse(raw);
29
+ return Array.isArray(doc.appliedCapabilities) ? doc.appliedCapabilities.slice() : [];
30
+ } catch {
31
+ return [];
32
+ }
33
+ }
34
+
35
+ function withUrl(runtimeUrl, path) {
36
+ return new URL(path, runtimeUrl).toString();
37
+ }
38
+
39
+ export default {
40
+ packName: 'application-admin-console',
41
+ version: '1.0.0',
42
+ blueprintSlug: 'application-admin-console',
43
+ // Applies to any FBS that realises the console shell TAC or whose
44
+ // navModel routes name an admin path. Names both `tacIds` and `route`
45
+ // so the loader source-scan sees the two legal seams.
46
+ appliesTo: ({ fbs }) => {
47
+ const routes = fbs?.designStage?.navModel?.routes ?? [];
48
+ const tacIds = fbs?.contextRequirements?.tacIds ?? [];
49
+ if (tacIds.includes('TAC-2201-application-admin-console-shell')) return true;
50
+ return routes.some((r) => typeof r?.path === 'string' && /\/admin(\/|$)/.test(r.path));
51
+ },
52
+ boot: { bootCommand: null, waitForUrl: null, waitForSelector: null },
53
+ checks: [
54
+ {
55
+ id: 'AC-21102-1',
56
+ severity: 'block',
57
+ description: 'Users directory lists principals by data-user-id, honours applied roleModel by rendering the role column only when applied, and renders a request-access control on the access-denied route',
58
+ // Fires only when principalDirectory is applied. Reads the
59
+ // sidecar from projectRoot; probe-pack runner supplies it.
60
+ appliesTo: async ({ projectRoot }) => {
61
+ const caps = await readAppliedCapabilities(projectRoot);
62
+ return caps.includes('principalDirectory');
63
+ },
64
+ run: async ({ browser, fetch, runtimeUrl, projectRoot }) => {
65
+ if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
66
+ const caps = await readAppliedCapabilities(projectRoot);
67
+ const shouldHaveRoleColumn = caps.includes('roleModel');
68
+ await browser.goto(withUrl(runtimeUrl, '/admin/users'));
69
+ const dom = await browser.evaluate(() => {
70
+ const region = document.querySelector('[data-surface="users"]');
71
+ if (!region) return { present: false };
72
+ const rows = Array.from(region.querySelectorAll('[data-user-id]'));
73
+ const ids = rows.map((r) => r.getAttribute('data-user-id'));
74
+ const hasRoleColumn = !!region.querySelector('[data-column="role"]');
75
+ const invites = rows.map((r) => !!r.querySelector('[data-action="invite"]'));
76
+ const deactivates = rows.map((r) => !!r.querySelector('[data-action="deactivate"]'));
77
+ return { present: true, ids, hasRoleColumn, invites, deactivates };
78
+ });
79
+ if (!dom.present) return { verdict: 'fail', detail: 'users surface region [data-surface="users"] not found' };
80
+ if (dom.ids.length === 0) return { verdict: 'fail', detail: 'users surface rendered no rows with data-user-id' };
81
+ if (shouldHaveRoleColumn && !dom.hasRoleColumn) return { verdict: 'fail', detail: 'roleModel applied but no [data-column="role"] header found' };
82
+ if (!shouldHaveRoleColumn && dom.hasRoleColumn) return { verdict: 'fail', detail: 'roleModel NOT applied but [data-column="role"] header found (leak)' };
83
+ // Access-denied route: negative branch. A non-admin principal
84
+ // simulated via ?asAdmin=false renders the denied region with
85
+ // the request-access control.
86
+ await browser.goto(withUrl(runtimeUrl, '/admin/users?asAdmin=false'));
87
+ const denied = await browser.evaluate(() => {
88
+ const region = document.querySelector('[data-surface="denied"]');
89
+ if (!region) return { present: false };
90
+ const control = region.querySelector('[data-action="request-access"]');
91
+ return { present: true, hasControl: !!control };
92
+ });
93
+ if (!denied.present) return { verdict: 'fail', detail: 'access-denied region [data-surface="denied"] not found' };
94
+ if (!denied.hasControl) return { verdict: 'fail', detail: 'access-denied region missing [data-action="request-access"] control' };
95
+ return { verdict: 'pass', detail: 'users rows=' + JSON.stringify(dom.ids) + ' roleColumn=' + dom.hasRoleColumn + ' deniedControl=' + denied.hasControl };
96
+ },
97
+ },
98
+ {
99
+ id: 'AC-21103-1',
100
+ severity: 'block',
101
+ description: 'Permission matrix renders as an ARIA APG grid with role=row, role=rowheader, role=columnheader, role=gridcell and announces each permission string on focus via aria-label',
102
+ appliesTo: async ({ projectRoot }) => {
103
+ const caps = await readAppliedCapabilities(projectRoot);
104
+ return caps.includes('roleModel');
105
+ },
106
+ run: async ({ browser, runtimeUrl }) => {
107
+ if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
108
+ await browser.goto(withUrl(runtimeUrl, '/admin/roles'));
109
+ const dom = await browser.evaluate(() => {
110
+ const grid = document.querySelector('[data-surface="roles"] [role="grid"]');
111
+ if (!grid) return { present: false };
112
+ const rows = Array.from(grid.querySelectorAll('[role="row"]'));
113
+ const columnHeaders = Array.from(grid.querySelectorAll('[role="columnheader"]')).map((h) => h.textContent.trim());
114
+ const rowHeaders = Array.from(grid.querySelectorAll('[role="rowheader"]')).map((h) => h.textContent.trim());
115
+ const cells = Array.from(grid.querySelectorAll('[role="gridcell"]'));
116
+ const cellLabels = cells.map((c) => c.getAttribute('aria-label'));
117
+ return { present: true, rowCount: rows.length, columnHeaders, rowHeaders, cellLabelSample: cellLabels.slice(0, 3), cellCount: cells.length };
118
+ });
119
+ if (!dom.present) return { verdict: 'fail', detail: 'role=grid not found under [data-surface="roles"]' };
120
+ if (dom.rowCount < 2) return { verdict: 'fail', detail: 'grid has too few role=row entries: ' + JSON.stringify(dom) };
121
+ if (dom.columnHeaders.length === 0) return { verdict: 'fail', detail: 'grid missing role=columnheader entries' };
122
+ if (dom.rowHeaders.length === 0) return { verdict: 'fail', detail: 'grid missing role=rowheader entries' };
123
+ if (dom.cellCount === 0) return { verdict: 'fail', detail: 'grid missing role=gridcell entries' };
124
+ // Every cell must carry an aria-label announcing the permission string.
125
+ if (dom.cellLabelSample.some((l) => !l || l.length === 0)) {
126
+ return { verdict: 'fail', detail: 'gridcell aria-label absent on at least one cell: ' + JSON.stringify(dom.cellLabelSample) };
127
+ }
128
+ return { verdict: 'pass', detail: 'rows=' + dom.rowCount + ' cols=' + JSON.stringify(dom.columnHeaders) + ' rowHeaders=' + JSON.stringify(dom.rowHeaders) + ' cellSample=' + JSON.stringify(dom.cellLabelSample) };
129
+ },
130
+ },
131
+ {
132
+ id: 'AC-21104-1',
133
+ severity: 'block',
134
+ description: 'Org switcher control renders on the shell header only when tenancy is applied',
135
+ appliesTo: async ({ projectRoot }) => {
136
+ const caps = await readAppliedCapabilities(projectRoot);
137
+ return caps.includes('tenancy');
138
+ },
139
+ run: async ({ browser, runtimeUrl }) => {
140
+ if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
141
+ await browser.goto(withUrl(runtimeUrl, '/admin'));
142
+ const dom = await browser.evaluate(() => {
143
+ const control = document.querySelector('[data-role="org-switcher"]');
144
+ if (!control) return { present: false };
145
+ return { present: true, tag: control.tagName, ariaLabel: control.getAttribute('aria-label') };
146
+ });
147
+ if (!dom.present) return { verdict: 'fail', detail: 'org switcher [data-role="org-switcher"] not present on the shell header' };
148
+ return { verdict: 'pass', detail: 'org-switcher ' + JSON.stringify(dom) };
149
+ },
150
+ },
151
+ {
152
+ id: 'AC-21105-1',
153
+ severity: 'block',
154
+ description: 'Audit-log entries surface with actor, target, before, after, timestamp and correlationId columns; every row enumerable by data-audit-id',
155
+ appliesTo: async ({ projectRoot }) => {
156
+ const caps = await readAppliedCapabilities(projectRoot);
157
+ return caps.includes('auditLog');
158
+ },
159
+ run: async ({ browser, runtimeUrl }) => {
160
+ if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
161
+ await browser.goto(withUrl(runtimeUrl, '/admin/audit'));
162
+ const dom = await browser.evaluate(() => {
163
+ const region = document.querySelector('[data-surface="audit"]');
164
+ if (!region) return { present: false };
165
+ const rows = Array.from(region.querySelectorAll('[data-audit-id]'));
166
+ const ids = rows.map((r) => r.getAttribute('data-audit-id'));
167
+ const columns = Array.from(region.querySelectorAll('[data-column]')).map((c) => c.getAttribute('data-column'));
168
+ const firstRowColumns = rows[0] ? Array.from(rows[0].querySelectorAll('[data-column]')).map((c) => c.getAttribute('data-column')) : [];
169
+ return { present: true, ids, columns, firstRowColumns };
170
+ });
171
+ if (!dom.present) return { verdict: 'fail', detail: 'audit surface [data-surface="audit"] not found' };
172
+ if (dom.ids.length === 0) return { verdict: 'fail', detail: 'audit surface rendered no rows with data-audit-id' };
173
+ const required = ['actor', 'target', 'before', 'after', 'timestamp', 'correlationId'];
174
+ const missing = required.filter((c) => !dom.firstRowColumns.includes(c));
175
+ if (missing.length > 0) {
176
+ return { verdict: 'fail', detail: 'audit entries missing columns: ' + JSON.stringify(missing) + ' present=' + JSON.stringify(dom.firstRowColumns) };
177
+ }
178
+ return { verdict: 'pass', detail: 'auditRows=' + dom.ids.length + ' columns=' + JSON.stringify(dom.firstRowColumns) };
179
+ },
180
+ },
181
+ ],
182
+ };
@@ -29,7 +29,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
29
29
  | persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
30
30
  | delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
31
31
  | observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
32
- | security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
32
+ | security-secrets-management | 8101-8899 | 9xx | shipped v1.0.1 | `secretsSource` |
33
33
  | security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
34
34
  | security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
35
35
  | security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
@@ -38,6 +38,18 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
38
38
  | observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
39
39
  | observability-logging | 15101-15899 | 16xx | shipped v1.0.0 | `logging` |
40
40
  | application-error-handling | 16101-16899 | 17xx | shipped v1.0.0 | `errorHandling` |
41
+ | application-datatable | 17101-17899 | 18xx | shipped v1.0.0 | none |
42
+ | application-charts | 18101-18899 | 19xx | shipped v1.0.0 | none |
43
+ | application-dashboard | 19101-19899 | 20xx | shipped v1.0.0 | none |
44
+ | application-notifications-in-app | 20101-20899 | 21xx | shipped v1.0.0 | none |
45
+ | application-admin-console | 21101-21899 | 22xx | shipped v1.0.0 | none |
46
+ | application-empty-error-states | 22101-22899 | 23xx | shipped v1.0.0 | none |
47
+ | application-file-upload | 23101-23899 | 24xx | shipped v1.0.0 | none |
48
+ | application-forms-wizard | 24101-24899 | 25xx | shipped v1.0.0 | none |
49
+ | application-account-settings | 25101-25899 | 26xx | shipped v1.0.0 | none |
50
+ | application-onboarding-tour | 26101-26899 | 27xx | shipped v1.0.0 | none |
51
+ | persistence-data-postgres | 27101-27899 | 28xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
52
+ | object-storage-s3 | 28101-28899 | 29xx | shipped v1.0.0 | `objectStorageContract` |
41
53
 
42
54
  Suffix-family ids (ADR, TAC): SPA numbers in the 2xx range, this package takes 3xx (ADR-301 to ADR-308, TAC-301 to TAC-306); the next blueprint should take 4xx.
43
55
 
@@ -0,0 +1,12 @@
1
+ # application-charts CHANGELOG
2
+
3
+ ## 1.0.0 (visual round T-2, spec 2026-09-04)
4
+
5
+ - First ratified version of the shelf's charts blueprint. Four REQs (chart form set, non-colour distinction, text-alternative table, keyboard traversal), six USs binding runtime-observable ACs, two TACs (render shell, keyboard traversal), three ADRs (elicited chart engine with canvas-only refusal, accessible palette light and dark, reduced motion via application-spa tokens). No new global topics.
6
+ - Ships `probe-packs/application-charts.pack.mjs`: three browser-verify checks anchored to AC-18102-1 (non-colour distinction), AC-18103-1 (text-alternative table with cell-per-value contract), AC-18104-1 (keyboard traversal contract with reduced-motion suppression). Every check carries a description field per spec section 9. Second blueprint on the shelf that ships a Playwright probe pack under the T-0 runner extension; first leaf blueprint the T-3 application-dashboard consumes.
7
+ - Ships a sample-app fixture at `packages/rcf-lite/test/fixtures/probe-pack-application-charts/` (dependency-free Node HTTP server) so the pack can be probed at the shelf's own gate; the fixture is the golden the gate reviewer drives, with `?break=table`, `?break=pattern` and `?break=keyboard` query switches for the negative runs.
8
+ - Suggests the `logging` and `errorHandling` companions with the ratified spec's reasons.
9
+
10
+ ### Patch note (2026-09-04, T-3 gate follow-up)
11
+
12
+ - `probe-packs/application-charts.pack.mjs`: navigate with `new URL('', runtimeUrl).toString()` instead of `runtimeUrl + '/'` on the three goto call sites (AC-18102-1, AC-18103-1, AC-18104-1). The concat form stripped a reviewer-supplied `?break=<mode>` from a CLI `--url`; the URL-resolver form preserves the runtime URL verbatim so a reviewer pointing the CLI at `?break=<mode>` sees the negative run naturally. Version stays at 1.0.0; behaviour unchanged on the default apply-side runtime URL.
@@ -0,0 +1,73 @@
1
+ # Charts blueprint (v1.0.0)
2
+
3
+ Vendor-neutral chart-component contract for a rcf-lite application. Ships the accessibility, palette, text-alternative and keyboard-traversal discipline every chart on the shipped surface must meet. Ships a Playwright probe pack under `probe-packs/application-charts.pack.mjs` whose three checks are the runtime gate the delivery-ci-workflows runner drives (visual round spec 2026-09-04, section 5.2). No new global topics; suggests the `logging` and `errorHandling` companions. Leaf blueprint: application-dashboard (visual round T-3) consumes it; no other blueprint in this round does.
4
+
5
+ ## Apply
6
+
7
+ ```
8
+ rcf define blueprint add <path-to>/blueprints/application-charts
9
+ ```
10
+
11
+ Applies namespaced contributions into the project tree and records `manifest.blueprints[]`. Consumes the `logging` and `errorHandling` companions when they resolve to an applied provider or a registered library; falls back to the shelf providers otherwise.
12
+
13
+ ## Anatomy
14
+
15
+ | Piece | Where | What |
16
+ |---|---|---|
17
+ | Metadata | `blueprint.json` | Slug, version 1.0.0, category `application`, `suggestedCompanions: [{ logging }, { errorHandling }]`, 15 contributions in the 18xx US band and 19xx ADR/TAC block |
18
+ | Doc set | `contributions/` | 4 REQs, 6 USs, 2 TACs, 3 ADRs, schema-valid and namespaced |
19
+ | Probe pack | `probe-packs/application-charts.pack.mjs` | Three browser-verify checks anchored to AC-18102-1 (non-colour distinction), AC-18103-1 (text-alternative table), AC-18104-1 (keyboard traversal with reduced motion) |
20
+ | Guide | `guide/application-charts.md` | Operator-facing: when to reach, when not, mechanism-reach gaps |
21
+ | Coordination vocabulary | `docs/topics.md` | Shelf id band registry update; no new global topics claimed |
22
+
23
+ ## What it contributes, and what it deliberately does not
24
+
25
+ Contributed: REQ, US (with inline ACs), TAC, ADR, plus one shipped probe pack. Adherence is expressed as ACs; the blueprint ships no chart-engine source and no test files (the probe pack drives the real browser against the applying project's own runtime).
26
+
27
+ Deliberately not contributed: a choice of chart engine (Recharts, ECharts, Chart.js, D3 primitives, hand-authored SVG); a data-source contract (the applying project sources chart data through the applied `application-api-rest` blueprint or an equivalent); a dashboard layout contract (the applying `application-dashboard` blueprint owns tile placement and hierarchy).
28
+
29
+ ## The engine refusal rule
30
+
31
+ `ADR-1901` elicits the chart engine at apply, and refuses a canvas-only engine that offers no text-alternative surface. The refusal is documented here on the blueprint's README so applying projects and gate reviewers see the rule in one place:
32
+
33
+ - Recharts, ECharts, Chart.js and D3 primitives all satisfy the shell contract when paired with the shell's text-alternative table slot. Chart.js's canvas surface is paired with the shell's `<table>` slot; the shell renders both, so screen readers reach the values.
34
+ - A chart engine that renders exclusively to a `<canvas>` and does NOT offer either a shell-rendered `<table>` or an equivalent DOM path is refused at project-side review. The applying project either replaces the engine or supersedes this blueprint with a project-authored engine contract naming the residuals.
35
+
36
+ ## The one runtime gate
37
+
38
+ `probe-packs/application-charts.pack.mjs` ships three checks the `rcf verify browser` runner invokes on any FBS whose surface matches the pack's `appliesTo` predicate (an FBS that binds `TAC-1901-application-charts-render-shell` or whose nav model routes name a chart or dashboard path). Each check drives the real Playwright browser the runner provisions (through the pinned Playwright MCP or the consuming project's own `playwright` installation), reads the accessibility tree and the DOM, and returns a verdict. A failing block-severity check refuses ship through the existing `browserVerification` aggregate verdict.
39
+
40
+ The pack fires ONLY when its `appliesTo` returns true; a project whose FBS does not bind the shell TAC or a chart route sees the pack recorded as `applicable: false` and no browser check runs.
41
+
42
+ ## Elicited parameters (ADR-1901, ADR-1902, ADR-1903 and REQ notes)
43
+
44
+ - **Chart engine**: Recharts, ECharts, Chart.js, D3 primitives, or a hand-authored SVG mount. Elicited at apply, recorded in the manifest; a canvas-only engine with no text-alternative path is refused (ADR-1901).
45
+ - **Default categorical palette**: light and dark accessible-defaults ship as the recommended default; operator brand tokens can override at apply, fall back to the defaults on missing tokens (ADR-1902).
46
+ - **Interactive traversal scope**: either every chart on the surface (default) or only detail-view charts. When only detail views are interactive, the shell binds the keyboard-traversal contract on those charts and skips it on the overview charts (ADR-1901 alternative decision).
47
+ - **Sparkline behaviour**: in-tile (mounted inside a stat tile via `application-dashboard`) or standalone (mounted on the shipped surface as one chart). The shell handles both; the applying project picks per surface.
48
+
49
+ ## Standards trace
50
+
51
+ WCAG 2.2 AA: 1.4.1 (Use of Colour), 1.4.3 (Contrast Minimum), 1.4.11 (Non-text Contrast), 2.1.1 (Keyboard), 2.3.3 (Animation from Interactions). `standardsTrace` empty on the blueprint; `standardsTraceClause` on each ADR carries the WCAG clause.
52
+
53
+ ## Quality bar
54
+
55
+ Every chart on the shipped surface mounts through the render shell (TAC-1901). Every multi-series chart carries colour AND a non-colour pattern (data-pattern attribute, stroke-dasharray, hatched fill or marker shape) AND a direct label at the series (AC-18102-1). Every chart is paired with a `<table>` in the same landmark, cell-per-value, focus-reachable through a labelled control (AC-18103-1, AC-18103-2). Every interactive chart exposes a keyboard traversal path with the announced string `<seriesName>, <xValue>, <yValue> <unit>` on focus, and `prefers-reduced-motion: reduce` suppresses transitions (AC-18104-1). Chart engine is elicited at apply and canvas-only-no-text-alternative is refused (ADR-1901, AC-18106-1).
56
+
57
+ ## Known mechanism-reach gaps
58
+
59
+ Every runtime-observable AC that is not bound to a pack check appears here individually per the T-1 gate discipline (`blueprint-authoring-checklist.md` section 6.g): categories are not enough. The pack has three checks; every other runtime-observable AC on this blueprint is a mechanism-reach gap named below.
60
+
61
+ - **AC-18101-1 form-set membership**. the pack does not inspect a chart's declared form against the six-form set. A project-side review is the current mechanism. A v1.1 minor bump could add a fourth pack check reading the `data-chart-form` attribute the shell emits and asserting membership.
62
+ - **AC-18101-2 shell-mount routing**. the pack does not inspect the mount seam; a chart bypass to the raw chart-library mount is caught at project-side review. A build-scan pre-check in a v1.1 minor bump can grep the applying project's source for engine-specific mount calls.
63
+ - **AC-18102-2 single-series exemption**. the pack does not skip single-series charts explicitly today; the runner reports `applicable: false` for the check on a surface with only single-series charts based on the DOM inspection. A v1.1 minor bump can formalise the skip on the pack seam.
64
+ - **AC-18103-2 show-table control label and reading order**. the pack asserts the control is present but does not assert the control's accessible-name text or its position in tab order before the chart's data points. A v1.1 minor bump can add a pack check that tabs into the region and reads the tab order.
65
+ - **AC-18104-2 non-interactive-chart exemption**. the pack does not skip non-interactive charts explicitly today; the check fails on a surface whose data points miss `tabindex="0"`, whether or not the chart is interactive. Project-side review names non-interactive charts and the reviewer skips the check by hand.
66
+ - **AC-18105-1 palette contrast**. the pack does not measure contrast ratios today. Palette contrast is a build-scan surface (colour tokens are inspectable from the applied palette module). A v1.1 minor bump can add a Node build-scan pre-check that reads the applied palette and checks the ratios against WCAG 1.4.3 and 1.4.11.
67
+ - **AC-18105-2 palette override fallback**. the fallback behaviour is exercised by the applying project's own tests, not this blueprint's pack. The applying project owns the assertion.
68
+ - **AC-18106-1 canvas-only refusal**. the refusal is documented in the README's engine-refusal rule; project-side review enforces it. A v1.1 minor bump could add a pack pre-check that reads the applied engine and refuses on a canvas-only engine with no `<table>` companion.
69
+ - **AC-18106-2 engine-name marker**. the applying project ships a `data-chart-engine` attribute or an equivalent DOM marker. The pack does not assert this today; a v1.1 minor bump could read the marker and add it to the pack record for downstream tooling.
70
+
71
+ ## Vision-deficiency emulation is a runner-seam gap
72
+
73
+ The runner has no `emulateVisionDeficiency` seam on the pack browser today (`goto`, `snapshot`, `evaluate`, `click`, `type`, `press`, `screenshot` is the current API). AC-18102-1 is therefore proven at the DOM level: every series carries a non-colour cue AND a direct label. A future runner minor that adds `emulateVisionDeficiency` to the seam lets this pack add a deuteranopia render pass; that follow-up is named under CONCERNS in the T-2 dispatch report as the smallest runner change that would close the class.
@@ -0,0 +1,26 @@
1
+ {
2
+ "slug": "application-charts",
3
+ "version": "1.0.0",
4
+ "category": "application",
5
+ "suggestedCompanions": [
6
+ { "role": "logging", "reason": "Chart rendering telemetry (data-point activation, keyboard traversal) rides the same log surface as the rest of the client; a logging companion supplies the factory the client-side telemetry uses." },
7
+ { "role": "errorHandling", "reason": "A chart that fails to load surfaces a client-side error record; an error-handling companion supplies the boundary and the record factory." }
8
+ ],
9
+ "contributions": [
10
+ { "id": "application-charts-REQ-001", "kind": "req", "path": "requirements/application-charts-req-001.json" },
11
+ { "id": "application-charts-REQ-002", "kind": "req", "path": "requirements/application-charts-req-002.json" },
12
+ { "id": "application-charts-REQ-003", "kind": "req", "path": "requirements/application-charts-req-003.json" },
13
+ { "id": "application-charts-REQ-004", "kind": "req", "path": "requirements/application-charts-req-004.json" },
14
+ { "id": "application-charts-US-18101", "kind": "us", "path": "user-stories/application-charts-us-18101.json" },
15
+ { "id": "application-charts-US-18102", "kind": "us", "path": "user-stories/application-charts-us-18102.json" },
16
+ { "id": "application-charts-US-18103", "kind": "us", "path": "user-stories/application-charts-us-18103.json" },
17
+ { "id": "application-charts-US-18104", "kind": "us", "path": "user-stories/application-charts-us-18104.json" },
18
+ { "id": "application-charts-US-18105", "kind": "us", "path": "user-stories/application-charts-us-18105.json" },
19
+ { "id": "application-charts-US-18106", "kind": "us", "path": "user-stories/application-charts-us-18106.json" },
20
+ { "id": "TAC-1901-application-charts-render-shell", "kind": "tac", "path": "tacs/tac-1901-application-charts-render-shell.json" },
21
+ { "id": "TAC-1902-application-charts-keyboard-traversal", "kind": "tac", "path": "tacs/tac-1902-application-charts-keyboard-traversal.json" },
22
+ { "id": "ADR-1901-application-charts-engine-choice", "kind": "adr", "path": "adrs/adr-1901-application-charts-engine-choice.json", "elicited": true, "standardsTraceClause": "WCAG 1.4.1 / WCAG 2.1.1" },
23
+ { "id": "ADR-1902-application-charts-accessible-palette", "kind": "adr", "path": "adrs/adr-1902-application-charts-accessible-palette.json", "recommendedDefault": true, "elicited": true, "standardsTraceClause": "WCAG 1.4.3 / WCAG 1.4.11" },
24
+ { "id": "ADR-1903-application-charts-motion", "kind": "adr", "path": "adrs/adr-1903-application-charts-motion.json", "recommendedDefault": true, "standardsTraceClause": "WCAG 2.3.3" }
25
+ ]
26
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "adrId": "ADR-1901-application-charts-engine-choice",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Elicit the chart engine at apply, and refuse a canvas-only engine that offers no text-alternative surface",
8
+ "context": "Chart engines have wildly different accessibility postures. Recharts and ECharts render to SVG with keyboard-focusable data points and a DOM the shell can read; Chart.js renders to canvas and needs a paired data-table to reach a screen reader; D3 primitives leave the accessibility contract to the author. A blueprint that hard-picks one engine locks the applying project into that engine's accessibility posture; a blueprint that leaves it wide open lets the project ship a canvas-only chart with no text-alternative path.",
9
+ "decision": "The chart engine is elicited at apply (Recharts, ECharts, Chart.js, D3 primitives or an operator-named alternative). The shell contract stands regardless of engine (a paired text-alternative table in the same landmark; a keyboard traversal path on interactive charts; a colour-plus-pattern-plus-label series distinction). A chart engine that renders exclusively to a `<canvas>` and offers no text-alternative surface is refused at project-side review; the refusal is documented on the blueprint's README under the engine-refusal rule.",
10
+ "consequences": "Applying projects pick the engine that fits their existing stack (a Chart.js-heavy project keeps Chart.js and pairs every chart with the text-alternative table the shell renders). A canvas-only engine is refused with a clear reason; the applying project either replaces the engine or supersedes the blueprint with a project-authored engine contract naming the residuals.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Hard-pick Recharts",
14
+ "summary": "The blueprint commits Recharts as the shipped engine.",
15
+ "reasonNotChosen": "React-only, and it locks projects with a Vue or Svelte surface into a foreign runtime. The shell contract is engine-agnostic; there is no reason to pick one at the shelf."
16
+ },
17
+ {
18
+ "name": "Allow any engine including canvas-only with no text-alternative",
19
+ "summary": "The blueprint accepts any engine choice with no refusal path.",
20
+ "reasonNotChosen": "The text-alternative REQ-003 is unreachable on a canvas-only engine; the blueprint would ship an AC that cannot be enforced on a compliant apply."
21
+ }
22
+ ],
23
+ "createdAt": "2026-09-04T21:00:00Z",
24
+ "updatedAt": "2026-09-04T21:00:00Z"
25
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "adrId": "ADR-1902-application-charts-accessible-palette",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Ship an accessible-defaults categorical palette (light and dark) with elicited operator overrides",
8
+ "context": "Categorical palettes are the most common source of colour-blindness defects on chart libraries: many popular defaults (rainbow gradients, the classic ten-colour categorical from d3-scale v1) fail deuteranopia readability at the second and third series. Operators bring brand tokens they want to see on the shipped surface; the tension between brand palette and accessible palette is real.",
9
+ "decision": "The blueprint ships a light and a dark accessible-defaults categorical palette matched against WCAG 1.4.3 (4.5:1 text contrast) and WCAG 1.4.11 (3:1 non-text contrast) against the applied theme's background. The palettes are the recommended default. Operators supply brand tokens through the shell's palette accessor; missing tokens fall back to the accessible-defaults palette at the same index and the render log records a warning. The applying project verifies contrast on the shipped surface as a build-scan supplement; the pack does not check contrast today.",
10
+ "consequences": "Applying projects get a contrast-safe palette out of the box and can override with brand tokens without losing the fallback. Contrast checking on the operator palette is the applying project's responsibility; the blueprint's README names it under known mechanism-reach gaps as a v1.1 minor bump candidate for the pack.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Ship no default palette",
14
+ "summary": "The blueprint requires the operator to supply a palette at apply.",
15
+ "reasonNotChosen": "Every applying project would ship the first-pass palette their designer picked, and the accessibility posture would move with the designer's brief. The default carries the shelf's discipline."
16
+ },
17
+ {
18
+ "name": "Ship one palette across light and dark",
19
+ "summary": "Same series colours in both themes.",
20
+ "reasonNotChosen": "A colour with 4.5:1 contrast against a white background often reads at 2:1 against a black background; two palettes is the honest shape."
21
+ }
22
+ ],
23
+ "createdAt": "2026-09-04T21:00:00Z",
24
+ "updatedAt": "2026-09-04T21:00:00Z"
25
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "adrId": "ADR-1903-application-charts-motion",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "accepted",
7
+ "title": "Honour prefers-reduced-motion via the application-spa motion tokens on every chart transition",
8
+ "context": "Chart libraries default to animated entry and update transitions (bars grow from zero, lines sweep left-to-right). `prefers-reduced-motion: reduce` is the WCAG 2.3.3 signal the operator's platform preferences carry; failing to honour it is a common accessibility defect on chart libraries and a hard-to-diagnose vestibular trigger.",
9
+ "decision": "Every rendered chart on the shipped surface honours the `prefers-reduced-motion: reduce` media query by setting `transition-duration: 0` and `animation-duration: 0` on the animated chart elements (bars, lines, sweep animations, tooltip fades) through a media rule the shell attaches on mount. The rule composes with the application-spa motion tokens (the applying project's shared motion baseline). The pack asserts the media rule is present and effective on the rendered surface (computed style on an animated element under an emulated reduced-motion preference); a chart that ships a transition and misses the media rule fails AC-18104-1.",
10
+ "consequences": "Every chart on the shipped surface is safe for users who set the reduced-motion preference. The shell owns the CSS attachment; the applying project's engine-specific transitions inherit the rule without a per-engine override.",
11
+ "alternativesConsidered": [
12
+ {
13
+ "name": "Leave motion to the engine",
14
+ "summary": "Each engine's own reduced-motion handling.",
15
+ "reasonNotChosen": "Chart.js and D3 primitives do not honour `prefers-reduced-motion` by default; the shell has to do it or the AC is unreachable."
16
+ },
17
+ {
18
+ "name": "Disable all chart transitions unconditionally",
19
+ "summary": "No chart animates at all, regardless of preference.",
20
+ "reasonNotChosen": "Motion is a legitimate affordance for operators who want it; the preference gate is the honest shape."
21
+ }
22
+ ],
23
+ "createdAt": "2026-09-04T21:00:00Z",
24
+ "updatedAt": "2026-09-04T21:00:00Z"
25
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "reqId": "application-charts-REQ-001",
3
+ "prdId": "PRD-001",
4
+ "title": "The application ships the small set of chart forms an operator SaaS actually shows",
5
+ "description": "The application realises the chart-form set the shelf's spec commits: bar, line, area, pie or donut, single-value with sparkline, and heatmap. Every rendered chart on the shipped surface picks one of these forms and honours the render-shell contract (TAC-1901). A form outside this set is refused at project-side review; a specialised form the applying project needs (a candlestick, a Sankey) supersedes this REQ with a project-authored REQ and is documented as a known deviation.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "The form set is where teams reach for a chart library and pick the wrong tool. Enumerating the forms in the contract closes the ambiguity at ship: every rendered chart on the surface names one of the six forms and inherits its rendering discipline, its accessibility affordances and its text-alternative shape from the shell.",
10
+ "tags": ["blueprint:application-charts", "category:01-form-set"],
11
+ "version": "1.0.0",
12
+ "status": "approved",
13
+ "createdAt": "2026-09-04T21:00:00Z",
14
+ "updatedAt": "2026-09-04T21:00:00Z"
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "reqId": "application-charts-REQ-002",
3
+ "prdId": "PRD-001",
4
+ "title": "Every chart series distinguishes on colour plus pattern plus direct label (non-colour distinction, WCAG 1.4.1)",
5
+ "description": "Every rendered chart with two or more series distinguishes the series through more than colour alone: colour is paired with a pattern (a dashed line, a hatched fill, a marker shape) and a direct label placed at the series (a legend entry alone does not satisfy the AC). A vision-deficiency simulation (deuteranopia is the shelf's default screen) still reads the series distinction. The blueprint's accessible palette (ADR-1902) is the colour default; the pattern and label rules apply regardless of palette.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Colour blindness is the most common visual disability and colour-only series distinction is the most common accessibility defect on chart libraries; the tri-cue (colour, pattern, label) is what WCAG 1.4.1 asks for and what a build-scan or runtime check can prove at the DOM level.",
10
+ "tags": ["blueprint:application-charts", "category:02-non-colour-distinction"],
11
+ "version": "1.0.0",
12
+ "status": "approved",
13
+ "createdAt": "2026-09-04T21:00:00Z",
14
+ "updatedAt": "2026-09-04T21:00:00Z"
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "reqId": "application-charts-REQ-003",
3
+ "prdId": "PRD-001",
4
+ "title": "Every chart ships a text-alternative table carrying the same data, focus-reachable in the same landmark",
5
+ "description": "Every rendered chart on the shipped surface ships a paired `<table>` element in the same landmark as the chart, carrying the same values, cell-per-value: rows for the x-axis or category dimension and columns for each series. The table is either visible under the chart or visually-hidden and focus-reachable through a labelled control (a link or a button). Assistive tech traverses the table cell-by-cell; the values in the table match the values the chart renders.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "A chart is a visual encoding of data; a text-alternative table is the only assistive-tech-reachable form of the same data that fits the existing table-navigation vocabulary. Screen-reader users receive the same information; a canvas-only chart with no text-alternative is inaccessible.",
10
+ "tags": ["blueprint:application-charts", "category:03-text-alternative"],
11
+ "version": "1.0.0",
12
+ "status": "approved",
13
+ "createdAt": "2026-09-04T21:00:00Z",
14
+ "updatedAt": "2026-09-04T21:00:00Z"
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "reqId": "application-charts-REQ-004",
3
+ "prdId": "PRD-001",
4
+ "title": "Interactive charts honour a keyboard traversal contract and reduced-motion preference (WCAG 2.1.1, WCAG 2.3.3)",
5
+ "description": "An interactive chart (a chart whose data points are clickable, hoverable or filterable) exposes a keyboard traversal path: each data point receives focus in reading order (left-to-right, top-to-bottom for a single-series chart; series-by-series for a multi-series chart), and the announced string on focus carries the series name, the x-value, the y-value and the unit. `prefers-reduced-motion` suppresses chart transitions on entry and update. A non-interactive chart (a rendered surface with no data-point activation) is exempt from the keyboard traversal AC; the reduced-motion rule applies regardless.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Keyboard-only users need the same data-point granularity a pointer user has, and the announced string is the assistive-tech-visible surface. Reduced-motion respect is the WCAG 2.3.3 clause the shelf inherits from application-spa's motion tokens; a chart that does not honour it fails the same clause.",
10
+ "tags": ["blueprint:application-charts", "category:04-keyboard-traversal"],
11
+ "version": "1.0.0",
12
+ "status": "approved",
13
+ "createdAt": "2026-09-04T21:00:00Z",
14
+ "updatedAt": "2026-09-04T21:00:00Z"
15
+ }