rcf-lite 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +2 -0
- package/bin/rcf.js +3 -1
- package/bin/view-supervisor-child.mjs +0 -0
- package/blueprints/application-api-rest/README.md +40 -0
- package/blueprints/application-api-rest/assets/middleware/auth-classes.md +45 -0
- package/blueprints/application-api-rest/assets/openapi/openapi-skeleton.yaml +322 -0
- package/blueprints/application-api-rest/assets/sample-data/sample-resources.json +53 -0
- package/blueprints/application-api-rest/assets/samples/request-response-pairs.md +204 -0
- package/blueprints/application-api-rest/blueprint.json +265 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-301-application-api-rest-error-envelope.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-302-application-api-rest-auth-model.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-303-application-api-rest-api-versioning.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-304-application-api-rest-logging.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-305-application-api-rest-pagination.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-306-application-api-rest-idempotency.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-307-application-api-rest-openapi-generation.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-308-application-api-rest-rate-limiting.json +25 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-001.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-002.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-003.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-004.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-005.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-007.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-008.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-009.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-010.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-011.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-012.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-013.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-014.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-015.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-016.json +18 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-301-application-api-rest-request-pipeline.json +48 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-302-application-api-rest-auth-middleware.json +41 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-303-application-api-rest-contract-surface.json +46 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-304-application-api-rest-resource-layer.json +46 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-305-application-api-rest-observability.json +40 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +46 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2101.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2102.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2104.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2105.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2106.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2107.json +90 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +90 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2109.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2110.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2111.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2112.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2113.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2114.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2115.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2116.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2117.json +64 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2118.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2119.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2120.json +73 -0
- package/blueprints/application-api-rest/docs/topics.md +46 -0
- package/blueprints/application-api-rest/guide/application-api-rest.md +41 -0
- package/blueprints/application-spa/README.md +90 -0
- package/blueprints/application-spa/assets/component-specs/actions-and-text-inputs.md +36 -0
- package/blueprints/application-spa/assets/component-specs/data-display.md +19 -0
- package/blueprints/application-spa/assets/component-specs/feedback-and-status.md +27 -0
- package/blueprints/application-spa/assets/component-specs/overlays.md +23 -0
- package/blueprints/application-spa/assets/component-specs/selection-controls.md +23 -0
- package/blueprints/application-spa/assets/sample-data/sample-entities.json +41 -0
- package/blueprints/application-spa/assets/tokens/design-tokens.json +140 -0
- package/blueprints/application-spa/assets/tokens/theme.css +169 -0
- package/blueprints/application-spa/assets/viewports.md +18 -0
- package/blueprints/application-spa/assets/wireframes/dashboard.md +48 -0
- package/blueprints/application-spa/assets/wireframes/detail.md +40 -0
- package/blueprints/application-spa/assets/wireframes/empty.md +31 -0
- package/blueprints/application-spa/assets/wireframes/error.md +46 -0
- package/blueprints/application-spa/assets/wireframes/form.md +50 -0
- package/blueprints/application-spa/assets/wireframes/list.md +45 -0
- package/blueprints/application-spa/assets/wireframes/session-expired.md +35 -0
- package/blueprints/application-spa/assets/wireframes/sign-in.md +41 -0
- package/blueprints/application-spa/assets/wireframes/sign-out.md +32 -0
- package/blueprints/application-spa/blueprint.json +387 -0
- package/blueprints/application-spa/contributions/adrs/adr-201-application-spa-routing.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-203-application-spa-client-state.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-204-application-spa-error-envelope.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-205-application-spa-auth-model.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-207-application-spa-motion.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-208-application-spa-i18n.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-209-application-spa-telemetry-naming.json +13 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-001.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-002.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-003.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-004.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-005.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-006.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-007.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-008.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-009.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-010.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-011.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-012.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-013.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-014.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-015.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-016.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-017.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-018.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-019.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-020.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-021.json +18 -0
- package/blueprints/application-spa/contributions/tacs/tac-201-application-spa-app-shell.json +45 -0
- package/blueprints/application-spa/contributions/tacs/tac-202-application-spa-theme-system.json +32 -0
- package/blueprints/application-spa/contributions/tacs/tac-203-application-spa-component-library.json +32 -0
- package/blueprints/application-spa/contributions/tacs/tac-204-application-spa-client-data-layer.json +27 -0
- package/blueprints/application-spa/contributions/tacs/tac-205-application-spa-forms-engine.json +27 -0
- package/blueprints/application-spa/contributions/tacs/tac-206-application-spa-telemetry.json +19 -0
- package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +57 -0
- package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +56 -0
- package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +61 -0
- package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +70 -0
- package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +70 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1101.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1102.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1103.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1104.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1105.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1106.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1107.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1108.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1109.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1110.json +100 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1111.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1112.json +81 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1113.json +82 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1114.json +60 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1115.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1116.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1117.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1118.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1119.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1120.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1121.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1122.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1123.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1124.json +60 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1125.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1126.json +78 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1127.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1128.json +51 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +72 -0
- package/blueprints/application-spa/docs/topics.md +57 -0
- package/blueprints/application-spa/guide/application-spa.md +40 -0
- package/blueprints/delivery-ci-workflows/CHANGELOG.md +39 -0
- package/blueprints/delivery-ci-workflows/README.md +57 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/default-branch-checks.yml +55 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/pull-request-checks.yml +65 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/release.yml +71 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/scheduled-audit.yml +61 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/notes.md +61 -0
- package/blueprints/delivery-ci-workflows/assets/report-samples/per-gate.json +13 -0
- package/blueprints/delivery-ci-workflows/assets/report-samples/pipeline.json +28 -0
- package/blueprints/delivery-ci-workflows/blueprint.json +87 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-701-delivery-ci-workflows-ci-gates.json +30 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-703-delivery-ci-workflows-node-only-runner.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-704-delivery-ci-workflows-report-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-705-delivery-ci-workflows-elicitation-surface.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-706-delivery-ci-workflows-branch-model-defaults.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-707-delivery-ci-workflows-release-workflow-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-708-delivery-ci-workflows-provider-hint-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-709-delivery-ci-workflows-release-artefacts.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-710-delivery-ci-workflows-scheduled-audit.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-001.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-002.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-003.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-005.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-006.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-007.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-008.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-009.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-010.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-011.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-012.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-013.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-014.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-015.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-016.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-017.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-018.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-019.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-020.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-021.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-022.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-023.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-701-delivery-ci-workflows-gate-runner.json +59 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-702-delivery-ci-workflows-gate-report.json +32 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-703-delivery-ci-workflows-aggregate-report.json +41 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json +64 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-705-delivery-ci-workflows-release-workflow.json +51 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-706-delivery-ci-workflows-scheduled-audit.json +38 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6101.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6102.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6103.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6104.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6105.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6106.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6107.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6108.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6109.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6110.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6111.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6112.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6113.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6114.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6115.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6116.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6117.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6118.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6119.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6120.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6121.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6122.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6123.json +37 -0
- package/blueprints/delivery-ci-workflows/docs/topics.md +61 -0
- package/blueprints/delivery-ci-workflows/guide/delivery-ci-workflows.md +136 -0
- package/blueprints/deploy-cloudflare-workers/README.md +63 -0
- package/blueprints/deploy-cloudflare-workers/assets/ci-workflows/build-and-upload.yml.md +109 -0
- package/blueprints/deploy-cloudflare-workers/assets/ci-workflows/promote.yml.md +120 -0
- package/blueprints/deploy-cloudflare-workers/assets/verification/served-surface-probes.md +90 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/bootstrap-vs-steady-state.md +87 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/preview-alias-shape.md +86 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/wrangler-toml-shape.md +85 -0
- package/blueprints/deploy-cloudflare-workers/blueprint.json +48 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1301-deploy-cloudflare-workers-deployment-target.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1302-deploy-cloudflare-workers-default-vendor.json +35 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1303-deploy-cloudflare-workers-preview-vs-production.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1304-deploy-cloudflare-workers-rollback-is-promote.json +25 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1305-deploy-cloudflare-workers-dev-mode-drift.json +25 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-001.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-002.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-003.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-004.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-005.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-006.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-007.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-008.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-009.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-010.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-011.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-012.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json +54 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json +57 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json +51 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json +64 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12101.json +54 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12102.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12103.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12104.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12105.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12106.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12107.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12108.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12109.json +47 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12110.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12111.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12112.json +46 -0
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +46 -0
- package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +74 -0
- package/blueprints/email-smtp-resend/README.md +45 -0
- package/blueprints/email-smtp-resend/assets/from-address-rotation-pattern.md +44 -0
- package/blueprints/email-smtp-resend/assets/resend-verification-pointer.md +25 -0
- package/blueprints/email-smtp-resend/assets/stub-adapter.md +65 -0
- package/blueprints/email-smtp-resend/blueprint.json +23 -0
- package/blueprints/email-smtp-resend/contributions/adrs/adr-401-email-smtp-resend-transport-choice.json +30 -0
- package/blueprints/email-smtp-resend/contributions/adrs/adr-402-email-smtp-resend-retry-and-backoff-posture.json +30 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-001.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-002.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-003.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-004.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-005.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-006.json +18 -0
- package/blueprints/email-smtp-resend/contributions/tacs/tac-401-email-smtp-resend-send-adapter.json +53 -0
- package/blueprints/email-smtp-resend/contributions/tacs/tac-402-email-smtp-resend-webhook-verifier.json +56 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4101.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4102.json +36 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4103.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4104.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4105.json +36 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4106.json +37 -0
- package/blueprints/email-smtp-resend/docs/topics.md +44 -0
- package/blueprints/email-smtp-resend/guide/email-smtp-resend.md +71 -0
- package/blueprints/observability-essentials/README.md +53 -0
- package/blueprints/observability-essentials/assets/probe-samples/liveness-body.json +4 -0
- package/blueprints/observability-essentials/assets/probe-samples/readiness-body.json +18 -0
- package/blueprints/observability-essentials/assets/status-page-samples/status-page-clean.html +22 -0
- package/blueprints/observability-essentials/assets/status-page-samples/status-page-with-notice.html +25 -0
- package/blueprints/observability-essentials/blueprint.json +54 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-803-observability-essentials-status-page-contract.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-804-observability-essentials-probe-secrecy.json +25 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-805-observability-essentials-notification-outcome-model.json +25 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-003.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-004.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-005.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-006.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-007.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-008.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-009.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-010.json +18 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +32 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +43 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-803-observability-essentials-status-page.json +37 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-804-observability-essentials-notification-outcome.json +42 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7103.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7104.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7105.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7106.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7107.json +46 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7108.json +47 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7109.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7110.json +46 -0
- package/blueprints/observability-essentials/docs/topics.md +57 -0
- package/blueprints/observability-essentials/guide/observability-essentials.md +68 -0
- package/blueprints/observability-probe-endpoints/README.md +53 -0
- package/blueprints/observability-probe-endpoints/assets/docker/dockerfile-healthcheck.md +19 -0
- package/blueprints/observability-probe-endpoints/assets/kubernetes/podspec-probes-separate-port.md +54 -0
- package/blueprints/observability-probe-endpoints/assets/kubernetes/podspec-probes.md +36 -0
- package/blueprints/observability-probe-endpoints/assets/load-balancer/health-check-config.md +23 -0
- package/blueprints/observability-probe-endpoints/assets/systemd/notify-service.md +30 -0
- package/blueprints/observability-probe-endpoints/assets/uptime-monitor/monitor-config.md +22 -0
- package/blueprints/observability-probe-endpoints/blueprint.json +44 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1501-observability-probe-endpoints-health-probes.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1502-observability-probe-endpoints-readiness-semantics.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1504-observability-probe-endpoints-separate-port-option.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1505-observability-probe-endpoints-external-response-secrecy.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-001.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-002.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-003.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-004.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-005.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-006.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-007.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-008.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1501-observability-probe-endpoints-profile-resolver.json +39 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1502-observability-probe-endpoints-handler-set.json +40 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1503-observability-probe-endpoints-listener-topology.json +51 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1504-observability-probe-endpoints-non-http-adapters.json +39 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14101.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14103.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14104.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14105.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14106.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14108.json +46 -0
- package/blueprints/observability-probe-endpoints/docs/topics.md +51 -0
- package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +83 -0
- package/blueprints/persistence-data-d1/README.md +50 -0
- package/blueprints/persistence-data-d1/assets/batch-usage/batch-atomicity-example.md +72 -0
- package/blueprints/persistence-data-d1/assets/facade-shape/facade-module-shape.md +115 -0
- package/blueprints/persistence-data-d1/assets/migration-shape/migration-file-shape.md +119 -0
- package/blueprints/persistence-data-d1/assets/wrangler-config/d1-binding-shape.md +93 -0
- package/blueprints/persistence-data-d1/blueprint.json +42 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1401-persistence-data-d1-store-model.json +30 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1402-persistence-data-d1-migration-discipline.json +30 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1403-persistence-data-d1-event-secrecy.json +25 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1404-persistence-data-d1-store-boundary.json +25 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1405-persistence-data-d1-recovery-model.json +30 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-001.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-002.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-003.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-004.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-005.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-006.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-007.json +18 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1401-persistence-data-d1-facade.json +51 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1402-persistence-data-d1-migration-catalog.json +31 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +38 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1404-persistence-data-d1-recovery-runner.json +39 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13101.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13102.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13103.json +46 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13104.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13105.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13106.json +46 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13107.json +38 -0
- package/blueprints/persistence-data-d1/docs/topics.md +59 -0
- package/blueprints/persistence-data-d1/guide/persistence-data-d1.md +77 -0
- package/blueprints/persistence-data-sqlite/README.md +50 -0
- package/blueprints/persistence-data-sqlite/assets/backup-procedures/hot-checkpoint-note.md +22 -0
- package/blueprints/persistence-data-sqlite/assets/backup-procedures/sqlite-file-copy.md +70 -0
- package/blueprints/persistence-data-sqlite/assets/schema-samples/catalog-file-layout.md +73 -0
- package/blueprints/persistence-data-sqlite/assets/schema-samples/migration-shape.md +76 -0
- package/blueprints/persistence-data-sqlite/blueprint.json +50 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-601-persistence-data-sqlite-store-model.json +30 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-602-persistence-data-sqlite-migration-discipline.json +30 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-603-persistence-data-sqlite-event-secrecy.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-604-persistence-data-sqlite-store-boundary.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-605-persistence-data-sqlite-backup-model.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-001.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-002.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-003.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-004.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-005.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-006.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-007.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-008.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-009.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-010.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-011.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-601-persistence-data-sqlite-store.json +57 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-602-persistence-data-sqlite-migration-runner.json +34 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-603-persistence-data-sqlite-migration-catalog.json +31 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-604-persistence-data-sqlite-backup-runner.json +33 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5101.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5102.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5103.json +37 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5104.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5105.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5106.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5107.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5108.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5109.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5110.json +37 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5111.json +37 -0
- package/blueprints/persistence-data-sqlite/docs/topics.md +49 -0
- package/blueprints/persistence-data-sqlite/guide/persistence-data-sqlite.md +69 -0
- package/blueprints/security-auth-clerk/README.md +52 -0
- package/blueprints/security-auth-clerk/assets/authorisation/role-claim-mapping-sample.md +99 -0
- package/blueprints/security-auth-clerk/assets/middleware/node-middleware-shape.md +86 -0
- package/blueprints/security-auth-clerk/assets/middleware/workers-fetch-shape.md +123 -0
- package/blueprints/security-auth-clerk/assets/wiring/clerk-provider-react.md +48 -0
- package/blueprints/security-auth-clerk/assets/wiring/clerk-provider-vue.md +41 -0
- package/blueprints/security-auth-clerk/assets/wiring/workers-wrangler-toml-shape.md +51 -0
- package/blueprints/security-auth-clerk/blueprint.json +42 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1001-security-auth-clerk-auth-model.json +30 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1002-security-auth-clerk-middleware-boundary.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1003-security-auth-clerk-authorisation-adapter-contract.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1004-security-auth-clerk-claims-mapping-discipline.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1005-security-auth-clerk-session-lifecycle.json +25 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-001.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-002.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-003.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-004.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-005.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-006.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-007.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-008.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-009.json +18 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1001-security-auth-clerk-middleware.json +42 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1002-security-auth-clerk-authorisation-adapter.json +30 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1003-security-auth-clerk-session-verifier.json +38 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1004-security-auth-clerk-claims-mapper.json +22 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9101.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9102.json +38 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9103.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9104.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9105.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9106.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9107.json +37 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9108.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9109.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9110.json +37 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9111.json +36 -0
- package/blueprints/security-auth-clerk/docs/topics.md +56 -0
- package/blueprints/security-auth-clerk/guide/security-auth-clerk.md +80 -0
- package/blueprints/security-auth-keycloak/README.md +56 -0
- package/blueprints/security-auth-keycloak/assets/local-container/keycloak-bootstrap.md +54 -0
- package/blueprints/security-auth-keycloak/assets/middleware/verifier-wiring.md +93 -0
- package/blueprints/security-auth-keycloak/assets/mock-introspection/mock-introspection-shape.md +62 -0
- package/blueprints/security-auth-keycloak/assets/provider-router/router-shape.md +71 -0
- package/blueprints/security-auth-keycloak/assets/realm-skeleton/realm-config-shape.md +55 -0
- package/blueprints/security-auth-keycloak/blueprint.json +49 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1201-security-auth-keycloak-auth-model.json +35 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1202-security-auth-keycloak-verification-mode-choice.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1203-security-auth-keycloak-provider-routing-seam.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1204-security-auth-keycloak-session-vs-token-contract.json +25 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1205-security-auth-keycloak-jwks-rotation-cache-lifetime.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1206-security-auth-keycloak-refresh-and-sign-out-posture.json +25 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-001.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-002.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-003.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-004.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-005.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-006.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-007.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-008.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-009.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-010.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-011.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-012.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1201-security-auth-keycloak-discovery-client.json +51 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1202-security-auth-keycloak-jwt-verifier.json +46 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1203-security-auth-keycloak-introspection-client.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1204-security-auth-keycloak-provider-router.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1205-security-auth-keycloak-role-adapter.json +32 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11101.json +47 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11102.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11103.json +36 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11104.json +36 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11105.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11106.json +46 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11107.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11108.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11109.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11110.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11111.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11112.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11113.json +36 -0
- package/blueprints/security-auth-keycloak/docs/topics.md +74 -0
- package/blueprints/security-auth-keycloak/guide/security-auth-keycloak.md +81 -0
- package/blueprints/security-auth-magic-link/README.md +46 -0
- package/blueprints/security-auth-magic-link/assets/email-templates/magic-link-email.md +44 -0
- package/blueprints/security-auth-magic-link/assets/email-templates/stub-adapter.md +55 -0
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/allow-list-file.md +46 -0
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/single-address.md +35 -0
- package/blueprints/security-auth-magic-link/blueprint.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-501-security-auth-magic-link-model.json +30 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-502-security-auth-magic-link-token-secrecy.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-503-security-auth-magic-link-anti-enumeration-budget.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-504-security-auth-magic-link-session-lifecycle.json +30 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-505-security-auth-magic-link-rate-limiting.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-001.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-002.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-003.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-004.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-005.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-006.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-007.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-008.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-009.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-010.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-011.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-501-security-auth-magic-link-manager.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-502-security-auth-magic-link-session-manager.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-503-security-auth-magic-link-login-routes.json +76 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-504-security-auth-magic-link-email-delivery-adapter.json +26 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-505-security-auth-magic-link-principal-registry.json +26 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3101.json +64 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3102.json +54 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3103.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3104.json +55 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3105.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3106.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3107.json +54 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3108.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3109.json +48 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3110.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3111.json +45 -0
- package/blueprints/security-auth-magic-link/docs/topics.md +45 -0
- package/blueprints/security-auth-magic-link/guide/security-auth-magic-link.md +65 -0
- package/blueprints/security-auth-oauth2/README.md +50 -0
- package/blueprints/security-auth-oauth2/assets/mock-provider/mock-oidc-shape.md +55 -0
- package/blueprints/security-auth-oauth2/assets/provider-selector/list-shape.md +27 -0
- package/blueprints/security-auth-oauth2/assets/providers/generic-oidc-discovery.md +31 -0
- package/blueprints/security-auth-oauth2/assets/providers/github-oauth2-only.md +31 -0
- package/blueprints/security-auth-oauth2/assets/providers/google-oidc.md +31 -0
- package/blueprints/security-auth-oauth2/assets/session-bridge/opaque-handle-shape.md +59 -0
- package/blueprints/security-auth-oauth2/blueprint.json +44 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1101-security-auth-oauth2-auth-model.json +35 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1102-security-auth-oauth2-provider-abstraction-contract.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1103-security-auth-oauth2-pkce-discipline.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1104-security-auth-oauth2-session-bridge-shape.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1105-security-auth-oauth2-refresh-token-posture.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1106-security-auth-oauth2-multi-provider-routing.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-001.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-002.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-003.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-004.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-005.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-006.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-007.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-008.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-009.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-010.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1101-security-auth-oauth2-flow-controller.json +61 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1102-security-auth-oauth2-provider-adapter.json +33 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1103-security-auth-oauth2-session-bridge.json +51 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1104-security-auth-oauth2-provider-selector.json +29 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10101.json +47 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10102.json +45 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10103.json +36 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10104.json +36 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10105.json +55 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10106.json +45 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10107.json +46 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10108.json +46 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10109.json +37 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10110.json +37 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10111.json +28 -0
- package/blueprints/security-auth-oauth2/docs/topics.md +58 -0
- package/blueprints/security-auth-oauth2/guide/security-auth-oauth2.md +65 -0
- package/blueprints/security-secrets-management/README.md +48 -0
- package/blueprints/security-secrets-management/assets/cli-usage/agent-access-pattern.md +69 -0
- package/blueprints/security-secrets-management/assets/manifest-samples/environment-aware-example.md +33 -0
- package/blueprints/security-secrets-management/assets/manifest-samples/secrets-yaml-shape.md +74 -0
- package/blueprints/security-secrets-management/assets/ui-integration/three-way-choice.md +44 -0
- package/blueprints/security-secrets-management/blueprint.json +43 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-901-security-secrets-management-secrets-source.json +30 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-902-security-secrets-management-default-vendor.json +35 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-903-security-secrets-management-agent-access-discipline.json +25 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-904-security-secrets-management-dotenv-reflection.json +25 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-905-security-secrets-management-rotation-and-audit.json +30 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-001.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-002.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-003.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-004.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-005.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-006.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-007.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-008.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-009.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-010.json +18 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-901-security-secrets-management-manager-client.json +52 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-902-security-secrets-management-manifest.json +34 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-903-security-secrets-management-env-reflector.json +46 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-904-security-secrets-management-rotation-gate.json +57 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-905-security-secrets-management-agent-cli.json +59 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8101.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8102.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8103.json +37 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8104.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8105.json +55 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8106.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8107.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8108.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8109.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8110.json +45 -0
- package/blueprints/security-secrets-management/docs/topics.md +46 -0
- package/blueprints/security-secrets-management/guide/security-secrets-management.md +68 -0
- package/fixtures/canary-manifest.json +1 -101
- package/guidance/build-cycle-playbook.md +2 -2
- package/guidance/document-model.md +1 -1
- package/guidance/harness-template.md +13 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +13 -0
- package/package.json +18 -9
- package/rcf/adrs/adr-001.json +1 -1
- package/rcf/adrs/adr-009.json +1 -1
- package/rcf/build-sequence.json +1 -1
- package/rcf/manifest.json +2 -2
- package/rcf/prd.json +2 -2
- package/releases/releases.yaml +116 -0
- package/scripts/preinstall-node-check.mjs +61 -0
- package/src/blueprint/apply.js +62 -18
- package/src/blueprint/conflicts.js +8 -8
- package/src/blueprint/index.js +14 -1
- package/src/blueprint/library-loader.js +271 -0
- package/src/blueprint/library-registry.js +341 -0
- package/src/blueprint/list.js +94 -0
- package/src/blueprint/loader.js +26 -1
- package/src/blueprint/namespace.js +20 -16
- package/src/blueprint/shelf-resolver.js +286 -0
- package/src/blueprint/supersede.js +3 -2
- package/src/browser-verify/invariants.js +40 -0
- package/src/browser-verify/runner.js +2 -0
- package/src/cli/blueprint-library.js +419 -0
- package/src/cli/blueprint.js +91 -10
- package/src/cli/guidance.js +1 -1
- package/src/cli/help.js +27 -1
- package/src/cli/init.js +2 -0
- package/src/cli/version.js +673 -0
- package/src/cli/view.js +282 -1
- package/src/core/store/writer.js +64 -2
- package/src/server/index.js +3 -0
- package/src/server/routes.js +15 -1
- package/src/server/scope-endpoint.js +105 -0
- package/src/setup/agent-setup.js +28 -10
- package/src/view/live-client.js +253 -6
- package/src/view/scope.js +231 -0
- package/src/view/style.css +42 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Preview alias and per-version URL patterns
|
|
2
|
+
|
|
3
|
+
Reference shape for the three URL kinds this blueprint mandates. Every value with `<...>` is a placeholder the operator fills; no real hostname appears here.
|
|
4
|
+
|
|
5
|
+
## The three URL kinds
|
|
6
|
+
|
|
7
|
+
Given a Worker named `<worker-name>` on an account whose workers.dev subdomain is `<subdomain>` and a production custom domain of `<production-hostname>`, the Deploy Adapter's `deploy status` surfaces three URLs:
|
|
8
|
+
|
|
9
|
+
| Kind | URL pattern | Changes on | Purpose |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| Per-version-id URL | `<version-prefix>-<worker-name>.<subdomain>.workers.dev` | Every upload assigns a new one; the URL for a given version is permanent | Pin a change-review link to a specific version id; never rots |
|
|
12
|
+
| Stable preview alias URL | `<alias>-<worker-name>.<subdomain>.workers.dev` | Never (points at a moving target: the newest-of-`<alias>`) | Persistent shareable review surface for stakeholders |
|
|
13
|
+
| Production URL, custom-domain branch | `<production-hostname>` (paired with `workers_dev = false`) | Only on an explicit `promote` workflow | User-facing traffic when a custom domain owns production |
|
|
14
|
+
| Production URL, workers.dev-only branch | `<worker-name>.<subdomain>.workers.dev` (paired with `workers_dev = true`) | Only on an explicit `promote` workflow | User-facing traffic when no custom domain is mapped |
|
|
15
|
+
|
|
16
|
+
The alias string is operator-chosen; `main` is the common default when the operator wants "the newest of the main branch" as the persistent preview. A project running multiple long-lived branches can allocate additional aliases (`staging`, `next`), each fixed to the newest-of-that-branch upload.
|
|
17
|
+
|
|
18
|
+
## Discovering the workers.dev subdomain
|
|
19
|
+
|
|
20
|
+
The `<subdomain>` segment in every workers.dev URL above is a per-account value the operator does not name in `wrangler.toml`. `wrangler whoami` prints the account id and email but does NOT print the subdomain; there is no wrangler 4.x CLI verb that returns it. The vendor's REST API returns it:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
GET https://api.cloudflare.com/client/v4/accounts/<accountId>/workers/subdomain
|
|
24
|
+
Authorization: Bearer <cloudflareApiToken>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Response:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{ "result": { "subdomain": "<subdomain>" }, "success": true, "errors": [], "messages": [] }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The Deploy Adapter's `resolveSubdomain()` verb (TAC-1301) wraps this call; every URL-assembly path calls the verb on boot and caches the value for the process's lifetime. A project that would rather pin the value in configuration sets an unambiguous `WORKERS_DEV_SUBDOMAIN` env var and the resolver returns that value ahead of the API call; the discovery path is the fallback so a fresh checkout works with no environment tuning.
|
|
34
|
+
|
|
35
|
+
## The upload verb
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
wrangler versions upload --preview-alias <alias>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Uploads the current build as a new version. Assigns a version id and returns two URLs on stdout: the per-version-id URL (unique per upload, permanent) and the stable preview alias URL (fixed to `<alias>`, always pointing at the version this upload just produced). The uploaded version does NOT serve production traffic; only the promote verb changes production.
|
|
42
|
+
|
|
43
|
+
`versions upload` refuses on a Worker that has not been deployed at least once (`You cannot upload a new version of a Worker that does not yet exist. Please run the 'deploy' command first.`). The first-time-per-Worker bootstrap uses `wrangler deploy --secrets-file <path>`; see `bootstrap-vs-steady-state.md`. Every subsequent ship rides `versions upload`.
|
|
44
|
+
|
|
45
|
+
## The promote verb
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
wrangler versions deploy <version-id>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Routes production traffic to the named version id. Requires the version id to be present in `wrangler versions list`. The blueprint's promote workflow calls this verb through the Deploy Adapter after resolving the version id from either the input `versionId` field or, when the input is empty, from the newest-of-alias resolution described below.
|
|
52
|
+
|
|
53
|
+
## Newest-of-alias resolution
|
|
54
|
+
|
|
55
|
+
The promote workflow's optional `versionId` input defaults to newest-of-`<alias>` when empty. There is no wrangler CLI verb that maps an alias string to a version id directly (`wrangler versions view` accepts a version UUID as a positional argument only; it does not accept an alias). The working resolution reads the versions list as JSON and filters by the alias annotation:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
wrangler versions list --json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Each item carries `id`, `number`, `metadata.created_on`, and `annotations.workers/alias` (when the version was uploaded with `--preview-alias <alias>`). Newest-of-`<alias>` is the item whose `annotations.workers/alias` equals `<alias>` with the greatest `metadata.created_on`. A worked shape:
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
// Inside the Deploy Adapter's default vendor binding.
|
|
65
|
+
const listOut = await runVendorCli(['versions', 'list', '--json']);
|
|
66
|
+
const versions = JSON.parse(listOut.stdout);
|
|
67
|
+
const forAlias = versions
|
|
68
|
+
.filter(v => v.annotations?.['workers/alias'] === alias)
|
|
69
|
+
.sort((a, b) => Date.parse(b.metadata.created_on) - Date.parse(a.metadata.created_on));
|
|
70
|
+
if (forAlias.length === 0) {
|
|
71
|
+
throw new Error(`DEPLOY_ALIAS_UNKNOWN: no version behind alias '${alias}'`);
|
|
72
|
+
}
|
|
73
|
+
return forAlias[0].id;
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
A project that runs a single alias (the common `main`-only case) can drop the filter and pick the newest of any; the semantic is identical when only one alias exists.
|
|
77
|
+
|
|
78
|
+
## The rollback verb
|
|
79
|
+
|
|
80
|
+
Rollback IS a promote of a prior version id. The blueprint's Deploy Adapter surfaces one path (`promoteVersion`); the vendor's convenience shortcut `wrangler rollback [<version-id>]` is optional operator documentation for a break-glass path that bypasses the deploy-log record and the served-surface verifier. Do not use it as the recorded ship path.
|
|
81
|
+
|
|
82
|
+
## Reader notes
|
|
83
|
+
|
|
84
|
+
- The exact `<version-prefix>` string the vendor uses in the per-version-id URL is a vendor implementation detail; the operator does not name it. The URL is the whole shape; the adapter's `describeVersion` returns it verbatim.
|
|
85
|
+
- The alias URL host segment is a function of the alias string; the alias `main` produces the host segment `main-<worker-name>`. The Preview URL Resolver (TAC-1303) refuses an alias whose assembled host would equal the production URL host; a manifest that would collapse them refuses to load. Collapse is only reachable on the workers.dev-only production branch where alias `<worker-name>` (or any string that assembles to the same host) would collide with the production host; the branch's default alias `main` is safe by inspection.
|
|
86
|
+
- The production URL is derived from the wrangler manifest's `routes`/`route`/`workers_dev` block. When a custom domain owns production, the vendor's own custom-hostname primitive is what binds the domain to the Worker; the blueprint does not itself provision DNS or issue TLS. When `workers_dev = true` owns production, the URL is `<worker-name>.<subdomain>.workers.dev` and the resolver's `resolveSubdomain()` fills the `<subdomain>` segment.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# wrangler.toml shape sample
|
|
2
|
+
|
|
3
|
+
Reference shape for a Worker that reads a KV namespace, a D1 database, a set of secrets, and serves static assets behind an auth gate. Every value with `<...>` is a placeholder the project fills. Two production-URL branches are shown, custom-domain and workers.dev-only; pick one, delete the other.
|
|
4
|
+
|
|
5
|
+
```toml
|
|
6
|
+
# repo-root wrangler.toml
|
|
7
|
+
name = "<worker-name>"
|
|
8
|
+
main = "src/worker.ts"
|
|
9
|
+
compatibility_date = "2026-08-01"
|
|
10
|
+
compatibility_flags = ["nodejs_compat"]
|
|
11
|
+
|
|
12
|
+
# --- production routing: pick ONE branch ---
|
|
13
|
+
|
|
14
|
+
# Branch A: custom domain owns production (workers_dev = false so production
|
|
15
|
+
# is unambiguously the custom domain; the preview alias URL still lives on
|
|
16
|
+
# workers.dev regardless).
|
|
17
|
+
routes = [
|
|
18
|
+
{ pattern = "<production-hostname>", custom_domain = true }
|
|
19
|
+
]
|
|
20
|
+
workers_dev = false
|
|
21
|
+
|
|
22
|
+
# Branch B (workers.dev-only, no custom domain): production is
|
|
23
|
+
# <worker-name>.<subdomain>.workers.dev, where <subdomain> is the account's
|
|
24
|
+
# workers.dev subdomain. Discover it via the CF REST API (see
|
|
25
|
+
# `preview-alias-shape.md` under `Discovering the workers.dev subdomain`);
|
|
26
|
+
# do NOT hardcode.
|
|
27
|
+
# workers_dev = true
|
|
28
|
+
# (delete the `routes = [...]` block above when using Branch B)
|
|
29
|
+
|
|
30
|
+
# --- static-assets binding ---
|
|
31
|
+
# The assets pipeline serves any file under `directory` at its file-path
|
|
32
|
+
# BEFORE the Worker's fetch handler runs. That means `./public/notes.html`
|
|
33
|
+
# is reachable at `/notes` and at `/notes.html` from the edge cache with
|
|
34
|
+
# no code executing. On any Worker with an auth gate, that ordering
|
|
35
|
+
# silently bypasses the gate for any collision path.
|
|
36
|
+
#
|
|
37
|
+
# `run_worker_first` is the switch that inverts the ordering: for every
|
|
38
|
+
# listed path (glob-matched), the fetch handler runs FIRST and the assets
|
|
39
|
+
# pipeline is a fallback. Set it whenever the Worker gates access to
|
|
40
|
+
# anything a static-file path could shadow.
|
|
41
|
+
[assets]
|
|
42
|
+
directory = "./public"
|
|
43
|
+
binding = "ASSETS"
|
|
44
|
+
run_worker_first = [
|
|
45
|
+
"/api/*",
|
|
46
|
+
"/<auth-gated-path-1>",
|
|
47
|
+
"/<auth-gated-path-2>"
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
# --- non-secret vars (populated into env.<NAME> at runtime) ---
|
|
51
|
+
[vars]
|
|
52
|
+
LOG_LEVEL = "info"
|
|
53
|
+
|
|
54
|
+
# --- KV namespace binding (id filled by the operator; not a secret) ---
|
|
55
|
+
[[kv_namespaces]]
|
|
56
|
+
binding = "SESSION_KV"
|
|
57
|
+
id = "<kv-namespace-id>"
|
|
58
|
+
|
|
59
|
+
# --- D1 database binding ---
|
|
60
|
+
[[d1_databases]]
|
|
61
|
+
binding = "APP_DB"
|
|
62
|
+
database_name = "<database-name>"
|
|
63
|
+
database_id = "<database-id>"
|
|
64
|
+
|
|
65
|
+
# --- Secret bindings: NO DECLARATION BLOCK IN THIS FILE ---
|
|
66
|
+
# wrangler 4.x has no top-level `[secrets]` key. Secret binding NAMES
|
|
67
|
+
# are declared implicitly by the Worker code reading `env.<NAME>`; the
|
|
68
|
+
# vendor's pre-flight refuses `wrangler deploy` when a referenced secret
|
|
69
|
+
# has not been set on the target Worker. See `bootstrap-vs-steady-state.md`
|
|
70
|
+
# for the first-deploy path (`wrangler deploy --secrets-file <tmp>`) and
|
|
71
|
+
# the steady-state path (`wrangler secret put <NAME>` from CI).
|
|
72
|
+
#
|
|
73
|
+
# A project that wants a human-readable manifest of required secrets can
|
|
74
|
+
# maintain one in a README section or a project-owned `SECRETS.md`; that
|
|
75
|
+
# manifest is intent-documentation and is NOT vendor-parsed.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Reader notes
|
|
79
|
+
|
|
80
|
+
- `name`, `main`, and `compatibility_date` are the three top-level keys the manifest loader (TAC-1302) refuses to load without. `compatibility_date` must match `\d{4}-\d{2}-\d{2}`.
|
|
81
|
+
- Every binding name referenced from `src/worker.ts` (through `env.SESSION_KV.get(...)`, `env.APP_DB.prepare(...)`, `env.<SECRET_NAME>`, and so on) must appear as a declaration key in this file OR as a secret set on the Worker via the vendor's secret-set flow. The manifest loader's binding-usage scan refuses the build with `WRANGLER_BINDING_UNDECLARED` when a non-secret binding is missing; the vendor's pre-flight refuses the deploy when a secret is missing on the target.
|
|
82
|
+
- **Assets-binding auth-gate discipline (security-class).** The `[assets] run_worker_first` list is load-bearing whenever the Worker gates access to any path that a static file under `directory` could shadow. Without it, a request to `/<gated-path>` is answered from `./public/<gated-path>.html` (if the file exists) BEFORE the fetch handler runs; the auth check is silently bypassed. The manifest loader flags a manifest that declares `[assets]` and a fetch handler with an auth middleware but no `run_worker_first` entries covering the middleware's protected routes; a project unsure which routes to list defaults to `run_worker_first = ["/*"]` and accepts serving static assets only under `not_found_handling`.
|
|
83
|
+
- Secret binding VALUES never appear in this file. There is no `[secrets]` block in wrangler 4.x; the vendor treats every `env.<NAME>` reference from Worker code as an implicit binding declaration and enforces its presence at deploy time. Values arrive on the Worker via the vendor's secret-set flow (see `bootstrap-vs-steady-state.md`) sourced from the project's secrets contract (see the `security-secrets-management` blueprint at slug `security-secrets-management`, or the equivalent project-authored pipeline).
|
|
84
|
+
- `routes` and `workers_dev` together declare the production URL. Branch A (`workers_dev = false` with a `routes = [...]` custom-domain entry) is the shape for projects that own a custom domain. Branch B (`workers_dev = true`, no `routes`) is the shape for greenfield workers.dev-only projects; production is then `<worker-name>.<subdomain>.workers.dev` and the Deploy Adapter discovers `<subdomain>` at boot rather than hardcoding it.
|
|
85
|
+
- Build-provenance values (`versionSha`, `builtAt`, `ciRunUrl`) are NOT declared here. They are injected into the built bundle by the `build-and-upload` workflow (see `assets/ci-workflows/build-and-upload.yml.md`). The `versionSha` served on the health probe is the git commit sha (`github.sha`), NOT the vendor-assigned version UUID; see `served-surface-probes.md` for the distinction.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "deploy-cloudflare-workers",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"category": "deploy",
|
|
5
|
+
"contributions": [
|
|
6
|
+
{ "id": "deploy-cloudflare-workers-REQ-001", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-001.json" },
|
|
7
|
+
{ "id": "deploy-cloudflare-workers-REQ-002", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-002.json" },
|
|
8
|
+
{ "id": "deploy-cloudflare-workers-REQ-003", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-003.json" },
|
|
9
|
+
{ "id": "deploy-cloudflare-workers-REQ-004", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-004.json" },
|
|
10
|
+
{ "id": "deploy-cloudflare-workers-REQ-005", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-005.json" },
|
|
11
|
+
{ "id": "deploy-cloudflare-workers-REQ-006", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-006.json" },
|
|
12
|
+
{ "id": "deploy-cloudflare-workers-REQ-007", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-007.json" },
|
|
13
|
+
{ "id": "deploy-cloudflare-workers-REQ-008", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-008.json" },
|
|
14
|
+
{ "id": "deploy-cloudflare-workers-REQ-009", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-009.json" },
|
|
15
|
+
{ "id": "deploy-cloudflare-workers-REQ-010", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-010.json" },
|
|
16
|
+
{ "id": "deploy-cloudflare-workers-REQ-011", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-011.json" },
|
|
17
|
+
{ "id": "deploy-cloudflare-workers-REQ-012", "kind": "req", "path": "requirements/deploy-cloudflare-workers-req-012.json" },
|
|
18
|
+
{ "id": "deploy-cloudflare-workers-US-12101", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12101.json" },
|
|
19
|
+
{ "id": "deploy-cloudflare-workers-US-12102", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12102.json" },
|
|
20
|
+
{ "id": "deploy-cloudflare-workers-US-12103", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12103.json" },
|
|
21
|
+
{ "id": "deploy-cloudflare-workers-US-12104", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12104.json" },
|
|
22
|
+
{ "id": "deploy-cloudflare-workers-US-12105", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12105.json" },
|
|
23
|
+
{ "id": "deploy-cloudflare-workers-US-12106", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12106.json" },
|
|
24
|
+
{ "id": "deploy-cloudflare-workers-US-12107", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12107.json" },
|
|
25
|
+
{ "id": "deploy-cloudflare-workers-US-12108", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12108.json" },
|
|
26
|
+
{ "id": "deploy-cloudflare-workers-US-12109", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12109.json" },
|
|
27
|
+
{ "id": "deploy-cloudflare-workers-US-12110", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12110.json" },
|
|
28
|
+
{ "id": "deploy-cloudflare-workers-US-12111", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12111.json" },
|
|
29
|
+
{ "id": "deploy-cloudflare-workers-US-12112", "kind": "us", "path": "user-stories/deploy-cloudflare-workers-us-12112.json" },
|
|
30
|
+
{ "id": "TAC-1301-deploy-cloudflare-workers-deploy-adapter", "kind": "tac", "path": "tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json" },
|
|
31
|
+
{ "id": "TAC-1302-deploy-cloudflare-workers-wrangler-manifest", "kind": "tac", "path": "tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json" },
|
|
32
|
+
{ "id": "TAC-1303-deploy-cloudflare-workers-preview-url-resolver", "kind": "tac", "path": "tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json" },
|
|
33
|
+
{ "id": "TAC-1304-deploy-cloudflare-workers-promote-gate", "kind": "tac", "path": "tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json" },
|
|
34
|
+
{ "id": "TAC-1305-deploy-cloudflare-workers-served-surface-verifier", "kind": "tac", "path": "tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json" },
|
|
35
|
+
{ "id": "TAC-1306-deploy-cloudflare-workers-deploy-ci-workflows", "kind": "tac", "path": "tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json" },
|
|
36
|
+
{
|
|
37
|
+
"id": "ADR-1301-deploy-cloudflare-workers-deployment-target",
|
|
38
|
+
"kind": "adr",
|
|
39
|
+
"path": "adrs/adr-1301-deploy-cloudflare-workers-deployment-target.json",
|
|
40
|
+
"scope": "global",
|
|
41
|
+
"topic": "deploymentTarget"
|
|
42
|
+
},
|
|
43
|
+
{ "id": "ADR-1302-deploy-cloudflare-workers-default-vendor", "kind": "adr", "path": "adrs/adr-1302-deploy-cloudflare-workers-default-vendor.json" },
|
|
44
|
+
{ "id": "ADR-1303-deploy-cloudflare-workers-preview-vs-production", "kind": "adr", "path": "adrs/adr-1303-deploy-cloudflare-workers-preview-vs-production.json" },
|
|
45
|
+
{ "id": "ADR-1304-deploy-cloudflare-workers-rollback-is-promote", "kind": "adr", "path": "adrs/adr-1304-deploy-cloudflare-workers-rollback-is-promote.json" },
|
|
46
|
+
{ "id": "ADR-1305-deploy-cloudflare-workers-dev-mode-drift", "kind": "adr", "path": "adrs/adr-1305-deploy-cloudflare-workers-dev-mode-drift.json" }
|
|
47
|
+
]
|
|
48
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-1301-deploy-cloudflare-workers-deployment-target",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "The project's deployment target is an artefact-upload + explicit-promote model, versions addressable at stable preview URLs, one adapter as the sole vendor caller",
|
|
8
|
+
"context": "Every non-trivial project ships to a running target. The failure modes accumulate the same way secrets ones do: an ad-hoc deploy shell script on a laptop, a CI step that pushes to production on every merge, a rollback path nobody has tested since the last incident, a review URL that is production itself. A single-source-of-truth model addresses the root cause: one manifest, one adapter, one upload verb, one promote verb, one served-surface verifier. This topic is scoped as a project-level global because a composing blueprint that holds a different opinion on the deployment shape (a container-image-per-commit + rolling-deploy blueprint, a monolithic-deploy blueprint, a serverless-function-per-endpoint blueprint) needs to conflict here and be resolved by the operator.",
|
|
9
|
+
"decision": "The project's deployment target is an artefact-upload + explicit-promote model. The Deploy Adapter (TAC-1301) is the sole caller of the deploy vendor; the wrangler manifest (TAC-1302) is the sole declaration of the deploy shape. Every merge to the main branch uploads a version through the adapter's `uploadVersion` verb and produces two addressable URLs (a per-version-id URL and a stable preview alias URL). Production only changes when the operator runs the `promote` workflow, which invokes `promoteVersion` on the adapter with a resolved version id. Rollback is a promote of a prior version id. Every promote runs the Served-surface Verifier against the production URL and fails the release on any probe breach. The vendor is pluggable; the interface is not. The default vendor is named in ADR-1302; alternatives supersede this ADR at the project level.",
|
|
10
|
+
"consequences": "One place to change vendors, one place to audit the deploy trail, one place to enforce the promote-is-explicit invariant. The manifest becomes a piece of documentation the project maintains as part of its normal change flow, which is the intended cost. Preview URLs and production URLs are always distinct and both discoverable through the adapter's `deploy status` verb. Composition with a blueprint that would import a vendor deploy SDK directly or that would auto-promote on merge conflicts here by design; the operator supersedes with a project-level ADR that either accepts the composed blueprint's shape or restates this one's.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Merge-to-production (coupled upload + promote)",
|
|
14
|
+
"summary": "Every merge to main deploys straight to production; no distinct promote step; the vendor CLI's coupled `deploy` verb is called from the merge workflow.",
|
|
15
|
+
"reasonNotChosen": "This is the default state most small projects drift into and the state this blueprint exists to end. Every merge is a production act; a bad merge is a bad release; rollback is a git revert followed by a second merge-to-production; the review URL is production itself. Fine for a solo project on a low-stakes surface; the wrong default for anything with users. A project that legitimately wants the coupled shape can still apply this blueprint, restate ADR-1301 with a project-level ADR that permits coupled deploy, and set the `promote` workflow to trigger on merge. The blueprint does not fight the operator; it makes the default a distinct step."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Per-commit container image + rolling deploy on a Kubernetes-shaped target",
|
|
19
|
+
"summary": "Every merge builds a container image tagged by commit; a controller rolls the image out to a fleet of replicas; canary and progressive delivery layer above.",
|
|
20
|
+
"reasonNotChosen": "A legitimate shape at a larger scale; wrong altitude for the rcf-lite tier this blueprint targets. The trade against the artefact-upload + promote model is running the controller and the fleet; the payoff is finer-grained rollout control. A project outgrowing the artefact-upload model authors a project-level ADR that adopts a container-oriented target and applies a different deploy blueprint (a future `deploy-k8s-service` blueprint would sit at that altitude)."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "Vendor-committed opinionated blueprint (Cloudflare Workers only, at the contract layer)",
|
|
24
|
+
"summary": "Ship the blueprint tied to Cloudflare Workers at the contract layer; the manifest is `wrangler.toml`, the CLI is `wrangler`, the URLs are workers.dev, no adapter port.",
|
|
25
|
+
"reasonNotChosen": "Locks the project to a vendor at the blueprint layer, which the doctrine of round-2 refuses (vendor default belongs at ADR-1302, contract belongs here). A composing blueprint or a project that wants a different vendor can only escape by removing this blueprint. Splitting the contract from the default keeps both moves available; the adapter port shape (see TAC-1301) is what makes a vendor swap a project-side ADR change plus an adapter reimplementation, not a blueprint change."
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
29
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
30
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-1302-deploy-cloudflare-workers-default-vendor",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "The default deployment vendor is Cloudflare Workers via the wrangler CLI",
|
|
8
|
+
"context": "ADR-1301 fixes the contract; a project applying this blueprint still needs a working default vendor on day one. The rcf-lite tier this blueprint targets is small greenfield projects: a single Worker or a small handful, one small team or one solo operator, no ops team standing by. A default vendor for that tier should ship with zero infrastructure to run, a small operational footprint, a runtime whose primitive shape (edge-runtime request handler, bound resources) fits the artefact-upload + promote model, and a CLI that surfaces the upload/promote/list primitives the adapter needs. Larger deployments will supersede this decision with a different vendor; the point of a default is that day one works.",
|
|
9
|
+
"decision": "The default deployment vendor is Cloudflare Workers accessed through the `wrangler` CLI. The Deploy Adapter's default backing binding shells to `wrangler versions upload --preview-alias <alias>` for `uploadVersion`, `wrangler versions deploy <versionId>` for `promoteVersion`, `wrangler versions list` for `listVersions`, and the vendor's alias-lookup verb for `resolveNewestOfMain`. The wrangler manifest at the repo root is `wrangler.toml` (or `wrangler.jsonc` at operator preference). The preview URL patterns are the vendor's public URL contracts (per-version-id hostnames and per-alias hostnames on the workers.dev subdomain, or their custom-hostname mapped equivalents). The default is chosen because the zero-infrastructure floor is real for the target tier: no cluster to run, no image registry to feed, per-request cold-start amortised by the vendor, and the primitives ship the artefact-upload + promote split as first-class CLI verbs. Projects that outgrow the default supersede this ADR with a project-level ADR selecting a different deploy vendor and swap the adapter's vendor binding.",
|
|
10
|
+
"consequences": "The project ships with a working deploy flow on day one and does not force an ops decision before the first commit. The Cloudflare account, an account id, and an API token become first-class pieces of operator state the project manages (the token scoped to the account with the minimum verbs the adapter uses; the token is a secret bound through the secrets contract, not committed anywhere). The Worker runtime shape (edge-runtime, request-scoped, no long-lived process) is now a constraint the Worker's own code respects; a project that outgrows that shape supersedes ADR-1302 with a different vendor and adapts the code to the new runtime. Composition with a vendor-specific superseding blueprint (a project-authored `deploy-fly-io` blueprint minted on demand, a future `deploy-vercel` or `deploy-k8s-service` blueprint) is a project-level ADR change and a vendor-binding swap; the ADR-1301 contract stays intact.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Fly.io",
|
|
14
|
+
"summary": "Deploy a Docker image to a Fly.io app; the vendor binding shells to `flyctl deploy`.",
|
|
15
|
+
"reasonNotChosen": "A genuinely different vendor shape (persistent VMs, per-region deploy control, a Docker image as the artefact). A reasonable pair candidate when a project wants a general-purpose deploy target with more control over the runtime. Not the day-one default because the edge-runtime shape of Cloudflare Workers fits more of the estate's actual live projects; a future `deploy-fly-io` blueprint mints on demand and composes cleanly through the ADR-1301 contract with a project-level supersede on ADR-1302."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Vercel",
|
|
19
|
+
"summary": "Deploy through Vercel's preview + production deploy model; the vendor binding shells to `vercel deploy` and `vercel promote`.",
|
|
20
|
+
"reasonNotChosen": "Vercel's preview-vs-production shape maps well onto the ADR-1301 contract. Reserved as a natural future blueprint on demand for projects that want Vercel's Next.js-first surface. Not the day-one default because the estate's live footprint is on Cloudflare Workers; a project on Vercel supersedes ADR-1302 and adapts the binding."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "AWS Lambda / Google Cloud Run / other cloud-native FaaS",
|
|
24
|
+
"summary": "Deploy a function image or bundle to a hyperscaler's FaaS surface; the vendor binding shells to the cloud SDK's deploy verb.",
|
|
25
|
+
"reasonNotChosen": "Ties the project to one cloud at the deploy layer; the doctrine of ADR-1301 keeps the contract vendor-agnostic on purpose. Excellent choice for a project already committed to one cloud and using its identity model for deploy authentication; a project-level ADR supersede is the intended path."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "Self-hosted VPS + a Docker Compose stack",
|
|
29
|
+
"summary": "SSH to a VPS and run `docker compose pull && docker compose up -d`; no vendor account, no per-request billing.",
|
|
30
|
+
"reasonNotChosen": "The self-hosted shape does not fit the artefact-upload + promote model without additional plumbing (a bespoke version-store, a bespoke promote step, a bespoke rollback path). A legitimate ecosystem choice for a project that wants full self-hosted control; a future `deploy-docker-compose-vps` blueprint would live at a different altitude and would not need to be `accountBound` at all."
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
34
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
35
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-1303-deploy-cloudflare-workers-preview-vs-production",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "Preview URLs (per-version-id + stable alias) and production URL are distinct addressable surfaces; the promote step is what changes which one production maps to",
|
|
8
|
+
"context": "The failure mode this ADR closes is the collapsed URL: a project where the reviewer of a merged change and the visitor to the deployed application look at the same URL. When the preview surface and the production surface are the same string, every merge is a production act, review is what happens after users notice, and rollback is a second merge landing before enough users notice. The vendor's own primitive shape supports keeping them distinct: every uploaded version has a permanent per-version-id URL and a mutable stable-alias URL that can be pointed at the newest-of-main; production is the mapped custom domain (or the workers.dev production host) whose current version id changes only on an explicit deploy verb.",
|
|
9
|
+
"decision": "The blueprint mandates three URL kinds per Worker, all distinct hostnames, all discoverable through the Deploy Adapter's `deploy status` verb: (1) a per-VERSION-ID URL, unique per upload, permanent, useful for pinning a change-review link; (2) a STABLE PREVIEW ALIAS URL fixed to an operator-chosen alias string (the common default is `main`), always resolving to the newest-of-main uploaded version, useful for a persistent stakeholder-shareable link; (3) a PRODUCTION URL, declared under the wrangler manifest's `route`/`routes`/`workers_dev`/custom-domain stanza, changing which version it maps to only when a `promote` workflow runs. The Preview URL Resolver (TAC-1303) assembles the first two and refuses any alias string whose assembled host segment equals the production URL's host segment. The manifest loader refuses a wrangler config whose production route resolves to the preview alias URL host with `DEPLOY_URL_COLLAPSED`.",
|
|
10
|
+
"consequences": "Reviewers and stakeholders reach the newest-of-main at a persistent, memorable URL that never masquerades as production. Users hit production at a hostname that only changes version behind an explicit operator act. Change-review links are pinnable to a specific version id and never rot. The trade is one Worker now surfaces three URLs the project has to reason about (and the operator has to explain once when a new engineer joins); the payoff is the class of leaks-through-collapsed-URL is closed by the manifest's own validation, not by discipline.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Preview alias URL and production URL as the same string with a query parameter switching mode",
|
|
14
|
+
"summary": "One hostname, `?preview=1` flips to the newest-of-main; production is the default response.",
|
|
15
|
+
"reasonNotChosen": "The query-parameter mode is trivially forgettable and does not survive a link-shortener, an email quoting, or a browser that strips query strings. The class of leak this ADR closes reopens exactly when the operator hands out the URL to someone who does not add the query parameter."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Per-version URLs only; no stable alias URL",
|
|
19
|
+
"summary": "Every upload gets a URL; the stable-shareable-review-URL story is 'copy the URL from the CI run'.",
|
|
20
|
+
"reasonNotChosen": "The per-version-id URL is essential for pinning a change; the stable alias URL is essential for a persistent 'the latest' surface stakeholders can bookmark. Shipping only the first fails the persistent-review use case; the vendor's own primitive supports both cheaply so both ship."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "Preview URL = production URL under a special header",
|
|
24
|
+
"summary": "One hostname; the vendor routes to the newest-of-main when a specific request header is set (a signed cookie, an auth-only bypass).",
|
|
25
|
+
"reasonNotChosen": "Same class as the query-parameter option: the mode is invisible to the URL string and non-portable across link handoffs. It also couples the preview surface to an auth model that may not exist on day one."
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
29
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
30
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-1304-deploy-cloudflare-workers-rollback-is-promote",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "Rollback is a promote of a prior version id; the promote workflow is the sole ship-to-production path",
|
|
8
|
+
"context": "Rollback is one of the two shapes a project reaches for at exactly the wrong time to discover drift. The failure mode: a project ships a rollback verb once during setup, does not exercise it under pressure until an incident lands, then discovers the rollback path diverged from the ship path (a different vendor call, a different auth path, a different secret binding, a stale probe set, no served-surface verify). Framing rollback as a promote of a known-good version id keeps the audit shape uniform, the auth path identical, the probe set the same, and the served-surface verifier applied unconditionally.",
|
|
9
|
+
"decision": "Rolling production back to a previous version is not a distinct code path in the project. It is the same `promote` workflow triggered with the prior version id supplied as the `versionId` input. `listVersions` on the Deploy Adapter exposes the history with the currently-serving id marked so the operator can pick a known-good id. The deploy-log record for a rollback carries the same fields as any promote (`promotedVersionId`, `promotedBy`, `previousVersionId`, `promotedAt`). The vendor's own convenience verbs (a `wrangler rollback` shortcut when the default vendor is in play) are optional operator documentation; at the blueprint's contract level any such shortcut is a promote of a prior version id and the audit trail is identical. A project-authored `rollback` script that bypasses the Promote Gate, the deploy log, or the Served-surface Verifier is not permitted.",
|
|
10
|
+
"consequences": "One ship path serves every ship-to-production act: the merge-to-main promote, the hotfix promote of an out-of-sequence upload, the rollback promote of a prior version id. The audit trail is uniform; a query for 'every production change in the last week' answers the same way for a forward promote and a rollback. The trade: an operator responding to an incident with `wrangler rollback` at the command line (rather than through the `promote` workflow) bypasses the deploy-log record and the served-surface verifier; the blueprint documents this in the guide as a break-glass path that is not the recorded ship path.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Bespoke `rollback` workflow with its own trigger and its own vendor call",
|
|
14
|
+
"summary": "A `rollback` workflow file separate from `promote`; triggers on manual dispatch; calls `wrangler rollback` (or the vendor's rollback verb) directly.",
|
|
15
|
+
"reasonNotChosen": "Two ship paths is one too many. The bespoke workflow drifts from the promote path over time (different secret binding, different logging, different probe set) and the drift is invisible until an incident. Keeping rollback on the same path as promote closes the class."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Rollback as a git revert + normal promote of the reverted-merge upload",
|
|
19
|
+
"summary": "Rollback is not a distinct verb at all; the operator opens a revert PR, waits for the merge, waits for the `build-and-upload` run, then promotes the new upload.",
|
|
20
|
+
"reasonNotChosen": "The revert flow works for cases where the incident is not urgent and the correct answer is a proper revert. It fails the incident case where the fix is a known-good version id from thirty minutes ago that the operator wants serving now. The chosen model handles both cases on one path."
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
24
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-1305-deploy-cloudflare-workers-dev-mode-drift",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "Local dev-mode is an emulator; ship-gate coverage never counts a dev-mode probe as a deployed observation",
|
|
8
|
+
"context": "Every deploy vendor of any complexity ships a local development mode: a process that runs on the developer's laptop and answers requests at a loopback port, approximating the deployed runtime. The failure mode is the emulator being treated as authoritative for ship coverage: an AC scoped `deployed` gets a test case that hits the dev-mode URL and passes there because the emulator handles the case, then fails on production because the emulator's regular-expression engine differs, or its static-assets ordering differs, or its binding-emulation surface differs. The RCF `deployed` scope tag exists precisely to close this class; the blueprint has to make the class refuseable at the coverage-gate layer.",
|
|
9
|
+
"decision": "The blueprint's `deployed`-scope ACs are only satisfied by a probe against an actual uploaded Worker: a per-version-id URL, a preview alias URL, or the production URL. A test case whose runtime target URL matches the dev-mode local pattern (`http://localhost:*`, `http://127.0.0.1:*`, or the vendor's local emulator loopback host) is refused as coverage for a `deployed`-scope AC with the code `DEPLOY_DEV_MODE_INADMISSIBLE`. Dev-mode remains a valid target for `runtime`-scope and `library`-scope ACs, and for developer-loop iteration; it is inadmissible for `deployed`-scope coverage. The project's runtime-verify catalogue names the dev-mode drift classes the operator authoring probes must be aware of; the catalogue is kept current against the vendor's release notes.",
|
|
10
|
+
"consequences": "The ship gate refuses a class of easy-to-hit false positives that would otherwise let a passing local test carry a broken deployed AC to green. The trade: some kinds of probe (a startup-behaviour probe, a code-shape probe) that would run cheaply against dev-mode now cost a full upload-plus-preview to satisfy the deployed-scope AC; the blueprint's guide names those as the classes the operator authors as `runtime`-scope ACs against dev-mode where the deployed observation adds no signal, and as `deployed`-scope ACs against the preview URL where it does.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Treat dev-mode as fully-authoritative when a project-declared fidelity flag is set",
|
|
14
|
+
"summary": "The project declares 'dev-mode is close enough for our purposes' and the coverage gate accepts dev-mode probes for deployed-scope ACs.",
|
|
15
|
+
"reasonNotChosen": "The flag becomes an escape hatch that quietly disables the gate the RCF `deployed` scope tag exists to enforce. When the emulator drifts in a way the project does not yet know about, the flag masks it. If a project genuinely wants dev-mode as its runtime target, it authors those ACs as `runtime`-scope and does not need the flag."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Warn on dev-mode probes for deployed-scope ACs; do not refuse",
|
|
19
|
+
"summary": "The coverage gate emits a warning and counts the coverage anyway.",
|
|
20
|
+
"reasonNotChosen": "Warnings that do not refuse become noise. The class of drift this ADR closes is precisely the class where a project shipped for months on a warning nobody read. Refusing at the gate keeps the invariant load-bearing."
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
24
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
25
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-001",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "The repo-root wrangler manifest is the single declaration of the Worker's deploy shape",
|
|
5
|
+
"description": "A `wrangler.toml` (or the equivalent `wrangler.jsonc`) at the repo root is the sole declaration of the Worker's deploy shape. It carries the Worker `name`, the entrypoint `main`, a pinned `compatibility_date`, any `compatibility_flags`, and every non-secret binding the runtime needs: KV namespaces, D1 databases, R2 buckets, Durable Object namespaces, static-assets binding, and non-secret environment variables. Secret bindings are NOT declared in the manifest (wrangler 4.x has no `[secrets]` block, no `secrets.required[]` list, and no empty-value binding entry for secrets); the vendor treats every env-accessor reference from Worker code as an implicit secret binding declaration and enforces its presence at deploy time by refusing `wrangler deploy` when a referenced secret has not been set on the target. Nothing outside the manifest may configure a non-secret binding at deploy time; a non-secret binding referenced from Worker code but absent from the manifest is a build refusal (an implicitly-referenced secret is caught by the vendor's own pre-deploy refusal instead). No secret VALUE ever appears in the manifest.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "A scattered deploy configuration is the failure mode this blueprint exists to end. If bindings are declared in ad-hoc scripts, CI environment blocks, or hand-edited before deploy, no one knows what the deployed Worker actually looks like. A single manifest at a known path makes the deploy shape legible to humans, to CI gates, to the vendor's deploy step, and to review of every change that touches a binding.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:01-manifest"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-002",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "One deploy adapter module is the sole caller of the deploy CLI",
|
|
5
|
+
"description": "The project exposes a single Deploy Adapter module that wraps the deploy CLI (the vendor's `wrangler` binary when the default vendor is in play). Every path that uploads a version, promotes a version, lists versions, or reads deploy state routes through this module. Nothing else in the project source tree spawns the CLI, imports the vendor SDK, or issues an HTTP call to the vendor's deploy API. The module exposes a fixed named-verb surface (`uploadVersion`, `promoteVersion`, `listVersions`, `resolveNewestOfMain`, `describeVersion`) that is stable across the blueprint's major version.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "A vendor-neutral adapter port keeps the project free to change deploy vendors under the same interface. It also removes the class of bugs where two paths call the CLI with different flags and drift silently. One module, one boundary, one behaviour. The blueprint mandates the CONTRACT and defaults the VENDOR; a project that supersedes the default vendor swaps only the adapter's implementation.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:02-adapter-boundary"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-003",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Every merge to the main branch uploads a Worker version addressable at a stable preview alias URL",
|
|
5
|
+
"description": "The CI pipeline runs a build+upload step on every merge to the main branch. The step produces an uploaded Worker version (the vendor's version primitive) with two addressable URLs recorded on the CI run: a permanent per-version-id URL, and a stable ALIAS URL fixed to the string `main` (or an equivalent operator-chosen alias) that always resolves to the newest-of-main upload. The alias URL never changes across re-uploads; the version-id URL is unique per upload and durable. The uploaded version does NOT serve production traffic; it exists only at the preview URLs until an explicit promote step runs. The version id and both URLs are surfaced in the CI run output.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Uploading a version on merge without promoting it separates two concerns most teams tangle at their cost: 'is the artefact built and cleanly uploaded' from 'is production serving it now'. The stable preview alias URL is the shape a stakeholder can bookmark and share; the version-id URL is the shape a change-review workflow references verbatim. Both matter and both come from the same upload step.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:03-preview-upload"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-004",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Production only changes via an explicit promote step; no upload path auto-promotes",
|
|
5
|
+
"description": "Production traffic serving is a distinct action from uploading a version. No CI path may take an uploaded version and route production traffic to it as a side effect of the upload. Production only changes when a Promote step runs and names the version id to serve. The promote step is authored as a separate CI workflow triggered by explicit operator action (`workflow_dispatch` on GitHub Actions or the equivalent manual-trigger primitive on other CI platforms). The promote workflow accepts one input: `versionId` (empty defaults to the newest-of-main resolved from the preview alias); every promote emits a structured record naming the version id promoted, the operator principal that triggered the workflow, the previously-serving version id, and the timestamp.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "The failure mode this ends: a merge lands, the CI pipeline deploys straight to production, and nobody notices the bad release until the phone rings. Decoupling upload from promote makes the ship-to-production act a first-class human decision. The default of newest-of-main keeps the promote fast for the common case; the explicit versionId keeps rollback and hotfix promotes on the same code path.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:04-explicit-promote"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-005",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Preview and production surfaces are addressable at distinct URLs both discoverable from the manifest",
|
|
5
|
+
"description": "The deployed application is reachable at two distinct kinds of URL: a PREVIEW surface (per-version alias URLs and per-version-id URLs, both provided by the vendor at upload time on the workers.dev subdomain) and a PRODUCTION surface (a route or custom domain declared in `wrangler.toml` under a `route`/`routes`/`workers_dev` block, or a mapped custom hostname). A `deploy status` verb on the Deploy Adapter surfaces both URL kinds for the current state without requiring an operator to consult the vendor dashboard. The preview alias URL and the production URL are never the same string; a project that would collapse them into one URL is a misconfiguration the adapter refuses.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Two URLs, two purposes. The preview URL is where a change lives before promote, where stakeholder review happens, where end-to-end probes hit the newest-of-main. The production URL is where users hit the promoted version. Collapsing them is the failure mode where reviewing a change means reviewing production; keeping them distinct is what makes the promote step meaningful.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:05-url-model"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-006",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Secret bindings resolve through the project's secrets contract, never plaintext in the wrangler manifest",
|
|
5
|
+
"description": "Every secret the Worker reads at runtime is referenced implicitly through the runtime's env accessor (in the default JS/TS Worker, `env.<NAME>`); wrangler 4.x has no `[secrets]` block, no `secrets.required[]` list, and no empty-value binding entry for secrets, and the vendor treats every such env-accessor reference from Worker code as an implicit secret binding declaration, refusing `wrangler deploy` when a referenced secret has not been set on the target. Each such name is populated on the deploy target through the vendor's own secret-set flow (first-deploy via `wrangler deploy --secrets-file <tmp>`, steady-state via `wrangler secret put <NAME>`; see `assets/wrangler-samples/bootstrap-vs-steady-state.md`). The value is sourced from the project's secrets contract (as fixed by the `security-secrets-management` blueprint at slug `security-secrets-management` when applied, or by the equivalent project-authored contract). No secret VALUE ever lives in `wrangler.toml`, in a committed environment file, in a CI variable readable outside the promote job, or in the CI run's captured logs. A CI-side redactor scrubs any log line that would emit a resolved secret value.",
|
|
6
|
+
"category": "security",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Secrets in deploy config is one of the two shapes of leak this blueprint refuses (the other is production auto-promote). Declaring bindings by name only forces the value to arrive through a controlled channel and keeps the manifest safe to review in a PR. The blueprint mandates the CONTRACT (values arrive through the secrets pipeline); the vendor default binds through `wrangler secret put`.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:06-secrets-boundary"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-007",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "A build-and-upload CI workflow runs on every merge to the main branch and records the uploaded version id",
|
|
5
|
+
"description": "A CI workflow named `build-and-upload` (or the project's chosen equivalent) triggers on `push` to the main branch (and on any linear-history proxy the project uses). It checks the tree out, installs dependencies at the pinned versions, runs the project's build step, then invokes the Deploy Adapter's `uploadVersion` verb naming the operator-chosen preview alias string. On success it writes the uploaded version id, the version-id URL, and the preview alias URL to the CI run's job summary and to a structured output the promote workflow reads. The workflow authenticates to the vendor through named CI secrets (a vendor API token and a vendor account id); the token is scoped to the Worker's account and never appears in any log line.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "The build-and-upload workflow is the mechanism half of REQ-003: every merge produces an uploaded, addressable version, without touching production. Making the version id and URLs discoverable in the CI run output is what makes the promote step's `newest-of-main` default computable and what makes the change reviewable at the preview URL by anyone with the CI run link.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:07-ci-build-upload"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-008",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "A promote CI workflow runs on explicit manual trigger and accepts an optional versionId input",
|
|
5
|
+
"description": "A CI workflow named `promote` (or the project's chosen equivalent) triggers only on manual operator action (`workflow_dispatch` on GitHub Actions or the equivalent explicit-trigger primitive on other CI platforms). It accepts one input field `versionId`: when supplied, the workflow promotes that exact version; when blank, the workflow calls the Deploy Adapter's `resolveNewestOfMain` verb to look up the current version id behind the preview alias and promotes THAT. It then invokes `promoteVersion` on the Deploy Adapter and, on success, invokes the served-surface verifier (REQ-010) before declaring the run successful. The workflow authenticates through the same named vendor CI secrets as `build-and-upload` and emits a structured record of the promote for the deploy log.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "One workflow for both cases keeps the promote path narrow and reviewable. The empty-input default answers the common case (ship what merged); the explicit-id input answers hotfix promotes and rollbacks without a second code path. Every promote runs through the same served-surface verifier gate so no promote can quietly ship a broken version.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:08-ci-promote"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-009",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Rollback is a promote of a prior version id; the promote workflow is the sole ship-to-production path",
|
|
5
|
+
"description": "Rolling production back to a previous version is not a distinct code path in the project's deploy tooling. It is the same `promote` workflow (REQ-008) triggered with the prior version id supplied as the `versionId` input. The prior version id is discoverable by calling the Deploy Adapter's `listVersions` verb, which returns the recent history with the currently-serving id marked. A project may surface a `wrangler rollback` shortcut in operator documentation for convenience, but at the contract level the shortcut is a promote of the second-most-recent version id and the audit trail records it the same way. No project-authored `rollback` verb bypasses the promote workflow's structured record or the post-promote verifier.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Two ship paths is one too many. If rollback has its own bespoke script, the script drifts from the promote path in exactly the moments an incident is the wrong time to discover drift. Framing rollback as a promote of a known-good version id keeps the ship path narrow, the audit shape uniform, and the post-promote verifier applied unconditionally.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:09-rollback"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
18
|
+
}
|