rcf-lite 0.20.0 → 0.21.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 (229) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/blueprints/application-admin-console/CHANGELOG.md +11 -0
  3. package/blueprints/application-admin-console/README.md +98 -0
  4. package/blueprints/application-admin-console/blueprint.json +226 -0
  5. package/blueprints/application-admin-console/contributions/adrs/adr-2201-application-admin-console-capability-vocabulary.json +25 -0
  6. package/blueprints/application-admin-console/contributions/adrs/adr-2202-application-admin-console-baseline-roles.json +25 -0
  7. package/blueprints/application-admin-console/contributions/adrs/adr-2203-application-admin-console-invite-transport.json +20 -0
  8. package/blueprints/application-admin-console/contributions/adrs/adr-2204-application-admin-console-audit-retention.json +20 -0
  9. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-001.json +18 -0
  10. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-002.json +18 -0
  11. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-003.json +18 -0
  12. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-004.json +18 -0
  13. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-005.json +18 -0
  14. package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-006.json +18 -0
  15. package/blueprints/application-admin-console/contributions/tacs/tac-2201-application-admin-console-shell.json +40 -0
  16. package/blueprints/application-admin-console/contributions/tacs/tac-2202-application-admin-console-capability-discovery.json +44 -0
  17. package/blueprints/application-admin-console/contributions/tacs/tac-2203-application-admin-console-permission-matrix.json +34 -0
  18. package/blueprints/application-admin-console/contributions/tacs/tac-2204-application-admin-console-audit-view.json +40 -0
  19. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21101.json +34 -0
  20. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21102.json +34 -0
  21. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21103.json +34 -0
  22. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21104.json +28 -0
  23. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21105.json +34 -0
  24. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21106.json +27 -0
  25. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21107.json +27 -0
  26. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21108.json +27 -0
  27. package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21109.json +33 -0
  28. package/blueprints/application-admin-console/docs/topics.md +35 -0
  29. package/blueprints/application-admin-console/guide/application-admin-console.md +29 -0
  30. package/blueprints/application-admin-console/probe-packs/application-admin-console.pack.mjs +182 -0
  31. package/blueprints/application-api-rest/docs/topics.md +5 -0
  32. package/blueprints/application-charts/CHANGELOG.md +12 -0
  33. package/blueprints/application-charts/README.md +73 -0
  34. package/blueprints/application-charts/blueprint.json +26 -0
  35. package/blueprints/application-charts/contributions/adrs/adr-1901-application-charts-engine-choice.json +25 -0
  36. package/blueprints/application-charts/contributions/adrs/adr-1902-application-charts-accessible-palette.json +25 -0
  37. package/blueprints/application-charts/contributions/adrs/adr-1903-application-charts-motion.json +25 -0
  38. package/blueprints/application-charts/contributions/requirements/application-charts-req-001.json +15 -0
  39. package/blueprints/application-charts/contributions/requirements/application-charts-req-002.json +15 -0
  40. package/blueprints/application-charts/contributions/requirements/application-charts-req-003.json +15 -0
  41. package/blueprints/application-charts/contributions/requirements/application-charts-req-004.json +15 -0
  42. package/blueprints/application-charts/contributions/tacs/tac-1901-application-charts-render-shell.json +42 -0
  43. package/blueprints/application-charts/contributions/tacs/tac-1902-application-charts-keyboard-traversal.json +40 -0
  44. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18101.json +35 -0
  45. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18102.json +35 -0
  46. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18103.json +35 -0
  47. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18104.json +35 -0
  48. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18105.json +35 -0
  49. package/blueprints/application-charts/contributions/user-stories/application-charts-us-18106.json +35 -0
  50. package/blueprints/application-charts/docs/topics.md +37 -0
  51. package/blueprints/application-charts/guide/application-charts.md +44 -0
  52. package/blueprints/application-charts/probe-packs/application-charts.pack.mjs +191 -0
  53. package/blueprints/application-dashboard/CHANGELOG.md +10 -0
  54. package/blueprints/application-dashboard/README.md +102 -0
  55. package/blueprints/application-dashboard/assets/guidance/dashboard-design.md +124 -0
  56. package/blueprints/application-dashboard/blueprint.json +29 -0
  57. package/blueprints/application-dashboard/contributions/adrs/adr-2001-application-dashboard-primary-kpi-enum.json +25 -0
  58. package/blueprints/application-dashboard/contributions/adrs/adr-2002-application-dashboard-timeframe-presets.json +25 -0
  59. package/blueprints/application-dashboard/contributions/adrs/adr-2003-application-dashboard-export-formats.json +25 -0
  60. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-001.json +15 -0
  61. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-002.json +15 -0
  62. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-003.json +15 -0
  63. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-004.json +15 -0
  64. package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-005.json +15 -0
  65. package/blueprints/application-dashboard/contributions/tacs/tac-2001-application-dashboard-tile-grid.json +47 -0
  66. package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +41 -0
  67. package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +35 -0
  68. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19101.json +35 -0
  69. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19102.json +35 -0
  70. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19103.json +35 -0
  71. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19104.json +35 -0
  72. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19105.json +35 -0
  73. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +35 -0
  74. package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19107.json +35 -0
  75. package/blueprints/application-dashboard/docs/topics.md +43 -0
  76. package/blueprints/application-dashboard/guide/application-dashboard.md +48 -0
  77. package/blueprints/application-dashboard/probe-packs/application-dashboard.pack.mjs +231 -0
  78. package/blueprints/application-datatable/CHANGELOG.md +8 -0
  79. package/blueprints/application-datatable/README.md +43 -0
  80. package/blueprints/application-datatable/blueprint.json +33 -0
  81. package/blueprints/application-datatable/contributions/adrs/adr-1801-application-datatable-pattern-choice.json +25 -0
  82. package/blueprints/application-datatable/contributions/adrs/adr-1802-application-datatable-url-state.json +20 -0
  83. package/blueprints/application-datatable/contributions/adrs/adr-1803-application-datatable-page-size.json +20 -0
  84. package/blueprints/application-datatable/contributions/adrs/adr-1804-application-datatable-selection-persistence.json +20 -0
  85. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-001.json +15 -0
  86. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-002.json +15 -0
  87. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-003.json +15 -0
  88. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-004.json +15 -0
  89. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-005.json +15 -0
  90. package/blueprints/application-datatable/contributions/requirements/application-datatable-req-006.json +15 -0
  91. package/blueprints/application-datatable/contributions/tacs/tac-1801-application-datatable-shell.json +50 -0
  92. package/blueprints/application-datatable/contributions/tacs/tac-1802-application-datatable-query-adapter.json +39 -0
  93. package/blueprints/application-datatable/contributions/tacs/tac-1803-application-datatable-selection-model.json +28 -0
  94. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17101.json +44 -0
  95. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17102.json +44 -0
  96. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17103.json +44 -0
  97. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17104.json +44 -0
  98. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17105.json +44 -0
  99. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17106.json +44 -0
  100. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17107.json +44 -0
  101. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17108.json +44 -0
  102. package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17109.json +44 -0
  103. package/blueprints/application-datatable/docs/topics.md +35 -0
  104. package/blueprints/application-datatable/guide/application-datatable.md +38 -0
  105. package/blueprints/application-datatable/probe-packs/application-datatable.pack.mjs +240 -0
  106. package/blueprints/application-error-handling/docs/topics.md +5 -0
  107. package/blueprints/application-notifications-in-app/CHANGELOG.md +9 -0
  108. package/blueprints/application-notifications-in-app/README.md +80 -0
  109. package/blueprints/application-notifications-in-app/blueprint.json +30 -0
  110. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2101-application-notifications-in-app-live-region-role-mapping.json +25 -0
  111. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2102-application-notifications-in-app-toast-timeout-floor.json +25 -0
  112. package/blueprints/application-notifications-in-app/contributions/adrs/adr-2103-application-notifications-in-app-retention-window.json +25 -0
  113. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-001.json +15 -0
  114. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-002.json +15 -0
  115. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-003.json +15 -0
  116. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-004.json +15 -0
  117. package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-005.json +15 -0
  118. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +46 -0
  119. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +52 -0
  120. package/blueprints/application-notifications-in-app/contributions/tacs/tac-2103-application-notifications-in-app-preferences.json +40 -0
  121. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +35 -0
  122. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +35 -0
  123. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +35 -0
  124. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20104.json +35 -0
  125. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +35 -0
  126. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20106.json +26 -0
  127. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20107.json +26 -0
  128. package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20108.json +26 -0
  129. package/blueprints/application-notifications-in-app/docs/topics.md +39 -0
  130. package/blueprints/application-notifications-in-app/guide/application-notifications-in-app.md +47 -0
  131. package/blueprints/application-notifications-in-app/probe-packs/application-notifications-in-app.pack.mjs +328 -0
  132. package/blueprints/application-spa/docs/topics.md +5 -0
  133. package/blueprints/delivery-ci-workflows/docs/topics.md +5 -0
  134. package/blueprints/deploy-cloudflare-workers/docs/topics.md +5 -0
  135. package/blueprints/email-smtp-resend/docs/topics.md +5 -0
  136. package/blueprints/observability-essentials/docs/topics.md +5 -0
  137. package/blueprints/observability-logging/CHANGELOG.md +5 -0
  138. package/blueprints/observability-logging/README.md +1 -1
  139. package/blueprints/observability-logging/blueprint.json +113 -21
  140. package/blueprints/observability-logging/docs/topics.md +5 -0
  141. package/blueprints/observability-probe-endpoints/docs/topics.md +5 -0
  142. package/blueprints/persistence-data-d1/docs/topics.md +5 -0
  143. package/blueprints/persistence-data-sqlite/docs/topics.md +5 -0
  144. package/blueprints/security-auth-clerk/CHANGELOG.md +5 -0
  145. package/blueprints/security-auth-clerk/blueprint.json +2 -1
  146. package/blueprints/security-auth-clerk/docs/topics.md +5 -0
  147. package/blueprints/security-auth-keycloak/CHANGELOG.md +5 -0
  148. package/blueprints/security-auth-keycloak/blueprint.json +2 -1
  149. package/blueprints/security-auth-keycloak/docs/topics.md +5 -0
  150. package/blueprints/security-auth-magic-link/CHANGELOG.md +5 -0
  151. package/blueprints/security-auth-magic-link/blueprint.json +2 -1
  152. package/blueprints/security-auth-magic-link/docs/topics.md +5 -0
  153. package/blueprints/security-auth-oauth2/CHANGELOG.md +5 -0
  154. package/blueprints/security-auth-oauth2/blueprint.json +2 -1
  155. package/blueprints/security-auth-oauth2/docs/topics.md +5 -0
  156. package/blueprints/security-secrets-management/docs/topics.md +5 -0
  157. package/fixtures/canary-manifest.json +9 -9
  158. package/package.json +2 -2
  159. package/rcf/code-nodes/cn-106.json +13 -0
  160. package/rcf/code-nodes/cn-107.json +14 -0
  161. package/rcf/code-nodes/cn-108.json +13 -0
  162. package/rcf/code-nodes/cn-109.json +12 -0
  163. package/rcf/code-nodes/cn-110.json +12 -0
  164. package/rcf/code-nodes/cn-111.json +14 -0
  165. package/rcf/code-nodes/cn-112.json +14 -0
  166. package/rcf/code-nodes/cn-113.json +12 -0
  167. package/rcf/code-nodes/cn-114.json +13 -0
  168. package/rcf/code-nodes/cn-115.json +13 -0
  169. package/rcf/code-nodes/cn-116.json +12 -0
  170. package/rcf/code-nodes/cn-117.json +13 -0
  171. package/rcf/code-nodes/cn-118.json +13 -0
  172. package/rcf/code-nodes/cn-119.json +13 -0
  173. package/rcf/code-nodes/cn-120.json +13 -0
  174. package/rcf/code-nodes/cn-121.json +12 -0
  175. package/rcf/code-nodes/cn-122.json +12 -0
  176. package/rcf/code-nodes/cn-123.json +13 -0
  177. package/rcf/code-nodes/cn-124.json +13 -0
  178. package/rcf/code-nodes/cn-125.json +13 -0
  179. package/rcf/code-nodes/cn-126.json +13 -0
  180. package/rcf/code-nodes/cn-127.json +12 -0
  181. package/rcf/code-nodes/cn-128.json +14 -0
  182. package/rcf/code-nodes/cn-129.json +14 -0
  183. package/rcf/code-nodes/cn-130.json +14 -0
  184. package/rcf/code-nodes/cn-131.json +15 -0
  185. package/rcf/code-nodes/cn-132.json +12 -0
  186. package/rcf/code-nodes/cn-133.json +13 -0
  187. package/rcf/fbs/fbs-036.json +22 -0
  188. package/rcf/fbs/fbs-037.json +19 -0
  189. package/rcf/fbs/fbs-038.json +19 -0
  190. package/rcf/fbs/fbs-039.json +21 -0
  191. package/rcf/fbs/fbs-040.json +20 -0
  192. package/rcf/fbs/fbs-041.json +13 -0
  193. package/rcf/fbs/fbs-042.json +13 -0
  194. package/rcf/requirements/req-017.json +18 -0
  195. package/rcf/requirements/req-018.json +18 -0
  196. package/rcf/requirements/req-019.json +38 -0
  197. package/rcf/requirements/req-020.json +13 -0
  198. package/rcf/requirements/req-021.json +13 -0
  199. package/rcf/requirements/req-022.json +13 -0
  200. package/rcf/requirements/req-023.json +14 -0
  201. package/rcf/test-suites/ts-046.json +78 -0
  202. package/rcf/test-suites/ts-047.json +54 -0
  203. package/rcf/test-suites/ts-048.json +54 -0
  204. package/rcf/test-suites/ts-049.json +70 -0
  205. package/rcf/test-suites/ts-050.json +69 -0
  206. package/rcf/test-suites/ts-051.json +22 -0
  207. package/rcf/test-suites/ts-052.json +20 -0
  208. package/rcf/user-stories/us-1701.json +56 -0
  209. package/rcf/user-stories/us-1801.json +40 -0
  210. package/rcf/user-stories/us-1901.json +40 -0
  211. package/rcf/user-stories/us-2001.json +50 -0
  212. package/rcf/user-stories/us-2101.json +45 -0
  213. package/rcf/user-stories/us-2201.json +60 -0
  214. package/rcf/user-stories/us-2301.json +51 -0
  215. package/releases/releases.yaml +11 -1
  216. package/src/blueprint/apply.js +98 -1
  217. package/src/blueprint/capabilities.js +318 -0
  218. package/src/blueprint/loader.js +247 -0
  219. package/src/browser-verify/boot.js +180 -0
  220. package/src/browser-verify/index.js +13 -0
  221. package/src/browser-verify/manifest-writer.js +31 -6
  222. package/src/browser-verify/pack-browser.js +294 -0
  223. package/src/browser-verify/pack-loader.js +176 -0
  224. package/src/browser-verify/pack-runner.js +193 -0
  225. package/src/browser-verify/pack-schema.js +155 -0
  226. package/src/browser-verify/runner.js +24 -1
  227. package/src/cli/blueprint.js +92 -0
  228. package/src/cli/browser-verify.js +147 -7
  229. package/src/core/errors/index.js +7 -0
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-admin-console-REQ-005",
3
+ "prdId": "PRD-001",
4
+ "title": "Audit-log surface conditional on the auditLog capability (via the applied logging companion), reading the delivered event stream",
5
+ "description": "When the auditLog capability is applied (through the observability-logging companion or a future dedicated audit blueprint), the console renders an audit-log route: an audit table listing every entry identified by data-audit-id and carrying actor, target, before, after, timestamp, and correlationId columns; per-actor filter chrome and per-target filter chrome; retention window per ADR-2204. Consumes application-datatable (T-1) for the table shell.",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round spec section 5.5, REQ 5 of the admin-console blueprint.",
10
+ "tags": [
11
+ "blueprint:application-admin-console",
12
+ "category:05-audit"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-05T01:30:00Z",
17
+ "updatedAt": "2026-09-05T01:30:00Z"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "reqId": "application-admin-console-REQ-006",
3
+ "prdId": "PRD-001",
4
+ "title": "Access-denied and request-access states per WCAG 2.2 AA",
5
+ "description": "A principal without admin scope reaching an admin route renders an access-denied state under WCAG 2.4.6 Headings and Labels and 3.3.4 Error Prevention: a heading naming the denied action, an explanation of why access was refused, and a request-access control routed to a POST /api/request-access endpoint the applied notification blueprint delivers on. The request-access control is keyboard-reachable and announces its state (idle, submitting, submitted) via a polite live region (WCAG 4.1.3).",
6
+ "category": "functional",
7
+ "domain": "application",
8
+ "priority": "must",
9
+ "rationale": "Per visual round spec section 5.5, REQ 6 of the admin-console blueprint.",
10
+ "tags": [
11
+ "blueprint:application-admin-console",
12
+ "category:06-access-denied"
13
+ ],
14
+ "version": "1.0.0",
15
+ "status": "approved",
16
+ "createdAt": "2026-09-05T01:30:00Z",
17
+ "updatedAt": "2026-09-05T01:30:00Z"
18
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "tacId": "TAC-2201-application-admin-console-shell",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Admin-console shell",
8
+ "purpose": "Owns the rendered admin-console surface: the top-level nav landmark, the surface-manifest read at load, the conditional rendering of every applied surface (users, roles, orgs, audit), the access-denied and request-access states, and the shared page layout every surface renders within. The shell is the base surface every AC in this blueprint anchors on.",
9
+ "responsibilities": [
10
+ "Read the applied capability sidecar (rcf/blueprints/application-admin-console.applied.json) at load and configure the surface set (AC-21101-1, AC-21107-1).",
11
+ "Render a single primary navigation landmark carrying an accessible name and rendering only applied surfaces (AC-21101-1, AC-21101-2).",
12
+ "Render the access-denied state for a non-admin principal reaching any admin route with a keyboard-reachable request-access control announcing its state (AC-21106-1).",
13
+ "Delegate the users, roles, orgs and audit surfaces to their respective TACs (TAC-2201 through TAC-2204)."
14
+ ],
15
+ "internalStructure": "One shell module that mounts the surface, reads the applied capabilities sidecar, and renders the nav landmark, the page-layout scaffolding, and the route-level containers for each conditional surface. The framework is not prescribed; the shell interfaces are what the project realises against React, Vue, Svelte or vanilla DOM.",
16
+ "interfaces": [
17
+ {
18
+ "name": "renderShell",
19
+ "kind": "factory",
20
+ "description": "renderShell({ capsSidecarUrl, surfaceRegistry, accessGuard }) -> { mount(rootElement), unmount() }. The project supplies the capsSidecarUrl (where the sidecar is served from), the surfaceRegistry (maps a capability string to a surface component), and the accessGuard (returns whether the current principal has admin scope)."
21
+ },
22
+ {
23
+ "name": "capabilitiesSidecar",
24
+ "kind": "shape",
25
+ "description": "{ slug, version, appliedAt, appliedCapabilities: string[], appliedElicitations: {}, allowNoAuthYet?: boolean, notes?: string }. Written by apply, read by the shell."
26
+ }
27
+ ],
28
+ "dependencies": [
29
+ {
30
+ "name": "Capability discovery",
31
+ "kind": "tac",
32
+ "tacId": "TAC-2202-application-admin-console-capability-discovery",
33
+ "description": "The shell reads the surface-manifest through discovery."
34
+ }
35
+ ],
36
+ "tradeoffs": "The shell reads the sidecar file the apply verb writes; a runtime probe against manifest.blueprints[] would be more dynamic but ties the shell to the deploy-target having filesystem read access, which not every deploy target grants. The sidecar contract is deterministic and cacheable.",
37
+ "notes": "Known mechanism-reach gap: the shell contract cannot prove keyboard focus does not escape the surface in every frameworks rendering; project-side smoke tests supplement the pack. See README `Known mechanism-reach gaps`.",
38
+ "createdAt": "2026-09-05T01:30:00Z",
39
+ "updatedAt": "2026-09-05T01:30:00Z"
40
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "tacId": "TAC-2202-application-admin-console-capability-discovery",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Capability discovery",
8
+ "purpose": "Owns the apply-time reader that inspects every applied blueprints source blueprint.json for its capabilities[] declaration and composes the union as appliedCapabilities. Owns the write side that persists the discovered union plus elicit answers into rcf/blueprints/application-admin-console.applied.json. Runs at apply time (packages/rcf-lite/src/blueprint/capabilities.js); the shell reads the sidecar the runtime writes.",
9
+ "responsibilities": [
10
+ "Enumerate manifest.blueprints[] and read each applied blueprints source blueprint.json to extract its capabilities[] (AC-21107-1).",
11
+ "Compose the union of applied capabilities as a sorted string array (deterministic sidecar output).",
12
+ "Run the elicitation phase gated on the discovered capabilities: an elicit whose when.requiresCapability list has no overlap with the union does not prompt (AC-21109-2).",
13
+ "Write the sidecar file with appliedCapabilities[], appliedElicitations{}, allowNoAuthYet? and notes? (AC-21107-1)."
14
+ ],
15
+ "internalStructure": "Two helpers: discoverAppliedCapabilities(applied, projectRoot) reads and unions; writeSidecar({slug, version, appliedAt, appliedCapabilities, appliedElicitations, allowNoAuthYet?, notes?}) writes the file. Both live in packages/rcf-lite/src/blueprint/capabilities.js.",
16
+ "interfaces": [
17
+ {
18
+ "name": "discoverAppliedCapabilities",
19
+ "kind": "function",
20
+ "description": "Returns { union: string[], perSlug: Record<slug, string[]> }."
21
+ },
22
+ {
23
+ "name": "runElicitationPhase",
24
+ "kind": "function",
25
+ "description": "Applies each elicits[] entry against the discovered capability set and coerces answers per kind."
26
+ },
27
+ {
28
+ "name": "writeSidecar",
29
+ "kind": "function",
30
+ "description": "Writes rcf/blueprints/${slug}.applied.json."
31
+ }
32
+ ],
33
+ "dependencies": [
34
+ {
35
+ "name": "Blueprint loader",
36
+ "kind": "external",
37
+ "description": "Reads each applied blueprints source blueprint.json."
38
+ }
39
+ ],
40
+ "tradeoffs": "Source read-back rather than a schema-carried appliedCapabilities field on the applied record: the rcf-schemas 0.6.0 appliedBlueprintRecord is closed under additionalProperties:false, so a new field cannot land without a schema minor bump. The sidecar decouples the mechanism from the schema release cycle. A future rcf-schemas minor may add appliedCapabilities directly on the applied record and this TAC would move the write there; the sidecar would remain a supported read path for backward compatibility.",
41
+ "notes": "Reads the applied recordss source string. When the source is a library-qualified ref (wsd:auth-oauth2), the source blueprint is not on this local tree and the reader returns an empty capabilities list; the applied record is skipped from the union.",
42
+ "createdAt": "2026-09-05T01:30:00Z",
43
+ "updatedAt": "2026-09-05T01:30:00Z"
44
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "tacId": "TAC-2203-application-admin-console-permission-matrix",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Permission matrix",
8
+ "purpose": "Owns the roles surface: renders the permission matrix as an ARIA APG grid (role=\"grid\" on the outer element, role=\"row\" on every rank, role=\"rowheader\" on the leftmost cell of each role rank, role=\"columnheader\" on every permission column header, role=\"gridcell\" on inner cells). Each cell announces its permission string on focus (WCAG 4.1.3).",
9
+ "responsibilities": [
10
+ "Render the ARIA APG grid pattern per WAI-ARIA Authoring Practices Guide (AC-21103-1).",
11
+ "Render the Owner + Admin + Member + Viewer baseline in the first four rank rows; elicited additional roles rendered after (AC-21103-2).",
12
+ "Announce every cells permission string plus allowed/denied state via aria-label on focus (AC-21103-1, WCAG 4.1.3)."
13
+ ],
14
+ "internalStructure": "One grid module: computes the matrix rank layout, renders the header rank and the role ranks, wires focus management for two-dimensional keyboard navigation, and drives aria-label from a permission catalogue map. Framework-agnostic per shell contract.",
15
+ "interfaces": [
16
+ {
17
+ "name": "renderMatrix",
18
+ "kind": "factory",
19
+ "description": "renderMatrix({ roles: RoleSpec[], permissions: PermissionSpec[], matrix: Record<roleId, Record<permissionId, boolean>> }) -> { mount(rootElement), unmount() }."
20
+ }
21
+ ],
22
+ "dependencies": [
23
+ {
24
+ "name": "Admin-console shell",
25
+ "kind": "tac",
26
+ "tacId": "TAC-2201-application-admin-console-shell",
27
+ "description": "The matrix mounts inside the shell page-layout."
28
+ }
29
+ ],
30
+ "tradeoffs": "A grid pattern is more expensive to implement than a plain table but is the correct pattern for a keyboard-interactive matrix (per ARIA APG guidance). The pack asserts the pattern is present, not that every cell announces on focus perfectly in every framework: a project-side keyboard smoke complements the pack.",
31
+ "notes": "Consumes the datatable pattern-choice contract (ADR-1801, table vs grid per interactivity) at the shell edge, without namespacing conflicts because admin-console does not contribute an ADR on datatable pattern.",
32
+ "createdAt": "2026-09-05T01:30:00Z",
33
+ "updatedAt": "2026-09-05T01:30:00Z"
34
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "tacId": "TAC-2204-application-admin-console-audit-view",
3
+ "prdId": "PRD-001",
4
+ "tadId": "TAD-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "name": "Audit view",
8
+ "purpose": "Owns the audit-log surface: consumes the application-datatable shell (T-1) for filter chrome, pagination, four state regions and the row enumeration contract. Renders every audit entry with actor / target / before / after / timestamp / correlationId columns; the correlation id is the join key with the applied logging companion.",
9
+ "responsibilities": [
10
+ "Render every audit entry inside the datatable shell (AC-21105-1, AC-21105-2).",
11
+ "Enumerate every row by data-audit-id and expose every column via data-column (AC-21105-1).",
12
+ "Render per-actor and per-target filter chrome via the datatable query adapter (AC-21105-2)."
13
+ ],
14
+ "internalStructure": "A datatable adapter module: maps the audit event stream to the datatable columnsSpec, exposes the entry ids via data-audit-id, and threads the correlationId column through the datatable render.",
15
+ "interfaces": [
16
+ {
17
+ "name": "renderAuditView",
18
+ "kind": "factory",
19
+ "description": "renderAuditView({ eventStream, columns, retentionWindow }) -> { mount(rootElement), unmount() }."
20
+ }
21
+ ],
22
+ "dependencies": [
23
+ {
24
+ "name": "Datatable shell",
25
+ "kind": "tac",
26
+ "tacId": "TAC-1801-application-datatable-shell",
27
+ "description": "Consumed for the table shell contract; the audit view supplies columnsSpec and queryAdapter and delegates the DOM to the datatable."
28
+ },
29
+ {
30
+ "name": "Admin-console shell",
31
+ "kind": "tac",
32
+ "tacId": "TAC-2201-application-admin-console-shell",
33
+ "description": "The audit view mounts inside the shell page-layout."
34
+ }
35
+ ],
36
+ "tradeoffs": "Consuming the datatable shell rather than reimplementing gets ARIA APG grid + WCAG state regions for free; it constrains the audit views UI to the datatable contract. A future audit-specific timeline view supersedes this TAC in its own realisation.",
37
+ "notes": "The retention window is elicited (ADR-2204); the surface itself is capability-gated on auditLog (from the applied logging companion).",
38
+ "createdAt": "2026-09-05T01:30:00Z",
39
+ "updatedAt": "2026-09-05T01:30:00Z"
40
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "usId": "application-admin-console-US-21101",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "The console shell reads the applied capabilities at load and renders navigation only for surfaces that are gated on an applied capability",
8
+ "asA": "admin operator opening the console for the first time",
9
+ "iWant": "the console shell to inspect the applied capability set and render navigation only for surfaces whose gating capability is applied",
10
+ "soThat": "I do not click a link that leads to a surface the project cannot realise on the applied identity blueprint",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21101-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "The console shell reads rcf/blueprints/application-admin-console.applied.json (written by apply at deploy time) and, for each of principalDirectory, roleModel, tenancy, auditLog, renders a nav item ONLY when the capability is present in appliedCapabilities[]. A nav item that would route to a non-applied surface is neither rendered nor keyboard-reachable."
17
+ },
18
+ {
19
+ "id": "AC-21101-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "The shell has a single primary nav landmark (role=\"navigation\" or a nav element) with an accessible name naming the console."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2201-application-admin-console-shell",
27
+ "TAC-2202-application-admin-console-capability-discovery"
28
+ ],
29
+ "tags": [
30
+ "blueprint:application-admin-console"
31
+ ],
32
+ "createdAt": "2026-09-05T01:30:00Z",
33
+ "updatedAt": "2026-09-05T01:30:00Z"
34
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "usId": "application-admin-console-US-21102",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-002",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Users surface lists principals when principalDirectory is applied, and renders access-denied for non-admin",
8
+ "asA": "admin operator managing user directory",
9
+ "iWant": "a users route that lists every principal identified by data-user-id with invite, deactivate, last-active and status columns when the applied auth blueprint declares principalDirectory; and an access-denied state with a request-access control for a principal without admin scope",
10
+ "soThat": "I can see and act on the identity set the applied auth blueprint provides, and non-admin users have a clear next step when they hit the console",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21102-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given an authenticated admin AND an applied auth blueprint declaring principalDirectory, the users table lists every principal with data-user-id on each row, a role column (only when roleModel is applied; else suppressed), a last-active timestamp, and a status column; a principal without admin scope reaching /admin renders an access-denied state with a \"request access\" control routing to POST /api/request-access. Probed by application-admin-console pack check AC-21102-1."
17
+ },
18
+ {
19
+ "id": "AC-21102-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "Each row exposes an invite control for a principal without an active session (data-action=\"invite\") and a deactivate control for an active principal (data-action=\"deactivate\"); the controls are keyboard-reachable buttons."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2201-application-admin-console-shell",
27
+ "TAC-2202-application-admin-console-capability-discovery"
28
+ ],
29
+ "tags": [
30
+ "blueprint:application-admin-console"
31
+ ],
32
+ "createdAt": "2026-09-05T01:30:00Z",
33
+ "updatedAt": "2026-09-05T01:30:00Z"
34
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "usId": "application-admin-console-US-21103",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-003",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Roles surface renders the permission matrix as an ARIA APG grid when roleModel is applied",
8
+ "asA": "admin operator reviewing role permissions",
9
+ "iWant": "the roles route to render Owner, Admin, Member, Viewer as rows and the permission catalogue as columns in a proper ARIA APG grid, each cell announcing its permission string on focus",
10
+ "soThat": "sighted, keyboard-only and screen-reader users all perceive the same permission model",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21103-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given the roles surface AND an applied auth blueprint declaring roleModel, the permission matrix renders as an ARIA APG grid: role=\"grid\" on the outer element, role=\"row\" on every rank (including the header rank), role=\"columnheader\" on every permission column header, role=\"rowheader\" on the leftmost cell of each role rank, role=\"gridcell\" on every inner cell, and each cell carries an aria-label announcing the exact permission string plus the allowed/denied state on focus (WCAG 4.1.3). Probed by pack check AC-21103-1."
17
+ },
18
+ {
19
+ "id": "AC-21103-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "The baseline role set is Owner, Admin, Member, Viewer (ADR-2202); elicited additional roles rendered as extra rank rows, with the baseline four rendered first and additions after."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2201-application-admin-console-shell",
27
+ "TAC-2203-application-admin-console-permission-matrix"
28
+ ],
29
+ "tags": [
30
+ "blueprint:application-admin-console"
31
+ ],
32
+ "createdAt": "2026-09-05T01:30:00Z",
33
+ "updatedAt": "2026-09-05T01:30:00Z"
34
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "usId": "application-admin-console-US-21104",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-004",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Orgs surface renders an org switcher and org-scoped invite only when tenancy is applied",
8
+ "asA": "admin operator on a multi-tenant project",
9
+ "iWant": "the shell to expose an org switcher and the users surface to expose an org-scoped invite when the applied blueprints declare the tenancy capability",
10
+ "soThat": "the console lets me operate on one org at a time without mixing directories across tenants",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21104-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given an applied blueprint declaring tenancy, the shell renders an org switcher control (data-role=\"org-switcher\") on the console header; the users invite path renders an org selector. When tenancy is not applied, neither control is rendered nor reachable. Probed by pack check AC-21104-1."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2201-application-admin-console-shell",
21
+ "TAC-2202-application-admin-console-capability-discovery"
22
+ ],
23
+ "tags": [
24
+ "blueprint:application-admin-console"
25
+ ],
26
+ "createdAt": "2026-09-05T01:30:00Z",
27
+ "updatedAt": "2026-09-05T01:30:00Z"
28
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "usId": "application-admin-console-US-21105",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-005",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Audit-log surface renders the audit stream with correlation id when auditLog is applied",
8
+ "asA": "admin operator reviewing change history",
9
+ "iWant": "an audit-log route that lists every entry identified by data-audit-id with actor, target, before, after, timestamp and correlationId columns when the applied logging companion emits an audit stream",
10
+ "soThat": "I can trace a specific change through the logging pipelines correlation record",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21105-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "Given a role change AND the auditLog capability applied (via observability-logging or a dedicated audit blueprint), an audit-log entry writes with actor, target, before, after, timestamp, and correlationId from the logging companion; the entry surfaces on the audit view table where every row is enumerable by data-audit-id and every cell exposes its column via a data-column attribute. Probed by pack check AC-21105-1."
17
+ },
18
+ {
19
+ "id": "AC-21105-2",
20
+ "testable": true,
21
+ "scope": "runtime",
22
+ "description": "The audit view consumes the application-datatable shell (TAC-2204 depends on TAC-1801-application-datatable-shell), so filter chrome, pagination and the four state regions inherit from the datatable contract."
23
+ }
24
+ ],
25
+ "tacIds": [
26
+ "TAC-2201-application-admin-console-shell",
27
+ "TAC-2204-application-admin-console-audit-view"
28
+ ],
29
+ "tags": [
30
+ "blueprint:application-admin-console"
31
+ ],
32
+ "createdAt": "2026-09-05T01:30:00Z",
33
+ "updatedAt": "2026-09-05T01:30:00Z"
34
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-admin-console-US-21106",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-006",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Access-denied state renders a keyboard-reachable request-access control",
8
+ "asA": "a non-admin user routed to an admin URL",
9
+ "iWant": "a clearly-labelled access-denied state naming why access was refused and a keyboard-reachable request-access control",
10
+ "soThat": "I can request access without leaving the app or contacting an admin out of band",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21106-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "A non-admin principal reaching /admin renders a role=\"region\" with an accessible name naming the denied action (WCAG 2.4.6), a paragraph explaining why access was refused (WCAG 3.3.4), and a request-access control (data-action=\"request-access\") routed to POST /api/request-access. The control announces its state (idle, submitting, submitted) via a polite live region (WCAG 4.1.3)."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2201-application-admin-console-shell"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-admin-console"
24
+ ],
25
+ "createdAt": "2026-09-05T01:30:00Z",
26
+ "updatedAt": "2026-09-05T01:30:00Z"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-admin-console-US-21107",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-001",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "Console shell surfaces are self-configured from the applied capability sidecar at deploy time, not from client-side inference",
8
+ "asA": "admin operator opening the console the same way in every deploy environment",
9
+ "iWant": "the shell to read the applied capability set from a deterministic sidecar file, not to infer from a client-side probe",
10
+ "soThat": "a preview build renders the same nav a production build renders on the same commit",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21107-1",
14
+ "testable": true,
15
+ "scope": "runtime",
16
+ "description": "The console shell reads rcf/blueprints/application-admin-console.applied.json (written by apply at build time) as a build asset served under a stable path (e.g. /admin/caps.json); the shell never runs a runtime probe against manifest.blueprints[] over the network. The sidecar payload keys are appliedCapabilities[], appliedElicitations{} and allowNoAuthYet? per the mechanism spec."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2202-application-admin-console-capability-discovery"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-admin-console"
24
+ ],
25
+ "createdAt": "2026-09-05T01:30:00Z",
26
+ "updatedAt": "2026-09-05T01:30:00Z"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "usId": "application-admin-console-US-21108",
3
+ "prdId": "PRD-001",
4
+ "reqId": "application-admin-console-REQ-003",
5
+ "version": "1.0.0",
6
+ "status": "approved",
7
+ "title": "The console does not declare providesRoles per spec 5.5.3; the mechanism composes at the capability edge instead",
8
+ "asA": "shelf author reasoning about future admin-console-shaped blueprints",
9
+ "iWant": "admin-console v1.0.0 to not declare providesRoles[]; composition with a second admin-console-shaped blueprint happens via capabilities[] and the crossBlueprintOwnership conflict path",
10
+ "soThat": "a specialised console (a vertical admin-console) declares its own capabilities[] and the mechanism reasons about the composition through one grammar, not two",
11
+ "acceptanceCriteria": [
12
+ {
13
+ "id": "AC-21108-1",
14
+ "testable": true,
15
+ "scope": "library",
16
+ "description": "blueprint.json does not declare providesRoles (per spec 5.5.3); the loader is happy (providesRoles is optional). A future admin-console-shaped blueprint composes via capabilities[] and the crossBlueprintOwnership conflict on the same slug family, not via providesRoles[]."
17
+ }
18
+ ],
19
+ "tacIds": [
20
+ "TAC-2202-application-admin-console-capability-discovery"
21
+ ],
22
+ "tags": [
23
+ "blueprint:application-admin-console"
24
+ ],
25
+ "createdAt": "2026-09-05T01:30:00Z",
26
+ "updatedAt": "2026-09-05T01:30:00Z"
27
+ }
@@ -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,35 @@
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
+
24
+ The shelf-wide band registry lives in `packages/rcf-lite/docs/blueprint-authoring.md` section 5.
25
+
26
+ ## Probe pack
27
+
28
+ `probe-packs/application-admin-console.pack.mjs` ships four capability-gated checks anchored to blueprint AC ids:
29
+
30
+ - `AC-21102-1` users directory (fires only when `principalDirectory` is applied)
31
+ - `AC-21103-1` permission matrix (fires only when `roleModel` is applied)
32
+ - `AC-21104-1` org switcher (fires only when `tenancy` is applied)
33
+ - `AC-21105-1` audit-log surface (fires only when `auditLog` is applied)
34
+
35
+ 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.