rcf-lite 0.12.0 → 0.14.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 +39 -0
- package/README.md +2 -0
- package/bin/rcf.js +3 -1
- package/bin/view-supervisor-child.mjs +0 -0
- package/blueprints/application-api-rest/README.md +40 -0
- package/blueprints/application-api-rest/assets/middleware/auth-classes.md +45 -0
- package/blueprints/application-api-rest/assets/openapi/openapi-skeleton.yaml +322 -0
- package/blueprints/application-api-rest/assets/sample-data/sample-resources.json +53 -0
- package/blueprints/application-api-rest/assets/samples/request-response-pairs.md +204 -0
- package/blueprints/application-api-rest/blueprint.json +265 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-301-application-api-rest-error-envelope.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-302-application-api-rest-auth-model.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-303-application-api-rest-api-versioning.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-304-application-api-rest-logging.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-305-application-api-rest-pagination.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-306-application-api-rest-idempotency.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-307-application-api-rest-openapi-generation.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-308-application-api-rest-rate-limiting.json +25 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-001.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-002.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-003.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-004.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-005.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-007.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-008.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-009.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-010.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-011.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-012.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-013.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-014.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-015.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-016.json +18 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-301-application-api-rest-request-pipeline.json +48 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-302-application-api-rest-auth-middleware.json +41 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-303-application-api-rest-contract-surface.json +46 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-304-application-api-rest-resource-layer.json +46 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-305-application-api-rest-observability.json +40 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +46 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2101.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2102.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2104.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2105.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2106.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2107.json +90 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +90 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2109.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2110.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2111.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2112.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2113.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2114.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2115.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2116.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2117.json +64 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2118.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2119.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2120.json +73 -0
- package/blueprints/application-api-rest/docs/topics.md +46 -0
- package/blueprints/application-api-rest/guide/application-api-rest.md +41 -0
- package/blueprints/application-spa/README.md +90 -0
- package/blueprints/application-spa/assets/component-specs/actions-and-text-inputs.md +36 -0
- package/blueprints/application-spa/assets/component-specs/data-display.md +19 -0
- package/blueprints/application-spa/assets/component-specs/feedback-and-status.md +27 -0
- package/blueprints/application-spa/assets/component-specs/overlays.md +23 -0
- package/blueprints/application-spa/assets/component-specs/selection-controls.md +23 -0
- package/blueprints/application-spa/assets/sample-data/sample-entities.json +41 -0
- package/blueprints/application-spa/assets/tokens/design-tokens.json +140 -0
- package/blueprints/application-spa/assets/tokens/theme.css +169 -0
- package/blueprints/application-spa/assets/viewports.md +18 -0
- package/blueprints/application-spa/assets/wireframes/dashboard.md +48 -0
- package/blueprints/application-spa/assets/wireframes/detail.md +40 -0
- package/blueprints/application-spa/assets/wireframes/empty.md +31 -0
- package/blueprints/application-spa/assets/wireframes/error.md +46 -0
- package/blueprints/application-spa/assets/wireframes/form.md +50 -0
- package/blueprints/application-spa/assets/wireframes/list.md +45 -0
- package/blueprints/application-spa/assets/wireframes/session-expired.md +35 -0
- package/blueprints/application-spa/assets/wireframes/sign-in.md +41 -0
- package/blueprints/application-spa/assets/wireframes/sign-out.md +32 -0
- package/blueprints/application-spa/blueprint.json +387 -0
- package/blueprints/application-spa/contributions/adrs/adr-201-application-spa-routing.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-203-application-spa-client-state.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-204-application-spa-error-envelope.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-205-application-spa-auth-model.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-207-application-spa-motion.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-208-application-spa-i18n.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-209-application-spa-telemetry-naming.json +13 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-001.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-002.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-003.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-004.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-005.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-006.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-007.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-008.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-009.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-010.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-011.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-012.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-013.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-014.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-015.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-016.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-017.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-018.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-019.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-020.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-021.json +18 -0
- package/blueprints/application-spa/contributions/tacs/tac-201-application-spa-app-shell.json +45 -0
- package/blueprints/application-spa/contributions/tacs/tac-202-application-spa-theme-system.json +32 -0
- package/blueprints/application-spa/contributions/tacs/tac-203-application-spa-component-library.json +32 -0
- package/blueprints/application-spa/contributions/tacs/tac-204-application-spa-client-data-layer.json +27 -0
- package/blueprints/application-spa/contributions/tacs/tac-205-application-spa-forms-engine.json +27 -0
- package/blueprints/application-spa/contributions/tacs/tac-206-application-spa-telemetry.json +19 -0
- package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +57 -0
- package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +56 -0
- package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +61 -0
- package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +70 -0
- package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +70 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1101.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1102.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1103.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1104.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1105.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1106.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1107.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1108.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1109.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1110.json +100 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1111.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1112.json +81 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1113.json +82 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1114.json +60 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1115.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1116.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1117.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1118.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1119.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1120.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1121.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1122.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1123.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1124.json +60 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1125.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1126.json +78 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1127.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1128.json +51 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +72 -0
- package/blueprints/application-spa/docs/topics.md +57 -0
- package/blueprints/application-spa/guide/application-spa.md +40 -0
- package/blueprints/delivery-ci-workflows/CHANGELOG.md +39 -0
- package/blueprints/delivery-ci-workflows/README.md +57 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/default-branch-checks.yml +55 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/pull-request-checks.yml +65 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/release.yml +71 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/scheduled-audit.yml +61 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/notes.md +61 -0
- package/blueprints/delivery-ci-workflows/assets/report-samples/per-gate.json +13 -0
- package/blueprints/delivery-ci-workflows/assets/report-samples/pipeline.json +28 -0
- package/blueprints/delivery-ci-workflows/blueprint.json +87 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-701-delivery-ci-workflows-ci-gates.json +30 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-703-delivery-ci-workflows-node-only-runner.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-704-delivery-ci-workflows-report-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-705-delivery-ci-workflows-elicitation-surface.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-706-delivery-ci-workflows-branch-model-defaults.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-707-delivery-ci-workflows-release-workflow-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-708-delivery-ci-workflows-provider-hint-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-709-delivery-ci-workflows-release-artefacts.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-710-delivery-ci-workflows-scheduled-audit.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-001.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-002.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-003.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-005.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-006.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-007.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-008.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-009.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-010.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-011.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-012.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-013.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-014.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-015.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-016.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-017.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-018.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-019.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-020.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-021.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-022.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-023.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-701-delivery-ci-workflows-gate-runner.json +59 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-702-delivery-ci-workflows-gate-report.json +32 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-703-delivery-ci-workflows-aggregate-report.json +41 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json +64 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-705-delivery-ci-workflows-release-workflow.json +51 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-706-delivery-ci-workflows-scheduled-audit.json +38 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6101.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6102.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6103.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6104.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6105.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6106.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6107.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6108.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6109.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6110.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6111.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6112.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6113.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6114.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6115.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6116.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6117.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6118.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6119.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6120.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6121.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6122.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6123.json +37 -0
- package/blueprints/delivery-ci-workflows/docs/topics.md +61 -0
- package/blueprints/delivery-ci-workflows/guide/delivery-ci-workflows.md +136 -0
- package/blueprints/deploy-cloudflare-workers/README.md +63 -0
- package/blueprints/deploy-cloudflare-workers/assets/ci-workflows/build-and-upload.yml.md +109 -0
- package/blueprints/deploy-cloudflare-workers/assets/ci-workflows/promote.yml.md +120 -0
- package/blueprints/deploy-cloudflare-workers/assets/verification/served-surface-probes.md +90 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/bootstrap-vs-steady-state.md +87 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/preview-alias-shape.md +86 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/wrangler-toml-shape.md +85 -0
- package/blueprints/deploy-cloudflare-workers/blueprint.json +48 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1301-deploy-cloudflare-workers-deployment-target.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1302-deploy-cloudflare-workers-default-vendor.json +35 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1303-deploy-cloudflare-workers-preview-vs-production.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1304-deploy-cloudflare-workers-rollback-is-promote.json +25 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1305-deploy-cloudflare-workers-dev-mode-drift.json +25 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-001.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-002.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-003.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-004.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-005.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-006.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-007.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-008.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-009.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-010.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-011.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-012.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json +54 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json +57 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json +51 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json +64 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12101.json +54 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12102.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12103.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12104.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12105.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12106.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12107.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12108.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12109.json +47 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12110.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12111.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12112.json +46 -0
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +46 -0
- package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +74 -0
- package/blueprints/email-smtp-resend/README.md +45 -0
- package/blueprints/email-smtp-resend/assets/from-address-rotation-pattern.md +44 -0
- package/blueprints/email-smtp-resend/assets/resend-verification-pointer.md +25 -0
- package/blueprints/email-smtp-resend/assets/stub-adapter.md +65 -0
- package/blueprints/email-smtp-resend/blueprint.json +23 -0
- package/blueprints/email-smtp-resend/contributions/adrs/adr-401-email-smtp-resend-transport-choice.json +30 -0
- package/blueprints/email-smtp-resend/contributions/adrs/adr-402-email-smtp-resend-retry-and-backoff-posture.json +30 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-001.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-002.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-003.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-004.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-005.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-006.json +18 -0
- package/blueprints/email-smtp-resend/contributions/tacs/tac-401-email-smtp-resend-send-adapter.json +53 -0
- package/blueprints/email-smtp-resend/contributions/tacs/tac-402-email-smtp-resend-webhook-verifier.json +56 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4101.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4102.json +36 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4103.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4104.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4105.json +36 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4106.json +37 -0
- package/blueprints/email-smtp-resend/docs/topics.md +44 -0
- package/blueprints/email-smtp-resend/guide/email-smtp-resend.md +71 -0
- package/blueprints/observability-essentials/README.md +53 -0
- package/blueprints/observability-essentials/assets/probe-samples/liveness-body.json +4 -0
- package/blueprints/observability-essentials/assets/probe-samples/readiness-body.json +18 -0
- package/blueprints/observability-essentials/assets/status-page-samples/status-page-clean.html +22 -0
- package/blueprints/observability-essentials/assets/status-page-samples/status-page-with-notice.html +25 -0
- package/blueprints/observability-essentials/blueprint.json +54 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-803-observability-essentials-status-page-contract.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-804-observability-essentials-probe-secrecy.json +25 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-805-observability-essentials-notification-outcome-model.json +25 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-003.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-004.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-005.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-006.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-007.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-008.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-009.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-010.json +18 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +32 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +43 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-803-observability-essentials-status-page.json +37 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-804-observability-essentials-notification-outcome.json +42 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7103.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7104.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7105.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7106.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7107.json +46 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7108.json +47 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7109.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7110.json +46 -0
- package/blueprints/observability-essentials/docs/topics.md +57 -0
- package/blueprints/observability-essentials/guide/observability-essentials.md +68 -0
- package/blueprints/observability-probe-endpoints/README.md +53 -0
- package/blueprints/observability-probe-endpoints/assets/docker/dockerfile-healthcheck.md +19 -0
- package/blueprints/observability-probe-endpoints/assets/kubernetes/podspec-probes-separate-port.md +54 -0
- package/blueprints/observability-probe-endpoints/assets/kubernetes/podspec-probes.md +36 -0
- package/blueprints/observability-probe-endpoints/assets/load-balancer/health-check-config.md +23 -0
- package/blueprints/observability-probe-endpoints/assets/systemd/notify-service.md +30 -0
- package/blueprints/observability-probe-endpoints/assets/uptime-monitor/monitor-config.md +22 -0
- package/blueprints/observability-probe-endpoints/blueprint.json +44 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1501-observability-probe-endpoints-health-probes.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1502-observability-probe-endpoints-readiness-semantics.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1504-observability-probe-endpoints-separate-port-option.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1505-observability-probe-endpoints-external-response-secrecy.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-001.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-002.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-003.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-004.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-005.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-006.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-007.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-008.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1501-observability-probe-endpoints-profile-resolver.json +39 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1502-observability-probe-endpoints-handler-set.json +40 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1503-observability-probe-endpoints-listener-topology.json +51 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1504-observability-probe-endpoints-non-http-adapters.json +39 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14101.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14103.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14104.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14105.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14106.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14108.json +46 -0
- package/blueprints/observability-probe-endpoints/docs/topics.md +51 -0
- package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +83 -0
- package/blueprints/persistence-data-d1/README.md +50 -0
- package/blueprints/persistence-data-d1/assets/batch-usage/batch-atomicity-example.md +72 -0
- package/blueprints/persistence-data-d1/assets/facade-shape/facade-module-shape.md +115 -0
- package/blueprints/persistence-data-d1/assets/migration-shape/migration-file-shape.md +119 -0
- package/blueprints/persistence-data-d1/assets/wrangler-config/d1-binding-shape.md +93 -0
- package/blueprints/persistence-data-d1/blueprint.json +42 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1401-persistence-data-d1-store-model.json +30 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1402-persistence-data-d1-migration-discipline.json +30 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1403-persistence-data-d1-event-secrecy.json +25 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1404-persistence-data-d1-store-boundary.json +25 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1405-persistence-data-d1-recovery-model.json +30 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-001.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-002.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-003.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-004.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-005.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-006.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-007.json +18 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1401-persistence-data-d1-facade.json +51 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1402-persistence-data-d1-migration-catalog.json +31 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +38 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1404-persistence-data-d1-recovery-runner.json +39 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13101.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13102.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13103.json +46 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13104.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13105.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13106.json +46 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13107.json +38 -0
- package/blueprints/persistence-data-d1/docs/topics.md +59 -0
- package/blueprints/persistence-data-d1/guide/persistence-data-d1.md +77 -0
- package/blueprints/persistence-data-sqlite/README.md +50 -0
- package/blueprints/persistence-data-sqlite/assets/backup-procedures/hot-checkpoint-note.md +22 -0
- package/blueprints/persistence-data-sqlite/assets/backup-procedures/sqlite-file-copy.md +70 -0
- package/blueprints/persistence-data-sqlite/assets/schema-samples/catalog-file-layout.md +73 -0
- package/blueprints/persistence-data-sqlite/assets/schema-samples/migration-shape.md +76 -0
- package/blueprints/persistence-data-sqlite/blueprint.json +50 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-601-persistence-data-sqlite-store-model.json +30 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-602-persistence-data-sqlite-migration-discipline.json +30 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-603-persistence-data-sqlite-event-secrecy.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-604-persistence-data-sqlite-store-boundary.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-605-persistence-data-sqlite-backup-model.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-001.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-002.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-003.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-004.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-005.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-006.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-007.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-008.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-009.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-010.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-011.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-601-persistence-data-sqlite-store.json +57 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-602-persistence-data-sqlite-migration-runner.json +34 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-603-persistence-data-sqlite-migration-catalog.json +31 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-604-persistence-data-sqlite-backup-runner.json +33 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5101.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5102.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5103.json +37 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5104.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5105.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5106.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5107.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5108.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5109.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5110.json +37 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5111.json +37 -0
- package/blueprints/persistence-data-sqlite/docs/topics.md +49 -0
- package/blueprints/persistence-data-sqlite/guide/persistence-data-sqlite.md +69 -0
- package/blueprints/security-auth-clerk/README.md +52 -0
- package/blueprints/security-auth-clerk/assets/authorisation/role-claim-mapping-sample.md +99 -0
- package/blueprints/security-auth-clerk/assets/middleware/node-middleware-shape.md +86 -0
- package/blueprints/security-auth-clerk/assets/middleware/workers-fetch-shape.md +123 -0
- package/blueprints/security-auth-clerk/assets/wiring/clerk-provider-react.md +48 -0
- package/blueprints/security-auth-clerk/assets/wiring/clerk-provider-vue.md +41 -0
- package/blueprints/security-auth-clerk/assets/wiring/workers-wrangler-toml-shape.md +51 -0
- package/blueprints/security-auth-clerk/blueprint.json +42 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1001-security-auth-clerk-auth-model.json +30 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1002-security-auth-clerk-middleware-boundary.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1003-security-auth-clerk-authorisation-adapter-contract.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1004-security-auth-clerk-claims-mapping-discipline.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1005-security-auth-clerk-session-lifecycle.json +25 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-001.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-002.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-003.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-004.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-005.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-006.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-007.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-008.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-009.json +18 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1001-security-auth-clerk-middleware.json +42 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1002-security-auth-clerk-authorisation-adapter.json +30 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1003-security-auth-clerk-session-verifier.json +38 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1004-security-auth-clerk-claims-mapper.json +22 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9101.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9102.json +38 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9103.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9104.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9105.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9106.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9107.json +37 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9108.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9109.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9110.json +37 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9111.json +36 -0
- package/blueprints/security-auth-clerk/docs/topics.md +56 -0
- package/blueprints/security-auth-clerk/guide/security-auth-clerk.md +80 -0
- package/blueprints/security-auth-keycloak/README.md +56 -0
- package/blueprints/security-auth-keycloak/assets/local-container/keycloak-bootstrap.md +54 -0
- package/blueprints/security-auth-keycloak/assets/middleware/verifier-wiring.md +93 -0
- package/blueprints/security-auth-keycloak/assets/mock-introspection/mock-introspection-shape.md +62 -0
- package/blueprints/security-auth-keycloak/assets/provider-router/router-shape.md +71 -0
- package/blueprints/security-auth-keycloak/assets/realm-skeleton/realm-config-shape.md +55 -0
- package/blueprints/security-auth-keycloak/blueprint.json +49 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1201-security-auth-keycloak-auth-model.json +35 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1202-security-auth-keycloak-verification-mode-choice.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1203-security-auth-keycloak-provider-routing-seam.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1204-security-auth-keycloak-session-vs-token-contract.json +25 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1205-security-auth-keycloak-jwks-rotation-cache-lifetime.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1206-security-auth-keycloak-refresh-and-sign-out-posture.json +25 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-001.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-002.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-003.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-004.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-005.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-006.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-007.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-008.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-009.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-010.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-011.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-012.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1201-security-auth-keycloak-discovery-client.json +51 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1202-security-auth-keycloak-jwt-verifier.json +46 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1203-security-auth-keycloak-introspection-client.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1204-security-auth-keycloak-provider-router.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1205-security-auth-keycloak-role-adapter.json +32 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11101.json +47 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11102.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11103.json +36 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11104.json +36 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11105.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11106.json +46 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11107.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11108.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11109.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11110.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11111.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11112.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11113.json +36 -0
- package/blueprints/security-auth-keycloak/docs/topics.md +74 -0
- package/blueprints/security-auth-keycloak/guide/security-auth-keycloak.md +81 -0
- package/blueprints/security-auth-magic-link/README.md +46 -0
- package/blueprints/security-auth-magic-link/assets/email-templates/magic-link-email.md +44 -0
- package/blueprints/security-auth-magic-link/assets/email-templates/stub-adapter.md +55 -0
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/allow-list-file.md +46 -0
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/single-address.md +35 -0
- package/blueprints/security-auth-magic-link/blueprint.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-501-security-auth-magic-link-model.json +30 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-502-security-auth-magic-link-token-secrecy.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-503-security-auth-magic-link-anti-enumeration-budget.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-504-security-auth-magic-link-session-lifecycle.json +30 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-505-security-auth-magic-link-rate-limiting.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-001.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-002.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-003.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-004.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-005.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-006.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-007.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-008.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-009.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-010.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-011.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-501-security-auth-magic-link-manager.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-502-security-auth-magic-link-session-manager.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-503-security-auth-magic-link-login-routes.json +76 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-504-security-auth-magic-link-email-delivery-adapter.json +26 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-505-security-auth-magic-link-principal-registry.json +26 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3101.json +64 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3102.json +54 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3103.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3104.json +55 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3105.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3106.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3107.json +54 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3108.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3109.json +48 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3110.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3111.json +45 -0
- package/blueprints/security-auth-magic-link/docs/topics.md +45 -0
- package/blueprints/security-auth-magic-link/guide/security-auth-magic-link.md +65 -0
- package/blueprints/security-auth-oauth2/README.md +50 -0
- package/blueprints/security-auth-oauth2/assets/mock-provider/mock-oidc-shape.md +55 -0
- package/blueprints/security-auth-oauth2/assets/provider-selector/list-shape.md +27 -0
- package/blueprints/security-auth-oauth2/assets/providers/generic-oidc-discovery.md +31 -0
- package/blueprints/security-auth-oauth2/assets/providers/github-oauth2-only.md +31 -0
- package/blueprints/security-auth-oauth2/assets/providers/google-oidc.md +31 -0
- package/blueprints/security-auth-oauth2/assets/session-bridge/opaque-handle-shape.md +59 -0
- package/blueprints/security-auth-oauth2/blueprint.json +44 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1101-security-auth-oauth2-auth-model.json +35 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1102-security-auth-oauth2-provider-abstraction-contract.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1103-security-auth-oauth2-pkce-discipline.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1104-security-auth-oauth2-session-bridge-shape.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1105-security-auth-oauth2-refresh-token-posture.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1106-security-auth-oauth2-multi-provider-routing.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-001.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-002.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-003.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-004.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-005.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-006.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-007.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-008.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-009.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-010.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1101-security-auth-oauth2-flow-controller.json +61 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1102-security-auth-oauth2-provider-adapter.json +33 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1103-security-auth-oauth2-session-bridge.json +51 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1104-security-auth-oauth2-provider-selector.json +29 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10101.json +47 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10102.json +45 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10103.json +36 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10104.json +36 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10105.json +55 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10106.json +45 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10107.json +46 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10108.json +46 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10109.json +37 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10110.json +37 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10111.json +28 -0
- package/blueprints/security-auth-oauth2/docs/topics.md +58 -0
- package/blueprints/security-auth-oauth2/guide/security-auth-oauth2.md +65 -0
- package/blueprints/security-secrets-management/README.md +48 -0
- package/blueprints/security-secrets-management/assets/cli-usage/agent-access-pattern.md +69 -0
- package/blueprints/security-secrets-management/assets/manifest-samples/environment-aware-example.md +33 -0
- package/blueprints/security-secrets-management/assets/manifest-samples/secrets-yaml-shape.md +74 -0
- package/blueprints/security-secrets-management/assets/ui-integration/three-way-choice.md +44 -0
- package/blueprints/security-secrets-management/blueprint.json +43 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-901-security-secrets-management-secrets-source.json +30 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-902-security-secrets-management-default-vendor.json +35 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-903-security-secrets-management-agent-access-discipline.json +25 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-904-security-secrets-management-dotenv-reflection.json +25 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-905-security-secrets-management-rotation-and-audit.json +30 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-001.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-002.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-003.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-004.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-005.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-006.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-007.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-008.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-009.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-010.json +18 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-901-security-secrets-management-manager-client.json +52 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-902-security-secrets-management-manifest.json +34 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-903-security-secrets-management-env-reflector.json +46 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-904-security-secrets-management-rotation-gate.json +57 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-905-security-secrets-management-agent-cli.json +59 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8101.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8102.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8103.json +37 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8104.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8105.json +55 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8106.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8107.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8108.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8109.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8110.json +45 -0
- package/blueprints/security-secrets-management/docs/topics.md +46 -0
- package/blueprints/security-secrets-management/guide/security-secrets-management.md +68 -0
- package/fixtures/canary-manifest.json +1 -101
- package/guidance/build-cycle-playbook.md +2 -2
- package/guidance/document-model.md +1 -1
- package/guidance/harness-template.md +13 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +13 -0
- package/package.json +18 -9
- package/rcf/adrs/adr-001.json +1 -1
- package/rcf/adrs/adr-009.json +1 -1
- package/rcf/build-sequence.json +1 -1
- package/rcf/manifest.json +2 -2
- package/rcf/prd.json +2 -2
- package/releases/releases.yaml +116 -0
- package/scripts/preinstall-node-check.mjs +61 -0
- package/src/blueprint/apply.js +62 -18
- package/src/blueprint/conflicts.js +8 -8
- package/src/blueprint/index.js +14 -1
- package/src/blueprint/library-loader.js +271 -0
- package/src/blueprint/library-registry.js +341 -0
- package/src/blueprint/list.js +94 -0
- package/src/blueprint/loader.js +26 -1
- package/src/blueprint/namespace.js +20 -16
- package/src/blueprint/shelf-resolver.js +286 -0
- package/src/blueprint/supersede.js +3 -2
- package/src/browser-verify/invariants.js +40 -0
- package/src/browser-verify/runner.js +2 -0
- package/src/cli/blueprint-library.js +419 -0
- package/src/cli/blueprint.js +91 -10
- package/src/cli/guidance.js +1 -1
- package/src/cli/help.js +27 -1
- package/src/cli/init.js +2 -0
- package/src/cli/version.js +673 -0
- package/src/cli/view.js +282 -1
- package/src/core/store/writer.js +64 -2
- package/src/server/index.js +3 -0
- package/src/server/routes.js +15 -1
- package/src/server/scope-endpoint.js +105 -0
- package/src/setup/agent-setup.js +28 -10
- package/src/view/live-client.js +253 -6
- package/src/view/scope.js +231 -0
- package/src/view/style.css +42 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
// `rcf define blueprint library <verb>` CLI.
|
|
2
|
+
//
|
|
3
|
+
// Verbs (Phase 2b):
|
|
4
|
+
// add register an external library on this project (local source in
|
|
5
|
+
// 2b; network fetchers land in 2c)
|
|
6
|
+
// list list registered libraries
|
|
7
|
+
// remove unregister a library (refuses when any applied blueprint on
|
|
8
|
+
// the project came through the library)
|
|
9
|
+
// refresh re-validate an already-registered library's on-disk shape
|
|
10
|
+
//
|
|
11
|
+
// Spec: external-blueprint-libraries-spec-2026-08-31.md sections 4, 8.
|
|
12
|
+
|
|
13
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
14
|
+
import { stat } from 'node:fs/promises';
|
|
15
|
+
import { createInterface } from 'node:readline';
|
|
16
|
+
|
|
17
|
+
import { isRcfError } from '#core/errors';
|
|
18
|
+
import { findProjectRoot } from '../view/index.js';
|
|
19
|
+
import { loadLibrary } from '../blueprint/library-loader.js';
|
|
20
|
+
import {
|
|
21
|
+
detectBandOverlap,
|
|
22
|
+
detectPrefixCollision,
|
|
23
|
+
findLibrary,
|
|
24
|
+
loadCoreBandReservations,
|
|
25
|
+
readLibraryRegistry,
|
|
26
|
+
writeLibraryRegistry,
|
|
27
|
+
} from '../blueprint/library-registry.js';
|
|
28
|
+
import { knownShelfSlugs, packagedShelfPath } from '../blueprint/shelf-resolver.js';
|
|
29
|
+
import { walkTree } from '#core/store';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Union of core-shelf blueprint slugs used for the prefix-collision
|
|
33
|
+
* gate. The packaged-shelf directory is copied into the tarball at
|
|
34
|
+
* prepack time (`files: ['blueprints']`), so a source checkout does
|
|
35
|
+
* not have `packages/rcf-lite/blueprints/` on disk; falling back to
|
|
36
|
+
* the shipped `data/core-band-reservations.json` keeps the gate
|
|
37
|
+
* effective in both shapes.
|
|
38
|
+
*/
|
|
39
|
+
async function collectCoreSlugs() {
|
|
40
|
+
const fromShelf = await knownShelfSlugs(packagedShelfPath()).catch(() => []);
|
|
41
|
+
const reservations = await loadCoreBandReservations();
|
|
42
|
+
const slugs = new Set(fromShelf);
|
|
43
|
+
for (const row of reservations.ac ?? []) if (row.blueprint) slugs.add(row.blueprint);
|
|
44
|
+
for (const row of reservations.suffixBlocks ?? []) if (row.blueprint) slugs.add(row.blueprint);
|
|
45
|
+
return [...slugs];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const LIBRARY_HELP = `Usage: rcf define blueprint library <verb> [options]
|
|
49
|
+
|
|
50
|
+
Verbs:
|
|
51
|
+
add <ref> Register an external library on this project.
|
|
52
|
+
<ref> is either a local absolute or relative path
|
|
53
|
+
to a library root (a directory containing
|
|
54
|
+
library.json). Fetches metadata, runs review-on-
|
|
55
|
+
add, and writes an entry to
|
|
56
|
+
rcf/blueprint-libraries.json.
|
|
57
|
+
|
|
58
|
+
Phase 2b covers local sources; the git and
|
|
59
|
+
tarball fetchers land in Phase 2c. A private-repo
|
|
60
|
+
library today is registered via a local clone.
|
|
61
|
+
|
|
62
|
+
list [--json] List every registered library on this project
|
|
63
|
+
(prefix, source, publisher, blueprint count).
|
|
64
|
+
|
|
65
|
+
remove <prefix> Unregister a library. Refuses when any applied
|
|
66
|
+
blueprint on the project came through this
|
|
67
|
+
library.
|
|
68
|
+
|
|
69
|
+
refresh <prefix> Re-validate an already-registered library's
|
|
70
|
+
on-disk shape. Phase 2b re-reads the local
|
|
71
|
+
library.json and reports any drift from the
|
|
72
|
+
registry snapshot; phase 2c will re-fetch a git
|
|
73
|
+
or tarball source and verify the sha.
|
|
74
|
+
|
|
75
|
+
Options:
|
|
76
|
+
--prefix <slug> (add) Override the library's declared prefix.
|
|
77
|
+
Rarely needed; only useful when two libraries
|
|
78
|
+
collide on prefix locally.
|
|
79
|
+
--i-have-reviewed (add) Skip the interactive review-on-add prompt.
|
|
80
|
+
Required companion to --no-review when scripting;
|
|
81
|
+
the two-flag form keeps a library-add trust
|
|
82
|
+
decision loud (spec §9.7).
|
|
83
|
+
--no-review (add) Bypass the interactive prompt. Requires
|
|
84
|
+
--i-have-reviewed.
|
|
85
|
+
--json (add, list) Emit machine-readable JSON.
|
|
86
|
+
--dry-run Print intended writes without executing.
|
|
87
|
+
--quiet Suppress non-error stdout.
|
|
88
|
+
--help Print this help.
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
const LIBRARY_OPTION_SPEC = {
|
|
92
|
+
prefix: { type: 'string' },
|
|
93
|
+
'i-have-reviewed': { type: 'boolean' },
|
|
94
|
+
'no-review': { type: 'boolean' },
|
|
95
|
+
json: { type: 'boolean' },
|
|
96
|
+
'dry-run': { type: 'boolean' },
|
|
97
|
+
quiet: { type: 'boolean' },
|
|
98
|
+
help: { type: 'boolean' },
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Handle `rcf define blueprint library <verb>`.
|
|
103
|
+
*
|
|
104
|
+
* @param {import('node:util').ParseArgsConfig} parsed - already-parsed argv (see cli/blueprint.js)
|
|
105
|
+
* @param {string[]} rest - positional args after `library`
|
|
106
|
+
* @param {object} deps
|
|
107
|
+
* @returns {Promise<number>}
|
|
108
|
+
*/
|
|
109
|
+
export async function handleLibraryVerb(parsed, rest, deps) {
|
|
110
|
+
const stdout = deps.stdout;
|
|
111
|
+
const stderr = deps.stderr;
|
|
112
|
+
const cwd = deps.cwd;
|
|
113
|
+
const now = deps.now ?? new Date();
|
|
114
|
+
const stdin = deps.stdin ?? process.stdin;
|
|
115
|
+
|
|
116
|
+
if (parsed.values.help || rest.length === 0) {
|
|
117
|
+
stdout.write(LIBRARY_HELP);
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
const verb = rest[0];
|
|
121
|
+
const args = rest.slice(1);
|
|
122
|
+
|
|
123
|
+
const projectRoot = await findProjectRoot(cwd);
|
|
124
|
+
if (!projectRoot) {
|
|
125
|
+
stderr.write('[error] no rcf/ tree found in this directory or any ancestor.\n');
|
|
126
|
+
return 2;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (verb === 'add') return handleAdd({ args, parsed, projectRoot, now, stdout, stderr, stdin });
|
|
130
|
+
if (verb === 'list') return handleList({ parsed, projectRoot, stdout, stderr });
|
|
131
|
+
if (verb === 'remove') return handleRemove({ args, parsed, projectRoot, stdout, stderr });
|
|
132
|
+
if (verb === 'refresh') return handleRefresh({ args, parsed, projectRoot, stdout, stderr });
|
|
133
|
+
|
|
134
|
+
stderr.write(`[error] blueprint library: unknown verb '${verb}'\n`);
|
|
135
|
+
stderr.write(LIBRARY_HELP);
|
|
136
|
+
return 2;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async function handleAdd({ args, parsed, projectRoot, now, stdout, stderr, stdin }) {
|
|
140
|
+
if (args.length === 0) {
|
|
141
|
+
stderr.write('[error] blueprint library add: missing <ref>\n');
|
|
142
|
+
return 2;
|
|
143
|
+
}
|
|
144
|
+
const ref = args[0];
|
|
145
|
+
|
|
146
|
+
// Phase 2b: local sources only. Fetchers land in 2c.
|
|
147
|
+
const kind = classifySourceRef(ref);
|
|
148
|
+
if (kind !== 'local') {
|
|
149
|
+
stderr.write(
|
|
150
|
+
`[error] blueprint library add: source kind '${kind}' requires the network fetchers landing in Phase 2c. `
|
|
151
|
+
+ 'In 2b, register the library from a local path (a directory carrying library.json). '
|
|
152
|
+
+ 'For private git repos today, clone the repo locally and point add at the clone.\n',
|
|
153
|
+
);
|
|
154
|
+
return 2;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const localRoot = isAbsolute(ref) ? ref : resolve(projectRoot, ref);
|
|
158
|
+
let libStat;
|
|
159
|
+
try {
|
|
160
|
+
libStat = await stat(localRoot);
|
|
161
|
+
} catch (err) {
|
|
162
|
+
stderr.write(`[error] blueprint library add: path '${localRoot}' cannot be read: ${err.message}\n`);
|
|
163
|
+
return 2;
|
|
164
|
+
}
|
|
165
|
+
if (!libStat.isDirectory()) {
|
|
166
|
+
stderr.write(`[error] blueprint library add: path '${localRoot}' is not a directory.\n`);
|
|
167
|
+
return 2;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const library = await loadLibrary(localRoot, { validateBlueprints: true });
|
|
171
|
+
if (isRcfError(library)) {
|
|
172
|
+
stderr.write(`[error] blueprint library add: ${library.message}\n`);
|
|
173
|
+
return 2;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const libraryPrefix = typeof parsed.values.prefix === 'string' && parsed.values.prefix.length > 0
|
|
177
|
+
? parsed.values.prefix
|
|
178
|
+
: library.libraryPrefix;
|
|
179
|
+
|
|
180
|
+
const registry = await readLibraryRegistry(projectRoot);
|
|
181
|
+
if (isRcfError(registry)) {
|
|
182
|
+
stderr.write(`[error] blueprint library add: ${registry.message}\n`);
|
|
183
|
+
return 2;
|
|
184
|
+
}
|
|
185
|
+
if (findLibrary(registry, libraryPrefix)) {
|
|
186
|
+
stderr.write(`[error] blueprint library add: libraryPrefix '${libraryPrefix}' is already registered on this project. Use 'library refresh' or 'library remove' first.\n`);
|
|
187
|
+
return 2;
|
|
188
|
+
}
|
|
189
|
+
const coreSlugs = await collectCoreSlugs();
|
|
190
|
+
const prefixErr = detectPrefixCollision({ libraryPrefix, registry, coreSlugs });
|
|
191
|
+
if (prefixErr) {
|
|
192
|
+
stderr.write(`[error] blueprint library add: ${prefixErr.message}\n`);
|
|
193
|
+
return 2;
|
|
194
|
+
}
|
|
195
|
+
const coreReservations = await loadCoreBandReservations();
|
|
196
|
+
const bandErr = detectBandOverlap({
|
|
197
|
+
candidate: { libraryPrefix, bands: library.bands },
|
|
198
|
+
registry,
|
|
199
|
+
coreReservations,
|
|
200
|
+
});
|
|
201
|
+
if (bandErr) {
|
|
202
|
+
stderr.write(`[error] blueprint library add: ${bandErr.message}\n`);
|
|
203
|
+
return 2;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const wantsReview = parsed.values['no-review'] !== true;
|
|
207
|
+
const iHaveReviewed = parsed.values['i-have-reviewed'] === true;
|
|
208
|
+
if (parsed.values['no-review'] === true && !iHaveReviewed) {
|
|
209
|
+
stderr.write('[error] blueprint library add: --no-review requires --i-have-reviewed (spec §9.7: the two-flag form keeps the trust decision loud).\n');
|
|
210
|
+
return 2;
|
|
211
|
+
}
|
|
212
|
+
if (wantsReview) {
|
|
213
|
+
printReview({ stdout, ref, library, libraryPrefix, coreReservations });
|
|
214
|
+
if (!iHaveReviewed) {
|
|
215
|
+
const proceed = await prompt(stdin, stdout, 'Proceed with add? [y/N] ');
|
|
216
|
+
if (!/^y(es)?$/i.test((proceed ?? '').trim())) {
|
|
217
|
+
stdout.write('[blueprint library] aborted by operator; no registry entry written.\n');
|
|
218
|
+
return 0;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const entry = {
|
|
224
|
+
libraryPrefix,
|
|
225
|
+
sourceKind: 'local',
|
|
226
|
+
sourceRef: localRoot,
|
|
227
|
+
displayName: library.displayName,
|
|
228
|
+
publisher: { ...library.publisher },
|
|
229
|
+
libraryRef: library.libraryRef,
|
|
230
|
+
bands: library.bands,
|
|
231
|
+
blueprints: library.blueprints.map((b) => ({ slug: b.slug, path: b.path })),
|
|
232
|
+
addedAt: now.toISOString(),
|
|
233
|
+
reviewedBy: 'operator',
|
|
234
|
+
provenance: { tier: 'local' },
|
|
235
|
+
cachePath: localRoot,
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const nextRegistry = {
|
|
239
|
+
registryVersion: registry.registryVersion,
|
|
240
|
+
libraries: [...registry.libraries, entry],
|
|
241
|
+
};
|
|
242
|
+
const write = await writeLibraryRegistry(projectRoot, nextRegistry, { dryRun: parsed.values['dry-run'] === true });
|
|
243
|
+
if (isRcfError(write)) {
|
|
244
|
+
stderr.write(`[error] blueprint library add: ${write.message}\n`);
|
|
245
|
+
return 2;
|
|
246
|
+
}
|
|
247
|
+
if (parsed.values.json) {
|
|
248
|
+
stdout.write(`${JSON.stringify({
|
|
249
|
+
added: !parsed.values['dry-run'],
|
|
250
|
+
dryRun: parsed.values['dry-run'] === true,
|
|
251
|
+
libraryPrefix: entry.libraryPrefix,
|
|
252
|
+
blueprintCount: entry.blueprints.length,
|
|
253
|
+
registryPath: write.path,
|
|
254
|
+
})}\n`);
|
|
255
|
+
return 0;
|
|
256
|
+
}
|
|
257
|
+
if (!parsed.values.quiet) {
|
|
258
|
+
if (parsed.values['dry-run']) {
|
|
259
|
+
stdout.write(`[blueprint library] dry-run: would add '${libraryPrefix}' (${entry.blueprints.length} blueprint(s)) to ${write.path}.\n`);
|
|
260
|
+
} else {
|
|
261
|
+
stdout.write(`[blueprint library] added '${libraryPrefix}' (${entry.blueprints.length} blueprint(s)) to ${write.path}.\n`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return 0;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async function handleList({ parsed, projectRoot, stdout, stderr }) {
|
|
268
|
+
const registry = await readLibraryRegistry(projectRoot);
|
|
269
|
+
if (isRcfError(registry)) {
|
|
270
|
+
stderr.write(`[error] blueprint library list: ${registry.message}\n`);
|
|
271
|
+
return 2;
|
|
272
|
+
}
|
|
273
|
+
if (parsed.values.json) {
|
|
274
|
+
stdout.write(`${JSON.stringify({
|
|
275
|
+
registryVersion: registry.registryVersion,
|
|
276
|
+
libraries: registry.libraries.map((l) => ({
|
|
277
|
+
libraryPrefix: l.libraryPrefix,
|
|
278
|
+
sourceKind: l.sourceKind,
|
|
279
|
+
sourceRef: l.sourceRef,
|
|
280
|
+
publisher: l.publisher,
|
|
281
|
+
libraryRef: l.libraryRef,
|
|
282
|
+
blueprintCount: Array.isArray(l.blueprints) ? l.blueprints.length : 0,
|
|
283
|
+
addedAt: l.addedAt,
|
|
284
|
+
})),
|
|
285
|
+
}, null, 2)}\n`);
|
|
286
|
+
return 0;
|
|
287
|
+
}
|
|
288
|
+
if (registry.libraries.length === 0) {
|
|
289
|
+
if (!parsed.values.quiet) stdout.write('[blueprint library] no libraries registered on this project.\n');
|
|
290
|
+
return 0;
|
|
291
|
+
}
|
|
292
|
+
for (const l of registry.libraries) {
|
|
293
|
+
const count = Array.isArray(l.blueprints) ? l.blueprints.length : 0;
|
|
294
|
+
stdout.write(`${l.libraryPrefix}\t${l.sourceKind}\t${l.publisher.displayName}\t${count} blueprint(s)\t${l.sourceRef}\n`);
|
|
295
|
+
}
|
|
296
|
+
return 0;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async function handleRemove({ args, parsed, projectRoot, stdout, stderr }) {
|
|
300
|
+
if (args.length === 0) {
|
|
301
|
+
stderr.write('[error] blueprint library remove: missing <libraryPrefix>\n');
|
|
302
|
+
return 2;
|
|
303
|
+
}
|
|
304
|
+
const libraryPrefix = args[0];
|
|
305
|
+
const registry = await readLibraryRegistry(projectRoot);
|
|
306
|
+
if (isRcfError(registry)) {
|
|
307
|
+
stderr.write(`[error] blueprint library remove: ${registry.message}\n`);
|
|
308
|
+
return 2;
|
|
309
|
+
}
|
|
310
|
+
const entry = findLibrary(registry, libraryPrefix);
|
|
311
|
+
if (!entry) {
|
|
312
|
+
stderr.write(`[error] blueprint library remove: library '${libraryPrefix}' is not registered.\n`);
|
|
313
|
+
return 2;
|
|
314
|
+
}
|
|
315
|
+
// Refuse when any applied blueprint on the project came through the
|
|
316
|
+
// library. Signal: `manifest.blueprints[].source` starts with `<prefix>:`.
|
|
317
|
+
const { tree, errors } = await walkTree({ projectRoot });
|
|
318
|
+
if (errors.length > 0) {
|
|
319
|
+
for (const e of errors) stderr.write(`[tree] ${e.kind}: ${e.message}\n`);
|
|
320
|
+
return 2;
|
|
321
|
+
}
|
|
322
|
+
const referring = (tree.manifest?.blueprints ?? []).filter((b) => typeof b.source === 'string' && b.source.startsWith(`${libraryPrefix}:`));
|
|
323
|
+
if (referring.length > 0) {
|
|
324
|
+
stderr.write(`[error] blueprint library remove: ${referring.length} applied blueprint(s) came through '${libraryPrefix}':\n`);
|
|
325
|
+
for (const r of referring) stderr.write(` ${r.slug} <- ${r.source}\n`);
|
|
326
|
+
stderr.write('remove those first (rcf define blueprint remove <slug>) or explicitly force with an escalation flag (not in v1).\n');
|
|
327
|
+
return 3;
|
|
328
|
+
}
|
|
329
|
+
const nextRegistry = {
|
|
330
|
+
registryVersion: registry.registryVersion,
|
|
331
|
+
libraries: registry.libraries.filter((l) => l.libraryPrefix !== libraryPrefix),
|
|
332
|
+
};
|
|
333
|
+
const write = await writeLibraryRegistry(projectRoot, nextRegistry, { dryRun: parsed.values['dry-run'] === true });
|
|
334
|
+
if (isRcfError(write)) {
|
|
335
|
+
stderr.write(`[error] blueprint library remove: ${write.message}\n`);
|
|
336
|
+
return 2;
|
|
337
|
+
}
|
|
338
|
+
if (!parsed.values.quiet) {
|
|
339
|
+
stdout.write(`[blueprint library] removed '${libraryPrefix}' from ${write.path}.\n`);
|
|
340
|
+
}
|
|
341
|
+
return 0;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
async function handleRefresh({ args, parsed, projectRoot, stdout, stderr }) {
|
|
345
|
+
if (args.length === 0) {
|
|
346
|
+
stderr.write('[error] blueprint library refresh: missing <libraryPrefix>\n');
|
|
347
|
+
return 2;
|
|
348
|
+
}
|
|
349
|
+
const libraryPrefix = args[0];
|
|
350
|
+
const registry = await readLibraryRegistry(projectRoot);
|
|
351
|
+
if (isRcfError(registry)) {
|
|
352
|
+
stderr.write(`[error] blueprint library refresh: ${registry.message}\n`);
|
|
353
|
+
return 2;
|
|
354
|
+
}
|
|
355
|
+
const entry = findLibrary(registry, libraryPrefix);
|
|
356
|
+
if (!entry) {
|
|
357
|
+
stderr.write(`[error] blueprint library refresh: library '${libraryPrefix}' is not registered.\n`);
|
|
358
|
+
return 2;
|
|
359
|
+
}
|
|
360
|
+
if (entry.sourceKind !== 'local') {
|
|
361
|
+
stderr.write(`[error] blueprint library refresh: source kind '${entry.sourceKind}' requires the network fetchers landing in Phase 2c.\n`);
|
|
362
|
+
return 2;
|
|
363
|
+
}
|
|
364
|
+
const library = await loadLibrary(entry.cachePath, { validateBlueprints: true });
|
|
365
|
+
if (isRcfError(library)) {
|
|
366
|
+
stderr.write(`[error] blueprint library refresh: ${library.message}\n`);
|
|
367
|
+
return 2;
|
|
368
|
+
}
|
|
369
|
+
// Detect drift from the registry snapshot on load-bearing fields.
|
|
370
|
+
const drifted = [];
|
|
371
|
+
if (library.libraryPrefix !== entry.libraryPrefix) drifted.push(`libraryPrefix '${entry.libraryPrefix}' -> '${library.libraryPrefix}'`);
|
|
372
|
+
if (library.libraryRef !== entry.libraryRef) drifted.push(`libraryRef '${entry.libraryRef}' -> '${library.libraryRef}'`);
|
|
373
|
+
if (JSON.stringify(library.bands) !== JSON.stringify(entry.bands)) drifted.push('bands changed');
|
|
374
|
+
if (drifted.length > 0) {
|
|
375
|
+
stderr.write(`[blueprint library refresh] '${libraryPrefix}' has drifted from the registered snapshot:\n`);
|
|
376
|
+
for (const d of drifted) stderr.write(` ${d}\n`);
|
|
377
|
+
stderr.write("re-run 'rcf define blueprint library add <ref>' to pick up the newer library (spec §10.1: freshness is advisory, adoption is an operator act).\n");
|
|
378
|
+
return 3;
|
|
379
|
+
}
|
|
380
|
+
if (!parsed.values.quiet) {
|
|
381
|
+
stdout.write(`[blueprint library] '${libraryPrefix}' refresh clean: on-disk library matches the registry snapshot.\n`);
|
|
382
|
+
}
|
|
383
|
+
return 0;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function classifySourceRef(ref) {
|
|
387
|
+
if (ref.startsWith('git+') || ref.startsWith('git@') || ref.startsWith('https://') || ref.startsWith('http://') || ref.startsWith('ssh://')) return 'git';
|
|
388
|
+
if (ref.endsWith('.tar.gz') || ref.endsWith('.tgz') || ref.endsWith('.tar')) return 'tarball';
|
|
389
|
+
return 'local';
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
function printReview({ stdout, ref, library, libraryPrefix, coreReservations }) {
|
|
393
|
+
const suffix = (library.bands.suffixBlocks ?? []).map((b) => `${b.kind} ${b.start}-${b.end}`).join(', ');
|
|
394
|
+
stdout.write(`\nREVIEW - you are about to add this library to the project registry.\n\n`);
|
|
395
|
+
stdout.write(` Library : ${library.displayName}\n`);
|
|
396
|
+
stdout.write(` Prefix : ${libraryPrefix}\n`);
|
|
397
|
+
stdout.write(` Publisher : ${library.publisher.displayName}${library.publisher.contact ? ` <${library.publisher.contact}>` : ''}\n`);
|
|
398
|
+
stdout.write(` Source : ${ref} (local)\n`);
|
|
399
|
+
stdout.write(` Library ref : ${library.libraryRef}\n`);
|
|
400
|
+
stdout.write(` AC band : ${library.bands.ac.start} - ${library.bands.ac.end}\n`);
|
|
401
|
+
if (suffix.length > 0) stdout.write(` Suffix blocks: ${suffix}\n`);
|
|
402
|
+
stdout.write(`\n Blueprints on this library:\n`);
|
|
403
|
+
for (const bp of library.blueprints) {
|
|
404
|
+
stdout.write(` ${libraryPrefix}:${bp.slug}\n`);
|
|
405
|
+
}
|
|
406
|
+
stdout.write(`\n Provenance : local (dev use)\n`);
|
|
407
|
+
stdout.write(` Band check : cross-checked ${coreReservations.ac.length} core AC row(s), ${coreReservations.suffixBlocks.length} core suffix block(s); no overlap.\n`);
|
|
408
|
+
stdout.write(`\n`);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
async function prompt(stdin, stdout, question) {
|
|
412
|
+
return new Promise((resolveP) => {
|
|
413
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
414
|
+
rl.question(question, (answer) => {
|
|
415
|
+
rl.close();
|
|
416
|
+
resolveP(answer);
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
}
|
package/src/cli/blueprint.js
CHANGED
|
@@ -16,23 +16,37 @@ import { findProjectRoot } from '../view/index.js';
|
|
|
16
16
|
import {
|
|
17
17
|
applyBlueprint,
|
|
18
18
|
diffBlueprintTopic,
|
|
19
|
+
enrichRowsWithCategories,
|
|
20
|
+
groupRowsByCategory,
|
|
19
21
|
listBlueprints,
|
|
20
22
|
removeBlueprint,
|
|
21
23
|
renderDiff,
|
|
24
|
+
resolveBlueprintSource,
|
|
22
25
|
supersedeBlueprintTopic,
|
|
23
26
|
} from '../blueprint/index.js';
|
|
24
27
|
import { conflictReportJson, renderConflictReport } from '../blueprint/conflicts.js';
|
|
28
|
+
import { handleLibraryVerb, LIBRARY_HELP } from './blueprint-library.js';
|
|
25
29
|
|
|
26
30
|
export const HELP = `Usage: rcf define blueprint <verb> [options]
|
|
27
31
|
|
|
28
32
|
Verbs:
|
|
29
|
-
add <source> Apply a blueprint from a source directory
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
add <source> Apply a blueprint from a source directory.
|
|
34
|
+
<source> resolves in this order:
|
|
35
|
+
- a path (./foo, /abs, has a slash) is used as-is;
|
|
36
|
+
- @stock/<slug> resolves to the packaged shelf that
|
|
37
|
+
ships with rcf-lite (recommended long form);
|
|
38
|
+
- a bare kebab slug (deploy-cloudflare-workers,
|
|
39
|
+
application-spa) resolves to the same shelf;
|
|
40
|
+
- any other @<library>/<slug> is reserved for the
|
|
41
|
+
phase-2 external-libraries mechanism and refuses.
|
|
42
|
+
Writes an entry to manifest.blueprints[] and copies
|
|
43
|
+
namespaced contributions into the tree.
|
|
34
44
|
list List every applied blueprint (slug, version,
|
|
35
|
-
appliedAt, contributionCount)
|
|
45
|
+
appliedAt, contributionCount), grouped by the
|
|
46
|
+
\`category\` declared on each blueprint's own
|
|
47
|
+
\`blueprint.json\`. Blueprints whose source no
|
|
48
|
+
longer resolves, or whose source declares no
|
|
49
|
+
category, appear under \`uncategorised\`.
|
|
36
50
|
remove <slug> Remove an applied blueprint. Refuses when any
|
|
37
51
|
project-authored doc references a contribution
|
|
38
52
|
id; prints the referring docs and exits 3.
|
|
@@ -52,6 +66,11 @@ Verbs:
|
|
|
52
66
|
diff <topic> Side-by-side view of every applied blueprint's
|
|
53
67
|
scope:global ADR on <topic>: id, path, title,
|
|
54
68
|
status, decision. Read-only.
|
|
69
|
+
library <verb> Manage external blueprint libraries. Sub-verbs:
|
|
70
|
+
add, list, remove, refresh. See
|
|
71
|
+
'rcf define blueprint library --help' for the
|
|
72
|
+
full surface. Phase 2b covers local sources;
|
|
73
|
+
network fetchers land in Phase 2c.
|
|
55
74
|
|
|
56
75
|
Options:
|
|
57
76
|
--namespace <slug> Override the blueprint's default namespace
|
|
@@ -93,6 +112,11 @@ const OPTION_SPEC = {
|
|
|
93
112
|
resolve: { type: 'string', multiple: true },
|
|
94
113
|
reason: { type: 'string' },
|
|
95
114
|
incoming: { type: 'string' },
|
|
115
|
+
// library-verb flags (parsed centrally so strict:true doesn't refuse
|
|
116
|
+
// them when the operator types `rcf define blueprint library add`).
|
|
117
|
+
prefix: { type: 'string' },
|
|
118
|
+
'i-have-reviewed': { type: 'boolean' },
|
|
119
|
+
'no-review': { type: 'boolean' },
|
|
96
120
|
json: { type: 'boolean' },
|
|
97
121
|
'dry-run': { type: 'boolean' },
|
|
98
122
|
quiet: { type: 'boolean' },
|
|
@@ -118,13 +142,25 @@ export async function main(argv, deps = {}) {
|
|
|
118
142
|
stderr.write(HELP);
|
|
119
143
|
return 2;
|
|
120
144
|
}
|
|
121
|
-
|
|
145
|
+
const firstPositional = parsed.positionals[0];
|
|
146
|
+
// `rcf define blueprint library --help` routes into the library
|
|
147
|
+
// handler so the sub-verb HELP block is what the operator sees.
|
|
148
|
+
// Every other --help (and empty argv) prints the top-level HELP.
|
|
149
|
+
if (firstPositional !== 'library' && (parsed.values.help || parsed.positionals.length === 0)) {
|
|
122
150
|
stdout.write(HELP);
|
|
123
151
|
return 0;
|
|
124
152
|
}
|
|
125
153
|
const verb = parsed.positionals[0];
|
|
126
154
|
const rest = parsed.positionals.slice(1);
|
|
127
155
|
|
|
156
|
+
// `library` sub-verbs manage the external-library registry; they
|
|
157
|
+
// never walk the RCF tree, and delegating early keeps the option
|
|
158
|
+
// parser from consuming `--i-have-reviewed` (a library-add-only flag)
|
|
159
|
+
// against a `library` add invocation.
|
|
160
|
+
if (verb === 'library') {
|
|
161
|
+
return handleLibraryVerb(parsed, rest, { stdout, stderr, cwd, now, stdin: deps.stdin });
|
|
162
|
+
}
|
|
163
|
+
|
|
128
164
|
const projectRoot = await findProjectRoot(cwd);
|
|
129
165
|
if (!projectRoot) {
|
|
130
166
|
stderr.write('[error] no rcf/ tree found in this directory or any ancestor.\n');
|
|
@@ -142,7 +178,27 @@ export async function main(argv, deps = {}) {
|
|
|
142
178
|
stderr.write('[error] blueprint add: missing <source>\n');
|
|
143
179
|
return 2;
|
|
144
180
|
}
|
|
145
|
-
const
|
|
181
|
+
const rawSource = rest[0];
|
|
182
|
+
const resolved = await resolveBlueprintSource(rawSource, { projectRoot });
|
|
183
|
+
if (isRcfError(resolved)) {
|
|
184
|
+
if (parsed.values.json) {
|
|
185
|
+
stderr.write(`${JSON.stringify({ refused: true, error: { kind: resolved.kind, message: resolved.message } })}\n`);
|
|
186
|
+
} else {
|
|
187
|
+
stderr.write(`[error] blueprint add: ${resolved.message}\n`);
|
|
188
|
+
}
|
|
189
|
+
return 2;
|
|
190
|
+
}
|
|
191
|
+
// Feed the resolved absolute path to the applier. The original
|
|
192
|
+
// typed source is preserved on the CLI for the conflict renderer's
|
|
193
|
+
// supersede hint (so the operator sees exactly the string they can
|
|
194
|
+
// copy back into a fresh shell). It is ONLY forwarded to the applier
|
|
195
|
+
// as `displaySource` for library-qualified resolves - spec §5.3
|
|
196
|
+
// requires the qualified typed ref (`wsd:auth-oauth2`) to be the
|
|
197
|
+
// record's `source`. For shelf and path resolves the record must
|
|
198
|
+
// carry the RESOLVED ABSOLUTE PATH, which is the pre-#120 behaviour
|
|
199
|
+
// that /scope.json and `blueprint list --category` both depend on
|
|
200
|
+
// to load the shipping source file (integration review d-2026-08-31-046).
|
|
201
|
+
const source = resolved.resolved;
|
|
146
202
|
const resolveDeclarations = parseResolveOptions(parsed.values.resolve, parsed.values.reason);
|
|
147
203
|
if (resolveDeclarations.error) {
|
|
148
204
|
stderr.write(`[error] blueprint add: ${resolveDeclarations.error}\n`);
|
|
@@ -151,6 +207,16 @@ export async function main(argv, deps = {}) {
|
|
|
151
207
|
const result = await applyBlueprint({
|
|
152
208
|
projectRoot, tree, source,
|
|
153
209
|
namespaceOverride: parsed.values.namespace,
|
|
210
|
+
// Library-qualified resolves rewire the applied identity under
|
|
211
|
+
// the library prefix and forward the library's declared bands
|
|
212
|
+
// for the apply-time gate (spec §5.3, §8.3). The qualified typed
|
|
213
|
+
// ref is passed as `displaySource` so the applied record's
|
|
214
|
+
// `source` field carries it verbatim (spec §5.3).
|
|
215
|
+
...(resolved.kind === 'library' ? {
|
|
216
|
+
displaySource: resolved.original,
|
|
217
|
+
effectiveSlug: resolved.effectiveSlug,
|
|
218
|
+
libraryBands: resolved.libraryBands,
|
|
219
|
+
} : {}),
|
|
154
220
|
resolveDeclarations: resolveDeclarations.value,
|
|
155
221
|
now,
|
|
156
222
|
dryRun: parsed.values['dry-run'] === true,
|
|
@@ -211,8 +277,23 @@ export async function main(argv, deps = {}) {
|
|
|
211
277
|
if (!parsed.values.quiet) stdout.write('[blueprint] no blueprints applied on this project.\n');
|
|
212
278
|
return 0;
|
|
213
279
|
}
|
|
214
|
-
|
|
215
|
-
|
|
280
|
+
// Enrich with category from each applied blueprint's source. The
|
|
281
|
+
// manifest schema does not carry category (additionalProperties:
|
|
282
|
+
// false on appliedBlueprintRecord), so the enricher re-loads each
|
|
283
|
+
// source's blueprint.json at list time; a source that no longer
|
|
284
|
+
// resolves surfaces under the `uncategorised` group rather than
|
|
285
|
+
// being dropped.
|
|
286
|
+
const enriched = await enrichRowsWithCategories(rows, { projectRoot });
|
|
287
|
+
const groups = groupRowsByCategory(enriched);
|
|
288
|
+
let first = true;
|
|
289
|
+
for (const group of groups) {
|
|
290
|
+
const label = group.category ?? 'uncategorised';
|
|
291
|
+
if (!first) stdout.write('\n');
|
|
292
|
+
first = false;
|
|
293
|
+
stdout.write(`# ${label}\n`);
|
|
294
|
+
for (const row of group.rows) {
|
|
295
|
+
stdout.write(`${row.slug}\t${row.version}\t${row.appliedAt}\t${row.contributionCount} contribution(s)\n`);
|
|
296
|
+
}
|
|
216
297
|
}
|
|
217
298
|
return 0;
|
|
218
299
|
}
|
package/src/cli/guidance.js
CHANGED
|
@@ -34,7 +34,7 @@ const OPTION_SPEC = {
|
|
|
34
34
|
|
|
35
35
|
export const HELP = `Usage: rcf guidance [topic] [options]
|
|
36
36
|
|
|
37
|
-
Print a guidance-pack document from the installed rcf-
|
|
37
|
+
Print a guidance-pack document from the installed rcf-lite
|
|
38
38
|
package to stdout. The pack ships with the package and is never copied
|
|
39
39
|
into your project, so this verb is how a CLI-only agent reads the
|
|
40
40
|
method. MCP-wired harnesses can use the rcf://docs/<slug> resources and
|
package/src/cli/help.js
CHANGED
|
@@ -36,6 +36,7 @@ import { HELP as DESIGN_HELP } from './design.js';
|
|
|
36
36
|
import { HELP as BROWSER_VERIFY_HELP } from './browser-verify.js';
|
|
37
37
|
import { HELP as UPDATE_HELP } from './update.js';
|
|
38
38
|
import { HELP as VALIDATE_HELP } from './validate.js';
|
|
39
|
+
import { HELP as VERSION_HELP } from './version.js';
|
|
39
40
|
import { HELP as VIEW_HELP } from './view.js';
|
|
40
41
|
import { HELP as REQ_CLASSIFY_HELP } from './req-classify.js';
|
|
41
42
|
import { HELP as REQ_BASELINE_HELP } from './req-baseline.js';
|
|
@@ -64,6 +65,8 @@ core Platform plumbing that predates any RCF stage.
|
|
|
64
65
|
doctor Diagnose and repair init-hygiene drift.
|
|
65
66
|
guidance [topic] Print a method document from the installed pack.
|
|
66
67
|
mcp Serve the project over MCP (local stdio).
|
|
68
|
+
version [--check] Print installed version; --check compares
|
|
69
|
+
against the release feed.
|
|
67
70
|
help [group] [verb] Print help for a group or a verb.
|
|
68
71
|
|
|
69
72
|
discover Learn what is already true for this project.
|
|
@@ -126,6 +129,24 @@ Run 'rcf help <group>' for group help; 'rcf help <group> <verb>' for
|
|
|
126
129
|
per-verb help.
|
|
127
130
|
`;
|
|
128
131
|
|
|
132
|
+
const CORE_GROUP_HELP = `Usage: rcf <core-verb> [options]
|
|
133
|
+
|
|
134
|
+
Platform plumbing that predates any RCF stage. Core verbs dispatch at
|
|
135
|
+
the top level (they are invoked as \`rcf <verb>\`, not \`rcf core <verb>\`);
|
|
136
|
+
this group is a documentation grouping for \`rcf help\`.
|
|
137
|
+
|
|
138
|
+
Verbs:
|
|
139
|
+
init Scaffold a new RCF project in this directory.
|
|
140
|
+
doctor Diagnose and repair init-hygiene drift.
|
|
141
|
+
guidance [topic] Print a method document from the installed pack.
|
|
142
|
+
mcp Serve the project over MCP (local stdio).
|
|
143
|
+
version [--check] Print installed version; --check compares
|
|
144
|
+
against the release feed.
|
|
145
|
+
help [group] [verb] Print help for a group or a verb.
|
|
146
|
+
|
|
147
|
+
Run 'rcf help <verb>' for per-verb help.
|
|
148
|
+
`;
|
|
149
|
+
|
|
129
150
|
const DISCOVER_HELP = `Usage: rcf discover <verb> [options]
|
|
130
151
|
|
|
131
152
|
Learn what is already true for this project: classify supplied
|
|
@@ -223,6 +244,7 @@ Run 'rcf help audit <verb>' for per-verb help.
|
|
|
223
244
|
`;
|
|
224
245
|
|
|
225
246
|
export const GROUP_HELP = {
|
|
247
|
+
core: CORE_GROUP_HELP,
|
|
226
248
|
discover: DISCOVER_HELP,
|
|
227
249
|
define: DEFINE_HELP,
|
|
228
250
|
build: BUILD_GROUP_HELP,
|
|
@@ -286,6 +308,7 @@ export const CORE_HELP = {
|
|
|
286
308
|
doctor: DOCTOR_HELP,
|
|
287
309
|
guidance: GUIDANCE_HELP,
|
|
288
310
|
mcp: MCP_HELP,
|
|
311
|
+
version: VERSION_HELP,
|
|
289
312
|
};
|
|
290
313
|
|
|
291
314
|
/**
|
|
@@ -319,7 +342,10 @@ export async function main(argv, deps = {}) {
|
|
|
319
342
|
stdout.write(GROUP_HELP[first]);
|
|
320
343
|
return 0;
|
|
321
344
|
}
|
|
322
|
-
|
|
345
|
+
// `core` is a documentation grouping - core verbs dispatch at the
|
|
346
|
+
// top level, so `rcf help core <verb>` delegates to the same
|
|
347
|
+
// per-verb block that `rcf help <verb>` prints.
|
|
348
|
+
const body = first === 'core' ? CORE_HELP[verb] : HELP_MAP[first][verb];
|
|
323
349
|
if (!body) {
|
|
324
350
|
stderr.write(`[error] usage no help topic '${first} ${verb}'\n`);
|
|
325
351
|
stdout.write(GROUP_HELP[first]);
|
package/src/cli/init.js
CHANGED
|
@@ -219,6 +219,8 @@ export async function main(argv, deps = {}) {
|
|
|
219
219
|
stdout.write(` Gitignore ${gitignoreVerbAndTarget(gitignoreResult)}.\n`);
|
|
220
220
|
stdout.write('\nNext: start your agent session in this directory and tell it what you want to build. '
|
|
221
221
|
+ 'It elicits the requirements and drives the build from there - you do not fill in the document chain by hand.\n');
|
|
222
|
+
stdout.write('\nRun `rcf doctor` to confirm the wiring stays clean over time '
|
|
223
|
+
+ '(it also checks whether managed blocks have drifted from the shipped canon).\n');
|
|
222
224
|
}
|
|
223
225
|
return 0;
|
|
224
226
|
}
|