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/view/live-client.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Live-view client. Loaded by the server-rendered page as
|
|
2
2
|
// `<script src="/live-client.js" defer>`. Handles the SSE `/events`
|
|
3
|
-
// stream, in-place `innerHTML` swaps into `#rcf-live-content`,
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// stream, in-place `innerHTML` swaps into `#rcf-live-content`, persists
|
|
4
|
+
// `<details>` open-set + main scrollTop to `localStorage` across every
|
|
5
|
+
// swap and every full reload, AND applies the URL-driven scope filter
|
|
6
|
+
// (deep-link deep-links: blueprint / node — w-2026-08-30-dave-020) on
|
|
7
|
+
// every load and every swap.
|
|
6
8
|
//
|
|
7
9
|
// Vanilla classic script (no ESM syntax) so the base HTML script tag
|
|
8
10
|
// stays plain. The IIFE exposes its internals as `window.__rcfLiveClient`
|
|
@@ -10,7 +12,9 @@
|
|
|
10
12
|
// jsdom.
|
|
11
13
|
//
|
|
12
14
|
// Spec: projects/rcf-build-lite/specs/phase-3.8-live-view.md D12, D13a,
|
|
13
|
-
// D13b, D14.
|
|
15
|
+
// D13b, D14. Deep-link overlay: see `src/view/scope.js`
|
|
16
|
+
// (server-side truth) and `test/view/scope-client.test.js`
|
|
17
|
+
// (browser-side proofs).
|
|
14
18
|
|
|
15
19
|
(function () {
|
|
16
20
|
var STORAGE_NS = 'rcf-view:v1:';
|
|
@@ -18,6 +22,232 @@
|
|
|
18
22
|
var STORAGE_SCROLL = STORAGE_NS + 'scrollTop';
|
|
19
23
|
var HEARTBEAT_STALE_MS = 45000;
|
|
20
24
|
|
|
25
|
+
// ---- deep-link scope --------------------------------------------------
|
|
26
|
+
|
|
27
|
+
// Scope model: { blueprint: string|null, node: string|null }. Read on
|
|
28
|
+
// load and after every SSE swap; the DOM class hooks below drive the
|
|
29
|
+
// stylesheet's opacity / focus rules.
|
|
30
|
+
|
|
31
|
+
function parseUrlScope(search) {
|
|
32
|
+
var out = { blueprint: null, node: null };
|
|
33
|
+
if (typeof search !== 'string' || search.length === 0) return out;
|
|
34
|
+
var raw = search.charAt(0) === '?' ? search.slice(1) : search;
|
|
35
|
+
if (raw.length === 0) return out;
|
|
36
|
+
var pairs = raw.split('&');
|
|
37
|
+
for (var i = 0; i < pairs.length; i += 1) {
|
|
38
|
+
var eq = pairs[i].indexOf('=');
|
|
39
|
+
if (eq === -1) continue;
|
|
40
|
+
var key = decodeSafely(pairs[i].slice(0, eq));
|
|
41
|
+
var val = decodeSafely(pairs[i].slice(eq + 1));
|
|
42
|
+
if (typeof val !== 'string') continue;
|
|
43
|
+
var trimmed = val.replace(/^\s+|\s+$/g, '');
|
|
44
|
+
if (trimmed.length === 0) continue;
|
|
45
|
+
if (key === 'blueprint' && out.blueprint === null) out.blueprint = trimmed;
|
|
46
|
+
else if (key === 'node' && out.node === null) out.node = trimmed;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function decodeSafely(s) {
|
|
52
|
+
try { return decodeURIComponent(String(s).replace(/\+/g, ' ')); }
|
|
53
|
+
catch (e) { return null; }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function markScopeIds(doc, contributionIds, customisedIds) {
|
|
57
|
+
if (!doc) return { inScopeCount: 0, customisedCount: 0 };
|
|
58
|
+
clearScopeMarkers(doc);
|
|
59
|
+
var inSet = toIdSet(contributionIds);
|
|
60
|
+
var customSet = toIdSet(customisedIds);
|
|
61
|
+
var inScopeCount = 0;
|
|
62
|
+
var customisedCount = 0;
|
|
63
|
+
// A doc container carries data-doc-id; we walk them and mark the
|
|
64
|
+
// matching ones. Ancestors of an in-scope doc are also marked so
|
|
65
|
+
// the tree drill-down (details wrappers, tabpanels) stays visible.
|
|
66
|
+
var nodes = doc.querySelectorAll('[data-doc-id]');
|
|
67
|
+
for (var i = 0; i < nodes.length; i += 1) {
|
|
68
|
+
var el = nodes[i];
|
|
69
|
+
var id = el.getAttribute('data-doc-id');
|
|
70
|
+
if (!id) continue;
|
|
71
|
+
// The raw-json disclosures carry ids like `PRD-001::raw`;
|
|
72
|
+
// strip the ::raw suffix so the scope hit matches the parent
|
|
73
|
+
// doc's contribution id.
|
|
74
|
+
var canonical = id.replace(/::raw$/, '');
|
|
75
|
+
if (!inSet[canonical]) continue;
|
|
76
|
+
el.classList.add('rcf-in-scope');
|
|
77
|
+
inScopeCount += 1;
|
|
78
|
+
if (customSet[canonical]) {
|
|
79
|
+
el.classList.add('rcf-customised');
|
|
80
|
+
customisedCount += 1;
|
|
81
|
+
}
|
|
82
|
+
// Walk ancestors and mark them as containing an in-scope doc
|
|
83
|
+
// so the CSS can keep them at full opacity.
|
|
84
|
+
var cur = el.parentNode;
|
|
85
|
+
while (cur && cur !== doc.body) {
|
|
86
|
+
if (cur.classList && !cur.classList.contains('rcf-scope-ancestor')) {
|
|
87
|
+
cur.classList.add('rcf-scope-ancestor');
|
|
88
|
+
}
|
|
89
|
+
cur = cur.parentNode;
|
|
90
|
+
}
|
|
91
|
+
// Auto-open the ancestor <details> so the drill-down surfaces
|
|
92
|
+
// the contribution without a manual click.
|
|
93
|
+
openAncestorDetailsChain(el);
|
|
94
|
+
}
|
|
95
|
+
return { inScopeCount: inScopeCount, customisedCount: customisedCount };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function toIdSet(list) {
|
|
99
|
+
var out = Object.create(null);
|
|
100
|
+
if (!Array.isArray(list)) return out;
|
|
101
|
+
for (var i = 0; i < list.length; i += 1) {
|
|
102
|
+
if (typeof list[i] === 'string') out[list[i]] = true;
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function openAncestorDetailsChain(node) {
|
|
108
|
+
var cur = node.parentNode;
|
|
109
|
+
while (cur && cur.tagName) {
|
|
110
|
+
if (cur.tagName.toLowerCase() === 'details') {
|
|
111
|
+
cur.open = true;
|
|
112
|
+
}
|
|
113
|
+
cur = cur.parentNode;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function clearScopeMarkers(doc) {
|
|
118
|
+
var scoped = doc.querySelectorAll('.rcf-in-scope, .rcf-customised, .rcf-scope-ancestor');
|
|
119
|
+
for (var i = 0; i < scoped.length; i += 1) {
|
|
120
|
+
scoped[i].classList.remove('rcf-in-scope');
|
|
121
|
+
scoped[i].classList.remove('rcf-customised');
|
|
122
|
+
scoped[i].classList.remove('rcf-scope-ancestor');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function renderScopeBanner(doc, meta) {
|
|
127
|
+
// Idempotent: reuse the same banner across swaps rather than
|
|
128
|
+
// stacking one banner per SSE tick.
|
|
129
|
+
if (!doc || !doc.body) return null;
|
|
130
|
+
var main = doc.querySelector('main');
|
|
131
|
+
if (!main) return null;
|
|
132
|
+
var banner = doc.getElementById('rcf-scope-banner');
|
|
133
|
+
if (!banner) {
|
|
134
|
+
banner = doc.createElement('aside');
|
|
135
|
+
banner.id = 'rcf-scope-banner';
|
|
136
|
+
banner.setAttribute('role', 'status');
|
|
137
|
+
main.insertBefore(banner, main.firstChild);
|
|
138
|
+
}
|
|
139
|
+
var lines = [];
|
|
140
|
+
if (meta.blueprint) {
|
|
141
|
+
var counted = 'scoped to blueprint ' + escapeText(meta.blueprint)
|
|
142
|
+
+ ' (' + meta.inScopeCount + ' contribution' + (meta.inScopeCount === 1 ? '' : 's');
|
|
143
|
+
if (typeof meta.customisedCount === 'number' && meta.customisedCount > 0) {
|
|
144
|
+
counted += ', ' + meta.customisedCount + ' customised';
|
|
145
|
+
}
|
|
146
|
+
counted += ')';
|
|
147
|
+
lines.push(counted);
|
|
148
|
+
}
|
|
149
|
+
if (meta.node) {
|
|
150
|
+
lines.push('focus: ' + escapeText(meta.node));
|
|
151
|
+
}
|
|
152
|
+
if (typeof meta.warning === 'string' && meta.warning.length > 0) {
|
|
153
|
+
lines.push(meta.warning);
|
|
154
|
+
}
|
|
155
|
+
lines.push('<a href="?">clear scope</a>');
|
|
156
|
+
banner.innerHTML = lines.join(' · ');
|
|
157
|
+
return banner;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function removeScopeBanner(doc) {
|
|
161
|
+
if (!doc) return;
|
|
162
|
+
var banner = doc.getElementById('rcf-scope-banner');
|
|
163
|
+
if (banner && banner.parentNode) banner.parentNode.removeChild(banner);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function escapeText(s) {
|
|
167
|
+
return String(s).replace(/[&<>"']/g, function (ch) {
|
|
168
|
+
return ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[ch];
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function focusNode(doc, id) {
|
|
173
|
+
if (!doc || !id) return false;
|
|
174
|
+
var target = doc.getElementById(id) || doc.querySelector('[data-doc-id="' + id.replace(/"/g, '\\"') + '"]');
|
|
175
|
+
if (!target) return false;
|
|
176
|
+
openAncestorDetailsChain(target);
|
|
177
|
+
if (target.tagName && target.tagName.toLowerCase() === 'details') target.open = true;
|
|
178
|
+
try { target.scrollIntoView({ block: 'start' }); }
|
|
179
|
+
catch (e) { try { target.scrollIntoView(); } catch (_e) { /* soft */ } }
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Fetch the scope payload from /scope.json for a given slug. Kept as
|
|
184
|
+
// a small helper so the tests can substitute a fake fetch impl.
|
|
185
|
+
function fetchScope(slug, fetchImpl) {
|
|
186
|
+
var f = typeof fetchImpl === 'function' ? fetchImpl : (typeof fetch === 'function' ? fetch : null);
|
|
187
|
+
if (!f) return Promise.reject(new Error('no fetch available'));
|
|
188
|
+
var url = '/scope.json?blueprint=' + encodeURIComponent(slug);
|
|
189
|
+
return Promise.resolve(f(url)).then(function (resp) {
|
|
190
|
+
if (!resp) throw new Error('scope: no response');
|
|
191
|
+
var okFlag = resp.ok !== undefined ? resp.ok : (resp.status >= 200 && resp.status < 300);
|
|
192
|
+
return Promise.resolve(resp.json ? resp.json() : null).then(function (body) {
|
|
193
|
+
return { ok: !!okFlag, status: resp.status, body: body };
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Apply the URL scope to the currently-rendered DOM. Returns a
|
|
199
|
+
// Promise that resolves with a summary object; never rejects (any
|
|
200
|
+
// failure is downgraded to a banner warning).
|
|
201
|
+
function applyUrlScope(deps) {
|
|
202
|
+
var doc = deps.document;
|
|
203
|
+
var win = deps.window;
|
|
204
|
+
var scope = parseUrlScope((win && win.location && win.location.search) || '');
|
|
205
|
+
if (!scope.blueprint && !scope.node) {
|
|
206
|
+
if (doc && doc.body) doc.body.classList.remove('rcf-scoped');
|
|
207
|
+
clearScopeMarkers(doc);
|
|
208
|
+
removeScopeBanner(doc);
|
|
209
|
+
return Promise.resolve({ scope: scope, applied: false });
|
|
210
|
+
}
|
|
211
|
+
if (doc && doc.body) doc.body.classList.add('rcf-scoped');
|
|
212
|
+
|
|
213
|
+
var meta = {
|
|
214
|
+
blueprint: scope.blueprint,
|
|
215
|
+
node: scope.node,
|
|
216
|
+
inScopeCount: 0,
|
|
217
|
+
customisedCount: 0,
|
|
218
|
+
warning: '',
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
var blueprintPart = scope.blueprint
|
|
222
|
+
? fetchScope(scope.blueprint, deps.fetch).then(function (r) {
|
|
223
|
+
if (!r.ok) {
|
|
224
|
+
meta.warning = r.status === 404
|
|
225
|
+
? 'blueprint ' + scope.blueprint + ' is not applied to this project'
|
|
226
|
+
: 'scope lookup failed (status ' + r.status + ')';
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
var body = r.body || {};
|
|
230
|
+
var marks = markScopeIds(doc, body.contributionIds || [], body.customisedIds || []);
|
|
231
|
+
meta.inScopeCount = marks.inScopeCount;
|
|
232
|
+
meta.customisedCount = marks.customisedCount;
|
|
233
|
+
}).catch(function (err) {
|
|
234
|
+
meta.warning = 'scope lookup error: ' + (err && err.message ? err.message : 'unknown');
|
|
235
|
+
})
|
|
236
|
+
: Promise.resolve();
|
|
237
|
+
|
|
238
|
+
return blueprintPart.then(function () {
|
|
239
|
+
renderScopeBanner(doc, meta);
|
|
240
|
+
if (scope.node) {
|
|
241
|
+
var focused = focusNode(doc, scope.node);
|
|
242
|
+
if (!focused && !meta.warning) {
|
|
243
|
+
meta.warning = 'node ' + scope.node + ' is not present on the tree';
|
|
244
|
+
renderScopeBanner(doc, meta);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return { scope: scope, applied: true, meta: meta };
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
21
251
|
// ---- state persistence ------------------------------------------------
|
|
22
252
|
|
|
23
253
|
function safeGetItem(storage, key) {
|
|
@@ -142,12 +372,22 @@
|
|
|
142
372
|
// whitelisted deltas from Phase 3.6).
|
|
143
373
|
injectConnectionDot(doc);
|
|
144
374
|
|
|
145
|
-
// Restore prior state on initial load
|
|
375
|
+
// Restore prior state on initial load, then apply URL-driven scope
|
|
376
|
+
// so a deep-link (?blueprint=…&node=…) surfaces the target section
|
|
377
|
+
// even on the very first render.
|
|
378
|
+
var applyScope = function () { applyUrlScope(deps).catch(function () { /* soft */ }); };
|
|
146
379
|
if (doc.readyState === 'loading') {
|
|
147
|
-
doc.addEventListener('DOMContentLoaded', function () {
|
|
380
|
+
doc.addEventListener('DOMContentLoaded', function () {
|
|
381
|
+
restoreState(deps);
|
|
382
|
+
applyScope();
|
|
383
|
+
});
|
|
148
384
|
} else {
|
|
149
385
|
restoreState(deps);
|
|
386
|
+
applyScope();
|
|
150
387
|
}
|
|
388
|
+
// Scope tracks URL changes without a reload (agent pushes a new
|
|
389
|
+
// deep-link into the same tab, or the user clicks "clear scope").
|
|
390
|
+
win.addEventListener('popstate', applyScope);
|
|
151
391
|
|
|
152
392
|
var currentVersion = null;
|
|
153
393
|
var lastEventAt = Date.now();
|
|
@@ -203,6 +443,7 @@
|
|
|
203
443
|
// the payload have no `data-processed` yet.
|
|
204
444
|
resyncTabsAfterSwap(doc, win);
|
|
205
445
|
restoreState(deps);
|
|
446
|
+
applyScope();
|
|
206
447
|
setState('connected');
|
|
207
448
|
});
|
|
208
449
|
|
|
@@ -319,6 +560,12 @@
|
|
|
319
560
|
injectConnectionDot: injectConnectionDot,
|
|
320
561
|
updateDot: updateDot,
|
|
321
562
|
resyncTabsAfterSwap: resyncTabsAfterSwap,
|
|
563
|
+
parseUrlScope: parseUrlScope,
|
|
564
|
+
applyUrlScope: applyUrlScope,
|
|
565
|
+
markScopeIds: markScopeIds,
|
|
566
|
+
renderScopeBanner: renderScopeBanner,
|
|
567
|
+
removeScopeBanner: removeScopeBanner,
|
|
568
|
+
focusNode: focusNode,
|
|
322
569
|
STORAGE_OPEN: STORAGE_OPEN,
|
|
323
570
|
STORAGE_SCROLL: STORAGE_SCROLL,
|
|
324
571
|
HEARTBEAT_STALE_MS: HEARTBEAT_STALE_MS,
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Deep-link scope resolution. Pure helpers shared by the server-side
|
|
2
|
+
// /scope.json endpoint, the CLI `audit view open` verb, and the
|
|
3
|
+
// live-client filter. Nothing here reads process.env, prints, or
|
|
4
|
+
// mutates state.
|
|
5
|
+
//
|
|
6
|
+
// Scope model (spec: w-2026-08-30-dave-020, Baz-ratified 2026-08-30):
|
|
7
|
+
// * blueprint scope -> the applied blueprint's namespaced
|
|
8
|
+
// contribution ids, read from manifest.blueprints[].contributions[].
|
|
9
|
+
// The applied record IS the truth (project-local), never the
|
|
10
|
+
// shipping blueprint source (which may drift or vanish).
|
|
11
|
+
// * node scope -> a single document id (any kind in tree.byId),
|
|
12
|
+
// resolved by the existing hash-router in the client script. Server
|
|
13
|
+
// validates existence so a bad id refuses at the CLI seam rather
|
|
14
|
+
// than opening a dead browser tab.
|
|
15
|
+
// * customisation set -> the subset of contribution ids whose current
|
|
16
|
+
// on-disk bytes differ from the shipping blueprint source's file.
|
|
17
|
+
// Best-effort: any read failure (source missing, unreadable) treats
|
|
18
|
+
// the file as "unknown" (excluded), which the renderer displays as
|
|
19
|
+
// plain in-scope rather than as customised.
|
|
20
|
+
|
|
21
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
22
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
23
|
+
|
|
24
|
+
import { loadBlueprint } from '../blueprint/loader.js';
|
|
25
|
+
import { resolveBlueprintSource } from '../blueprint/shelf-resolver.js';
|
|
26
|
+
import { isRcfError } from '../core/errors/index.js';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Parse the recognised scope keys from a URL query string.
|
|
30
|
+
*
|
|
31
|
+
* @param {URLSearchParams} params
|
|
32
|
+
* @returns {{ blueprint: string|null, node: string|null }}
|
|
33
|
+
*/
|
|
34
|
+
export function parseUrlScope(params) {
|
|
35
|
+
const blueprint = normaliseString(params.get('blueprint'));
|
|
36
|
+
const node = normaliseString(params.get('node'));
|
|
37
|
+
return { blueprint, node };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function normaliseString(v) {
|
|
41
|
+
if (typeof v !== 'string') return null;
|
|
42
|
+
const trimmed = v.trim();
|
|
43
|
+
return trimmed.length === 0 ? null : trimmed;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the applied blueprint record for a slug.
|
|
48
|
+
*
|
|
49
|
+
* @param {object|null} manifest
|
|
50
|
+
* @param {string} slug
|
|
51
|
+
* @returns {{ found: false } | { found: true, record: object, contributionIds: string[] }}
|
|
52
|
+
*/
|
|
53
|
+
export function contributionsForBlueprint(manifest, slug) {
|
|
54
|
+
if (!manifest || !Array.isArray(manifest.blueprints)) return { found: false };
|
|
55
|
+
const record = manifest.blueprints.find((b) => b?.slug === slug);
|
|
56
|
+
if (!record) return { found: false };
|
|
57
|
+
const contributionIds = Array.isArray(record.contributions)
|
|
58
|
+
? record.contributions.map((c) => c?.id).filter((id) => typeof id === 'string')
|
|
59
|
+
: [];
|
|
60
|
+
return { found: true, record, contributionIds };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* List every applied blueprint slug present in the manifest. Used by
|
|
65
|
+
* the client to preflight scope requests without a round trip per view.
|
|
66
|
+
*
|
|
67
|
+
* @param {object|null} manifest
|
|
68
|
+
* @returns {string[]}
|
|
69
|
+
*/
|
|
70
|
+
export function listAppliedSlugs(manifest) {
|
|
71
|
+
if (!manifest || !Array.isArray(manifest.blueprints)) return [];
|
|
72
|
+
return manifest.blueprints
|
|
73
|
+
.map((b) => (typeof b?.slug === 'string' ? b.slug : null))
|
|
74
|
+
.filter((s) => s !== null);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Detect which of the applied blueprint's contribution files have been
|
|
79
|
+
* modified on disk since apply. Compares current file bytes to the
|
|
80
|
+
* shipping source file bytes. Source paths that no longer resolve are
|
|
81
|
+
* treated as "unknown" (excluded from the result), so a deleted
|
|
82
|
+
* shipping tree does not fake a full-tree customisation banner.
|
|
83
|
+
*
|
|
84
|
+
* @param {object} args
|
|
85
|
+
* @param {string} args.projectRoot - absolute path to the project root
|
|
86
|
+
* @param {object} args.record - applied blueprint record
|
|
87
|
+
* @param {(abs: string) => Promise<string>} [args._readFile] - test seam
|
|
88
|
+
* @returns {Promise<{ customisedIds: string[], missingSourceIds: string[] }>}
|
|
89
|
+
*/
|
|
90
|
+
export async function detectCustomisations({ projectRoot, record, _readFile, _loadBlueprint, _resolveSource }) {
|
|
91
|
+
const readImpl = _readFile ?? ((abs) => readFile(abs, 'utf8'));
|
|
92
|
+
const loadImpl = _loadBlueprint ?? loadBlueprint;
|
|
93
|
+
const resolveImpl = _resolveSource ?? resolveBlueprintSource;
|
|
94
|
+
const customisedIds = [];
|
|
95
|
+
const missingSourceIds = [];
|
|
96
|
+
if (!record || !Array.isArray(record.contributions)) {
|
|
97
|
+
return { customisedIds, missingSourceIds };
|
|
98
|
+
}
|
|
99
|
+
const sourceAbs = await resolveSourceAbs(projectRoot, record.source, resolveImpl);
|
|
100
|
+
const sourceIndex = await loadSourceContributionIndex({ sourceAbs, loadImpl });
|
|
101
|
+
for (const c of record.contributions) {
|
|
102
|
+
if (typeof c?.id !== 'string' || typeof c?.path !== 'string') continue;
|
|
103
|
+
const projectAbs = resolve(projectRoot, c.path);
|
|
104
|
+
let currentBytes = null;
|
|
105
|
+
try {
|
|
106
|
+
currentBytes = await readImpl(projectAbs);
|
|
107
|
+
} catch {
|
|
108
|
+
// No project-side file: not a customisation (nothing on disk).
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (!sourceIndex) {
|
|
112
|
+
missingSourceIds.push(c.id);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
// Cross-reference by CONTRIBUTION INDEX (position). The applied
|
|
116
|
+
// record and the shipping blueprint list contributions in the same
|
|
117
|
+
// order at apply time; the applied record's ids are namespaced
|
|
118
|
+
// (stampId) but the position map is stable and does not rely on
|
|
119
|
+
// any string derivation.
|
|
120
|
+
const sourcePathRelative = sourceIndex.byAppliedId(c.id);
|
|
121
|
+
if (!sourcePathRelative) {
|
|
122
|
+
missingSourceIds.push(c.id);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const sourceFileAbs = join(sourceAbs, 'contributions', sourcePathRelative);
|
|
126
|
+
let sourceBytes = null;
|
|
127
|
+
try {
|
|
128
|
+
sourceBytes = await readImpl(sourceFileAbs);
|
|
129
|
+
} catch {
|
|
130
|
+
missingSourceIds.push(c.id);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (currentBytes !== sourceBytes) customisedIds.push(c.id);
|
|
134
|
+
}
|
|
135
|
+
return { customisedIds, missingSourceIds };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async function resolveSourceAbs(projectRoot, source, resolveImpl) {
|
|
139
|
+
if (typeof source !== 'string' || source.length === 0) return null;
|
|
140
|
+
if (isAbsolute(source)) return source;
|
|
141
|
+
// Non-path sources - a library colon ref (`wsd:auth-oauth2`), an
|
|
142
|
+
// `@stock/<slug>` sugar, or a bare shelf slug - need re-resolution
|
|
143
|
+
// through the blueprint resolver against the project registry and the
|
|
144
|
+
// packaged shelf. Without this, the applied-record's source is a
|
|
145
|
+
// token the FS cannot open and every contribution renders as
|
|
146
|
+
// missingSource in /scope.json (integration review d-2026-08-31-046).
|
|
147
|
+
// A relative filesystem path still falls through to the pre-fix
|
|
148
|
+
// resolve() below so an existing manifest carrying `./blueprint-foo`
|
|
149
|
+
// keeps its behaviour.
|
|
150
|
+
if (typeof projectRoot === 'string' && projectRoot.length > 0) {
|
|
151
|
+
const resolved = await resolveImpl(source, { projectRoot }).catch(() => null);
|
|
152
|
+
if (resolved && !isRcfError(resolved) && typeof resolved.resolved === 'string') {
|
|
153
|
+
return resolved.resolved;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Fallback: treat as a relative filesystem path against projectRoot.
|
|
157
|
+
// Matches pre-fix behaviour byte-for-byte; a missing directory
|
|
158
|
+
// surfaces as `missingSource` via the loader below rather than here.
|
|
159
|
+
return typeof projectRoot === 'string' && projectRoot.length > 0
|
|
160
|
+
? resolve(projectRoot, source)
|
|
161
|
+
: null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Load the shipping blueprint's contribution list and build an
|
|
166
|
+
* applied-id -> source-relative-path index. Falls back to id-based
|
|
167
|
+
* lookup when positions don't align (a re-apply that added ids will
|
|
168
|
+
* still resolve the shared prefix).
|
|
169
|
+
*/
|
|
170
|
+
async function loadSourceContributionIndex({ sourceAbs, loadImpl }) {
|
|
171
|
+
if (!sourceAbs) return null;
|
|
172
|
+
const loaded = await loadImpl(sourceAbs).catch(() => null);
|
|
173
|
+
if (!loaded || loaded.kind) return null;
|
|
174
|
+
const contributions = Array.isArray(loaded.contributions) ? loaded.contributions : [];
|
|
175
|
+
// Two indexes: exact id match (works whenever the operator used the
|
|
176
|
+
// default namespace, i.e. shipping id === applied id) and bare-id
|
|
177
|
+
// suffix match (works when the applied id carries a namespace prefix
|
|
178
|
+
// over a bare shipping id, e.g. `myproj-application-spa-REQ-001`
|
|
179
|
+
// over shipping `application-spa-REQ-001`).
|
|
180
|
+
const exact = new Map();
|
|
181
|
+
for (const sc of contributions) {
|
|
182
|
+
if (typeof sc?.id !== 'string' || typeof sc?.path !== 'string') continue;
|
|
183
|
+
exact.set(sc.id, sc.path);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
byAppliedId(appliedId) {
|
|
187
|
+
if (exact.has(appliedId)) return exact.get(appliedId);
|
|
188
|
+
// Namespace fall-back: strip the leading namespace segment and
|
|
189
|
+
// retry. The applied stampId only prefixes; it never rewrites
|
|
190
|
+
// the trailing bare id.
|
|
191
|
+
const idx = appliedId.indexOf('-');
|
|
192
|
+
if (idx > 0) {
|
|
193
|
+
const tail = appliedId.slice(idx + 1);
|
|
194
|
+
if (exact.has(tail)) return exact.get(tail);
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Best-effort node-id existence check against a tree model. Kept here
|
|
203
|
+
* (not in tree-model.js) so the CLI can validate a --node argument
|
|
204
|
+
* without pulling the full renderer pipeline in.
|
|
205
|
+
*
|
|
206
|
+
* @param {import('#core/store/walker.js').Tree} tree
|
|
207
|
+
* @param {string} id
|
|
208
|
+
* @returns {boolean}
|
|
209
|
+
*/
|
|
210
|
+
export function treeHasId(tree, id) {
|
|
211
|
+
if (!tree || typeof id !== 'string' || id.length === 0) return false;
|
|
212
|
+
if (tree.byId && typeof tree.byId.get === 'function') return tree.byId.has(id);
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Fast async-friendly stat wrapper. Handy for tests that want to prove
|
|
218
|
+
* the customisation check honours missing files without stubbing the
|
|
219
|
+
* whole fs module.
|
|
220
|
+
*
|
|
221
|
+
* @param {string} abs
|
|
222
|
+
* @returns {Promise<boolean>}
|
|
223
|
+
*/
|
|
224
|
+
export async function fileExists(abs) {
|
|
225
|
+
try {
|
|
226
|
+
const s = await stat(abs);
|
|
227
|
+
return s.isFile();
|
|
228
|
+
} catch {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
}
|
package/src/view/style.css
CHANGED
|
@@ -733,3 +733,45 @@ footer {
|
|
|
733
733
|
details.doc-details > .req-body,
|
|
734
734
|
details.doc-details > .us-body { padding: 0.75rem 1rem; }
|
|
735
735
|
}
|
|
736
|
+
|
|
737
|
+
/* --------------------------------------------------------------------
|
|
738
|
+
* Deep-link scope overlay (w-2026-08-30-dave-020)
|
|
739
|
+
*
|
|
740
|
+
* When body.rcf-scoped is present the client has applied a URL-driven
|
|
741
|
+
* scope (blueprint / node). Everything inside #rcf-live-content is
|
|
742
|
+
* dimmed except:
|
|
743
|
+
* - .rcf-in-scope a doc that IS in the scope set
|
|
744
|
+
* - .rcf-scope-ancestor an ancestor of an in-scope doc (kept full
|
|
745
|
+
* strength so the drill-down chain is legible)
|
|
746
|
+
* - .rcf-customised an in-scope doc whose bytes differ from
|
|
747
|
+
* the shipping blueprint source (a project
|
|
748
|
+
* customisation over the applied contribution)
|
|
749
|
+
*
|
|
750
|
+
* Left visible-but-dimmed rather than hidden so the reader can see
|
|
751
|
+
* where in the tree the scoped set sits.
|
|
752
|
+
* -------------------------------------------------------------------- */
|
|
753
|
+
|
|
754
|
+
body.rcf-scoped #rcf-live-content [data-doc-id]:not(.rcf-in-scope):not(.rcf-scope-ancestor) {
|
|
755
|
+
opacity: 0.28;
|
|
756
|
+
transition: opacity 120ms ease-in-out;
|
|
757
|
+
}
|
|
758
|
+
body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope {
|
|
759
|
+
opacity: 1;
|
|
760
|
+
outline: 2px solid #4c9a2a;
|
|
761
|
+
outline-offset: 2px;
|
|
762
|
+
}
|
|
763
|
+
body.rcf-scoped #rcf-live-content [data-doc-id].rcf-in-scope.rcf-customised {
|
|
764
|
+
outline-color: #d68f00;
|
|
765
|
+
box-shadow: 0 0 0 3px rgba(214, 143, 0, 0.18);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
#rcf-scope-banner {
|
|
769
|
+
margin: 0 0 1rem;
|
|
770
|
+
padding: 0.5rem 0.8rem;
|
|
771
|
+
border: 1px solid #d68f00;
|
|
772
|
+
background: #fff7e6;
|
|
773
|
+
color: #6b4300;
|
|
774
|
+
font-size: 0.9rem;
|
|
775
|
+
border-radius: 4px;
|
|
776
|
+
}
|
|
777
|
+
#rcf-scope-banner a { color: #b03a2e; text-decoration: underline; }
|