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.
- package/CHANGELOG.md +23 -0
- package/blueprints/application-admin-console/CHANGELOG.md +11 -0
- package/blueprints/application-admin-console/README.md +98 -0
- package/blueprints/application-admin-console/blueprint.json +226 -0
- package/blueprints/application-admin-console/contributions/adrs/adr-2201-application-admin-console-capability-vocabulary.json +25 -0
- package/blueprints/application-admin-console/contributions/adrs/adr-2202-application-admin-console-baseline-roles.json +25 -0
- package/blueprints/application-admin-console/contributions/adrs/adr-2203-application-admin-console-invite-transport.json +20 -0
- package/blueprints/application-admin-console/contributions/adrs/adr-2204-application-admin-console-audit-retention.json +20 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-001.json +18 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-002.json +18 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-003.json +18 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-004.json +18 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-005.json +18 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-006.json +18 -0
- package/blueprints/application-admin-console/contributions/tacs/tac-2201-application-admin-console-shell.json +40 -0
- package/blueprints/application-admin-console/contributions/tacs/tac-2202-application-admin-console-capability-discovery.json +44 -0
- package/blueprints/application-admin-console/contributions/tacs/tac-2203-application-admin-console-permission-matrix.json +34 -0
- package/blueprints/application-admin-console/contributions/tacs/tac-2204-application-admin-console-audit-view.json +40 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21101.json +34 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21102.json +34 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21103.json +34 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21104.json +28 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21105.json +34 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21106.json +27 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21107.json +27 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21108.json +27 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21109.json +33 -0
- package/blueprints/application-admin-console/docs/topics.md +35 -0
- package/blueprints/application-admin-console/guide/application-admin-console.md +29 -0
- package/blueprints/application-admin-console/probe-packs/application-admin-console.pack.mjs +182 -0
- package/blueprints/application-api-rest/docs/topics.md +5 -0
- package/blueprints/application-charts/CHANGELOG.md +12 -0
- package/blueprints/application-charts/README.md +73 -0
- package/blueprints/application-charts/blueprint.json +26 -0
- package/blueprints/application-charts/contributions/adrs/adr-1901-application-charts-engine-choice.json +25 -0
- package/blueprints/application-charts/contributions/adrs/adr-1902-application-charts-accessible-palette.json +25 -0
- package/blueprints/application-charts/contributions/adrs/adr-1903-application-charts-motion.json +25 -0
- package/blueprints/application-charts/contributions/requirements/application-charts-req-001.json +15 -0
- package/blueprints/application-charts/contributions/requirements/application-charts-req-002.json +15 -0
- package/blueprints/application-charts/contributions/requirements/application-charts-req-003.json +15 -0
- package/blueprints/application-charts/contributions/requirements/application-charts-req-004.json +15 -0
- package/blueprints/application-charts/contributions/tacs/tac-1901-application-charts-render-shell.json +42 -0
- package/blueprints/application-charts/contributions/tacs/tac-1902-application-charts-keyboard-traversal.json +40 -0
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18101.json +35 -0
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18102.json +35 -0
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18103.json +35 -0
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18104.json +35 -0
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18105.json +35 -0
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18106.json +35 -0
- package/blueprints/application-charts/docs/topics.md +37 -0
- package/blueprints/application-charts/guide/application-charts.md +44 -0
- package/blueprints/application-charts/probe-packs/application-charts.pack.mjs +191 -0
- package/blueprints/application-dashboard/CHANGELOG.md +10 -0
- package/blueprints/application-dashboard/README.md +102 -0
- package/blueprints/application-dashboard/assets/guidance/dashboard-design.md +124 -0
- package/blueprints/application-dashboard/blueprint.json +29 -0
- package/blueprints/application-dashboard/contributions/adrs/adr-2001-application-dashboard-primary-kpi-enum.json +25 -0
- package/blueprints/application-dashboard/contributions/adrs/adr-2002-application-dashboard-timeframe-presets.json +25 -0
- package/blueprints/application-dashboard/contributions/adrs/adr-2003-application-dashboard-export-formats.json +25 -0
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-001.json +15 -0
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-002.json +15 -0
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-003.json +15 -0
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-004.json +15 -0
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-005.json +15 -0
- package/blueprints/application-dashboard/contributions/tacs/tac-2001-application-dashboard-tile-grid.json +47 -0
- package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +41 -0
- package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19101.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19102.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19103.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19104.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19105.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +35 -0
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19107.json +35 -0
- package/blueprints/application-dashboard/docs/topics.md +43 -0
- package/blueprints/application-dashboard/guide/application-dashboard.md +48 -0
- package/blueprints/application-dashboard/probe-packs/application-dashboard.pack.mjs +231 -0
- package/blueprints/application-datatable/CHANGELOG.md +8 -0
- package/blueprints/application-datatable/README.md +43 -0
- package/blueprints/application-datatable/blueprint.json +33 -0
- package/blueprints/application-datatable/contributions/adrs/adr-1801-application-datatable-pattern-choice.json +25 -0
- package/blueprints/application-datatable/contributions/adrs/adr-1802-application-datatable-url-state.json +20 -0
- package/blueprints/application-datatable/contributions/adrs/adr-1803-application-datatable-page-size.json +20 -0
- package/blueprints/application-datatable/contributions/adrs/adr-1804-application-datatable-selection-persistence.json +20 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-001.json +15 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-002.json +15 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-003.json +15 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-004.json +15 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-005.json +15 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-006.json +15 -0
- package/blueprints/application-datatable/contributions/tacs/tac-1801-application-datatable-shell.json +50 -0
- package/blueprints/application-datatable/contributions/tacs/tac-1802-application-datatable-query-adapter.json +39 -0
- package/blueprints/application-datatable/contributions/tacs/tac-1803-application-datatable-selection-model.json +28 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17101.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17102.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17103.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17104.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17105.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17106.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17107.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17108.json +44 -0
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17109.json +44 -0
- package/blueprints/application-datatable/docs/topics.md +35 -0
- package/blueprints/application-datatable/guide/application-datatable.md +38 -0
- package/blueprints/application-datatable/probe-packs/application-datatable.pack.mjs +240 -0
- package/blueprints/application-error-handling/docs/topics.md +5 -0
- package/blueprints/application-notifications-in-app/CHANGELOG.md +9 -0
- package/blueprints/application-notifications-in-app/README.md +80 -0
- package/blueprints/application-notifications-in-app/blueprint.json +30 -0
- package/blueprints/application-notifications-in-app/contributions/adrs/adr-2101-application-notifications-in-app-live-region-role-mapping.json +25 -0
- package/blueprints/application-notifications-in-app/contributions/adrs/adr-2102-application-notifications-in-app-toast-timeout-floor.json +25 -0
- package/blueprints/application-notifications-in-app/contributions/adrs/adr-2103-application-notifications-in-app-retention-window.json +25 -0
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-001.json +15 -0
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-002.json +15 -0
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-003.json +15 -0
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-004.json +15 -0
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-005.json +15 -0
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +46 -0
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +52 -0
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2103-application-notifications-in-app-preferences.json +40 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +35 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +35 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +35 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20104.json +35 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +35 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20106.json +26 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20107.json +26 -0
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20108.json +26 -0
- package/blueprints/application-notifications-in-app/docs/topics.md +39 -0
- package/blueprints/application-notifications-in-app/guide/application-notifications-in-app.md +47 -0
- package/blueprints/application-notifications-in-app/probe-packs/application-notifications-in-app.pack.mjs +328 -0
- package/blueprints/application-spa/docs/topics.md +5 -0
- package/blueprints/delivery-ci-workflows/docs/topics.md +5 -0
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +5 -0
- package/blueprints/email-smtp-resend/docs/topics.md +5 -0
- package/blueprints/observability-essentials/docs/topics.md +5 -0
- package/blueprints/observability-logging/CHANGELOG.md +5 -0
- package/blueprints/observability-logging/README.md +1 -1
- package/blueprints/observability-logging/blueprint.json +113 -21
- package/blueprints/observability-logging/docs/topics.md +5 -0
- package/blueprints/observability-probe-endpoints/docs/topics.md +5 -0
- package/blueprints/persistence-data-d1/docs/topics.md +5 -0
- package/blueprints/persistence-data-sqlite/docs/topics.md +5 -0
- package/blueprints/security-auth-clerk/CHANGELOG.md +5 -0
- package/blueprints/security-auth-clerk/blueprint.json +2 -1
- package/blueprints/security-auth-clerk/docs/topics.md +5 -0
- package/blueprints/security-auth-keycloak/CHANGELOG.md +5 -0
- package/blueprints/security-auth-keycloak/blueprint.json +2 -1
- package/blueprints/security-auth-keycloak/docs/topics.md +5 -0
- package/blueprints/security-auth-magic-link/CHANGELOG.md +5 -0
- package/blueprints/security-auth-magic-link/blueprint.json +2 -1
- package/blueprints/security-auth-magic-link/docs/topics.md +5 -0
- package/blueprints/security-auth-oauth2/CHANGELOG.md +5 -0
- package/blueprints/security-auth-oauth2/blueprint.json +2 -1
- package/blueprints/security-auth-oauth2/docs/topics.md +5 -0
- package/blueprints/security-secrets-management/docs/topics.md +5 -0
- package/fixtures/canary-manifest.json +9 -9
- package/package.json +2 -2
- package/rcf/code-nodes/cn-106.json +13 -0
- package/rcf/code-nodes/cn-107.json +14 -0
- package/rcf/code-nodes/cn-108.json +13 -0
- package/rcf/code-nodes/cn-109.json +12 -0
- package/rcf/code-nodes/cn-110.json +12 -0
- package/rcf/code-nodes/cn-111.json +14 -0
- package/rcf/code-nodes/cn-112.json +14 -0
- package/rcf/code-nodes/cn-113.json +12 -0
- package/rcf/code-nodes/cn-114.json +13 -0
- package/rcf/code-nodes/cn-115.json +13 -0
- package/rcf/code-nodes/cn-116.json +12 -0
- package/rcf/code-nodes/cn-117.json +13 -0
- package/rcf/code-nodes/cn-118.json +13 -0
- package/rcf/code-nodes/cn-119.json +13 -0
- package/rcf/code-nodes/cn-120.json +13 -0
- package/rcf/code-nodes/cn-121.json +12 -0
- package/rcf/code-nodes/cn-122.json +12 -0
- package/rcf/code-nodes/cn-123.json +13 -0
- package/rcf/code-nodes/cn-124.json +13 -0
- package/rcf/code-nodes/cn-125.json +13 -0
- package/rcf/code-nodes/cn-126.json +13 -0
- package/rcf/code-nodes/cn-127.json +12 -0
- package/rcf/code-nodes/cn-128.json +14 -0
- package/rcf/code-nodes/cn-129.json +14 -0
- package/rcf/code-nodes/cn-130.json +14 -0
- package/rcf/code-nodes/cn-131.json +15 -0
- package/rcf/code-nodes/cn-132.json +12 -0
- package/rcf/code-nodes/cn-133.json +13 -0
- package/rcf/fbs/fbs-036.json +22 -0
- package/rcf/fbs/fbs-037.json +19 -0
- package/rcf/fbs/fbs-038.json +19 -0
- package/rcf/fbs/fbs-039.json +21 -0
- package/rcf/fbs/fbs-040.json +20 -0
- package/rcf/fbs/fbs-041.json +13 -0
- package/rcf/fbs/fbs-042.json +13 -0
- package/rcf/requirements/req-017.json +18 -0
- package/rcf/requirements/req-018.json +18 -0
- package/rcf/requirements/req-019.json +38 -0
- package/rcf/requirements/req-020.json +13 -0
- package/rcf/requirements/req-021.json +13 -0
- package/rcf/requirements/req-022.json +13 -0
- package/rcf/requirements/req-023.json +14 -0
- package/rcf/test-suites/ts-046.json +78 -0
- package/rcf/test-suites/ts-047.json +54 -0
- package/rcf/test-suites/ts-048.json +54 -0
- package/rcf/test-suites/ts-049.json +70 -0
- package/rcf/test-suites/ts-050.json +69 -0
- package/rcf/test-suites/ts-051.json +22 -0
- package/rcf/test-suites/ts-052.json +20 -0
- package/rcf/user-stories/us-1701.json +56 -0
- package/rcf/user-stories/us-1801.json +40 -0
- package/rcf/user-stories/us-1901.json +40 -0
- package/rcf/user-stories/us-2001.json +50 -0
- package/rcf/user-stories/us-2101.json +45 -0
- package/rcf/user-stories/us-2201.json +60 -0
- package/rcf/user-stories/us-2301.json +51 -0
- package/releases/releases.yaml +11 -1
- package/src/blueprint/apply.js +98 -1
- package/src/blueprint/capabilities.js +318 -0
- package/src/blueprint/loader.js +247 -0
- package/src/browser-verify/boot.js +180 -0
- package/src/browser-verify/index.js +13 -0
- package/src/browser-verify/manifest-writer.js +31 -6
- package/src/browser-verify/pack-browser.js +294 -0
- package/src/browser-verify/pack-loader.js +176 -0
- package/src/browser-verify/pack-runner.js +193 -0
- package/src/browser-verify/pack-schema.js +155 -0
- package/src/browser-verify/runner.js +24 -1
- package/src/cli/blueprint.js +92 -0
- package/src/cli/browser-verify.js +147 -7
- package/src/core/errors/index.js +7 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T21:08:44.011Z",
|
|
3
|
+
"updatedAt": "2026-09-04T21:09:34.444Z",
|
|
4
|
+
"purpose": "Cover AC-1901-1..5 via unit tests over the shipped application-charts blueprint's contribution counts (four REQs, six USs, two TACs, three ADRs, 15 contributions total), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids and every check carrying a description, the pack schema accepting the pack's applicability predicate (references route and tacIds), the sample-app fixture exporting startServer serving a chart route with two-series bar and line charts (colour plus pattern plus direct label) and a text-alternative table with keyboard focus and reduced-motion suppression, and the negative-run behaviour on the ?break=table, ?break=pattern and ?break=keyboard switches.",
|
|
5
|
+
"testLevel": "unit",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-1901-1",
|
|
8
|
+
"AC-1901-2",
|
|
9
|
+
"AC-1901-3",
|
|
10
|
+
"AC-1901-4",
|
|
11
|
+
"AC-1901-5"
|
|
12
|
+
],
|
|
13
|
+
"id": "TS-048",
|
|
14
|
+
"usId": "US-1901",
|
|
15
|
+
"title": "application-charts v1.0.0 shelf shape and probe pack cross-check",
|
|
16
|
+
"testCases": [
|
|
17
|
+
{
|
|
18
|
+
"id": "TC-048-blueprint-json-shape",
|
|
19
|
+
"acId": "AC-1901-1",
|
|
20
|
+
"description": "blueprint.json declares slug application-charts, version 1.0.0, category application, 15 contributions in 4 REQ / 6 US / 2 TAC / 3 ADR groups, and suggestedCompanions declares logging and errorHandling",
|
|
21
|
+
"status": "pending",
|
|
22
|
+
"testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts: blueprint.json declares the ratified shape (TC-048-blueprint-json-shape)"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "TC-048-applies-clean",
|
|
26
|
+
"acId": "AC-1901-2",
|
|
27
|
+
"description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 4 REQs and 6 USs land under the application-charts prefix",
|
|
28
|
+
"status": "pending",
|
|
29
|
+
"testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts: applies cleanly on a fresh init project and adds 15 documents to the tree (TC-048-applies-clean)"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "TC-048-pack-checks-cross-check",
|
|
33
|
+
"acId": "AC-1901-3",
|
|
34
|
+
"description": "Every pack check id resolves to an AC id contributed by the blueprint; expected three check ids in the same order as the spec (AC-18102-1, AC-18103-1, AC-18104-1) and every check carries a description field",
|
|
35
|
+
"status": "pending",
|
|
36
|
+
"testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts: every AC id in each contributed US matches the pack check ids and every check carries a description (TC-048-pack-checks-cross-check)"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "TC-048-fixture-charts-render",
|
|
40
|
+
"acId": "AC-1901-4",
|
|
41
|
+
"description": "Sample-app fixture startServer renders a chart route with two-series bar and line charts (colour plus pattern plus direct label), a visually-hidden focus-reachable table, keyboard-focusable data points and a reduced-motion CSS rule; loader discovery finds the shipped pack against an applied scratch project",
|
|
42
|
+
"status": "pending",
|
|
43
|
+
"testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts sample-app fixture: startServer renders the chart shell (TC-048-fixture-charts-render)"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "TC-048-negative-runs",
|
|
47
|
+
"acId": "AC-1901-5",
|
|
48
|
+
"description": "The pack refuses ship on each broken variant: ?break=table triggers verdict fail on AC-18103-1; ?break=pattern triggers verdict fail on AC-18102-1; ?break=keyboard triggers verdict fail on AC-18104-1; every failure records severity block and the aggregate verdict is block",
|
|
49
|
+
"status": "pending",
|
|
50
|
+
"testPointer": "test/blueprint/application-charts-anatomy.test.js::application-charts sample-app fixture: break switches refuse ship on each surface (TC-048-negative-runs)"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"status": "draft"
|
|
54
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T22:10:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-04T22:10:00.000Z",
|
|
4
|
+
"purpose": "Cover AC-2001-1..7 via unit tests over the shipped application-dashboard blueprint's contribution counts (five REQs, seven USs, three TACs, three ADRs, 18 contributions total), the packaged design-guidance asset shape (eight sections and at least five https citations), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids and every check carrying a description, the pack schema accepting the pack's applicability predicate (references tacIds), the sample-app fixture exporting startServer serving a dashboard route with a primary-KPI-top-left tile grid, a paired chart region, a timeframe preset picker refetching every tile with the same from/to boundary and matching as-of stamp, per-tile four states, an export handle, a request log surface and a reflow to one column at 360, and the negative-run behaviour on the ?break=kpi-position, ?break=fanout and ?break=state-aria switches, plus a unit test for the pack-browser resize seam extension.",
|
|
5
|
+
"testLevel": "unit",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-2001-1",
|
|
8
|
+
"AC-2001-2",
|
|
9
|
+
"AC-2001-3",
|
|
10
|
+
"AC-2001-4",
|
|
11
|
+
"AC-2001-5",
|
|
12
|
+
"AC-2001-6",
|
|
13
|
+
"AC-2001-7"
|
|
14
|
+
],
|
|
15
|
+
"id": "TS-049",
|
|
16
|
+
"usId": "US-2001",
|
|
17
|
+
"title": "application-dashboard v1.0.0 shelf shape, packaged guidance, probe pack cross-check and resize seam",
|
|
18
|
+
"testCases": [
|
|
19
|
+
{
|
|
20
|
+
"id": "TC-049-blueprint-json-shape",
|
|
21
|
+
"acId": "AC-2001-1",
|
|
22
|
+
"description": "blueprint.json declares slug application-dashboard, version 1.0.0, category application, 18 contributions in 5 REQ / 7 US / 3 TAC / 3 ADR groups, providesRoles empty array, suggestedCompanions declares logging and errorHandling",
|
|
23
|
+
"status": "pending",
|
|
24
|
+
"testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: blueprint.json declares the ratified shape (TC-049-blueprint-json-shape)"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "TC-049-applies-clean",
|
|
28
|
+
"acId": "AC-2001-2",
|
|
29
|
+
"description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 5 REQs and 7 USs land under the application-dashboard prefix",
|
|
30
|
+
"status": "pending",
|
|
31
|
+
"testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: applies cleanly on a fresh init project and adds 18 documents to the tree (TC-049-applies-clean)"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "TC-049-guidance-asset",
|
|
35
|
+
"acId": "AC-2001-3",
|
|
36
|
+
"description": "assets/guidance/dashboard-design.md carries the eight ratified section headings and at least five https:// citations from the named sources",
|
|
37
|
+
"status": "pending",
|
|
38
|
+
"testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: packaged design-guidance asset carries eight sections and five https citations (TC-049-guidance-asset)"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "TC-049-pack-checks-cross-check",
|
|
42
|
+
"acId": "AC-2001-4",
|
|
43
|
+
"description": "Every pack check id resolves to an AC id contributed by the blueprint; expected three check ids in the spec's order (AC-19102-1, AC-19104-1, AC-19103-1); every check carries a description field; applicability predicate references tacIds",
|
|
44
|
+
"status": "pending",
|
|
45
|
+
"testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard: every pack check id matches a contributed AC id, every check carries a description, appliesTo binds tacIds (TC-049-pack-checks-cross-check)"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "TC-049-fixture-dashboard-render",
|
|
49
|
+
"acId": "AC-2001-5",
|
|
50
|
+
"description": "Sample-app fixture startServer renders a dashboard route with a primary KPI top-left tile, a paired chart region, timeframe preset controls, per-tile state switches, an export handle and a request log; loader discovery finds the shipped pack against an applied scratch project",
|
|
51
|
+
"status": "pending",
|
|
52
|
+
"testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard sample-app fixture: startServer renders the dashboard shell (TC-049-fixture-dashboard-render)"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "TC-049-negative-runs",
|
|
56
|
+
"acId": "AC-2001-6",
|
|
57
|
+
"description": "The pack refuses ship on each broken variant: ?break=kpi-position triggers verdict fail on AC-19102-1; ?break=fanout triggers verdict fail on AC-19104-1; ?break=state-aria triggers verdict fail on AC-19103-1; every failure records severity block and the aggregate verdict is block",
|
|
58
|
+
"status": "pending",
|
|
59
|
+
"testPointer": "test/blueprint/application-dashboard-anatomy.test.js::application-dashboard sample-app fixture: break switches refuse ship on each surface (TC-049-negative-runs)"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "TC-049-resize-seam",
|
|
63
|
+
"acId": "AC-2001-7",
|
|
64
|
+
"description": "pack-browser exposes resize(width, height); the project-route handle drives page.setViewportSize with the given dimensions and the same handle can be re-queried through window.innerWidth after a resize call",
|
|
65
|
+
"status": "pending",
|
|
66
|
+
"testPointer": "test/browser-verify/pack-browser-resize.test.js::pack-browser: resize dimension normalisation rounds finite positive numbers (TC-049-resize-seam)"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"status": "draft"
|
|
70
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T23:59:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-04T23:59:00.000Z",
|
|
4
|
+
"purpose": "Cover AC-2101-1..6 via unit tests over the shipped application-notifications-in-app blueprint's contribution counts (five REQs, eight USs, three TACs, three ADRs, 19 contributions total), the pack-loader accepting the shipped pack file with every check id cross-checked against the blueprint's contributed AC ids, every check carrying a description, and the AC-20101-1 description containing the word 'preseeded' per section 9 T-4 row, the pack schema accepting the pack's applicability predicate (references BOTH tacIds AND route), the sample-app fixture exporting startServer serving the three routes with the live-region preseeding, the notification centre backlog, the acknowledge round-trip and the preferences UI, and the negative-run behaviour on the ?break=preseed, ?break=role, ?break=timeout and ?break=ack switches, plus the family-prefix reservation documented in the blueprint README and every shelf topics.md registry row.",
|
|
5
|
+
"testLevel": "unit",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-2101-1",
|
|
8
|
+
"AC-2101-2",
|
|
9
|
+
"AC-2101-3",
|
|
10
|
+
"AC-2101-4",
|
|
11
|
+
"AC-2101-5",
|
|
12
|
+
"AC-2101-6"
|
|
13
|
+
],
|
|
14
|
+
"id": "TS-050",
|
|
15
|
+
"usId": "US-2101",
|
|
16
|
+
"title": "application-notifications-in-app v1.0.0 shelf shape, probe pack cross-check, sample-app fixture and family-prefix reservation",
|
|
17
|
+
"testCases": [
|
|
18
|
+
{
|
|
19
|
+
"id": "TC-050-blueprint-json-shape",
|
|
20
|
+
"acId": "AC-2101-1",
|
|
21
|
+
"description": "blueprint.json declares slug application-notifications-in-app, version 1.0.0, category application, 19 contributions in 5 REQ / 8 US / 3 TAC / 3 ADR groups, providesRoles absent, suggestedCompanions declares logging and errorHandling",
|
|
22
|
+
"status": "pending",
|
|
23
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: blueprint.json declares the ratified shape (TC-050-blueprint-json-shape)"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "TC-050-applies-clean",
|
|
27
|
+
"acId": "AC-2101-2",
|
|
28
|
+
"description": "Fresh init project applies the blueprint cleanly; walkTree produces zero errors; 5 REQs and 8 USs land under the application-notifications-in-app prefix",
|
|
29
|
+
"status": "pending",
|
|
30
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: applies cleanly on a fresh init project and adds 19 documents to the tree (TC-050-applies-clean)"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "TC-050-pack-checks-cross-check",
|
|
34
|
+
"acId": "AC-2101-3",
|
|
35
|
+
"description": "Every pack check id resolves to an AC id contributed by the blueprint; expected three check ids (AC-20101-1, AC-20102-1, AC-20103-1); every check carries a description; AC-20101-1 description contains the word 'preseeded' per spec section 9 T-4 row; applicability predicate references BOTH tacIds and route",
|
|
36
|
+
"status": "pending",
|
|
37
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: every pack check id matches a contributed AC id, description discipline holds, appliesTo binds tacIds AND route (TC-050-pack-checks-cross-check)"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "TC-050-fixture-preseeding",
|
|
41
|
+
"acId": "AC-2101-4",
|
|
42
|
+
"description": "Sample-app fixture startServer serves the main, centre and preferences routes; every route preseeds both live-region wrappers empty at load; the centre lists the seeded backlog with data-notification-id enumeration and acknowledge / mark-read / mark-all-read controls; the preferences route renders category silence toggles and sibling-channel sections disabled",
|
|
43
|
+
"status": "pending",
|
|
44
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app sample-app fixture: preseeds live regions on every route (TC-050-fixture-preseeding)"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "TC-050-fixture-acknowledge",
|
|
48
|
+
"acId": "AC-2101-4",
|
|
49
|
+
"description": "POST /api/notifications/acknowledge updates the seeded delivery-log row's acknowledgedAt and returns {ok:true}; GET /api/delivery-log returns the seeded rows; /__requests mirrors the server-side record log",
|
|
50
|
+
"status": "pending",
|
|
51
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app sample-app fixture: acknowledge round-trips through /api/notifications/acknowledge and delivery-log endpoint returns the seeded rows (TC-050-fixture-acknowledge)"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "TC-050-negative-runs",
|
|
55
|
+
"acId": "AC-2101-5",
|
|
56
|
+
"description": "?break=preseed drops the wrappers from the initial DOM; ?break=role inverts the priority-to-role mapping in the client script (an error toast lands in the polite wrapper as role=status); ?break=timeout advertises a two-second floor on data-toast-timeout-floor-seconds; ?break=ack renders the acknowledge control with no click POST",
|
|
57
|
+
"status": "pending",
|
|
58
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app sample-app fixture: break switches surface the four defects on the DOM (TC-050-negative-runs)"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "TC-050-family-prefix-reservation",
|
|
62
|
+
"acId": "AC-2101-6",
|
|
63
|
+
"description": "The family-prefix reservation is present in the blueprint README (a paragraph naming application-notifications- reserved for the sibling channels -email, -push, -webhook) and in the shelf band registry table in every applying blueprint's docs/topics.md",
|
|
64
|
+
"status": "pending",
|
|
65
|
+
"testPointer": "test/blueprint/application-notifications-in-app-anatomy.test.js::application-notifications-in-app: family-prefix reservation documented in blueprint README and own topics.md (TC-050-family-prefix-reservation)"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"status": "draft"
|
|
69
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-05T01:30:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-05T01:30:00.000Z",
|
|
4
|
+
"purpose": "Cover AC-2201-1..9 via unit tests over the blueprint loader accepting capabilities[], elicits[] and requiresAppliedCapabilities with shape validation, applyBlueprint discovering applied capabilities from the applied blueprints source blueprint.json files, refusing on a bare-SPA project with the spec 5.5.1 message, honouring --allow-no-auth-yet, running the elicitation phase with --answer and --answers, writing the sidecar rcf/blueprints/${slug}.applied.json with appliedCapabilities and appliedElicitations, the four shelf auth blueprints declaring their capabilities[] in their v1.1.0 minor bumps with matching CHANGELOG entries, and docs/blueprint-authoring.md section 6a carrying the extended capability vocabulary table.",
|
|
5
|
+
"testLevel": "unit",
|
|
6
|
+
"acIds": ["AC-2201-1", "AC-2201-2", "AC-2201-3", "AC-2201-4", "AC-2201-5", "AC-2201-6", "AC-2201-7", "AC-2201-8", "AC-2201-9"],
|
|
7
|
+
"id": "TS-051",
|
|
8
|
+
"usId": "US-2201",
|
|
9
|
+
"title": "Capability-declaration mechanism loader and apply verb behaviour; four auth-blueprint 1.1.0 minor adoption",
|
|
10
|
+
"testCases": [
|
|
11
|
+
{"id": "TC-051-loader-capabilities-shape", "acId": "AC-2201-1", "description": "loader accepts capabilities[] on shape; refuses empty array, refuses non-string entries, refuses non-camelCase strings", "status": "pending", "testPointer": "test/blueprint/capabilities-loader.test.js::loader accepts capabilities[] shape and refuses malformed variants (TC-051-loader-capabilities-shape)"},
|
|
12
|
+
{"id": "TC-051-loader-elicits-shape", "acId": "AC-2201-2", "description": "loader accepts elicits[] on shape; refuses empty array, refuses invalid kind, refuses em-dash in prompt, refuses missing options on kind=enum", "status": "pending", "testPointer": "test/blueprint/capabilities-loader.test.js::loader accepts elicits[] shape and refuses malformed variants (TC-051-loader-elicits-shape)"},
|
|
13
|
+
{"id": "TC-051-loader-requires-shape", "acId": "AC-2201-3", "description": "loader accepts requiresAppliedCapabilities object shape; refuses empty capabilities array, refuses non-kebab allowSkipFlag", "status": "pending", "testPointer": "test/blueprint/capabilities-loader.test.js::loader accepts requiresAppliedCapabilities shape and refuses malformed variants (TC-051-loader-requires-shape)"},
|
|
14
|
+
{"id": "TC-051-apply-discovery-refuse", "acId": "AC-2201-4", "description": "applyBlueprint returns a requiresAppliedCapabilities rcfError when no applied blueprint declares any required capability and allowNoAuthYet is false; message body includes the spec 5.5.1 verbatim opening line and lists the currently-applied blueprints", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply refuses with requiresAppliedCapabilities rcfError on a bare project (TC-051-apply-discovery-refuse)"},
|
|
15
|
+
{"id": "TC-051-apply-allow-skip", "acId": "AC-2201-5", "description": "applyBlueprint with allowNoAuthYet true writes contributions and sidecar with allowNoAuthYet true and a notes string naming the no-auth-yet state; manifest applied record is untouched", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply honours allowNoAuthYet and writes sidecar with notes (TC-051-apply-allow-skip)"},
|
|
16
|
+
{"id": "TC-051-elicit-answers", "acId": "AC-2201-6", "description": "applyBlueprint reads elicitAnswers map; every elicit whose when-predicate resolves true against discovered capabilities is coerced by kind; missing required answer returns validation rcfError naming id", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply elicitation phase coerces answers by kind and refuses missing required (TC-051-elicit-answers)"},
|
|
17
|
+
{"id": "TC-051-sidecar-write", "acId": "AC-2201-7", "description": "applyBlueprint writes rcf/blueprints/${slug}.applied.json with slug, version, appliedAt, appliedCapabilities and appliedElicitations; re-apply on same version rewrites the file idempotently", "status": "pending", "testPointer": "test/blueprint/capabilities-apply.test.js::apply writes sidecar with appliedCapabilities and appliedElicitations idempotently (TC-051-sidecar-write)"},
|
|
18
|
+
{"id": "TC-051-auth-minors", "acId": "AC-2201-8", "description": "The four shelf auth blueprints declare capabilities[] and correct new versions; each CHANGELOG.md carries a new entry naming the capabilities added and citing spec section 5.5.2", "status": "pending", "testPointer": "test/blueprint/capabilities-auth-minors.test.js::the four shelf auth blueprints declare capabilities[] and matching CHANGELOG entries (TC-051-auth-minors)"},
|
|
19
|
+
{"id": "TC-051-docs-section-6a", "acId": "AC-2201-9", "description": "packages/rcf-lite/docs/blueprint-authoring.md section 6a includes the capability vocabulary table with the four capability strings and their shelf providers; the section text cross-references capabilities[] and requiresAppliedCapabilities as loader fields", "status": "pending", "testPointer": "test/blueprint/capabilities-auth-minors.test.js::docs blueprint-authoring section 6a carries the capability vocabulary table (TC-051-docs-section-6a)"}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-05T01:30:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-05T01:30:00.000Z",
|
|
4
|
+
"purpose": "Cover AC-2301-1..7 via unit tests over the shipped application-admin-console blueprint.json contribution shape (23 contributions in 6 REQ / 9 US / 4 TAC / 4 ADR groups), the requiresAppliedCapabilities and elicits[] declarations, the pack-loader accepting the shipped pack file with every check id cross-checked against blueprint AC ids, the pack appliesTo predicate discipline (references BOTH tacIds and route), the sample-app fixture serving the console shell with the ARIA APG grid permission matrix, the CAPS switch surface selector, the users directory, org switcher, audit-log table with correlation id, access-denied and request-access control, and the negative-run behaviour on the ?break=matrix-grid, ?break=denied and ?break=audit-fields switches.",
|
|
5
|
+
"testLevel": "unit",
|
|
6
|
+
"acIds": ["AC-2301-1", "AC-2301-2", "AC-2301-3", "AC-2301-4", "AC-2301-5", "AC-2301-6", "AC-2301-7"],
|
|
7
|
+
"id": "TS-052",
|
|
8
|
+
"usId": "US-2301",
|
|
9
|
+
"title": "application-admin-console v1.0.0 shelf shape, capability discovery, probe pack cross-check and sample-app fixture",
|
|
10
|
+
"testCases": [
|
|
11
|
+
{"id": "TC-052-blueprint-json-shape", "acId": "AC-2301-1", "description": "blueprint.json declares 23 contributions with requiresAppliedCapabilities and elicits[]", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::blueprint.json declares 23 contributions with requiresAppliedCapabilities and elicits[] (TC-052-blueprint-json-shape)"},
|
|
12
|
+
{"id": "TC-052-applies-clean-with-override", "acId": "AC-2301-2", "description": "Fresh init project applies admin-console --allow-no-auth-yet and writes sidecar with allowNoAuthYet true", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::apply --allow-no-auth-yet on bare SPA writes sidecar with allowNoAuthYet:true and empty appliedCapabilities (TC-052-applies-clean-with-override)"},
|
|
13
|
+
{"id": "TC-052-refuses-bare-spa", "acId": "AC-2301-3", "description": "Fresh init project without auth refuses admin-console apply with exit 3 and spec 5.5.1 message", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::apply refuses on bare SPA with spec 5.5.1 verbatim message and lists applied blueprints (TC-052-refuses-bare-spa)"},
|
|
14
|
+
{"id": "TC-052-capability-discovery", "acId": "AC-2301-4", "description": "Discovery reads applied capabilities from applied blueprints", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::apply on magic-link project yields [principalDirectory] and on clerk+logging project yields [principalDirectory,roleModel,auditLog] (TC-052-capability-discovery)"},
|
|
15
|
+
{"id": "TC-052-pack-checks-cross-check", "acId": "AC-2301-5", "description": "Every pack check id matches contributed AC id and applies gates on capability", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::every pack check id matches a contributed AC id and appliesTo predicate gates on the applied capability (TC-052-pack-checks-cross-check)"},
|
|
16
|
+
{"id": "TC-052-fixture-surfaces", "acId": "AC-2301-6", "description": "Sample-app fixture serves the console shell with grid matrix and required data attributes", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::sample-app fixture serves console shell with ARIA APG grid permission matrix and required data attributes (TC-052-fixture-surfaces)"},
|
|
17
|
+
{"id": "TC-052-negative-runs", "acId": "AC-2301-7", "description": "Break switches surface the three defects on the DOM", "status": "pending", "testPointer": "test/blueprint/application-admin-console-anatomy.test.js::sample-app fixture break switches surface the three defects on the DOM (TC-052-negative-runs)"}
|
|
18
|
+
],
|
|
19
|
+
"status": "draft"
|
|
20
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T17:59:40.838Z",
|
|
3
|
+
"updatedAt": "2026-09-04T18:51:45.216Z",
|
|
4
|
+
"usId": "US-1701",
|
|
5
|
+
"prdId": "PRD-001",
|
|
6
|
+
"reqId": "REQ-017",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"status": "draft",
|
|
9
|
+
"title": "Blueprint-shipped browser-verify probe packs load, scope to real surfaces, and gate ship on runtime failure",
|
|
10
|
+
"asA": "blueprint author shipping runtime-observable visual ACs alongside contributions",
|
|
11
|
+
"iWant": "the browser-verify runner to discover, scope and run my blueprint's probe pack, and record each check against the AC it names",
|
|
12
|
+
"soThat": "a runtime-observable AC that a Node build-scan cannot see (grid announcements, keyboard traversal, live-region text after a synthetic event) is compelled at ship the same way an invariant or an auth-smoke fail is compelled, and the run-4 pack-fires-on-every-FBS residual is cured at load time",
|
|
13
|
+
"acceptanceCriteria": [
|
|
14
|
+
{
|
|
15
|
+
"id": "AC-1701-1",
|
|
16
|
+
"description": "The pack loader discovers `.pack.js` and `.pack.mjs` modules under `blueprints/<slug>/probe-packs/` for every applied blueprint, imports each with a dynamic ESM import, validates the exported default object against the pack schema (`packName` starts with the owning blueprint's slug and matches `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$`, `version` semver, `blueprintSlug` matches the directory, `checks[]` non-empty with each entry carrying `id`, `severity` in {block, warn, advisory}, `description` and async `run`), and refuses at load (exit 2) with a diagnostic that names the pack path and the offending field on any violation. A valid pack registers on the run.",
|
|
17
|
+
"testable": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "AC-1701-2",
|
|
21
|
+
"description": "The applicability predicate `appliesTo({ fbs, uiBaseline, manifest })` is a required top-level field on every pack; its source (`appliesTo.toString()`) MUST reference at least one of `route`, `tacIds`, or the `blueprint:` US-tag prefix, and an unqualified predicate (a body that references none of the three, including the default `() => true`) is refused at load with exit 2 and a diagnostic that names the pack, the requirement and the three legal scoping seams. A pack whose `appliesTo` returns `false` for an FBS records `applicable: false` on the record for that FBS with a one-line reason drawn from the predicate context and no `run` function is invoked.",
|
|
22
|
+
"testable": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "AC-1701-3",
|
|
26
|
+
"description": "The loader cross-checks every `checks[].id` against the AC ids the pack's blueprint contributes through `blueprint.json:contributions[]` (reading each US contribution file and enumerating `acceptanceCriteria[].id`). A pack whose check names an AC id the blueprint does not contribute is refused at load (exit 2) with a diagnostic that names the pack, the offending check id and the AC ids the blueprint actually contributes.",
|
|
27
|
+
"testable": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "AC-1701-4",
|
|
31
|
+
"description": "The runner runs the pack pass after invariants and after auth-smoke on `agentScreenshotCritique` mode. For each applicable pack the runner invokes every check's `run({ browser, fetch, runtimeUrl, route, theme })` (browser and fetch injected by the runner), records `{ id, verdict, severity, detail? }` on the pack record, and appends the pack record to `browserVerification.probePacks[]` on the composed record. The aggregate verdict extends the existing rule: `block` on any pack check whose severity is `block` and verdict is `fail`; `warn` on any pack check whose severity is `warn` and verdict is `fail` (and no block from invariants, auth-smoke or pack); `pass` otherwise.",
|
|
32
|
+
"testable": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "AC-1701-5",
|
|
36
|
+
"description": "`rcf verify browser <fbs-id> --probe-pack <name>` restricts one run to one pack by name; a `--probe-pack` value that resolves to no discovered pack (nothing loaded under any applied blueprint's `probe-packs/` matches the name) exits 2 with a diagnostic that names the value and the packs that were discovered. When omitted, every discovered and applicable pack runs; when a pack's `appliesTo` returns false for the FBS, the pack record carries `applicable: false` and no browser check runs against it.",
|
|
37
|
+
"testable": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "AC-1701-6",
|
|
41
|
+
"description": "A pack MAY declare `preChecks[]`: an array of `{ id, description, run: async () => ({ verdict, detail? }) }` Node build-scan fast-fail checks that the runner invokes before any browser check on the same pack. A pre-check with verdict `fail` records on the pack record and every browser check that names it under `dependsOn` records verdict `skipped` with detail `skipped-by-pre-check:<preCheckId>`; browser checks with no `dependsOn` on a failing pre-check still run. Pre-check verdicts fold into the aggregate the same way pack checks do (a `fail` at `severity: block` blocks ship).",
|
|
42
|
+
"testable": true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "AC-1701-7",
|
|
46
|
+
"description": "The `packBrowser` seam the runner injects into every pack check is a real headless browser provisioned through the pinned Playwright MCP server (`PLAYWRIGHT_MCP_VERSION` in `src/verify/engine/launcher.js`, spawned as `npx -y @playwright/mcp@<pin>` over stdio) via a thin in-package JSON-RPC 2.0 client (zero new npm dependencies in rcf-lite; no LLM call). Every check receives a stable API: `goto(url)`, `snapshot()` returning accessibility-tree text, `evaluate(fn, arg?)` returning a parsed value, `click(selector, hint?)`, `type(selector, text, hint?)`, `press(key)`, `screenshot(filename?)`, `close()`. When the consuming project already resolves `playwright` from its own `node_modules`, the runner MAY take that cheaper direct route and expose the identical API; the pinned MCP version remains the source of the browser otherwise. The CLI provisions the browser only when at least one applicable pack is loaded and `--no-browser` was not passed; `deps.packBrowser` on the CLI handler overrides the provisioning for tests.",
|
|
47
|
+
"testable": true
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "AC-1701-8",
|
|
51
|
+
"description": "A pack MAY declare a `boot: { bootCommand, waitForUrl, waitForSelector }` object. Before running the pack pass, the CLI probes the runtime URL; when it responds with any HTTP status the boot is skipped and the running server is used unchanged. When the runtime is not answering AND `boot.bootCommand` is a non-empty string, the CLI spawns `bootCommand` from the project root (Node.js child_process, cwd=projectRoot, no shell), polls `waitForUrl` at a bounded interval until a timeout, and when the URL responds runs the packs; when `waitForSelector` is set and a browser is available, the CLI navigates the browser to `waitForUrl` and polls the accessibility snapshot for a substring match on the selector until a bounded timeout (soft-failure only, packs still run). The CLI stops any process it started in reverse order after the pack pass completes (SIGTERM then SIGKILL fallback after 3s). `--no-boot` disables the fallback and forces packs to run against whatever the runtime URL currently answers. When the runtime is unreachable AND no `bootCommand` is declared, the CLI records the note and proceeds; the pack's own runtime checks then surface the failure.",
|
|
52
|
+
"testable": true
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"description": "As a blueprint author shipping a runtime-observable visual surface (row order after sort, live-region announcement text, focus return after dialog close, refetch on timeframe change), I want to ship a Playwright probe pack alongside my blueprint contributions and have `rcf verify browser` load and run it as a required ship gate on any FBS whose surface realises what the pack scopes, so that runtime failures refuse ship the same way invariants and auth-smoke already do, and a pack never fires on an FBS whose surface does not exist."
|
|
56
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T20:05:20.719Z",
|
|
3
|
+
"updatedAt": "2026-09-04T20:05:44.478Z",
|
|
4
|
+
"usId": "US-1801",
|
|
5
|
+
"prdId": "PRD-001",
|
|
6
|
+
"reqId": "REQ-018",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"status": "draft",
|
|
9
|
+
"title": "The application-datatable blueprint ships on the shelf and its probe pack refuses ship on a broken surface",
|
|
10
|
+
"asA": "shelf consumer applying the application-datatable v1.0.0 blueprint",
|
|
11
|
+
"iWant": "the shipped blueprint files, its Playwright probe pack, and a sample-app fixture proving both to load, apply and gate ship the way the T-0 runner extension expects",
|
|
12
|
+
"soThat": "a project consuming rcf-lite gets the datatable ACs, the pack that runs them, and a golden fixture the pack refuses on a broken surface",
|
|
13
|
+
"acceptanceCriteria": [
|
|
14
|
+
{
|
|
15
|
+
"id": "AC-1801-1",
|
|
16
|
+
"description": "The shelf carries blueprints/application-datatable/blueprint.json declaring slug application-datatable, version 1.0.0, category application, and 22 contributions (6 REQs, 9 USs, 3 TACs, 4 ADRs); the suggestedCompanions array declares logging and errorHandling with reasons from the ratified spec section 5.1.",
|
|
17
|
+
"testable": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "AC-1801-2",
|
|
21
|
+
"description": "rcf define blueprint add ./blueprints/application-datatable applies the 22 contributions cleanly on a fresh init project; rcf define validate reports the tree clean; both rcf audit coverage --strict and rcf audit eval coverage --strict exit 0 on the scratch project.",
|
|
22
|
+
"testable": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "AC-1801-3",
|
|
26
|
+
"description": "The shipped probe pack blueprints/application-datatable/probe-packs/application-datatable.pack.js loads via T-0's pack-loader against a scratch project with the blueprint applied; each of its six check ids (AC-17101-1, AC-17102-1, AC-17103-2, AC-17104-3, AC-17105-1, AC-17106-1) resolves to an AC id contributed by the blueprint per T-0 AC-1701-3.",
|
|
27
|
+
"testable": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "AC-1801-4",
|
|
31
|
+
"description": "The sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-datatable/ ships a dependency-free Node HTTP server (server.js) with a start script; when started, its shell route realises every surface the pack's six checks probe, and running the pack against the fixture returns verdict=pass on every check (severity block, aggregate pass).",
|
|
32
|
+
"testable": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "AC-1801-5",
|
|
36
|
+
"description": "The probe pack refuses ship on a broken fixture: with the aria-live status region wrapper removed from the shell, running the pack returns verdict=fail on AC-17103-2 at severity=block and the aggregate verdict is block.",
|
|
37
|
+
"testable": true
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T21:08:30.292Z",
|
|
3
|
+
"updatedAt": "2026-09-04T21:08:30.292Z",
|
|
4
|
+
"asA": "shelf consumer applying the application-charts v1.0.0 blueprint",
|
|
5
|
+
"iWant": "the shipped blueprint files, its Playwright probe pack anchoring non-colour distinction, text-alternative table and keyboard traversal, and a sample-app fixture proving both to load, apply and gate ship the way the T-0 runner extension expects",
|
|
6
|
+
"soThat": "a project consuming rcf-lite gets the chart-accessibility ACs, the pack that runs them, and a golden fixture the pack refuses on a chart surface that drops the text-alternative table or the non-colour pattern.",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-1901-1",
|
|
10
|
+
"description": "The shelf carries blueprints/application-charts/blueprint.json declaring slug application-charts, version 1.0.0, category application, and 15 contributions (4 REQs, 6 USs, 2 TACs, 3 ADRs); the suggestedCompanions array declares logging and errorHandling with reasons from the ratified spec section 5.2; providesRoles is absent (leaf blueprint per spec).",
|
|
11
|
+
"testable": true
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "AC-1901-2",
|
|
15
|
+
"description": "rcf define blueprint add ./blueprints/application-charts applies the 15 contributions cleanly on a fresh init project; rcf define validate reports the tree clean; both rcf audit coverage --strict and rcf audit eval coverage --strict exit 0 on the scratch project.",
|
|
16
|
+
"testable": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "AC-1901-3",
|
|
20
|
+
"description": "The shipped probe pack blueprints/application-charts/probe-packs/application-charts.pack.mjs loads via T-0's pack-loader against a scratch project with the blueprint applied; each of its three check ids (AC-18102-1 non-colour distinction, AC-18103-1 text-alternative table, AC-18104-1 keyboard traversal with reduced motion) resolves to an AC id contributed by the blueprint per T-0 AC-1701-3; every check carries a description field per spec section 9.",
|
|
21
|
+
"testable": true
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "AC-1901-4",
|
|
25
|
+
"description": "The sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-charts/ ships a dependency-free Node HTTP server (server.js) with a start script; when started, its chart route renders at least one bar chart and one line chart with two series each (colour plus pattern plus direct label), a visually-hidden focus-reachable table carrying the same values, keyboard-focusable data points announcing series x y unit, and a prefers-reduced-motion media rule; running the pack against the fixture returns verdict pass on every check (severity block, aggregate pass).",
|
|
26
|
+
"testable": true
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "AC-1901-5",
|
|
30
|
+
"description": "The probe pack refuses ship on a broken fixture: with the text-alternative table removed via the ?break=table switch, running the pack returns verdict fail on AC-18103-1 at severity block and the aggregate verdict is block; with the pattern attributes removed via the ?break=pattern switch, verdict fail on AC-18102-1 at severity block; with keyboard focus removed via the ?break=keyboard switch, verdict fail on AC-18104-1 at severity block.",
|
|
31
|
+
"testable": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"usId": "US-1901",
|
|
35
|
+
"prdId": "PRD-001",
|
|
36
|
+
"reqId": "REQ-019",
|
|
37
|
+
"version": "0.1.0",
|
|
38
|
+
"status": "draft",
|
|
39
|
+
"title": "The application-charts blueprint ships on the shelf and its probe pack refuses ship on a broken chart surface"
|
|
40
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T22:10:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-04T22:10:00.000Z",
|
|
4
|
+
"usId": "US-2001",
|
|
5
|
+
"prdId": "PRD-001",
|
|
6
|
+
"reqId": "REQ-020",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"status": "draft",
|
|
9
|
+
"title": "The application-dashboard blueprint ships on the shelf with its packaged design-guidance asset and probe pack refuses ship on a broken dashboard surface",
|
|
10
|
+
"asA": "shelf consumer applying the application-dashboard v1.0.0 blueprint",
|
|
11
|
+
"iWant": "the shipped blueprint files, the packaged design-guidance asset, the Playwright probe pack anchoring primary-KPI position, timeframe refetch fan-out and per-tile state contract, and a sample-app fixture proving the pack passes on a compliant surface and refuses on a broken one",
|
|
12
|
+
"soThat": "a project consuming rcf-lite gets the dashboard-shape ACs, the operator-facing design guidance the applying agent reads at ship, the pack that runs the three runtime-observable ACs, and a golden fixture the pack refuses on a surface that drops the primary-KPI placement or the timeframe fan-out or the four-state distinction",
|
|
13
|
+
"acceptanceCriteria": [
|
|
14
|
+
{
|
|
15
|
+
"id": "AC-2001-1",
|
|
16
|
+
"description": "The shelf carries blueprints/application-dashboard/blueprint.json declaring slug application-dashboard, version 1.0.0, category application, and 18 contributions (5 REQs, 7 USs, 3 TACs, 3 ADRs); the suggestedCompanions array declares logging and errorHandling with reasons from the ratified spec section 5.3; providesRoles is absent (leaf blueprint per spec; the loader refuses an empty providesRoles array when set, so the leaf-blueprint intent is expressed by omitting the field).",
|
|
17
|
+
"testable": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "AC-2001-2",
|
|
21
|
+
"description": "rcf define blueprint add ./blueprints/application-dashboard applies the 18 contributions cleanly on a fresh init project; rcf define validate reports the tree clean; both rcf audit coverage --strict and rcf audit eval coverage --strict exit 0 on the scratch project.",
|
|
22
|
+
"testable": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "AC-2001-3",
|
|
26
|
+
"description": "The packaged design-guidance asset at blueprints/application-dashboard/assets/guidance/dashboard-design.md exists, carries the eight sections named in the ratified spec section 5.3.1 (primary KPI placement; tile density and count limits; timeframe and filter chrome; loading, empty and error states; colour and contrast; when a table beats a chart, delegating to application-datatable; refresh cadence and staleness; anti-patterns), and carries at least five https:// citations to the sources named in the spec (NN/g dashboard design, Few, Tufte, GOV.UK Design System patterns, WCAG 2.2 Understanding docs).",
|
|
27
|
+
"testable": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "AC-2001-4",
|
|
31
|
+
"description": "The shipped probe pack blueprints/application-dashboard/probe-packs/application-dashboard.pack.mjs loads via T-0's pack-loader against a scratch project with the blueprint applied; each of its three check ids (AC-19102-1 primary-KPI position, AC-19104-1 timeframe refetch fan-out, AC-19103-1 per-tile state contract) resolves to an AC id contributed by the blueprint per T-0 AC-1701-3; every check carries a description field per spec section 9; the pack's appliesTo predicate references the tacIds seam and binds TAC-2001-application-dashboard-tile-grid.",
|
|
32
|
+
"testable": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "AC-2001-5",
|
|
36
|
+
"description": "The sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-dashboard/ ships a dependency-free Node HTTP server (server.js) with a start script; when started, its dashboard route renders a tile grid with a primary KPI top-left (data attribute naming its kind from the enum), a chart region reusing the application-charts sample-app markup shape, a timeframe preset picker whose change refetches every tile with the same from/to boundary and updates an as-of ISO-8601 stamp, per-tile four states switchable by query, an export handle listing CSV/PDF/PNG, a request log exposed on window.__dashboardFetches and at /__requests, and CSS that reflows to one column at 360 with the primary KPI first. Running the pack against the fixture returns verdict pass on every check (severity block, aggregate pass).",
|
|
37
|
+
"testable": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "AC-2001-6",
|
|
41
|
+
"description": "The probe pack refuses ship on a broken fixture: with the primary KPI moved off top-left via the ?break=kpi-position switch, running the pack returns verdict fail on AC-19102-1 at severity block and the aggregate verdict is block; with the timeframe refetch fan-out drift-boundary via ?break=fanout, verdict fail on AC-19104-1 at severity block; with the aria-live and role region attributes dropped via ?break=state-aria, verdict fail on AC-19103-1 at severity block.",
|
|
42
|
+
"testable": true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "AC-2001-7",
|
|
46
|
+
"description": "The pack-browser seam (packages/rcf-lite/src/browser-verify/pack-browser.js) exposes a resize(width, height) method to probe pack authors: on the MCP route the method calls the pinned Playwright MCP's browser_resize tool, on the project route it calls page.setViewportSize({ width, height }), and packs can drive the three breakpoint checks (1440/1024/360) through the new seam.",
|
|
47
|
+
"testable": true
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T23:59:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-04T23:59:00.000Z",
|
|
4
|
+
"usId": "US-2101",
|
|
5
|
+
"prdId": "PRD-001",
|
|
6
|
+
"reqId": "REQ-021",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"status": "draft",
|
|
9
|
+
"title": "The application-notifications-in-app blueprint ships on the shelf and its probe pack refuses ship on a broken notifications surface",
|
|
10
|
+
"asA": "shelf consumer applying the application-notifications-in-app v1.0.0 blueprint",
|
|
11
|
+
"iWant": "the shipped blueprint files, the Playwright probe pack anchoring live-region preseeding, the transient toast contract with priority-to-role mapping and timeout floor, and the notification-centre acknowledge round-trip, plus a sample-app fixture proving the pack passes on a compliant surface and refuses on the four break switches",
|
|
12
|
+
"soThat": "a project consuming rcf-lite gets the in-app notifications-shape ACs, the pack that runs the three runtime-observable ACs, and a golden fixture the pack refuses on a surface that lazy-inserts the wrappers, inverts the priority-to-role mapping, dismisses toasts below the WCAG 2.2.1 floor, or drops the acknowledge POST",
|
|
13
|
+
"acceptanceCriteria": [
|
|
14
|
+
{
|
|
15
|
+
"id": "AC-2101-1",
|
|
16
|
+
"description": "The shelf carries blueprints/application-notifications-in-app/blueprint.json declaring slug application-notifications-in-app, version 1.0.0, category application, and 19 contributions (5 REQs, 8 USs, 3 TACs, 3 ADRs); the suggestedCompanions array declares logging and errorHandling with reasons from the ratified spec section 5.4; providesRoles is absent (leaf blueprint per spec; the loader refuses an empty providesRoles array when set, so the leaf-blueprint intent is expressed by omitting the field).",
|
|
17
|
+
"testable": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "AC-2101-2",
|
|
21
|
+
"description": "rcf define blueprint add ./blueprints/application-notifications-in-app applies the 19 contributions cleanly on a fresh init project; rcf define validate reports the tree clean; both rcf audit coverage --strict and rcf audit eval coverage --strict exit 0 on the scratch project.",
|
|
22
|
+
"testable": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "AC-2101-3",
|
|
26
|
+
"description": "The shipped probe pack blueprints/application-notifications-in-app/probe-packs/application-notifications-in-app.pack.mjs loads via T-0's pack-loader against a scratch project with the blueprint applied; each of its three check ids (AC-20101-1 live-region preseeding, AC-20102-1 transient toast contract, AC-20103-1 centre acknowledge round-trip) resolves to an AC id contributed by the blueprint per T-0 AC-1701-3; every check carries a description field per spec section 9; the AC-20101-1 description contains the word 'preseeded' per section 9 T-4 row; the pack's appliesTo predicate references BOTH tacIds and route (the two legal source-scan seams).",
|
|
27
|
+
"testable": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "AC-2101-4",
|
|
31
|
+
"description": "The sample-app fixture at packages/rcf-lite/test/fixtures/probe-pack-application-notifications-in-app/ ships a dependency-free Node HTTP server (server.js) with a start script; when started, its main route preseeds both live-region wrappers ([data-live-region=\"polite\"] with aria-live=polite AND [data-live-region=\"assertive\"] with role=alert), both empty at page load; the notification centre route lists a seeded backlog of notifications each carrying data-notification-id, a keyboard-reachable [data-action=\"acknowledge\"] control and a [data-action=\"mark-read\"] control, plus one [data-action=\"mark-all-read\"] control; the preferences route lists per-category silence toggles and sibling-channel digest sections disabled by default; POST /api/notifications/acknowledge round-trips and updates the seeded row's acknowledgedAt; GET /api/delivery-log returns {rows:[]} with the seeded backlog; window.__notificationFetches and /__requests mirror every client-side fetch record.",
|
|
32
|
+
"testable": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "AC-2101-5",
|
|
36
|
+
"description": "The probe pack refuses ship on each broken fixture: with ?break=preseed the wrappers are inserted lazily after the first event so AC-20101-1 fails at severity block; with ?break=role the priority-to-role mapping is inverted (error toast in polite/status, info toast in assertive/alert) so AC-20102-1 fails at severity block; with ?break=timeout the toast dismisses after two seconds and the shell root advertises a two-second floor so AC-20102-1 fails at severity block on both the shell-declared floor and the WCAG six-second floor; with ?break=ack the acknowledge click handler is a no-op so AC-20103-1 fails at severity block.",
|
|
37
|
+
"testable": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "AC-2101-6",
|
|
41
|
+
"description": "The blueprint's family-prefix reservation (application-notifications- reserved for the sibling channels -email, -push, -webhook per Baz decision 2026-09-04) is documented as a paragraph in the blueprint README AND as a row in the shelf band registry table in every applying blueprint's docs/topics.md (marked as a doc-only reservation with no shipped blueprint).",
|
|
42
|
+
"testable": true
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-05T01:30:00.000Z",
|
|
3
|
+
"updatedAt": "2026-09-05T01:30:00.000Z",
|
|
4
|
+
"usId": "US-2201",
|
|
5
|
+
"prdId": "PRD-001",
|
|
6
|
+
"reqId": "REQ-022",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"status": "draft",
|
|
9
|
+
"title": "The capability-declaration mechanism lands in the loader and apply verb; the four shelf auth blueprints adopt it in v1.1.0 minor bumps",
|
|
10
|
+
"asA": "shelf consumer applying a consumer blueprint that gates surfaces on identity or platform capabilities",
|
|
11
|
+
"iWant": "the blueprint loader to accept capabilities[], elicits[] and requiresAppliedCapabilities on blueprint.json with shape validation, the apply verb to discover applied capabilities by reading each applied blueprint's source blueprint.json, refuse admin-console-shaped applies with the spec 5.5.1 verbatim message when no required capability is applied and --allow-no-auth-yet is absent, prompt an elicitation phase gated by the discovered capabilities, and persist appliedCapabilities and appliedElicitations to rcf/blueprints/${slug}.applied.json; and the four shelf auth blueprints to declare capabilities[] in v1.1.0 minor bumps landing in the same PR",
|
|
12
|
+
"soThat": "a project applying admin-console (or any future capability-gated blueprint) gets deterministic apply-time surface configuration, a bare-SPA apply is refused with the operator-friendly message the spec ratified, custom-auth projects elicit their answers into a persistent record the console reads, and the four shelf auth blueprints announce their identity capability set in one release train per spec Q2 default",
|
|
13
|
+
"acceptanceCriteria": [
|
|
14
|
+
{
|
|
15
|
+
"id": "AC-2201-1",
|
|
16
|
+
"description": "The blueprint loader accepts an optional capabilities[] top-level field on blueprint.json: when present it must be a non-empty array of lower camelCase strings on ^[a-z][a-zA-Z0-9]*$, and a malformed value refuses with a validation rcfError naming the field. LoadedBlueprint exposes capabilities[] verbatim.",
|
|
17
|
+
"testable": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "AC-2201-2",
|
|
21
|
+
"description": "The blueprint loader accepts an optional elicits[] top-level field: when present it must be a non-empty array of {id (kebab slug), prompt (non-empty operator-facing string, no em-dashes, no emojis), kind (one of enum, string, boolean), default (matching kind), options (required when kind=enum), when (optional predicate object)} entries; malformed shapes refuse with a validation rcfError naming the entry.",
|
|
22
|
+
"testable": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "AC-2201-3",
|
|
26
|
+
"description": "The blueprint loader accepts an optional requiresAppliedCapabilities top-level object: when present its capabilities[] property is a non-empty array of lower camelCase strings, allowSkipFlag is a kebab slug matching an apply-verb flag name (allow-no-auth-yet in v1), and refusalMessageId is a non-empty string; malformed shapes refuse with a validation rcfError.",
|
|
27
|
+
"testable": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "AC-2201-4",
|
|
31
|
+
"description": "applyBlueprint reads each applied blueprint's source blueprint.json (via the applied record's source field the T-2 core-companions train established) to compute the appliedCapabilities union across the project; when the loaded blueprint declares requiresAppliedCapabilities and the union has no overlap AND the CLI did not pass --allow-no-auth-yet, apply returns an rcfError kind requiresAppliedCapabilities carrying the spec 5.5.1 message body verbatim with the currently-applied blueprints list substituted, and the CLI exits 3 with that message on stderr naming security-auth-*.",
|
|
32
|
+
"testable": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "AC-2201-5",
|
|
36
|
+
"description": "When --allow-no-auth-yet is passed on the CLI and the blueprint's allowSkipFlag matches, apply proceeds and the applied-record sidecar rcf/blueprints/${slug}.applied.json is written with allowNoAuthYet: true and a notes string naming the no-auth-yet state; the manifest applied record's schema-closed fields remain untouched.",
|
|
37
|
+
"testable": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "AC-2201-6",
|
|
41
|
+
"description": "The elicitation phase reads --answer <id>=<value> repeatable arguments and --answers <file> (a JSON object mapping id to value) at apply time; every elicit entry whose when predicate resolves true against the discovered applied-capability set is prompted (on a TTY) or read from the answer bag (non-interactive) with the declared kind coerced (boolean from y/yes/n/no, enum against options, string trimmed); a missing required answer refuses with a validation rcfError naming the id.",
|
|
42
|
+
"testable": true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "AC-2201-7",
|
|
46
|
+
"description": "On a clean apply, apply writes rcf/blueprints/${slug}.applied.json containing {slug, version, appliedAt, appliedCapabilities: [...], appliedElicitations: {id: value, ...}, allowNoAuthYet?: bool, notes?: string}; the sidecar is idempotent (re-apply on the same version rewrites the same file) and the manifest.blueprints[] applied record is unchanged in shape.",
|
|
47
|
+
"testable": true
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "AC-2201-8",
|
|
51
|
+
"description": "The four shelf auth blueprints declare capabilities[] in v1.1.0 minor bumps landing in the same PR: security-auth-magic-link 1.0.0 -> 1.1.0 capabilities: [principalDirectory]; security-auth-clerk 1.1.0 -> 1.2.0 capabilities: [principalDirectory, roleModel]; security-auth-oauth2 1.0.0 -> 1.1.0 capabilities: [principalDirectory, roleModel]; security-auth-keycloak 1.0.0 -> 1.1.0 capabilities: [principalDirectory, roleModel]. Each blueprint's CHANGELOG.md carries a new entry naming the capabilities added and citing this train (Baz Q2 default 2026-09-04, spec section 5.5.2). No other change to the four blueprints.",
|
|
52
|
+
"testable": true
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "AC-2201-9",
|
|
56
|
+
"description": "docs/blueprint-authoring.md section 6a extends the roles registry with the capability vocabulary table (principalDirectory, roleModel, tenancy, auditLog with meaning columns and shelf-provider(s) columns) and cross-references capabilities[] and requiresAppliedCapabilities in the loader as sibling fields to providesRoles and suggestedCompanions.",
|
|
57
|
+
"testable": true
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|