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
package/src/cli/view.js
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
// exported from that bin now live here so the CLI tests can still
|
|
6
6
|
// exercise them without spawning a subprocess.
|
|
7
7
|
|
|
8
|
+
import { readFile } from 'node:fs/promises';
|
|
8
9
|
import { spawn } from 'node:child_process';
|
|
10
|
+
import { join } from 'node:path';
|
|
9
11
|
import { platform } from 'node:process';
|
|
10
12
|
|
|
11
13
|
import { formatErrors } from '#core/errors';
|
|
@@ -20,6 +22,8 @@ import {
|
|
|
20
22
|
readLogTail,
|
|
21
23
|
} from '../view-supervisor/index.js';
|
|
22
24
|
import { parsePersistUntil } from '../view-supervisor/persist-until.js';
|
|
25
|
+
// Deep-link scope resolution (w-2026-08-30-dave-020).
|
|
26
|
+
import { contributionsForBlueprint, listAppliedSlugs, treeHasId } from '../view/scope.js';
|
|
23
27
|
|
|
24
28
|
export const DEFAULT_PORT = 4373;
|
|
25
29
|
export const SHUTDOWN_BUDGET_MS = 2000;
|
|
@@ -58,6 +62,19 @@ Subverbs (spec §9.2):
|
|
|
58
62
|
record.
|
|
59
63
|
rcf audit view logs [--tail <n>]
|
|
60
64
|
Print the supervisor log tail (default 200).
|
|
65
|
+
rcf audit view open [--blueprint <slug>] [--node <id>] [--no-open] [--json]
|
|
66
|
+
Resolve a scoped deep-link into the running
|
|
67
|
+
(or default) view server and print the URL.
|
|
68
|
+
--blueprint scopes the tree to the applied
|
|
69
|
+
blueprint's namespaced contribution list;
|
|
70
|
+
--node focuses a single doc id (any kind in
|
|
71
|
+
the tree). Both compose. Prints the URL to
|
|
72
|
+
stdout every time; opens it in the default
|
|
73
|
+
browser too when the terminal is a TTY and
|
|
74
|
+
--no-open was not passed. --json emits the
|
|
75
|
+
resolution shape for scripting. Refuses (exit
|
|
76
|
+
2) if the slug is not applied or the node id
|
|
77
|
+
is not on the tree.
|
|
61
78
|
|
|
62
79
|
Options:
|
|
63
80
|
--port <n> Bind the HTTP server on the given port.
|
|
@@ -96,7 +113,7 @@ Exit codes:
|
|
|
96
113
|
130 SIGINT
|
|
97
114
|
`;
|
|
98
115
|
|
|
99
|
-
const SUBVERBS = new Set(['start', 'status', 'stop', 'logs']);
|
|
116
|
+
const SUBVERBS = new Set(['start', 'status', 'stop', 'logs', 'open']);
|
|
100
117
|
|
|
101
118
|
/**
|
|
102
119
|
* Parse the view subcommand argv. Hand-rolled so the CLI can pass
|
|
@@ -375,6 +392,10 @@ async function runSubverb({ subverb, argv, deps }) {
|
|
|
375
392
|
return 0;
|
|
376
393
|
}
|
|
377
394
|
|
|
395
|
+
if (subverb === 'open') {
|
|
396
|
+
return await runOpenSubverb({ argv, projectRoot, deps: { env, stdout, stderr } });
|
|
397
|
+
}
|
|
398
|
+
|
|
378
399
|
if (subverb === 'logs') {
|
|
379
400
|
const tailIdx = argv.indexOf('--tail');
|
|
380
401
|
const tail = tailIdx >= 0 ? Number.parseInt(argv[tailIdx + 1] ?? '', 10) : 200;
|
|
@@ -452,3 +473,263 @@ async function runSubverb({ subverb, argv, deps }) {
|
|
|
452
473
|
return 1;
|
|
453
474
|
}
|
|
454
475
|
}
|
|
476
|
+
|
|
477
|
+
// -------------------------------------------------------------------
|
|
478
|
+
// `rcf audit view open` (w-2026-08-30-dave-020).
|
|
479
|
+
//
|
|
480
|
+
// Resolves a scoped deep-link into the running (or default) view
|
|
481
|
+
// server and prints the URL. The agent-facing surface: during a
|
|
482
|
+
// blueprint integration validation gate, the agent runs this to hand
|
|
483
|
+
// the operator a URL that opens the viewer with the relevant
|
|
484
|
+
// contribution set already visible (rest dimmed) and the target node
|
|
485
|
+
// scrolled into view. Read-only: v1 does not accept approve/reject
|
|
486
|
+
// state; that is a v2 concern (state-bearing, needs its own design).
|
|
487
|
+
// -------------------------------------------------------------------
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Parse the argv slice for `open`. Kept out of `parseArgs` because
|
|
491
|
+
* the flag set overlaps enough to conflate error messages.
|
|
492
|
+
*
|
|
493
|
+
* @param {string[]} argv
|
|
494
|
+
* @returns {{ opts: object, errors: string[] }}
|
|
495
|
+
*/
|
|
496
|
+
export function parseOpenArgs(argv) {
|
|
497
|
+
const opts = {
|
|
498
|
+
blueprint: null,
|
|
499
|
+
node: null,
|
|
500
|
+
noOpen: false,
|
|
501
|
+
json: false,
|
|
502
|
+
port: null,
|
|
503
|
+
help: false,
|
|
504
|
+
};
|
|
505
|
+
const errors = [];
|
|
506
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
507
|
+
const arg = argv[i];
|
|
508
|
+
switch (arg) {
|
|
509
|
+
case '--no-open':
|
|
510
|
+
opts.noOpen = true;
|
|
511
|
+
break;
|
|
512
|
+
case '--json':
|
|
513
|
+
opts.json = true;
|
|
514
|
+
break;
|
|
515
|
+
case '--help':
|
|
516
|
+
case '-h':
|
|
517
|
+
opts.help = true;
|
|
518
|
+
break;
|
|
519
|
+
case '--blueprint': {
|
|
520
|
+
const next = argv[i + 1];
|
|
521
|
+
if (next === undefined || next.startsWith('--')) {
|
|
522
|
+
errors.push('--blueprint requires a slug argument');
|
|
523
|
+
break;
|
|
524
|
+
}
|
|
525
|
+
opts.blueprint = next;
|
|
526
|
+
i += 1;
|
|
527
|
+
break;
|
|
528
|
+
}
|
|
529
|
+
case '--node': {
|
|
530
|
+
const next = argv[i + 1];
|
|
531
|
+
if (next === undefined || next.startsWith('--')) {
|
|
532
|
+
errors.push('--node requires a doc id argument');
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
opts.node = next;
|
|
536
|
+
i += 1;
|
|
537
|
+
break;
|
|
538
|
+
}
|
|
539
|
+
case '--port': {
|
|
540
|
+
const next = argv[i + 1];
|
|
541
|
+
if (next === undefined || next.startsWith('--')) {
|
|
542
|
+
errors.push('--port requires a numeric argument');
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
const n = Number(next);
|
|
546
|
+
if (!Number.isInteger(n) || n < 0 || n > 65535) {
|
|
547
|
+
errors.push(`--port expects an integer in [0, 65535], got ${next}`);
|
|
548
|
+
} else {
|
|
549
|
+
opts.port = n;
|
|
550
|
+
}
|
|
551
|
+
i += 1;
|
|
552
|
+
break;
|
|
553
|
+
}
|
|
554
|
+
default:
|
|
555
|
+
errors.push(`unknown option: ${arg}`);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return { opts, errors };
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Read `rcf/manifest.json` off disk (bypasses the walker so the CLI
|
|
563
|
+
* can validate scope fast without a full tree walk when only a slug
|
|
564
|
+
* check is needed).
|
|
565
|
+
*
|
|
566
|
+
* @param {string} projectRoot
|
|
567
|
+
* @returns {Promise<object|null>}
|
|
568
|
+
*/
|
|
569
|
+
async function readManifestFile(projectRoot) {
|
|
570
|
+
try {
|
|
571
|
+
const raw = await readFile(join(projectRoot, 'rcf', 'manifest.json'), 'utf8');
|
|
572
|
+
return JSON.parse(raw);
|
|
573
|
+
} catch (err) {
|
|
574
|
+
if (err && err.code === 'ENOENT') return null;
|
|
575
|
+
throw err;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Compose a scoped URL from the base URL plus scope params.
|
|
581
|
+
*
|
|
582
|
+
* @param {object} args
|
|
583
|
+
* @param {string} args.baseUrl - e.g. `http://127.0.0.1:4373/`
|
|
584
|
+
* @param {string|null} args.blueprint
|
|
585
|
+
* @param {string|null} args.node
|
|
586
|
+
* @returns {string}
|
|
587
|
+
*/
|
|
588
|
+
export function composeScopeUrl({ baseUrl, blueprint, node }) {
|
|
589
|
+
// The base URL from the supervisor / --port / env / default resolver
|
|
590
|
+
// always ends with `/`. Normalise defensively so a caller-supplied
|
|
591
|
+
// base without one still composes to a valid URL.
|
|
592
|
+
const trimmed = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
|
|
593
|
+
const params = [];
|
|
594
|
+
if (blueprint) params.push(`blueprint=${encodeURIComponent(blueprint)}`);
|
|
595
|
+
if (node) params.push(`node=${encodeURIComponent(node)}`);
|
|
596
|
+
const query = params.length > 0 ? `?${params.join('&')}` : '';
|
|
597
|
+
// Hash so the existing hash-router activates the tab + drills the
|
|
598
|
+
// ancestor <details> chain without waiting for the client to fetch
|
|
599
|
+
// /scope.json.
|
|
600
|
+
const hash = node ? `#${encodeURIComponent(node)}` : '';
|
|
601
|
+
return `${trimmed}${query}${hash}`;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Resolve the base URL to open at. Prefers a running detached
|
|
606
|
+
* supervisor's recorded URL (respects any non-default --port a prior
|
|
607
|
+
* start invocation bound to); otherwise the RCF_VIEW_PORT / default
|
|
608
|
+
* pair. The command still prints a URL even when no server is
|
|
609
|
+
* running, so an agent can print one to the operator alongside a
|
|
610
|
+
* hint to start the server.
|
|
611
|
+
*
|
|
612
|
+
* @param {object} args
|
|
613
|
+
* @param {string} args.projectRoot
|
|
614
|
+
* @param {number|null} args.port
|
|
615
|
+
* @param {NodeJS.ProcessEnv} args.env
|
|
616
|
+
* @returns {Promise<{ baseUrl: string, source: 'supervisor'|'flag'|'env'|'default' }>}
|
|
617
|
+
*/
|
|
618
|
+
export async function resolveBaseUrl({ projectRoot, port, env }) {
|
|
619
|
+
if (typeof port === 'number') {
|
|
620
|
+
return { baseUrl: `http://127.0.0.1:${port}/`, source: 'flag' };
|
|
621
|
+
}
|
|
622
|
+
try {
|
|
623
|
+
const status = await statusOfDetached(projectRoot);
|
|
624
|
+
if (status && status.state === 'running' && typeof status.url === 'string' && status.url.length > 0) {
|
|
625
|
+
const url = status.url.endsWith('/') ? status.url : `${status.url}/`;
|
|
626
|
+
return { baseUrl: url, source: 'supervisor' };
|
|
627
|
+
}
|
|
628
|
+
} catch { /* fall through */ }
|
|
629
|
+
const raw = env.RCF_VIEW_PORT;
|
|
630
|
+
if (raw !== undefined && raw !== '') {
|
|
631
|
+
const n = Number(raw);
|
|
632
|
+
if (Number.isInteger(n) && n >= 0 && n <= 65535) {
|
|
633
|
+
return { baseUrl: `http://127.0.0.1:${n}/`, source: 'env' };
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
return { baseUrl: `http://127.0.0.1:${DEFAULT_PORT}/`, source: 'default' };
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* The full open flow. Kept as a named export so the test suite can
|
|
641
|
+
* exercise it directly.
|
|
642
|
+
*
|
|
643
|
+
* @param {object} args
|
|
644
|
+
* @param {string[]} args.argv
|
|
645
|
+
* @param {string} args.projectRoot
|
|
646
|
+
* @param {{ env: NodeJS.ProcessEnv, stdout: NodeJS.WritableStream, stderr: NodeJS.WritableStream }} args.deps
|
|
647
|
+
* @returns {Promise<number>}
|
|
648
|
+
*/
|
|
649
|
+
export async function runOpenSubverb({ argv, projectRoot, deps }) {
|
|
650
|
+
const { env, stdout, stderr } = deps;
|
|
651
|
+
const { opts, errors: argErrors } = parseOpenArgs(argv);
|
|
652
|
+
if (opts.help) {
|
|
653
|
+
stdout.write(HELP);
|
|
654
|
+
return 0;
|
|
655
|
+
}
|
|
656
|
+
if (argErrors.length > 0) {
|
|
657
|
+
for (const msg of argErrors) stderr.write(`[error] usage view open: ${msg}\n`);
|
|
658
|
+
return 2;
|
|
659
|
+
}
|
|
660
|
+
if (!opts.blueprint && !opts.node) {
|
|
661
|
+
stderr.write('[error] usage view open: pass --blueprint <slug> and/or --node <id>\n');
|
|
662
|
+
return 2;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// Validate scope.
|
|
666
|
+
let manifest = null;
|
|
667
|
+
if (opts.blueprint) {
|
|
668
|
+
manifest = await readManifestFile(projectRoot);
|
|
669
|
+
const hit = contributionsForBlueprint(manifest, opts.blueprint);
|
|
670
|
+
if (!hit.found) {
|
|
671
|
+
const applied = listAppliedSlugs(manifest);
|
|
672
|
+
const hint = applied.length > 0
|
|
673
|
+
? ` Applied: ${applied.join(', ')}.`
|
|
674
|
+
: ' No blueprints are applied to this project.';
|
|
675
|
+
stderr.write(`[error] usage view open: blueprint '${opts.blueprint}' is not applied to this project.${hint}\n`);
|
|
676
|
+
return 2;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
let contributionIds = [];
|
|
680
|
+
if (manifest && opts.blueprint) {
|
|
681
|
+
const hit = contributionsForBlueprint(manifest, opts.blueprint);
|
|
682
|
+
contributionIds = hit.found ? hit.contributionIds : [];
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
if (opts.node) {
|
|
686
|
+
// Walk the tree once to prove the node exists. Cheaper than
|
|
687
|
+
// guessing at grammar; also gives the user the same "unknown id"
|
|
688
|
+
// wording as define/link.
|
|
689
|
+
const { tree } = await walkTree({ projectRoot });
|
|
690
|
+
if (!treeHasId(tree, opts.node)) {
|
|
691
|
+
stderr.write(`[error] usage view open: node id '${opts.node}' is not present on the tree.\n`);
|
|
692
|
+
return 2;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
const { baseUrl, source } = await resolveBaseUrl({ projectRoot, port: opts.port, env });
|
|
697
|
+
const url = composeScopeUrl({ baseUrl, blueprint: opts.blueprint, node: opts.node });
|
|
698
|
+
const supervisor = source === 'supervisor';
|
|
699
|
+
const serverRunningNote = supervisor
|
|
700
|
+
? null
|
|
701
|
+
: 'view server is not running; start it with `rcf audit view start --detach` for the URL to load';
|
|
702
|
+
|
|
703
|
+
if (opts.json) {
|
|
704
|
+
stdout.write(`${JSON.stringify({
|
|
705
|
+
url,
|
|
706
|
+
baseUrl,
|
|
707
|
+
urlSource: source,
|
|
708
|
+
blueprint: opts.blueprint,
|
|
709
|
+
node: opts.node,
|
|
710
|
+
contributionCount: contributionIds.length,
|
|
711
|
+
opened: false,
|
|
712
|
+
serverRunning: supervisor,
|
|
713
|
+
}, null, 2)}\n`);
|
|
714
|
+
} else {
|
|
715
|
+
stdout.write(`${url}\n`);
|
|
716
|
+
if (opts.blueprint) {
|
|
717
|
+
stdout.write(` blueprint: ${opts.blueprint} (${contributionIds.length} contribution${contributionIds.length === 1 ? '' : 's'})\n`);
|
|
718
|
+
}
|
|
719
|
+
if (opts.node) {
|
|
720
|
+
stdout.write(` node: ${opts.node}\n`);
|
|
721
|
+
}
|
|
722
|
+
if (serverRunningNote) stdout.write(` note: ${serverRunningNote}\n`);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
if (!opts.noOpen) {
|
|
726
|
+
maybeAutoOpen({
|
|
727
|
+
target: url,
|
|
728
|
+
noOpen: opts.noOpen,
|
|
729
|
+
stream: stdout,
|
|
730
|
+
env,
|
|
731
|
+
stderr,
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
return 0;
|
|
735
|
+
}
|
package/src/core/store/writer.js
CHANGED
|
@@ -824,12 +824,30 @@ async function createInlineAc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
824
824
|
field: 'parent',
|
|
825
825
|
});
|
|
826
826
|
}
|
|
827
|
+
// Phantom-AC replacement (G5). A freshly-created US carries a single
|
|
828
|
+
// seeded AC-N-1 whose description equals the exact seed sentinel below;
|
|
829
|
+
// the schema requires acceptanceCriteria minItems:1, so we cannot ship
|
|
830
|
+
// the US without one. On the operator's FIRST `create ac --parent US-N`
|
|
831
|
+
// (no explicit --id given, and the existing single AC is unmistakably
|
|
832
|
+
// the seed), we REPLACE that phantom instead of appending after it -
|
|
833
|
+
// so the operator's first real AC lands at -1 and audit coverage /
|
|
834
|
+
// trace no longer count the seed as an unmet criterion. Any operator
|
|
835
|
+
// edit to the seed (custom given/when/then/scope/provenance, different
|
|
836
|
+
// description, testable=false) disqualifies it from replacement and
|
|
837
|
+
// the append path runs as before.
|
|
838
|
+
const currentAcs = Array.isArray(us.acceptanceCriteria) ? us.acceptanceCriteria : [];
|
|
839
|
+
const seedIndex = detectSeededPhantomAcIndex(currentAcs, parentUsId);
|
|
840
|
+
const replacingPhantom = seedIndex !== -1 && !options.id;
|
|
841
|
+
|
|
827
842
|
let acId = options.id;
|
|
828
843
|
if (acId) {
|
|
829
|
-
const existing =
|
|
844
|
+
const existing = currentAcs.some((ac) => ac.id === acId);
|
|
830
845
|
if (existing) {
|
|
831
846
|
return rcfError({ kind: 'usage', message: `create ac: id ${acId} already exists on ${parentUsId}`, documentId: acId });
|
|
832
847
|
}
|
|
848
|
+
} else if (replacingPhantom) {
|
|
849
|
+
// Reuse the seed's id (AC-<us>-1) so the operator's first AC is -1.
|
|
850
|
+
acId = currentAcs[seedIndex].id;
|
|
833
851
|
} else {
|
|
834
852
|
try {
|
|
835
853
|
acId = nextIdForKind(tree, 'ac', { parentId: parentUsId });
|
|
@@ -845,9 +863,12 @@ async function createInlineAc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
845
863
|
...(body?.when !== undefined ? { when: body.when } : {}),
|
|
846
864
|
...(body?.then !== undefined ? { then: body.then } : {}),
|
|
847
865
|
};
|
|
866
|
+
const nextAcs = replacingPhantom
|
|
867
|
+
? currentAcs.map((ac, i) => (i === seedIndex ? acEntry : ac))
|
|
868
|
+
: [...currentAcs, acEntry];
|
|
848
869
|
const nextUs = {
|
|
849
870
|
...us,
|
|
850
|
-
acceptanceCriteria:
|
|
871
|
+
acceptanceCriteria: nextAcs,
|
|
851
872
|
updatedAt: nowIso(),
|
|
852
873
|
};
|
|
853
874
|
const relPath = `rcf/user-stories/${parentUsId.toLowerCase()}.json`;
|
|
@@ -871,6 +892,47 @@ async function createInlineAc({ projectRoot, tree, options, body, walkErrors = [
|
|
|
871
892
|
return { id: acId, filePath: relPath, parentId: parentUsId, body: acEntry };
|
|
872
893
|
}
|
|
873
894
|
|
|
895
|
+
/**
|
|
896
|
+
* A newly-created user story ships one seeded acceptance criterion
|
|
897
|
+
* (schema demands acceptanceCriteria minItems:1). The seed's description
|
|
898
|
+
* is the exact sentinel below, and no user-authored fields are attached.
|
|
899
|
+
* This detector returns the index of that seed AC when it is the ONLY AC
|
|
900
|
+
* on the US and is byte-for-byte unmodified from what the writer / init
|
|
901
|
+
* placed there; otherwise -1. Used by createInlineAc to REPLACE the seed
|
|
902
|
+
* on the operator's first `create ac`, so their first real AC lands at
|
|
903
|
+
* AC-<us>-1 rather than AC-<us>-2.
|
|
904
|
+
*
|
|
905
|
+
* Kept in sync with the two seed emitters:
|
|
906
|
+
* - src/core/store/writer.js assembleBody 'userStory' -> 'TODO: first acceptance criterion'
|
|
907
|
+
* - src/core/store/init.js userStoryTemplate -> 'TODO: describe the first acceptance criterion'
|
|
908
|
+
*
|
|
909
|
+
* @param {Array<{id:string, description:string, testable?:boolean}>} acs
|
|
910
|
+
* @param {string} parentUsId
|
|
911
|
+
* @returns {number}
|
|
912
|
+
*/
|
|
913
|
+
function detectSeededPhantomAcIndex(acs, parentUsId) {
|
|
914
|
+
if (!Array.isArray(acs) || acs.length !== 1) return -1;
|
|
915
|
+
const [ac] = acs;
|
|
916
|
+
if (!ac || typeof ac !== 'object') return -1;
|
|
917
|
+
const mUs = /^US-(\d+)$/.exec(parentUsId);
|
|
918
|
+
if (!mUs) return -1;
|
|
919
|
+
const expectedId = `AC-${mUs[1]}-1`;
|
|
920
|
+
if (ac.id !== expectedId) return -1;
|
|
921
|
+
if (ac.testable !== true) return -1;
|
|
922
|
+
const seedDescriptions = new Set([
|
|
923
|
+
'TODO: first acceptance criterion',
|
|
924
|
+
'TODO: describe the first acceptance criterion',
|
|
925
|
+
]);
|
|
926
|
+
if (!seedDescriptions.has(ac.description)) return -1;
|
|
927
|
+
// Any operator-authored optional field disqualifies replacement.
|
|
928
|
+
if (ac.given !== undefined) return -1;
|
|
929
|
+
if (ac.when !== undefined) return -1;
|
|
930
|
+
if (ac.then !== undefined) return -1;
|
|
931
|
+
if (ac.scope !== undefined) return -1;
|
|
932
|
+
if (ac.provenance !== undefined) return -1;
|
|
933
|
+
return 0;
|
|
934
|
+
}
|
|
935
|
+
|
|
874
936
|
/**
|
|
875
937
|
* Create an inline TC under a parent TS.
|
|
876
938
|
*/
|
package/src/server/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { join } from 'node:path';
|
|
|
16
16
|
import { LIVE_CLIENT_PATH, STYLE_CSS_PATH, VENDORED_MERMAID_PATH, renderModelToPage } from '../view/index.js';
|
|
17
17
|
import { watch as defaultWatch } from '../watch/index.js';
|
|
18
18
|
import { createRouter } from './routes.js';
|
|
19
|
+
import { createScopeHandler } from './scope-endpoint.js';
|
|
19
20
|
import { createSseHub } from './sse.js';
|
|
20
21
|
|
|
21
22
|
/**
|
|
@@ -96,12 +97,14 @@ export async function startServer(args) {
|
|
|
96
97
|
// and the first SSE connect gets a real payload.
|
|
97
98
|
await rewalk();
|
|
98
99
|
|
|
100
|
+
const scopeHandler = createScopeHandler({ projectRoot });
|
|
99
101
|
const router = createRouter({
|
|
100
102
|
currentState: () => state,
|
|
101
103
|
sse,
|
|
102
104
|
stylePath: STYLE_CSS_PATH,
|
|
103
105
|
mermaidPath: VENDORED_MERMAID_PATH,
|
|
104
106
|
liveClientPath: LIVE_CLIENT_PATH,
|
|
107
|
+
scope: scopeHandler,
|
|
105
108
|
});
|
|
106
109
|
|
|
107
110
|
const server = createServer(router);
|
package/src/server/routes.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
// HTTP route table for the live-view server.
|
|
1
|
+
// HTTP route table for the live-view server. Routes served:
|
|
2
2
|
// GET / -> rendered page (text/html)
|
|
3
3
|
// GET /events -> SSE stream (text/event-stream)
|
|
4
4
|
// GET /style.css -> shipped stylesheet
|
|
5
5
|
// GET /mermaid.min.js-> vendored mermaid runtime
|
|
6
6
|
// GET /live-client.js-> phase 3.8 live client script
|
|
7
|
+
// GET /scope.json -> deep-link scope resolver (w-2026-08-30-dave-020)
|
|
7
8
|
// Everything else -> 404 text/plain.
|
|
8
9
|
//
|
|
9
10
|
// No CORS headers, no cache headers on static assets beyond what the
|
|
@@ -25,6 +26,10 @@ const MIME = {
|
|
|
25
26
|
* @property {string} stylePath
|
|
26
27
|
* @property {string} mermaidPath
|
|
27
28
|
* @property {string} liveClientPath
|
|
29
|
+
* @property {((req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse) => Promise<void>|void)} [scope]
|
|
30
|
+
* Deep-link scope handler (w-2026-08-30-dave-020). Optional so
|
|
31
|
+
* the router stays usable in tests that mount only the static
|
|
32
|
+
* routes without a project root.
|
|
28
33
|
*/
|
|
29
34
|
|
|
30
35
|
/**
|
|
@@ -74,6 +79,15 @@ export function createRouter(deps) {
|
|
|
74
79
|
serveFile(res, deps.liveClientPath, MIME.js).catch((err) => fail(res, err));
|
|
75
80
|
return;
|
|
76
81
|
}
|
|
82
|
+
if (path === '/scope.json') {
|
|
83
|
+
if (typeof deps.scope !== 'function') {
|
|
84
|
+
res.writeHead(404, { 'content-type': MIME.txt });
|
|
85
|
+
res.end('not found\n');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
Promise.resolve(deps.scope(req, res)).catch((err) => fail(res, err));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
77
91
|
|
|
78
92
|
res.writeHead(404, { 'content-type': MIME.txt });
|
|
79
93
|
res.end('not found\n');
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// HTTP handler for `/scope.json`. The live-client fetches this to
|
|
2
|
+
// resolve a `?blueprint=<slug>` URL query into the applied
|
|
3
|
+
// contribution list and the customised-since-apply subset.
|
|
4
|
+
//
|
|
5
|
+
// Three shapes:
|
|
6
|
+
// GET /scope.json -> { blueprints: [{ slug, contributionCount, appliedAt, version }] }
|
|
7
|
+
// (the applied blueprint index; used by the client to know
|
|
8
|
+
// which slugs are valid before firing a scoped request)
|
|
9
|
+
// GET /scope.json?blueprint=<slug> -> { slug, appliedAt, version, contributionIds, customisedIds, missingSourceIds }
|
|
10
|
+
// GET /scope.json?blueprint=<slug> with slug not applied -> 404 { error: 'unknownBlueprint', slug }
|
|
11
|
+
//
|
|
12
|
+
// The endpoint is read-only. It reads manifest.json every call rather
|
|
13
|
+
// than piggy-backing on the cached tree state; the caller is a browser
|
|
14
|
+
// (small payload, low frequency), and a fresh read means scope answers
|
|
15
|
+
// track a re-apply immediately even if a tree-update SSE broadcast has
|
|
16
|
+
// not yet propagated.
|
|
17
|
+
|
|
18
|
+
import { readFile } from 'node:fs/promises';
|
|
19
|
+
import { join } from 'node:path';
|
|
20
|
+
|
|
21
|
+
import { contributionsForBlueprint, detectCustomisations, listAppliedSlugs } from '../view/scope.js';
|
|
22
|
+
|
|
23
|
+
const MIME_JSON = 'application/json; charset=utf-8';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Build a handler bound to a project root. Returns a function suitable
|
|
27
|
+
* for wiring into the router as the `/scope.json` route.
|
|
28
|
+
*
|
|
29
|
+
* @param {object} args
|
|
30
|
+
* @param {string} args.projectRoot
|
|
31
|
+
* @param {(root: string) => Promise<object|null>} [args._readManifest] - test seam
|
|
32
|
+
* @returns {(req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse) => Promise<void>}
|
|
33
|
+
*/
|
|
34
|
+
export function createScopeHandler({ projectRoot, _readManifest, _detectCustomisations } = {}) {
|
|
35
|
+
const readManifest = _readManifest ?? defaultReadManifest;
|
|
36
|
+
const detectImpl = _detectCustomisations ?? detectCustomisations;
|
|
37
|
+
return async function handle(req, res) {
|
|
38
|
+
try {
|
|
39
|
+
const url = new URL(req.url ?? '/', 'http://localhost');
|
|
40
|
+
const slug = normaliseString(url.searchParams.get('blueprint'));
|
|
41
|
+
const manifest = await readManifest(projectRoot);
|
|
42
|
+
if (!slug) {
|
|
43
|
+
respond(res, 200, {
|
|
44
|
+
blueprints: appliedIndex(manifest),
|
|
45
|
+
});
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const found = contributionsForBlueprint(manifest, slug);
|
|
49
|
+
if (!found.found) {
|
|
50
|
+
respond(res, 404, { error: 'unknownBlueprint', slug });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const { customisedIds, missingSourceIds } = await detectImpl({
|
|
54
|
+
projectRoot,
|
|
55
|
+
record: found.record,
|
|
56
|
+
});
|
|
57
|
+
respond(res, 200, {
|
|
58
|
+
slug,
|
|
59
|
+
appliedAt: found.record.appliedAt ?? null,
|
|
60
|
+
version: found.record.version ?? null,
|
|
61
|
+
contributionIds: found.contributionIds,
|
|
62
|
+
customisedIds,
|
|
63
|
+
missingSourceIds,
|
|
64
|
+
});
|
|
65
|
+
} catch (err) {
|
|
66
|
+
respond(res, 500, { error: 'ioFailure', message: err && err.message ? err.message : 'unknown' });
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function appliedIndex(manifest) {
|
|
72
|
+
const slugs = listAppliedSlugs(manifest);
|
|
73
|
+
const list = manifest?.blueprints ?? [];
|
|
74
|
+
return slugs.map((slug) => {
|
|
75
|
+
const rec = list.find((b) => b?.slug === slug) ?? {};
|
|
76
|
+
return {
|
|
77
|
+
slug,
|
|
78
|
+
version: rec.version ?? null,
|
|
79
|
+
appliedAt: rec.appliedAt ?? null,
|
|
80
|
+
contributionCount: Array.isArray(rec.contributions) ? rec.contributions.length : 0,
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function normaliseString(v) {
|
|
86
|
+
if (typeof v !== 'string') return null;
|
|
87
|
+
const trimmed = v.trim();
|
|
88
|
+
return trimmed.length === 0 ? null : trimmed;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function defaultReadManifest(projectRoot) {
|
|
92
|
+
try {
|
|
93
|
+
const raw = await readFile(join(projectRoot, 'rcf', 'manifest.json'), 'utf8');
|
|
94
|
+
return JSON.parse(raw);
|
|
95
|
+
} catch (err) {
|
|
96
|
+
if (err && err.code === 'ENOENT') return null;
|
|
97
|
+
throw err;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function respond(res, status, body) {
|
|
102
|
+
const buf = Buffer.from(`${JSON.stringify(body)}\n`, 'utf8');
|
|
103
|
+
res.writeHead(status, { 'content-type': MIME_JSON, 'content-length': String(buf.length) });
|
|
104
|
+
res.end(buf);
|
|
105
|
+
}
|
package/src/setup/agent-setup.js
CHANGED
|
@@ -184,17 +184,25 @@ export async function loadHarnessFragment({ templatePath } = {}) {
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
/**
|
|
187
|
-
* Write or merge the project-root .mcp.json with the rcf server entry
|
|
188
|
-
*
|
|
189
|
-
* discipline: other servers and unknown top-level keys are preserved
|
|
187
|
+
* Write or merge the project-root .mcp.json with the rcf server entry.
|
|
188
|
+
* MERGE discipline: other servers and unknown top-level keys are preserved
|
|
190
189
|
* verbatim; an existing `rcf` entry is left alone.
|
|
191
190
|
*
|
|
191
|
+
* The default entry invokes the CLI via `npx rcf-lite mcp` rather than an
|
|
192
|
+
* absolute `node <binPath>` path so the config stays portable across
|
|
193
|
+
* machines and CI checkouts (a project imported on a teammate's machine
|
|
194
|
+
* or moved to a different install location keeps working without a
|
|
195
|
+
* re-init). Callers wiring the config from tests can still pass an
|
|
196
|
+
* absolute `binPath` to force the legacy `node <binPath> mcp` shape.
|
|
197
|
+
*
|
|
192
198
|
* @param {object} args
|
|
193
199
|
* @param {string} args.projectRoot
|
|
194
|
-
* @param {string} [args.binPath] -
|
|
200
|
+
* @param {string} [args.binPath] - if provided, use `{ command: 'node',
|
|
201
|
+
* args: [binPath, 'mcp'] }` instead of `npx rcf-lite mcp`. Test
|
|
202
|
+
* override / opt-out for pinned deployments.
|
|
195
203
|
* @returns {Promise<{ file: string, action: 'created'|'merged'|'kept' } | import('#core/errors').RcfError>}
|
|
196
204
|
*/
|
|
197
|
-
export async function writeMcpConfig({ projectRoot, binPath =
|
|
205
|
+
export async function writeMcpConfig({ projectRoot, binPath } = {}) {
|
|
198
206
|
const file = join(projectRoot, '.mcp.json');
|
|
199
207
|
const raw = await readIfExists(file);
|
|
200
208
|
let config = {};
|
|
@@ -224,11 +232,14 @@ export async function writeMcpConfig({ projectRoot, binPath = rcfBinPath() }) {
|
|
|
224
232
|
if (servers.rcf) {
|
|
225
233
|
return { file: '.mcp.json', action: 'kept' };
|
|
226
234
|
}
|
|
235
|
+
const rcfEntry = typeof binPath === 'string' && binPath.length > 0
|
|
236
|
+
? { command: 'node', args: [binPath, 'mcp'] }
|
|
237
|
+
: { command: 'npx', args: ['rcf-lite', 'mcp'] };
|
|
227
238
|
const next = {
|
|
228
239
|
...config,
|
|
229
240
|
mcpServers: {
|
|
230
241
|
...servers,
|
|
231
|
-
rcf:
|
|
242
|
+
rcf: rcfEntry,
|
|
232
243
|
},
|
|
233
244
|
};
|
|
234
245
|
await writeFile(file, `${JSON.stringify(next, null, 2)}\n`, 'utf8');
|
|
@@ -345,15 +356,22 @@ export const SETUP_FUNNEL_INSTRUCTION = 'Setup incomplete. Run `npx rcf init` to
|
|
|
345
356
|
/**
|
|
346
357
|
* Manual instructions printed by `rcf init --no-agent-setup`.
|
|
347
358
|
*
|
|
348
|
-
* @param {string} [binPath]
|
|
359
|
+
* @param {string} [binPath] - when omitted (the default), the manual
|
|
360
|
+
* registration snippet uses `npx rcf-lite mcp` for portability across
|
|
361
|
+
* machines and checkouts. Pass a specific absolute path only when the
|
|
362
|
+
* caller wants to pin to a particular install (test fixtures, or a
|
|
363
|
+
* deployment that has deliberately vendored the CLI).
|
|
349
364
|
* @returns {string}
|
|
350
365
|
*/
|
|
351
|
-
export function manualSetupInstructions(binPath
|
|
366
|
+
export function manualSetupInstructions(binPath) {
|
|
367
|
+
const useNpx = typeof binPath !== 'string' || binPath.length === 0;
|
|
368
|
+
const registration = useNpx
|
|
369
|
+
? ' { "mcpServers": { "rcf": { "command": "npx", "args": ["rcf-lite", "mcp"] } } }'
|
|
370
|
+
: ` { "mcpServers": { "rcf": { "command": "node", "args": ["${binPath}", "mcp"] } } }`;
|
|
352
371
|
return [
|
|
353
372
|
'Agent setup skipped (--no-agent-setup). To wire the harness manually:',
|
|
354
373
|
' 1. Register the MCP server in your project-root .mcp.json:',
|
|
355
|
-
|
|
356
|
-
` "args": ["${binPath}", "mcp"] } } }`,
|
|
374
|
+
registration,
|
|
357
375
|
' 2. Paste the fragment from `rcf guidance harness-template` (the',
|
|
358
376
|
' first ```markdown fence) into your project\'s CLAUDE.md or',
|
|
359
377
|
' AGENTS.md.',
|