rcf-lite 0.29.0 → 0.31.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 +133 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-001.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-002.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-003.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-004.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-005.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-006.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-007.json +1 -1
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-009.json +1 -1
- package/blueprints/application-account-settings/contributions/tacs/tac-2601-application-account-settings-shell.json +4 -4
- package/blueprints/application-account-settings/contributions/tacs/tac-2602-application-account-settings-capability-discovery.json +2 -2
- package/blueprints/application-account-settings/contributions/tacs/tac-2603-application-account-settings-hosted-ui-bridge.json +2 -2
- package/blueprints/application-account-settings/contributions/tacs/tac-2604-application-account-settings-session-store.json +7 -7
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25105.json +3 -15
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25106.json +2 -10
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25111.json +3 -6
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25112.json +4 -4
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-001.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-002.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-003.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-004.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-005.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-006.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-007.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-008.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-009.json +1 -1
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-014.json +1 -1
- package/blueprints/application-admin-console/contributions/tacs/tac-2201-application-admin-console-shell.json +4 -4
- package/blueprints/application-admin-console/contributions/tacs/tac-2202-application-admin-console-capability-discovery.json +7 -7
- package/blueprints/application-admin-console/contributions/tacs/tac-2203-application-admin-console-permission-matrix.json +2 -2
- package/blueprints/application-admin-console/contributions/tacs/tac-2204-application-admin-console-audit-view.json +2 -2
- package/blueprints/application-admin-console/contributions/tacs/tac-2214-application-admin-console-access-gated-signin-surface.json +3 -2
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21107.json +2 -2
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21111.json +3 -11
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21112.json +4 -4
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21815.json +2 -2
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21816.json +2 -2
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-001.json +1 -1
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-002.json +1 -2
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-004.json +1 -1
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-008.json +1 -1
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-016.json +1 -1
- package/blueprints/application-api-rest/contributions/tacs/tac-301-application-api-rest-request-pipeline.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-302-application-api-rest-auth-middleware.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-303-application-api-rest-contract-surface.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-304-application-api-rest-resource-layer.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-305-application-api-rest-observability.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +4 -4
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2102.json +1 -1
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +1 -1
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2104.json +4 -4
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2105.json +2 -2
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +1 -1
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2110.json +1 -1
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2111.json +1 -1
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2118.json +1 -1
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2119.json +2 -2
- package/blueprints/application-charts/contributions/tacs/tac-1901-application-charts-render-shell.json +4 -4
- package/blueprints/application-charts/contributions/tacs/tac-1902-application-charts-keyboard-traversal.json +4 -4
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18105.json +1 -1
- package/blueprints/application-dashboard/contributions/tacs/tac-2001-application-dashboard-tile-grid.json +4 -4
- package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +4 -4
- package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +2 -2
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +1 -1
- package/blueprints/application-datatable/contributions/tacs/tac-1801-application-datatable-shell.json +4 -4
- package/blueprints/application-datatable/contributions/tacs/tac-1802-application-datatable-query-adapter.json +4 -4
- package/blueprints/application-datatable/contributions/tacs/tac-1803-application-datatable-selection-model.json +2 -2
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17101.json +1 -1
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17102.json +1 -1
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17103.json +1 -1
- package/blueprints/application-datatable/contributions/user-stories/application-datatable-us-17105.json +1 -1
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-001.json +1 -1
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-002.json +1 -1
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-003.json +1 -1
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-004.json +1 -1
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-005.json +2 -2
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-006.json +1 -1
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-007.json +2 -2
- package/blueprints/application-empty-error-states/contributions/tacs/tac-2301-application-empty-error-states-state-machine.json +5 -5
- package/blueprints/application-empty-error-states/contributions/tacs/tac-2302-application-empty-error-states-recovery-router.json +2 -2
- package/blueprints/application-empty-error-states/contributions/tacs/tac-2303-application-empty-error-states-offline-buffer.json +5 -5
- package/blueprints/application-error-handling/contributions/tacs/tac-1701-application-error-handling-boundary.json +6 -6
- package/blueprints/application-error-handling/contributions/tacs/tac-1702-application-error-handling-record-factory.json +4 -4
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16101.json +1 -1
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16107.json +4 -4
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-006.json +2 -2
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-007.json +2 -2
- package/blueprints/application-file-upload/contributions/tacs/tac-2401-application-file-upload-input.json +7 -7
- package/blueprints/application-file-upload/contributions/tacs/tac-2402-application-file-upload-transport.json +8 -8
- package/blueprints/application-file-upload/contributions/tacs/tac-2403-application-file-upload-progress-announcer.json +11 -11
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23102.json +1 -1
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23105.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-006.json +2 -2
- package/blueprints/application-forms-wizard/contributions/tacs/tac-2501-application-forms-wizard-task-list.json +7 -7
- package/blueprints/application-forms-wizard/contributions/tacs/tac-2502-application-forms-wizard-error-summary.json +4 -4
- package/blueprints/application-forms-wizard/contributions/tacs/tac-2503-application-forms-wizard-draft-store.json +4 -4
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24101.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-001.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-002.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-003.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-004.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-005.json +2 -2
- package/blueprints/application-notifications-in-app/contributions/requirements/application-notifications-in-app-req-006.json +2 -2
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +6 -6
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +9 -9
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2103-application-notifications-in-app-preferences.json +4 -4
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +2 -2
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +4 -4
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-001.json +1 -1
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-002.json +1 -1
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-003.json +1 -1
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-004.json +1 -1
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-005.json +1 -1
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-006.json +1 -1
- package/blueprints/application-onboarding-tour/contributions/tacs/tac-2701-application-onboarding-tour-step-runner.json +4 -4
- package/blueprints/application-onboarding-tour/contributions/tacs/tac-2702-application-onboarding-tour-checklist-slot.json +2 -2
- package/blueprints/application-onboarding-tour/contributions/tacs/tac-2703-application-onboarding-tour-completion-store.json +2 -2
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26108.json +2 -2
- package/blueprints/application-spa/contributions/requirements/application-spa-req-004.json +1 -2
- package/blueprints/application-spa/contributions/requirements/application-spa-req-007.json +1 -1
- package/blueprints/application-spa/contributions/requirements/application-spa-req-014.json +1 -1
- package/blueprints/application-spa/contributions/requirements/application-spa-req-015.json +1 -1
- package/blueprints/application-spa/contributions/requirements/application-spa-req-017.json +1 -1
- package/blueprints/application-spa/contributions/requirements/application-spa-req-018.json +1 -1
- package/blueprints/application-spa/contributions/tacs/tac-201-application-spa-app-shell.json +4 -4
- package/blueprints/application-spa/contributions/tacs/tac-202-application-spa-theme-system.json +4 -4
- package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +6 -6
- package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +6 -6
- package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +6 -6
- package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +8 -8
- package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +8 -8
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1101.json +2 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1102.json +1 -1
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1107.json +1 -1
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1117.json +1 -1
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +4 -4
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +4 -4
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +1 -1
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +6 -6
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +5 -5
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1134.json +2 -2
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-001.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-002.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-003.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-005.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-006.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-007.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-008.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-009.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-010.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-011.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-012.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-013.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-014.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-015.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-016.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-017.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-018.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-019.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-020.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-021.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-022.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-023.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-701-delivery-ci-workflows-gate-runner.json +6 -6
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-702-delivery-ci-workflows-gate-report.json +4 -4
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-703-delivery-ci-workflows-aggregate-report.json +4 -4
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json +6 -6
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-705-delivery-ci-workflows-release-workflow.json +6 -6
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-706-delivery-ci-workflows-scheduled-audit.json +4 -4
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6101.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6102.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6103.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6104.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6106.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6107.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6109.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6110.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6111.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6113.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6115.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6116.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6117.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6118.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6119.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6120.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6122.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6123.json +1 -1
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6124.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-001.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-002.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-003.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-004.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-005.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-006.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-007.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-008.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-009.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-010.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-011.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-012.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-013.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-014.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json +6 -6
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json +8 -8
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json +6 -6
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json +8 -8
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json +8 -8
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json +8 -8
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12101.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12102.json +2 -2
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12105.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12109.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12113.json +2 -2
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12114.json +1 -1
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12115.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-001.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-002.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-003.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-004.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-005.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/requirements/deploy-hetzner-server-req-006.json +1 -1
- package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3801-deploy-hetzner-server-provisioner.json +3 -2
- package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3802-deploy-hetzner-server-manifest-schema.json +3 -2
- package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3803-deploy-hetzner-server-cloud-init-template.json +3 -2
- package/blueprints/deploy-hetzner-server/contributions/tacs/tac-3804-deploy-hetzner-server-firewall-shape.json +3 -2
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37101.json +4 -4
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37102.json +3 -3
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37103.json +4 -4
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37104.json +2 -2
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37105.json +2 -2
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37106.json +3 -3
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37107.json +2 -2
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37108.json +2 -2
- package/blueprints/deploy-hetzner-server/contributions/user-stories/deploy-hetzner-server-us-37109.json +2 -2
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-001.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-002.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-003.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-004.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-005.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-006.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-007.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3501-edge-cloudflare-access-jwt-validator.json +6 -4
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3502-edge-cloudflare-access-application-declaration.json +3 -2
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3503-edge-cloudflare-access-policy-shape.json +3 -2
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3504-edge-cloudflare-access-audit-sink.json +3 -2
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34101.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34102.json +5 -5
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34103.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34104.json +3 -3
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34105.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34106.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34107.json +5 -5
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34110.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-001.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-002.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-003.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-004.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-005.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3701-edge-cloudflare-rate-limiting-manifest-schema.json +6 -4
- package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3702-edge-cloudflare-rate-limiting-management-surface-doc.json +3 -2
- package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3703-edge-cloudflare-rate-limiting-drift-audit-runner.json +3 -2
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36101.json +2 -2
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36103.json +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36104.json +6 -6
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36106.json +2 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-001.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-002.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-003.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-004.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-005.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-006.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/requirements/edge-cloudflare-tunnel-req-007.json +1 -1
- package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4001-edge-cloudflare-tunnel-connector-shape.json +3 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4002-edge-cloudflare-tunnel-manifest-schema.json +3 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4003-edge-cloudflare-tunnel-access-binding.json +3 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/tacs/tac-4004-edge-cloudflare-tunnel-zone-and-hostname-apply.json +3 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39101.json +3 -3
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39102.json +2 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39103.json +4 -4
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39104.json +2 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39105.json +2 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39106.json +5 -5
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39107.json +2 -2
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39108.json +3 -3
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39109.json +4 -4
- package/blueprints/edge-cloudflare-tunnel/contributions/user-stories/edge-cloudflare-tunnel-us-39110.json +3 -3
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-001.json +1 -1
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-002.json +1 -1
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-003.json +1 -1
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-004.json +1 -1
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-005.json +1 -1
- package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3601-edge-cloudflare-turnstile-widget-mount.json +3 -2
- package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3602-edge-cloudflare-turnstile-server-verifier.json +9 -6
- package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3603-edge-cloudflare-turnstile-magic-link-hook.json +3 -2
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35101.json +3 -3
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35102.json +4 -4
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35103.json +6 -6
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35104.json +2 -2
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35105.json +1 -1
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-001.json +1 -1
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-002.json +1 -1
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-003.json +1 -1
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-004.json +1 -1
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-005.json +1 -1
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-006.json +1 -1
- package/blueprints/email-smtp-resend/contributions/tacs/tac-401-email-smtp-resend-send-adapter.json +8 -8
- package/blueprints/email-smtp-resend/contributions/tacs/tac-402-email-smtp-resend-webhook-verifier.json +10 -10
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4101.json +1 -1
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4102.json +1 -1
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4103.json +1 -1
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4105.json +1 -1
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4106.json +2 -2
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-001.json +1 -1
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-002.json +1 -1
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-003.json +1 -1
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-004.json +1 -1
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-005.json +1 -1
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-006.json +1 -1
- package/blueprints/jobs-background/contributions/tacs/tac-3101-jobs-background-job-definition.json +4 -4
- package/blueprints/jobs-background/contributions/tacs/tac-3102-jobs-background-scheduler.json +6 -6
- package/blueprints/jobs-background/contributions/tacs/tac-3103-jobs-background-run-log.json +6 -6
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30101.json +1 -1
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30102.json +3 -3
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30103.json +1 -1
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30104.json +4 -4
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30105.json +1 -1
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30106.json +1 -1
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30107.json +1 -1
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30108.json +1 -1
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30109.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-001.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-002.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-003.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-004.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-005.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3001-messaging-queue-cloudflare-producer-facade.json +6 -6
- package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3002-messaging-queue-cloudflare-consumer-registration.json +2 -2
- package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3003-messaging-queue-cloudflare-event-sink.json +2 -2
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29101.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29102.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29103.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29104.json +2 -2
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29105.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29106.json +2 -2
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29107.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29108.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-001.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-002.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-003.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-004.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-005.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +1 -1
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-101.json +1 -1
- package/blueprints/object-storage-s3/contributions/tacs/tac-2901-object-storage-s3-facade.json +6 -6
- package/blueprints/object-storage-s3/contributions/tacs/tac-2902-object-storage-s3-multipart-uploader.json +2 -2
- package/blueprints/object-storage-s3/contributions/tacs/tac-2903-object-storage-s3-event-sink.json +2 -2
- package/blueprints/object-storage-s3/contributions/tacs/tac-2904-object-storage-s3-hetzner-endpoint-helper.json +2 -2
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28101.json +1 -1
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28102.json +1 -1
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28103.json +2 -2
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28104.json +1 -1
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28105.json +2 -2
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28106.json +1 -1
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28110.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-003.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-004.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-005.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-006.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-007.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-008.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-009.json +1 -1
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-010.json +1 -1
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +4 -4
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +12 -12
- package/blueprints/observability-essentials/contributions/tacs/tac-803-observability-essentials-status-page.json +6 -6
- package/blueprints/observability-essentials/contributions/tacs/tac-804-observability-essentials-notification-outcome.json +8 -8
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +1 -1
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7103.json +3 -3
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7106.json +2 -2
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7107.json +1 -1
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-001.json +1 -1
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-002.json +1 -1
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-003.json +1 -1
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-004.json +1 -1
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-005.json +1 -1
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-006.json +8 -2
- package/blueprints/observability-logging/contributions/tacs/tac-1601-observability-logging-logger-factory.json +6 -6
- package/blueprints/observability-logging/contributions/tacs/tac-1602-observability-logging-redaction-boundary.json +2 -2
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15101.json +4 -4
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15103.json +2 -2
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15104.json +2 -2
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15105.json +1 -1
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15106.json +1 -1
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15107.json +2 -2
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15108.json +1 -1
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15109.json +3 -3
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-001.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-002.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-003.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-004.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-005.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-006.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-007.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-008.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1501-observability-probe-endpoints-profile-resolver.json +6 -6
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1502-observability-probe-endpoints-handler-set.json +4 -4
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1503-observability-probe-endpoints-listener-topology.json +6 -6
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1504-observability-probe-endpoints-non-http-adapters.json +4 -4
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14101.json +2 -2
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +1 -1
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14105.json +3 -3
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-001.json +1 -1
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-002.json +1 -1
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-003.json +1 -1
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-004.json +1 -1
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-005.json +1 -1
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-006.json +1 -1
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-007.json +1 -1
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1401-persistence-data-d1-facade.json +6 -6
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1402-persistence-data-d1-migration-catalog.json +4 -4
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +4 -4
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1404-persistence-data-d1-recovery-runner.json +4 -4
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13101.json +2 -2
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13102.json +1 -1
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13107.json +2 -2
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-001.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-002.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-004.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-005.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-006.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-007.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2801-persistence-data-postgres-facade.json +6 -6
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2802-persistence-data-postgres-migration-runner.json +4 -4
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2803-persistence-data-postgres-transaction-helper.json +2 -2
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2804-persistence-data-postgres-recovery-runner.json +4 -4
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27101.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27102.json +4 -4
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27103.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27104.json +2 -2
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27105.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27106.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27107.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27108.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27109.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27110.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-001.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-002.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-003.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-004.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-005.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-006.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-007.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-008.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-009.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-010.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-011.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-601-persistence-data-sqlite-store.json +6 -6
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-602-persistence-data-sqlite-migration-runner.json +2 -2
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-603-persistence-data-sqlite-migration-catalog.json +4 -4
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-604-persistence-data-sqlite-backup-runner.json +2 -2
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5101.json +2 -2
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5103.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5104.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5106.json +1 -1
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5110.json +2 -2
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5111.json +1 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-001.json +1 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-002.json +1 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-003.json +1 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-004.json +1 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3301-platform-cloudflare-cron-triggers-scheduled-handler.json +6 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3302-platform-cloudflare-cron-triggers-expression-router.json +9 -2
- package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3303-platform-cloudflare-cron-triggers-event-sink.json +6 -1
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32101.json +6 -6
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32102.json +5 -5
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32103.json +3 -3
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32104.json +4 -4
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32105.json +4 -4
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32106.json +4 -4
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32107.json +3 -3
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-001.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-002.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-003.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-004.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-005.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-006.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-007.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-008.json +1 -1
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3401-platform-cloudflare-durable-objects-namespace-facade.json +6 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3402-platform-cloudflare-durable-objects-single-cell-shape.json +6 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3403-platform-cloudflare-durable-objects-alarm-handler.json +6 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3404-platform-cloudflare-durable-objects-websocket-hub.json +6 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3405-platform-cloudflare-durable-objects-event-sink.json +3 -2
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33101.json +5 -5
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33102.json +4 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33103.json +5 -5
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33104.json +5 -5
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33105.json +5 -5
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33106.json +4 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33107.json +3 -3
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33108.json +5 -5
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33109.json +3 -3
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33110.json +4 -4
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33111.json +3 -3
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33112.json +3 -3
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33113.json +5 -5
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-001.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-002.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-003.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-004.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-005.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-006.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-007.json +1 -1
- package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3201-platform-cloudflare-kv-facade.json +3 -2
- package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3202-platform-cloudflare-kv-cache-aside.json +3 -2
- package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3203-platform-cloudflare-kv-event-sink.json +3 -2
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31101.json +4 -4
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31102.json +3 -3
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31103.json +4 -4
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31104.json +4 -4
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31105.json +4 -4
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31106.json +3 -3
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31107.json +3 -3
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31108.json +3 -3
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31109.json +4 -4
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31110.json +5 -5
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31111.json +5 -5
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-001.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-002.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-003.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-004.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-005.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-006.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/requirements/platform-docker-compose-host-req-007.json +1 -1
- package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3901-platform-docker-compose-host-compose-layout.json +3 -2
- package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3902-platform-docker-compose-host-secrets-mount.json +3 -2
- package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3903-platform-docker-compose-host-healthcheck-lint.json +3 -2
- package/blueprints/platform-docker-compose-host/contributions/tacs/tac-3904-platform-docker-compose-host-reverse-proxy-artefact.json +3 -2
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38101.json +5 -5
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38102.json +4 -4
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38103.json +4 -4
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38104.json +4 -4
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38105.json +3 -3
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38106.json +3 -3
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38107.json +3 -3
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38108.json +3 -3
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38109.json +3 -3
- package/blueprints/platform-docker-compose-host/contributions/user-stories/platform-docker-compose-host-us-38110.json +3 -3
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-001.json +1 -1
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-002.json +1 -1
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-003.json +1 -1
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-004.json +1 -1
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-006.json +1 -1
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-010.json +1 -1
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-011.json +1 -1
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1001-security-auth-clerk-middleware.json +6 -6
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1002-security-auth-clerk-authorisation-adapter.json +8 -3
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1003-security-auth-clerk-session-verifier.json +8 -8
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9102.json +1 -1
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9108.json +1 -1
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9112.json +6 -6
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9113.json +6 -6
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-002.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-003.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-004.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-005.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-006.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-011.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-013.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-014.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-015.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-016.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-017.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-018.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-019.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1201-security-auth-keycloak-discovery-client.json +10 -10
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1202-security-auth-keycloak-jwt-verifier.json +8 -8
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1203-security-auth-keycloak-introspection-client.json +8 -8
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1204-security-auth-keycloak-provider-router.json +6 -6
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1205-security-auth-keycloak-role-adapter.json +4 -4
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11102.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11103.json +2 -2
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11104.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11106.json +3 -3
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11111.json +2 -2
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11114.json +1 -1
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11115.json +5 -5
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11116.json +7 -7
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11117.json +7 -7
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11118.json +7 -7
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11119.json +7 -7
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11120.json +6 -6
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-002.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-003.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-004.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-005.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-008.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-009.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-010.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-011.json +1 -1
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-501-security-auth-magic-link-manager.json +6 -6
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-502-security-auth-magic-link-session-manager.json +6 -6
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-503-security-auth-magic-link-login-routes.json +10 -10
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-504-security-auth-magic-link-email-delivery-adapter.json +2 -2
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-505-security-auth-magic-link-principal-registry.json +2 -2
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3111.json +2 -2
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-002.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-003.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-005.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-006.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-008.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-009.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-011.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-012.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-013.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1101-security-auth-oauth2-flow-controller.json +24 -14
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1102-security-auth-oauth2-provider-adapter.json +4 -4
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1103-security-auth-oauth2-session-bridge.json +10 -10
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1104-security-auth-oauth2-provider-selector.json +8 -3
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10111.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10112.json +1 -1
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10114.json +5 -5
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-001.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-002.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-003.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-004.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-005.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-006.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-007.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-008.json +1 -1
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-009.json +1 -1
- package/blueprints/security-secrets-management/contributions/tacs/tac-901-security-secrets-management-manager-client.json +8 -8
- package/blueprints/security-secrets-management/contributions/tacs/tac-902-security-secrets-management-manifest.json +4 -4
- package/blueprints/security-secrets-management/contributions/tacs/tac-903-security-secrets-management-env-reflector.json +4 -4
- package/blueprints/security-secrets-management/contributions/tacs/tac-904-security-secrets-management-rotation-gate.json +8 -8
- package/blueprints/security-secrets-management/contributions/tacs/tac-905-security-secrets-management-agent-cli.json +4 -4
- package/fixtures/canary-manifest.json +9 -9
- package/guidance/define-draft-shapes.md +15 -10
- package/guidance/define-litmus.md +102 -0
- package/guidance/manifest.json +2 -1
- package/package.json +1 -1
- package/rcf/adrs/adr-4131-gates-bite-ack-recorded-override.json +30 -0
- package/rcf/adrs/adr-4137-standalone-theme-persistence.json +30 -0
- package/rcf/adrs/adr-4138-tree-wide-checks-before-scope-shortcircuit.json +35 -0
- package/rcf/code-nodes/cn-753.json +19 -0
- package/rcf/code-nodes/cn-754.json +17 -0
- package/rcf/code-nodes/cn-755.json +14 -0
- package/rcf/code-nodes/cn-756.json +15 -0
- package/rcf/code-nodes/cn-757.json +21 -0
- package/rcf/code-nodes/cn-758.json +16 -0
- package/rcf/code-nodes/cn-759.json +21 -0
- package/rcf/code-nodes/cn-760.json +19 -0
- package/rcf/code-nodes/cn-761.json +16 -0
- package/rcf/code-nodes/cn-762.json +18 -0
- package/rcf/code-nodes/cn-763.json +18 -0
- package/rcf/code-nodes/cn-764.json +15 -0
- package/rcf/code-nodes/cn-765.json +23 -0
- package/rcf/code-nodes/cn-766.json +17 -0
- package/rcf/code-nodes/cn-767.json +17 -0
- package/rcf/code-nodes/cn-768.json +19 -0
- package/rcf/code-nodes/cn-769.json +17 -0
- package/rcf/code-nodes/cn-770.json +18 -0
- package/rcf/code-nodes/cn-771.json +14 -0
- package/rcf/code-nodes/cn-772.json +14 -0
- package/rcf/code-nodes/cn-773.json +16 -0
- package/rcf/code-nodes/cn-774.json +20 -0
- package/rcf/code-nodes/cn-775.json +15 -0
- package/rcf/code-nodes/cn-776.json +17 -0
- package/rcf/code-nodes/cn-777.json +21 -0
- package/rcf/fbs/fbs-202.json +85 -9
- package/rcf/fbs/fbs-203.json +12 -4
- package/rcf/requirements/req-002.json +2 -2
- package/rcf/requirements/req-173.json +2 -2
- package/rcf/requirements/req-174.json +2 -2
- package/rcf/requirements/req-175.json +2 -2
- package/rcf/requirements/req-177.json +31 -0
- package/rcf/requirements/req-178.json +31 -0
- package/rcf/requirements/req-179.json +31 -0
- package/rcf/tacs/tac-001.json +7 -7
- package/rcf/tacs/tac-002.json +23 -23
- package/rcf/tacs/tac-003.json +5 -5
- package/rcf/tacs/tac-004.json +9 -9
- package/rcf/tacs/tac-005.json +7 -7
- package/rcf/tacs/tac-006.json +21 -21
- package/rcf/tacs/tac-007.json +7 -7
- package/rcf/tacs/tac-008.json +7 -7
- package/rcf/tacs/tac-4101-feedback-cli.json +5 -5
- package/rcf/tacs/tac-4102-feedback-store.json +9 -9
- package/rcf/tacs/tac-4103-feedback-redact.json +5 -5
- package/rcf/tacs/tac-4104-feedback-fingerprint.json +3 -3
- package/rcf/tacs/tac-4105-feedback-render.json +7 -7
- package/rcf/tacs/tac-4106-feedback-destination.json +5 -5
- package/rcf/tacs/tac-4107-feedback-gh.json +7 -7
- package/rcf/tacs/tac-4108-feedback-hook.json +7 -7
- package/rcf/tacs/tac-4121-define-ledgers.json +3 -2
- package/rcf/tacs/tac-4122-define-gates.json +36 -3
- package/rcf/tacs/tac-4123-define-readiness.json +29 -3
- package/rcf/tacs/tac-4125-build-bundle-refuse-override-skip.json +43 -0
- package/rcf/tacs/tac-4126-define-validate-findings.json +32 -0
- package/rcf/tacs/tac-4128-define-guidance.json +8 -2
- package/rcf/tacs/tac-4129-define-questions.json +3 -3
- package/rcf/tacs/tac-4134-wespa-host-fixture.json +9 -9
- package/rcf/test-suites/ts-007.json +1 -1
- package/rcf/test-suites/ts-215.json +64 -1
- package/rcf/test-suites/ts-216.json +18 -2
- package/rcf/test-suites/ts-219.json +10 -2
- package/rcf/test-suites/ts-220.json +18 -2
- package/rcf/test-suites/ts-222.json +4 -4
- package/rcf/test-suites/ts-225.json +10 -2
- package/rcf/test-suites/ts-228.json +4 -4
- package/rcf/test-suites/ts-229.json +49 -3
- package/rcf/test-suites/ts-230.json +100 -0
- package/rcf/test-suites/ts-231.json +119 -0
- package/rcf/test-suites/ts-232.json +109 -0
- package/rcf/test-suites/ts-233.json +61 -0
- package/rcf/test-suites/ts-234.json +53 -0
- package/rcf/test-suites/ts-235.json +53 -0
- package/rcf/test-suites/ts-236.json +44 -0
- package/rcf/user-stories/us-17302.json +36 -1
- package/rcf/user-stories/us-17401.json +11 -1
- package/rcf/user-stories/us-17402.json +6 -1
- package/rcf/user-stories/us-17403.json +11 -1
- package/rcf/user-stories/us-17404.json +66 -0
- package/rcf/user-stories/us-17405.json +66 -0
- package/rcf/user-stories/us-17406.json +51 -0
- package/rcf/user-stories/us-17503.json +2 -2
- package/rcf/user-stories/us-17504.json +46 -0
- package/rcf/user-stories/us-17702.json +51 -0
- package/rcf/user-stories/us-17802.json +40 -0
- package/rcf/user-stories/us-17902.json +46 -0
- package/rcf/user-stories/us-205.json +6 -1
- package/rcf/user-stories/us-206.json +25 -4
- package/rcf/user-stories/us-207.json +36 -0
- package/releases/releases.yaml +21 -1
- package/src/blueprint/consistency-lint.js +72 -3
- package/src/cli/build.js +206 -3
- package/src/cli/create.js +22 -2
- package/src/cli/freeze.js +68 -18
- package/src/cli/ledger.js +96 -4
- package/src/cli/readiness.js +151 -36
- package/src/cli/validate.js +8 -0
- package/src/core/errors/index.js +7 -1
- package/src/core/store/writer.js +181 -13
- package/src/define/concern-catalogue.js +130 -0
- package/src/define/freeze-record.js +74 -0
- package/src/define/ledgers.js +86 -7
- package/src/define/probe-runner.js +55 -0
- package/src/define/validate-findings.js +256 -0
- package/src/mcp/tools.js +1 -1
- package/src/query/gates.js +1235 -67
- package/src/query/index.js +6 -1
- package/src/query/readiness.js +179 -2
- package/src/query/refuse-on-admissibility.js +137 -4
- package/src/ruleset/ruleset.json +35 -0
- package/src/view/html-page.js +14 -2
- package/src/view/page-init.js +149 -8
- package/src/view/style.css +97 -18
- package/src/view/view-index.js +22 -0
package/src/cli/readiness.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// every other query verb has.
|
|
17
17
|
|
|
18
18
|
import { parseArgs } from 'node:util';
|
|
19
|
-
import { readFile } from 'node:fs/promises';
|
|
19
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
20
20
|
import { join } from 'node:path';
|
|
21
21
|
|
|
22
22
|
import { resolveTestPointers, walkTree } from '#core/store';
|
|
@@ -29,13 +29,17 @@ import {
|
|
|
29
29
|
STAGE_GATES,
|
|
30
30
|
STAGE_ORDER,
|
|
31
31
|
STAGE_SHORT_NAMES,
|
|
32
|
+
ackable,
|
|
33
|
+
extractInterfacePathTokens,
|
|
32
34
|
stagePolicy,
|
|
33
35
|
} from '../query/gates.js';
|
|
34
36
|
import {
|
|
35
37
|
computeReadiness,
|
|
38
|
+
countLitmusReadersAtHash,
|
|
36
39
|
formatTreeLine,
|
|
37
40
|
formatVerdictLines,
|
|
38
41
|
parseLevelFlag,
|
|
42
|
+
parseLitmusFlag,
|
|
39
43
|
parsePersonaFlag,
|
|
40
44
|
} from '../query/readiness.js';
|
|
41
45
|
import { runWithAdmissibilityGate } from '../query/index.js';
|
|
@@ -45,6 +49,7 @@ const OPTION_SPEC = {
|
|
|
45
49
|
check: { type: 'string' },
|
|
46
50
|
level: { type: 'string' },
|
|
47
51
|
persona: { type: 'string' },
|
|
52
|
+
litmus: { type: 'string' },
|
|
48
53
|
help: { type: 'boolean' },
|
|
49
54
|
};
|
|
50
55
|
|
|
@@ -73,11 +78,16 @@ Options:
|
|
|
73
78
|
brief | skeleton | shapes | stories |
|
|
74
79
|
crosscut | consistency | decisions |
|
|
75
80
|
freeze. Exits 4 on a blocking-stage
|
|
76
|
-
failure (D1 / D2 / D4 / D7 / D8)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
failure (D1 / D2 / D4 / D7 / D8) and on
|
|
82
|
+
an unacknowledged D3 or D5 bite failure
|
|
83
|
+
(ADR-4131, 0.30.0 PR 5 and PR 6); exits 0
|
|
84
|
+
when D3 or D5 is acknowledged at the
|
|
85
|
+
current tree hash; exits 0 with a visible
|
|
86
|
+
'[warn]' line on an unacknowledged warn-
|
|
87
|
+
with-ack failure (D6 until PR 7 bites it).
|
|
88
|
+
Use
|
|
89
|
+
--check all to print every stage under
|
|
90
|
+
this exit-code policy.
|
|
81
91
|
--level <intent|build> Pick which verdict the exit code follows.
|
|
82
92
|
--level intent exits 4 when
|
|
83
93
|
levels.intentComplete.ok is false
|
|
@@ -97,6 +107,17 @@ Options:
|
|
|
97
107
|
per-stage detail to matching-persona
|
|
98
108
|
checks. Never affects the exit code or
|
|
99
109
|
the JSON content.
|
|
110
|
+
--litmus <n> Require n distinct litmus readings at the
|
|
111
|
+
current tree hash before passing (0.30.0
|
|
112
|
+
PR 7, ADR-4131 extended). A litmus reading
|
|
113
|
+
is a probe-ledger entry whose finding
|
|
114
|
+
begins litmus:<reader>: and whose text
|
|
115
|
+
includes the current tree hash. Fewer
|
|
116
|
+
than n distinct readers exits 4 naming
|
|
117
|
+
the shortfall. No process is spawned and
|
|
118
|
+
no network call is made; the harness
|
|
119
|
+
lands the readings through
|
|
120
|
+
rcf define ledger probes add.
|
|
100
121
|
--help Print this help.
|
|
101
122
|
`;
|
|
102
123
|
|
|
@@ -108,6 +129,42 @@ const STATE_LABEL = {
|
|
|
108
129
|
notApplicable: 'notApplicable',
|
|
109
130
|
};
|
|
110
131
|
|
|
132
|
+
/**
|
|
133
|
+
* ADR-4131 (0.30.0 PR 5): walk the tree's TAC interfaces, extract the
|
|
134
|
+
* `path:` tokens the engineer named, resolve each one against
|
|
135
|
+
* `projectRoot` on disk, and return the set of tokens that resolve.
|
|
136
|
+
* `shapes:pathsResolve` reads the set from the stage context and
|
|
137
|
+
* decides the D3 bite without I/O. The compute is pure; this helper is
|
|
138
|
+
* the one place I/O happens for the check.
|
|
139
|
+
*
|
|
140
|
+
* @param {string} projectRoot
|
|
141
|
+
* @param {import('#core/store/walker.js').TreeModel} tree
|
|
142
|
+
* @returns {Promise<Set<string>>}
|
|
143
|
+
*/
|
|
144
|
+
async function resolveInterfacePaths(projectRoot, tree) {
|
|
145
|
+
const resolved = new Set();
|
|
146
|
+
/** @type {Set<string>} */
|
|
147
|
+
const candidates = new Set();
|
|
148
|
+
for (const tac of tree.tacs ?? []) {
|
|
149
|
+
for (const iface of tac.interfaces ?? []) {
|
|
150
|
+
const desc = typeof iface?.description === 'string' ? iface.description : '';
|
|
151
|
+
for (const token of extractInterfacePathTokens(desc)) {
|
|
152
|
+
candidates.add(token);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
await Promise.all([...candidates].map(async (token) => {
|
|
157
|
+
try {
|
|
158
|
+
await stat(join(projectRoot, token));
|
|
159
|
+
resolved.add(token);
|
|
160
|
+
} catch {
|
|
161
|
+
// Missing path stays out of the set; the gate decides whether
|
|
162
|
+
// `authoredAt: D3` lets it through.
|
|
163
|
+
}
|
|
164
|
+
}));
|
|
165
|
+
return resolved;
|
|
166
|
+
}
|
|
167
|
+
|
|
111
168
|
/**
|
|
112
169
|
* Read `rcf/.identity/profile.md` when it exists; return null on
|
|
113
170
|
* ENOENT. Any other read error surfaces as null so the profile
|
|
@@ -209,6 +266,15 @@ export async function main(argv, deps = {}) {
|
|
|
209
266
|
return 2;
|
|
210
267
|
}
|
|
211
268
|
|
|
269
|
+
/** @type {number | null} */
|
|
270
|
+
let litmus;
|
|
271
|
+
try {
|
|
272
|
+
litmus = parseLitmusFlag(flags.litmus);
|
|
273
|
+
} catch (err) {
|
|
274
|
+
stderr.write(`[error] usage readiness: ${/** @type {Error} */ (err).message}\n`);
|
|
275
|
+
return 2;
|
|
276
|
+
}
|
|
277
|
+
|
|
212
278
|
const projectRoot = await findProjectRoot(cwd);
|
|
213
279
|
if (!projectRoot) {
|
|
214
280
|
stderr.write('[error] usage no project root found (no rcf/manifest.json in this directory or any ancestor). Run `npx rcf init` to create and wire a project.\n');
|
|
@@ -219,11 +285,12 @@ export async function main(argv, deps = {}) {
|
|
|
219
285
|
const staleErrors = await checkCodeNodeResolution({ projectRoot, tree });
|
|
220
286
|
const validateErrors = [...errors, ...staleErrors];
|
|
221
287
|
|
|
222
|
-
const [freeze, ledgers, testPointers, profileText] = await Promise.all([
|
|
288
|
+
const [freeze, ledgers, testPointers, profileText, resolvedPaths] = await Promise.all([
|
|
223
289
|
loadFreezeRecord({ projectRoot }),
|
|
224
290
|
loadAllLedgers({ projectRoot }),
|
|
225
291
|
resolveTestPointers({ projectRoot, tree }),
|
|
226
292
|
readProfileText(projectRoot),
|
|
293
|
+
resolveInterfacePaths(projectRoot, tree),
|
|
227
294
|
]);
|
|
228
295
|
|
|
229
296
|
const startedAt = Date.now();
|
|
@@ -232,33 +299,34 @@ export async function main(argv, deps = {}) {
|
|
|
232
299
|
: null;
|
|
233
300
|
|
|
234
301
|
// Readiness is a diagnostic: even a chain that refuses admissibility
|
|
235
|
-
// wants to know which stage gate blocks it.
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
//
|
|
302
|
+
// wants to know which stage gate blocks it (AC-17902-4). Compute
|
|
303
|
+
// readiness once up front, then run the admissibility wrap passing
|
|
304
|
+
// the computed stages and validate-errors so it can cite
|
|
305
|
+
// NV-DL-ADM-02 (D4 floor), NV-DL-ADM-03 (D3 bite) and NV-DL-ADM-04
|
|
306
|
+
// (validate findings) alongside the NV-BL rules (PR 9).
|
|
307
|
+
/** @type {import('../query/readiness.js').ReadinessResult} */
|
|
308
|
+
const result = computeReadiness(tree, {
|
|
309
|
+
freeze,
|
|
310
|
+
ledgers,
|
|
311
|
+
profile: undefined,
|
|
312
|
+
profileText,
|
|
313
|
+
testPointers,
|
|
314
|
+
validateErrors,
|
|
315
|
+
resolvedPaths,
|
|
316
|
+
});
|
|
239
317
|
const gated = await runWithAdmissibilityGate({
|
|
240
318
|
tree,
|
|
241
319
|
chainRulesetVersion,
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
profile: undefined,
|
|
246
|
-
profileText,
|
|
247
|
-
testPointers,
|
|
248
|
-
validateErrors,
|
|
249
|
-
}),
|
|
320
|
+
defineStages: result.stages,
|
|
321
|
+
defineValidateErrors: validateErrors,
|
|
322
|
+
produce: () => result,
|
|
250
323
|
});
|
|
251
|
-
|
|
252
|
-
/** @type {import('../query/readiness.js').ReadinessResult} */
|
|
253
|
-
const result = gated.status === 'refused-admissibility'
|
|
254
|
-
? computeReadiness(tree, {
|
|
255
|
-
freeze, ledgers, profile: undefined, profileText, testPointers, validateErrors,
|
|
256
|
-
})
|
|
257
|
-
: gated.payload;
|
|
258
324
|
const wallMs = Date.now() - startedAt;
|
|
259
325
|
|
|
260
326
|
if (gated.status === 'refused-admissibility') {
|
|
261
327
|
stderr.write(`[warn] readiness: chain admissibility refused (informational; the readiness compute still ran). ${gated.refusal}\n`);
|
|
328
|
+
} else if (Array.isArray(gated.defineRules) && gated.defineRules.length > 0) {
|
|
329
|
+
stderr.write(`[warn] readiness: DEFINE-stage admissibility rules bite (informational; the readiness compute still ran): [${gated.defineRules.join(', ')}]. Resolve the failing stages or record an --ack reason on freeze.gates to satisfy recordedInChain.\n`);
|
|
262
330
|
}
|
|
263
331
|
|
|
264
332
|
if (flags.json) {
|
|
@@ -267,13 +335,13 @@ export async function main(argv, deps = {}) {
|
|
|
267
335
|
// `_meta.level` is null when the flag was absent (spec section
|
|
268
336
|
// 3.3): consumers can tell "no --level given" from "--level
|
|
269
337
|
// build" explicitly, which matters for the ticket artefact.
|
|
270
|
-
const envelope = { ...result, _meta: { wallMs, level } };
|
|
338
|
+
const envelope = { ...result, _meta: { wallMs, level, litmus } };
|
|
271
339
|
stdout.write(`${JSON.stringify(envelope, null, 2)}\n`);
|
|
272
|
-
return decideExitCode(result, checkStage, level, stderr);
|
|
340
|
+
return decideExitCode(result, checkStage, level, litmus, ledgers, stderr);
|
|
273
341
|
}
|
|
274
342
|
|
|
275
343
|
renderText(stdout, stderr, result, wallMs, checkStage, level, persona, profileText);
|
|
276
|
-
return decideExitCode(result, checkStage, level, stderr);
|
|
344
|
+
return decideExitCode(result, checkStage, level, litmus, ledgers, stderr);
|
|
277
345
|
}
|
|
278
346
|
|
|
279
347
|
/**
|
|
@@ -322,7 +390,7 @@ function renderText(stdout, stderr, result, wallMs, checkStage, level, persona,
|
|
|
322
390
|
|
|
323
391
|
for (const stage of result.stages) {
|
|
324
392
|
if (checkStage && checkStage !== 'all' && stage.stage !== checkStage) continue;
|
|
325
|
-
stdout.write(`\n${
|
|
393
|
+
stdout.write(`\n${formatStageLine(stage)}\n`);
|
|
326
394
|
for (const c of stage.checks) {
|
|
327
395
|
if (persona && c.persona !== persona) continue;
|
|
328
396
|
const mark = c.ok ? 'ok' : 'FAIL';
|
|
@@ -337,6 +405,20 @@ function renderText(stdout, stderr, result, wallMs, checkStage, level, persona,
|
|
|
337
405
|
}
|
|
338
406
|
}
|
|
339
407
|
|
|
408
|
+
/**
|
|
409
|
+
* Format the per-stage header line the text report prints, e.g.
|
|
410
|
+
* `D3 (define.shapes): failing`. A `reason` trailer is appended only
|
|
411
|
+
* when the envelope carries one (the `notApplicable` envelopes do; the
|
|
412
|
+
* ADR-4138 tree-wide failing envelope does not). Exported so the
|
|
413
|
+
* printed line is testable without driving the whole CLI.
|
|
414
|
+
*
|
|
415
|
+
* @param {{ stage: string, gate: string, state: string, reason?: string }} stage
|
|
416
|
+
* @returns {string}
|
|
417
|
+
*/
|
|
418
|
+
export function formatStageLine(stage) {
|
|
419
|
+
return `${stage.stage} (${stage.gate}): ${STATE_LABEL[stage.state] ?? stage.state}${stage.reason ? ` (${stage.reason})` : ''}`;
|
|
420
|
+
}
|
|
421
|
+
|
|
340
422
|
/**
|
|
341
423
|
* Render the per-persona next-action lines (spec section 4). When a
|
|
342
424
|
* `--level` is given the matching persona's line heads the pair; when
|
|
@@ -426,13 +508,15 @@ function formatChipLine(result) {
|
|
|
426
508
|
|
|
427
509
|
/**
|
|
428
510
|
* Decide the exit code for an invocation (spec section 3.2 matrix):
|
|
429
|
-
* - No `--check
|
|
511
|
+
* - No `--check`, no `--level`, no `--litmus`: always 0.
|
|
430
512
|
* - `--check` alone: today's stage policy (4 on blocking failure,
|
|
431
513
|
* 0 with `[warn]` on warn-with-ack failure).
|
|
432
514
|
* - `--level intent`: 4 iff `levels.intentComplete.ok === false`.
|
|
433
515
|
* - `--level build`: 4 iff `levels.readyToBuild.ok === false`
|
|
434
516
|
* (stricter than `--check all`; the warn line still prints).
|
|
435
|
-
* -
|
|
517
|
+
* - `--litmus <n>`: 4 iff fewer than n distinct litmus readings at
|
|
518
|
+
* the current tree hash (spec section 11.6, ADR-4131 extended).
|
|
519
|
+
* - Several: 4 if any policy says 4.
|
|
436
520
|
*
|
|
437
521
|
* Warn lines are emitted whenever a warn-with-ack stage is failing,
|
|
438
522
|
* independent of exit code, so an operator always sees why.
|
|
@@ -440,13 +524,27 @@ function formatChipLine(result) {
|
|
|
440
524
|
* @param {import('../query/readiness.js').ReadinessResult} result
|
|
441
525
|
* @param {string | null} checkStage
|
|
442
526
|
* @param {'intent' | 'build' | null} level
|
|
527
|
+
* @param {number | null} litmus
|
|
528
|
+
* @param {object} ledgers
|
|
443
529
|
* @param {NodeJS.WritableStream} stderr
|
|
444
530
|
* @returns {number}
|
|
445
531
|
*/
|
|
446
|
-
function decideExitCode(result, checkStage, level, stderr) {
|
|
532
|
+
function decideExitCode(result, checkStage, level, litmus, ledgers, stderr) {
|
|
447
533
|
let exitCode = 0;
|
|
448
534
|
|
|
449
|
-
// --check policy (
|
|
535
|
+
// --check policy. ADR-4131 (0.30.0 PR 5): D3 bites, so a failing D3
|
|
536
|
+
// without an acknowledgement at the current tree hash exits 4.
|
|
537
|
+
// 0.30.0 PR 6 lifts the bite to D5 (crosscut:catalogue, the four new
|
|
538
|
+
// D4/D2 engineer checks ride D5's ack because the --ack channel is
|
|
539
|
+
// per gate). 0.30.0 PR 7 lifts the bite to D6 (the four consistency
|
|
540
|
+
// scans; the --ack channel D3/D5/D6 already share stays unchanged).
|
|
541
|
+
// The 'acknowledged' state is already folded by foldState() in
|
|
542
|
+
// gates.js when the freeze record acknowledges the gate at the
|
|
543
|
+
// current hash, so a failing-but-unacked bite stays failing here and
|
|
544
|
+
// exit 4 is the right answer. `ackable(stage)` names the three gates
|
|
545
|
+
// that accept an --ack override; a failing ackable stage that is not
|
|
546
|
+
// acknowledged bites.
|
|
547
|
+
const BITING_STAGES = new Set(['D3', 'D5', 'D6']);
|
|
450
548
|
if (checkStage) {
|
|
451
549
|
const stages = checkStage === 'all'
|
|
452
550
|
? result.stages
|
|
@@ -454,9 +552,10 @@ function decideExitCode(result, checkStage, level, stderr) {
|
|
|
454
552
|
for (const s of stages) {
|
|
455
553
|
if (s.state !== 'failing') continue;
|
|
456
554
|
const policy = stagePolicy(s.stage);
|
|
457
|
-
|
|
555
|
+
const bites = BITING_STAGES.has(s.stage);
|
|
556
|
+
if (policy === 'blocking' || bites) {
|
|
458
557
|
exitCode = 4;
|
|
459
|
-
} else {
|
|
558
|
+
} else if (ackable(s.stage)) {
|
|
460
559
|
stderr.write(`[warn] readiness: ${s.stage} (${s.gate}) is failing without an acknowledgement at the current tree hash. Run \`rcf define freeze --ack ${s.gate} --reason "<text>"\` to acknowledge, or edit the tree to clear the failure.\n`);
|
|
461
560
|
}
|
|
462
561
|
}
|
|
@@ -490,6 +589,22 @@ function decideExitCode(result, checkStage, level, stderr) {
|
|
|
490
589
|
}
|
|
491
590
|
}
|
|
492
591
|
|
|
592
|
+
// --litmus policy (0.30.0 PR 7, ADR-4131 extended; R9 clarified
|
|
593
|
+
// 2026-10-03, w-2026-10-03-dave-011). Count distinct readers who
|
|
594
|
+
// have landed a probe-ledger entry at the current LITMUS HASH whose
|
|
595
|
+
// finding begins litmus:<reader>:; exit 4 when fewer than n have
|
|
596
|
+
// attested. The litmus hash is the tree hash computed with the
|
|
597
|
+
// probes ledger excluded (see computeLitmusHash in src/query/readiness.js)
|
|
598
|
+
// so a reader's own write does not shift the hash it is attesting to.
|
|
599
|
+
if (typeof litmus === 'number' && litmus > 0) {
|
|
600
|
+
const hash = result.tree.litmusHash;
|
|
601
|
+
const readers = countLitmusReadersAtHash(ledgers, hash);
|
|
602
|
+
if (readers.size < litmus) {
|
|
603
|
+
stderr.write(`[warn] readiness: --litmus ${litmus} requires ${litmus} distinct litmus reading(s) at litmus hash ${hash}; found ${readers.size}. Spawn ${litmus - readers.size} more fresh-context reader(s) and land their readings through \`rcf define ledger probes add --req <reqId> --finding "litmus:<reader>: ..." --severity low\` with the litmus hash in the finding text (read it from \`rcf define readiness --json\` under \`tree.litmusHash\`).\n`);
|
|
604
|
+
exitCode = 4;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
|
|
493
608
|
return exitCode;
|
|
494
609
|
}
|
|
495
610
|
|
package/src/cli/validate.js
CHANGED
|
@@ -8,6 +8,8 @@ import { formatErrors } from '#core/errors';
|
|
|
8
8
|
import { checkCodeNodeResolution, walkTree } from '#core/store';
|
|
9
9
|
import { validateCompanionPinsResolvable } from '../blueprint/companions.js';
|
|
10
10
|
import { findProjectRoot } from '../view/index.js';
|
|
11
|
+
// 0.30.0 PR 8 (REQ-178 / TAC-4126): define-validate findings.
|
|
12
|
+
import { collectDefineValidateFindings } from '../define/validate-findings.js';
|
|
11
13
|
|
|
12
14
|
const OPTION_SPEC = {
|
|
13
15
|
quiet: { type: 'boolean' },
|
|
@@ -133,6 +135,12 @@ export async function main(argv, deps = {}) {
|
|
|
133
135
|
// a pin that names no known provider is exit 3.
|
|
134
136
|
const companionsErrors = await validateCompanionPinsResolvable({ projectRoot, tree });
|
|
135
137
|
errors.push(...companionsErrors);
|
|
138
|
+
// 0.30.0 PR 8 (REQ-178, TAC-4126): interface kind outside vocabulary,
|
|
139
|
+
// bracketed AC class prefix outside the known classes, tacIds naming
|
|
140
|
+
// a non-TAC, and an unresolving ownerRef or deliveredBy. Absence of
|
|
141
|
+
// a class marker is NOT a finding (decision 10 kept).
|
|
142
|
+
const defineValidateFindings = collectDefineValidateFindings(tree);
|
|
143
|
+
errors.push(...defineValidateFindings);
|
|
136
144
|
if (flags.json) {
|
|
137
145
|
const issues = errors.map((e) => ({
|
|
138
146
|
id: e.documentId ?? null,
|
package/src/core/errors/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// renders them inline in the page so an owner can see what is broken.
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* @typedef {('validation'|'missingFile'|'brokenReference'|'parseFailure'|'ioFailure'|'usage'|'staleCode'|'missingCodeNodes'|'duplicateId')} ErrorKind
|
|
10
|
+
* @typedef {('validation'|'missingFile'|'brokenReference'|'parseFailure'|'ioFailure'|'usage'|'staleCode'|'missingCodeNodes'|'duplicateId'|'conflict')} ErrorKind
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -49,6 +49,12 @@ const VALID_KINDS = new Set([
|
|
|
49
49
|
// with the spec-verbatim refusal message; the CLI translates it to
|
|
50
50
|
// exit 3 (not exit 2) with the message printed as-is on stderr.
|
|
51
51
|
'requiresAppliedCapabilities',
|
|
52
|
+
// Ruling R1 extension 2026-10-05 (DEFINE step 3, PR 292 follow-up):
|
|
53
|
+
// a same-id `rcf define create` replay whose would-be body differs
|
|
54
|
+
// from the on-disk entry refuses with `kind: 'conflict'`; the CLI
|
|
55
|
+
// translates it to exit 3 with the id and the differing field keys
|
|
56
|
+
// named in the message. Mirrors `src/define/ledgers.js` R1 add path.
|
|
57
|
+
'conflict',
|
|
52
58
|
]);
|
|
53
59
|
|
|
54
60
|
/**
|
package/src/core/store/writer.js
CHANGED
|
@@ -52,6 +52,111 @@ function canonicalKind(kind) {
|
|
|
52
52
|
return KIND_ALIASES[kind] ?? kind;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Fields the R1 create-replay compare ignores: every field the writer or
|
|
57
|
+
* a post-create side effect stamps on its own, never from the caller's
|
|
58
|
+
* input. A verbatim replay of a create must compare equal even after
|
|
59
|
+
* those stamps landed; every other field is deep-compared. Add a field
|
|
60
|
+
* here whenever a writer path or a post-create hook starts stamping one.
|
|
61
|
+
* Ruling R1 extension (PR 292 follow-up; list made exhaustive on the
|
|
62
|
+
* PR 293 landing review, d-2026-10-05-015 finding 2).
|
|
63
|
+
*/
|
|
64
|
+
export const REPLAY_IGNORE_FIELDS = Object.freeze([
|
|
65
|
+
// Writer clock: assembleBody / createCn stamp it on every create and
|
|
66
|
+
// strip any caller-supplied value (B1 fix).
|
|
67
|
+
'createdAt',
|
|
68
|
+
// Writer clock: stamped on every create and bumped by every update,
|
|
69
|
+
// including the classifier's own write-back below.
|
|
70
|
+
'updatedAt',
|
|
71
|
+
// REQ shape classifier (src/req-detection/persist.js
|
|
72
|
+
// classifyAndPersistReq): src/cli/create.js runs it after every
|
|
73
|
+
// `create req` and persists the block through updateDocument, so the
|
|
74
|
+
// first create leaves a field the replay body never carries.
|
|
75
|
+
'shapeClassification',
|
|
76
|
+
]);
|
|
77
|
+
const REPLAY_IGNORE_SET = new Set(REPLAY_IGNORE_FIELDS);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Deep-equality over JSON-shaped values. Pure. Mirrors
|
|
81
|
+
* `src/define/ledgers.js` `deepEqual` so the R1 extension to `rcf
|
|
82
|
+
* define create` compares content the same way the add path does.
|
|
83
|
+
*/
|
|
84
|
+
function deepEqual(a, b) {
|
|
85
|
+
if (Object.is(a, b)) return true;
|
|
86
|
+
if (a === null || b === null) return false;
|
|
87
|
+
if (typeof a !== typeof b) return false;
|
|
88
|
+
if (Array.isArray(a)) {
|
|
89
|
+
if (!Array.isArray(b) || a.length !== b.length) return false;
|
|
90
|
+
for (let i = 0; i < a.length; i += 1) if (!deepEqual(a[i], b[i])) return false;
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
if (typeof a === 'object') {
|
|
94
|
+
if (typeof b !== 'object' || Array.isArray(b)) return false;
|
|
95
|
+
const ak = Object.keys(a);
|
|
96
|
+
const bk = Object.keys(b);
|
|
97
|
+
if (ak.length !== bk.length) return false;
|
|
98
|
+
for (const k of ak) if (!deepEqual(a[k], b[k])) return false;
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Compare an on-disk doc body to a would-be create body and return
|
|
106
|
+
* the sorted list of differing field keys. Ignores every field in
|
|
107
|
+
* REPLAY_IGNORE_FIELDS (writer- and classifier-owned stamps), so a
|
|
108
|
+
* verbatim replay does not show up as "updatedAt differs" or
|
|
109
|
+
* "shapeClassification differs". A key present on only one side counts as
|
|
110
|
+
* differing. R1 extension 2026-10-05 (PR 292 follow-up).
|
|
111
|
+
*
|
|
112
|
+
* @param {Record<string, unknown>} existing
|
|
113
|
+
* @param {Record<string, unknown>} candidate
|
|
114
|
+
* @returns {string[]}
|
|
115
|
+
*/
|
|
116
|
+
function diffDocFields(existing, candidate) {
|
|
117
|
+
/** @type {Set<string>} */
|
|
118
|
+
const differing = new Set();
|
|
119
|
+
const keys = new Set([...Object.keys(existing ?? {}), ...Object.keys(candidate ?? {})]);
|
|
120
|
+
for (const key of keys) {
|
|
121
|
+
if (REPLAY_IGNORE_SET.has(key)) continue;
|
|
122
|
+
if (!deepEqual(existing?.[key], candidate?.[key])) differing.add(key);
|
|
123
|
+
}
|
|
124
|
+
return [...differing];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Ruling R1 extension (PR 292 follow-up, amended on the PR 293 landing
|
|
129
|
+
* review): resolve a same-id create replay against the entry already on
|
|
130
|
+
* the tree. Returns null when the id is free; otherwise the
|
|
131
|
+
* `{ status: 'unchanged' }` result (identical content, nothing is
|
|
132
|
+
* written) or a `kind: 'conflict'` refusal naming the differing field
|
|
133
|
+
* keys (exit 3; never a silent overwrite). Shared by the document path
|
|
134
|
+
* (createDocument), the inline AC / TC paths and the CN path so every
|
|
135
|
+
* `rcf define create <kind> --id` follows one rule.
|
|
136
|
+
*
|
|
137
|
+
* @param {object} args
|
|
138
|
+
* @param {string} args.kind - the CLI kind, for the message
|
|
139
|
+
* @param {string} args.id
|
|
140
|
+
* @param {object | null | undefined} args.existing - the entry on the tree
|
|
141
|
+
* @param {object} args.candidate - the would-be entry
|
|
142
|
+
* @param {string} args.filePath - repo-relative file the entry lives in
|
|
143
|
+
* @param {object} [args.extra] - extra fields carried on the unchanged result
|
|
144
|
+
* @returns {object | null}
|
|
145
|
+
*/
|
|
146
|
+
function resolveReplay({ kind, id, existing, candidate, filePath, extra = {} }) {
|
|
147
|
+
if (!existing) return null;
|
|
148
|
+
const differing = diffDocFields(existing, candidate);
|
|
149
|
+
if (differing.length === 0) {
|
|
150
|
+
return { id, filePath, ...extra, body: existing, status: 'unchanged' };
|
|
151
|
+
}
|
|
152
|
+
return rcfError({
|
|
153
|
+
kind: 'conflict',
|
|
154
|
+
message: `create ${kind}: id ${id} already exists with different content; differing fields: ${differing.sort().join(', ')}. Use the update verb to patch.`,
|
|
155
|
+
documentId: id,
|
|
156
|
+
filePath,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
55
160
|
// ---------------------------------------------------------------------------
|
|
56
161
|
// B5: post-write validation gate
|
|
57
162
|
// ---------------------------------------------------------------------------
|
|
@@ -496,17 +601,28 @@ export async function createDocument({ projectRoot, tree, kind, body, options =
|
|
|
496
601
|
});
|
|
497
602
|
}
|
|
498
603
|
|
|
499
|
-
// Allocate id (or take the override).
|
|
604
|
+
// Allocate id (or take the override). Ruling R1 2026-10-05 extended
|
|
605
|
+
// under w-2026-10-05-dave-013 (PR 292 follow-up): a replayed turn
|
|
606
|
+
// that carries `--id <existing>` with identical content is a no-op
|
|
607
|
+
// that returns `{ status: 'unchanged', body: existing }`; different
|
|
608
|
+
// content refuses with `kind: 'conflict'` naming the differing
|
|
609
|
+
// field keys. An unloadable (schema-invalid) doc still refuses
|
|
610
|
+
// unconditionally -- we cannot compare content against a doc we
|
|
611
|
+
// failed to load.
|
|
500
612
|
let id = options.id;
|
|
613
|
+
/** @type {object | null} */
|
|
614
|
+
let existingDocForReplay = null;
|
|
501
615
|
if (id) {
|
|
502
|
-
|
|
503
|
-
if (tree.byId.has(id) || tree.invalidDocs?.has(id)) {
|
|
616
|
+
if (tree.invalidDocs?.has(id)) {
|
|
504
617
|
return rcfError({
|
|
505
618
|
kind: 'usage',
|
|
506
|
-
message: `create ${kind}: id ${id} is already taken`,
|
|
619
|
+
message: `create ${kind}: id ${id} is already taken (file on disk failed to load; repair before replaying)`,
|
|
507
620
|
documentId: id,
|
|
508
621
|
});
|
|
509
622
|
}
|
|
623
|
+
if (tree.byId.has(id)) {
|
|
624
|
+
existingDocForReplay = tree.byId.get(id);
|
|
625
|
+
}
|
|
510
626
|
} else {
|
|
511
627
|
try {
|
|
512
628
|
id = nextIdForKind(tree, canonical, { parentId });
|
|
@@ -528,7 +644,7 @@ export async function createDocument({ projectRoot, tree, kind, body, options =
|
|
|
528
644
|
}
|
|
529
645
|
providedOrder = maxOrder + 1;
|
|
530
646
|
} else if (Number.isInteger(providedOrder)) {
|
|
531
|
-
const collision = siblings.find((sib) => sib.buildOrder === providedOrder);
|
|
647
|
+
const collision = siblings.find((sib) => sib.buildOrder === providedOrder && sib.fbsId !== id);
|
|
532
648
|
if (collision) {
|
|
533
649
|
return rcfError({
|
|
534
650
|
kind: 'usage',
|
|
@@ -553,6 +669,16 @@ export async function createDocument({ projectRoot, tree, kind, body, options =
|
|
|
553
669
|
});
|
|
554
670
|
if (validation) return { ...validation, documentId: id };
|
|
555
671
|
|
|
672
|
+
// Ruling R1 extension 2026-10-05 (PR 292 follow-up): if the id
|
|
673
|
+
// already exists on the loaded tree, compare the would-be body to
|
|
674
|
+
// the existing doc (ignoring writer-owned timestamps) and either
|
|
675
|
+
// return `{ status: 'unchanged' }` or refuse with
|
|
676
|
+
// `kind: 'conflict'` naming the differing field keys.
|
|
677
|
+
const replay = resolveReplay({
|
|
678
|
+
kind, id, existing: existingDocForReplay, candidate: finalBody, filePath: relPath,
|
|
679
|
+
});
|
|
680
|
+
if (replay) return replay;
|
|
681
|
+
|
|
556
682
|
// Cross-link ACs must resolve to existing ACs for fbs / ts.
|
|
557
683
|
if (canonical === 'fbs' || canonical === 'testSuite') {
|
|
558
684
|
const allAcIds = collectAllAcIds(tree);
|
|
@@ -644,10 +770,22 @@ async function createCn({ projectRoot, tree, options, body, walkErrors = [] }) {
|
|
|
644
770
|
return rcfError({ kind: 'usage', message: 'create cn: --path is required' });
|
|
645
771
|
}
|
|
646
772
|
|
|
773
|
+
// Ruling R1 extension (PR 293 landing review): a same-id replay is
|
|
774
|
+
// compared against the existing CN once the body is assembled below.
|
|
775
|
+
// An unloadable (schema-invalid) CN, or an id held by another kind,
|
|
776
|
+
// still refuses: there is no CN body to compare against.
|
|
647
777
|
let id = options.id;
|
|
778
|
+
/** @type {object | null} */
|
|
779
|
+
let existingCnForReplay = null;
|
|
648
780
|
if (id) {
|
|
649
|
-
if (tree.
|
|
650
|
-
return rcfError({ kind: 'usage', message: `create cn: id ${id} is already taken`, documentId: id });
|
|
781
|
+
if (tree.invalidDocs?.has(id)) {
|
|
782
|
+
return rcfError({ kind: 'usage', message: `create cn: id ${id} is already taken (file on disk failed to load; repair before replaying)`, documentId: id });
|
|
783
|
+
}
|
|
784
|
+
if (tree.byId.has(id)) {
|
|
785
|
+
if (tree.kindById.get(id) !== 'codeNode') {
|
|
786
|
+
return rcfError({ kind: 'usage', message: `create cn: id ${id} is already taken`, documentId: id });
|
|
787
|
+
}
|
|
788
|
+
existingCnForReplay = tree.byId.get(id);
|
|
651
789
|
}
|
|
652
790
|
} else {
|
|
653
791
|
id = nextIdForKind(tree, 'codeNode');
|
|
@@ -706,6 +844,11 @@ async function createCn({ projectRoot, tree, options, body, walkErrors = [] }) {
|
|
|
706
844
|
const validation = validateDocument({ doc: finalBody, kind: 'codeNode', filePath: relPath });
|
|
707
845
|
if (validation) return { ...validation, documentId: id };
|
|
708
846
|
|
|
847
|
+
const replay = resolveReplay({
|
|
848
|
+
kind: 'cn', id, existing: existingCnForReplay, candidate: finalBody, filePath: relPath,
|
|
849
|
+
});
|
|
850
|
+
if (replay) return replay;
|
|
851
|
+
|
|
709
852
|
const absPath = pathForKindFile(projectRoot, 'codeNode', id);
|
|
710
853
|
if (await fileExistsOnDisk(absPath)) {
|
|
711
854
|
return rcfError({
|
|
@@ -919,12 +1062,14 @@ async function createInlineAc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
919
1062
|
const seedIndex = detectSeededPhantomAcIndex(currentAcs, parentUsId);
|
|
920
1063
|
const replacingPhantom = seedIndex !== -1 && !options.id;
|
|
921
1064
|
|
|
1065
|
+
// Ruling R1 extension (PR 293 landing review): an explicit --id that
|
|
1066
|
+
// already names an AC on the parent US is a replay, resolved against
|
|
1067
|
+
// that AC once the would-be entry is built below.
|
|
922
1068
|
let acId = options.id;
|
|
1069
|
+
/** @type {object | null} */
|
|
1070
|
+
let existingAcForReplay = null;
|
|
923
1071
|
if (acId) {
|
|
924
|
-
|
|
925
|
-
if (existing) {
|
|
926
|
-
return rcfError({ kind: 'usage', message: `create ac: id ${acId} already exists on ${parentUsId}`, documentId: acId });
|
|
927
|
-
}
|
|
1072
|
+
existingAcForReplay = currentAcs.find((ac) => ac.id === acId) ?? null;
|
|
928
1073
|
} else if (replacingPhantom) {
|
|
929
1074
|
// Reuse the seed's id (AC-<us>-1) so the operator's first AC is -1.
|
|
930
1075
|
acId = currentAcs[seedIndex].id;
|
|
@@ -947,6 +1092,15 @@ async function createInlineAc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
947
1092
|
// consumer, so we only serialise when the CLI passed a value.
|
|
948
1093
|
...(body?.determinism !== undefined ? { determinism: body.determinism } : {}),
|
|
949
1094
|
};
|
|
1095
|
+
const acReplay = resolveReplay({
|
|
1096
|
+
kind: 'ac',
|
|
1097
|
+
id: acId,
|
|
1098
|
+
existing: existingAcForReplay,
|
|
1099
|
+
candidate: acEntry,
|
|
1100
|
+
filePath: `rcf/user-stories/${parentUsId.toLowerCase()}.json`,
|
|
1101
|
+
extra: { parentId: parentUsId },
|
|
1102
|
+
});
|
|
1103
|
+
if (acReplay) return acReplay;
|
|
950
1104
|
const nextAcs = replacingPhantom
|
|
951
1105
|
? currentAcs.map((ac, i) => (i === seedIndex ? acEntry : ac))
|
|
952
1106
|
: [...currentAcs, acEntry];
|
|
@@ -1073,9 +1227,14 @@ async function createInlineTc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
1073
1227
|
return rcfError({ kind: 'usage', message: `create tc: parent ${parentTsId} has an unrecognised id shape` });
|
|
1074
1228
|
}
|
|
1075
1229
|
const tcId = options.id ?? `TC-${tsSuffix}-${slug}`;
|
|
1076
|
-
// Slug collision fails explicitly (§D10 OQ-P4-R-1).
|
|
1077
1230
|
const existing = (ts.testCases ?? []).find((tc) => tc.id === tcId);
|
|
1078
|
-
|
|
1231
|
+
// Ruling R1 extension (PR 293 landing review): idempotency is
|
|
1232
|
+
// id-carried. An explicit --id that already names a TC on the parent
|
|
1233
|
+
// TS is a replay, resolved against that TC once the would-be entry is
|
|
1234
|
+
// built below. A derived-slug collision (no --id) still refuses
|
|
1235
|
+
// explicitly (§D10 OQ-P4-R-1).
|
|
1236
|
+
const replayingTc = Boolean(options.id) && Boolean(existing);
|
|
1237
|
+
if (existing && !replayingTc) {
|
|
1079
1238
|
return rcfError({
|
|
1080
1239
|
kind: 'usage',
|
|
1081
1240
|
message: `create tc: slug collision on ${tcId}, supply --slug explicitly`,
|
|
@@ -1089,6 +1248,15 @@ async function createInlineTc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
1089
1248
|
status: body?.status ?? 'pending',
|
|
1090
1249
|
testPointer,
|
|
1091
1250
|
};
|
|
1251
|
+
const tcReplay = resolveReplay({
|
|
1252
|
+
kind: 'tc',
|
|
1253
|
+
id: tcId,
|
|
1254
|
+
existing: replayingTc ? existing : null,
|
|
1255
|
+
candidate: tcEntry,
|
|
1256
|
+
filePath: `rcf/test-suites/${parentTsId.toLowerCase()}.json`,
|
|
1257
|
+
extra: { parentId: parentTsId },
|
|
1258
|
+
});
|
|
1259
|
+
if (tcReplay) return tcReplay;
|
|
1092
1260
|
const nextTs = {
|
|
1093
1261
|
...ts,
|
|
1094
1262
|
testCases: [...(ts.testCases ?? []), tcEntry],
|