rcf-lite 0.21.0 → 0.23.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 +36 -0
- package/bin/rcf.js +13 -2
- package/blueprints/application-account-settings/CHANGELOG.md +12 -0
- package/blueprints/application-account-settings/README.md +114 -0
- package/blueprints/application-account-settings/blueprint.json +234 -0
- package/blueprints/application-account-settings/contributions/adrs/adr-2601-application-account-settings-capability-vocabulary.json +20 -0
- package/blueprints/application-account-settings/contributions/adrs/adr-2602-application-account-settings-security-surface-shape.json +20 -0
- package/blueprints/application-account-settings/contributions/adrs/adr-2603-application-account-settings-theme-persistence.json +20 -0
- package/blueprints/application-account-settings/contributions/adrs/adr-2604-application-account-settings-reauth-window.json +20 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-001.json +18 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-002.json +18 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-003.json +18 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-004.json +18 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-005.json +18 -0
- package/blueprints/application-account-settings/contributions/requirements/application-account-settings-req-006.json +18 -0
- package/blueprints/application-account-settings/contributions/tacs/tac-2601-application-account-settings-shell.json +41 -0
- package/blueprints/application-account-settings/contributions/tacs/tac-2602-application-account-settings-capability-discovery.json +28 -0
- package/blueprints/application-account-settings/contributions/tacs/tac-2603-application-account-settings-hosted-ui-bridge.json +35 -0
- package/blueprints/application-account-settings/contributions/tacs/tac-2604-application-account-settings-session-store.json +40 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25101.json +34 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25102.json +27 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25103.json +27 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25104.json +27 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25105.json +33 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25106.json +27 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25107.json +27 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25108.json +27 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25109.json +33 -0
- package/blueprints/application-account-settings/contributions/user-stories/application-account-settings-us-25110.json +27 -0
- package/blueprints/application-account-settings/docs/topics.md +50 -0
- package/blueprints/application-account-settings/guide/application-account-settings.md +30 -0
- package/blueprints/application-account-settings/probe-packs/application-account-settings.pack.mjs +246 -0
- package/blueprints/application-admin-console/docs/topics.md +9 -0
- package/blueprints/application-api-rest/docs/topics.md +10 -1
- package/blueprints/application-charts/docs/topics.md +9 -0
- package/blueprints/application-dashboard/docs/topics.md +9 -0
- package/blueprints/application-datatable/docs/topics.md +9 -0
- package/blueprints/application-empty-error-states/CHANGELOG.md +9 -0
- package/blueprints/application-empty-error-states/README.md +88 -0
- package/blueprints/application-empty-error-states/blueprint.json +119 -0
- package/blueprints/application-empty-error-states/contributions/adrs/adr-2301-application-empty-error-states-status-contract.json +25 -0
- package/blueprints/application-empty-error-states/contributions/adrs/adr-2302-application-empty-error-states-stack-trace-visibility.json +25 -0
- package/blueprints/application-empty-error-states/contributions/adrs/adr-2303-application-empty-error-states-offline-strategy.json +25 -0
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-001.json +18 -0
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-002.json +18 -0
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-003.json +18 -0
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-004.json +18 -0
- package/blueprints/application-empty-error-states/contributions/requirements/application-empty-error-states-req-005.json +18 -0
- package/blueprints/application-empty-error-states/contributions/tacs/tac-2301-application-empty-error-states-state-machine.json +46 -0
- package/blueprints/application-empty-error-states/contributions/tacs/tac-2302-application-empty-error-states-recovery-router.json +36 -0
- package/blueprints/application-empty-error-states/contributions/tacs/tac-2303-application-empty-error-states-offline-buffer.json +40 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22101.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22102.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22103.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22104.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22105.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22106.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22107.json +29 -0
- package/blueprints/application-empty-error-states/contributions/user-stories/application-empty-error-states-us-22108.json +29 -0
- package/blueprints/application-empty-error-states/docs/topics.md +55 -0
- package/blueprints/application-empty-error-states/guide/application-empty-error-states.md +50 -0
- package/blueprints/application-empty-error-states/probe-packs/application-empty-error-states.pack.mjs +284 -0
- package/blueprints/application-error-handling/docs/topics.md +9 -0
- package/blueprints/application-file-upload/CHANGELOG.md +9 -0
- package/blueprints/application-file-upload/README.md +85 -0
- package/blueprints/application-file-upload/blueprint.json +114 -0
- package/blueprints/application-file-upload/contributions/adrs/adr-2401-application-file-upload-transport.json +25 -0
- package/blueprints/application-file-upload/contributions/adrs/adr-2402-application-file-upload-accepted-set.json +25 -0
- package/blueprints/application-file-upload/contributions/adrs/adr-2403-application-file-upload-virus-scan.json +25 -0
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +18 -0
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +18 -0
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +18 -0
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +18 -0
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +18 -0
- package/blueprints/application-file-upload/contributions/tacs/tac-2401-application-file-upload-input.json +46 -0
- package/blueprints/application-file-upload/contributions/tacs/tac-2402-application-file-upload-transport.json +47 -0
- package/blueprints/application-file-upload/contributions/tacs/tac-2403-application-file-upload-progress-announcer.json +46 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23101.json +28 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23102.json +28 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23103.json +29 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23104.json +28 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23105.json +29 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23106.json +28 -0
- package/blueprints/application-file-upload/contributions/user-stories/application-file-upload-us-23107.json +28 -0
- package/blueprints/application-file-upload/docs/topics.md +60 -0
- package/blueprints/application-file-upload/guide/application-file-upload.md +48 -0
- package/blueprints/application-file-upload/probe-packs/application-file-upload.pack.mjs +238 -0
- package/blueprints/application-forms-wizard/CHANGELOG.md +9 -0
- package/blueprints/application-forms-wizard/README.md +102 -0
- package/blueprints/application-forms-wizard/blueprint.json +120 -0
- package/blueprints/application-forms-wizard/contributions/adrs/adr-2501-application-forms-wizard-navigation.json +25 -0
- package/blueprints/application-forms-wizard/contributions/adrs/adr-2502-application-forms-wizard-save-and-return.json +25 -0
- package/blueprints/application-forms-wizard/contributions/adrs/adr-2503-application-forms-wizard-step-indicator.json +25 -0
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +18 -0
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +18 -0
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +18 -0
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +18 -0
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +18 -0
- package/blueprints/application-forms-wizard/contributions/tacs/tac-2501-application-forms-wizard-task-list.json +46 -0
- package/blueprints/application-forms-wizard/contributions/tacs/tac-2502-application-forms-wizard-error-summary.json +40 -0
- package/blueprints/application-forms-wizard/contributions/tacs/tac-2503-application-forms-wizard-draft-store.json +40 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24101.json +28 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24102.json +29 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24103.json +28 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24104.json +29 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24105.json +28 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24106.json +28 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24107.json +28 -0
- package/blueprints/application-forms-wizard/contributions/user-stories/application-forms-wizard-us-24108.json +29 -0
- package/blueprints/application-forms-wizard/docs/topics.md +51 -0
- package/blueprints/application-forms-wizard/guide/application-forms-wizard.md +48 -0
- package/blueprints/application-forms-wizard/probe-packs/application-forms-wizard.pack.mjs +233 -0
- package/blueprints/application-notifications-in-app/docs/topics.md +9 -0
- package/blueprints/application-onboarding-tour/CHANGELOG.md +12 -0
- package/blueprints/application-onboarding-tour/README.md +77 -0
- package/blueprints/application-onboarding-tour/blueprint.json +164 -0
- package/blueprints/application-onboarding-tour/contributions/adrs/adr-2701-application-onboarding-tour-dismissal-policy.json +20 -0
- package/blueprints/application-onboarding-tour/contributions/adrs/adr-2702-application-onboarding-tour-completion-store-shape.json +20 -0
- package/blueprints/application-onboarding-tour/contributions/adrs/adr-2703-application-onboarding-tour-checklist-anchor.json +20 -0
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-001.json +18 -0
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-002.json +18 -0
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-003.json +18 -0
- package/blueprints/application-onboarding-tour/contributions/requirements/application-onboarding-tour-req-004.json +18 -0
- package/blueprints/application-onboarding-tour/contributions/tacs/tac-2701-application-onboarding-tour-step-runner.json +41 -0
- package/blueprints/application-onboarding-tour/contributions/tacs/tac-2702-application-onboarding-tour-checklist-slot.json +35 -0
- package/blueprints/application-onboarding-tour/contributions/tacs/tac-2703-application-onboarding-tour-completion-store.json +34 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26101.json +27 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26102.json +27 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26103.json +27 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26104.json +27 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26105.json +27 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26106.json +27 -0
- package/blueprints/application-onboarding-tour/contributions/user-stories/application-onboarding-tour-us-26107.json +27 -0
- package/blueprints/application-onboarding-tour/docs/topics.md +50 -0
- package/blueprints/application-onboarding-tour/guide/application-onboarding-tour.md +59 -0
- package/blueprints/application-onboarding-tour/probe-packs/application-onboarding-tour.pack.mjs +231 -0
- package/blueprints/application-spa/docs/topics.md +11 -2
- package/blueprints/delivery-ci-workflows/docs/topics.md +10 -1
- package/blueprints/deploy-cloudflare-workers/CHANGELOG.md +69 -0
- package/blueprints/deploy-cloudflare-workers/README.md +12 -0
- package/blueprints/deploy-cloudflare-workers/blueprint.json +234 -36
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/probes/assets-manifest-scan.mjs +207 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-013.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-014.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12113.json +36 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12114.json +27 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12115.json +27 -0
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +11 -2
- package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +25 -0
- package/blueprints/email-smtp-resend/docs/topics.md +10 -1
- package/blueprints/jobs-background/CHANGELOG.md +16 -0
- package/blueprints/jobs-background/README.md +105 -0
- package/blueprints/jobs-background/blueprint.json +149 -0
- package/blueprints/jobs-background/contributions/adrs/adr-3101-jobs-background-model.json +27 -0
- package/blueprints/jobs-background/contributions/adrs/adr-3102-jobs-background-scheduler-mode.json +25 -0
- package/blueprints/jobs-background/contributions/adrs/adr-3103-jobs-background-requires-applied-capabilities.json +25 -0
- package/blueprints/jobs-background/contributions/adrs/adr-3104-jobs-background-timeout-floor.json +25 -0
- package/blueprints/jobs-background/contributions/probes/apply-time-override.mjs +95 -0
- package/blueprints/jobs-background/contributions/probes/apply-time-refusal.mjs +82 -0
- package/blueprints/jobs-background/contributions/probes/event-secrecy.mjs +69 -0
- package/blueprints/jobs-background/contributions/probes/fake-clock-cron.mjs +65 -0
- package/blueprints/jobs-background/contributions/probes/probe-utils.mjs +91 -0
- package/blueprints/jobs-background/contributions/probes/retry-and-fail.mjs +65 -0
- package/blueprints/jobs-background/contributions/probes/run-apply-time-override.mjs +10 -0
- package/blueprints/jobs-background/contributions/probes/run-apply-time-refusal.mjs +11 -0
- package/blueprints/jobs-background/contributions/probes/run-event-secrecy.mjs +11 -0
- package/blueprints/jobs-background/contributions/probes/run-fake-clock-cron.mjs +11 -0
- package/blueprints/jobs-background/contributions/probes/run-retry-and-fail.mjs +11 -0
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-001.json +18 -0
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-002.json +18 -0
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-003.json +18 -0
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-004.json +18 -0
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-005.json +18 -0
- package/blueprints/jobs-background/contributions/requirements/jobs-background-req-006.json +18 -0
- package/blueprints/jobs-background/contributions/tacs/tac-3101-jobs-background-job-definition.json +50 -0
- package/blueprints/jobs-background/contributions/tacs/tac-3102-jobs-background-scheduler.json +50 -0
- package/blueprints/jobs-background/contributions/tacs/tac-3103-jobs-background-run-log.json +49 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30101.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30102.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30103.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30104.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30105.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30106.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30107.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30108.json +25 -0
- package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30109.json +25 -0
- package/blueprints/jobs-background/docs/topics.md +62 -0
- package/blueprints/jobs-background/guide/jobs-background.md +147 -0
- package/blueprints/messaging-queue-cloudflare/CHANGELOG.md +15 -0
- package/blueprints/messaging-queue-cloudflare/README.md +125 -0
- package/blueprints/messaging-queue-cloudflare/blueprint.json +67 -0
- package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3001-messaging-queue-cloudflare-adapter.json +30 -0
- package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3002-messaging-queue-cloudflare-delivery-semantics.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3003-messaging-queue-cloudflare-max-attempts-floor.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3004-messaging-queue-cloudflare-batch-defaults.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/event-secrecy.mjs +137 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/probe-utils.mjs +82 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/producer-facade-ready.mjs +35 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/publish-to-delivery.mjs +94 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs +54 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/retry-and-dlq.mjs +87 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/run-event-secrecy.mjs +5 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/run-producer-facade-ready.mjs +11 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/run-publish-to-delivery.mjs +5 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/run-real-account-concurrency-smoke.mjs +5 -0
- package/blueprints/messaging-queue-cloudflare/contributions/probes/run-retry-and-dlq.mjs +5 -0
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-001.json +18 -0
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-002.json +18 -0
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-003.json +18 -0
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-004.json +18 -0
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-005.json +18 -0
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +18 -0
- package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3001-messaging-queue-cloudflare-producer-facade.json +56 -0
- package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3002-messaging-queue-cloudflare-consumer-registration.json +40 -0
- package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3003-messaging-queue-cloudflare-event-sink.json +39 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29101.json +34 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29102.json +34 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29103.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29104.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29105.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29106.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29107.json +25 -0
- package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29108.json +25 -0
- package/blueprints/messaging-queue-cloudflare/docs/topics.md +62 -0
- package/blueprints/messaging-queue-cloudflare/guide/messaging-queue-cloudflare.md +110 -0
- package/blueprints/object-storage-s3/CHANGELOG.md +13 -0
- package/blueprints/object-storage-s3/README.md +108 -0
- package/blueprints/object-storage-s3/blueprint.json +72 -0
- package/blueprints/object-storage-s3/contributions/adrs/adr-2901-object-storage-s3-adapter.json +30 -0
- package/blueprints/object-storage-s3/contributions/adrs/adr-2902-object-storage-s3-presigned-ttl-floor.json +25 -0
- package/blueprints/object-storage-s3/contributions/adrs/adr-2903-object-storage-s3-multipart-threshold.json +25 -0
- package/blueprints/object-storage-s3/contributions/adrs/adr-2904-object-storage-s3-contract.json +25 -0
- package/blueprints/object-storage-s3/contributions/probes/event-secrecy.mjs +103 -0
- package/blueprints/object-storage-s3/contributions/probes/facade-round-trip.mjs +43 -0
- package/blueprints/object-storage-s3/contributions/probes/multipart-upload.mjs +84 -0
- package/blueprints/object-storage-s3/contributions/probes/presigned-url.mjs +101 -0
- package/blueprints/object-storage-s3/contributions/probes/probe-utils.mjs +85 -0
- package/blueprints/object-storage-s3/contributions/probes/put-get-round-trip.mjs +84 -0
- package/blueprints/object-storage-s3/contributions/probes/r2-real-account-smoke.mjs +64 -0
- package/blueprints/object-storage-s3/contributions/probes/run-event-secrecy.mjs +4 -0
- package/blueprints/object-storage-s3/contributions/probes/run-facade-round-trip.mjs +10 -0
- package/blueprints/object-storage-s3/contributions/probes/run-multipart-upload.mjs +4 -0
- package/blueprints/object-storage-s3/contributions/probes/run-presigned-url.mjs +4 -0
- package/blueprints/object-storage-s3/contributions/probes/run-put-get-round-trip.mjs +7 -0
- package/blueprints/object-storage-s3/contributions/probes/run-r2-real-account-smoke.mjs +4 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-001.json +18 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-002.json +18 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-003.json +18 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-004.json +18 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-005.json +18 -0
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +18 -0
- package/blueprints/object-storage-s3/contributions/tacs/tac-2901-object-storage-s3-facade.json +57 -0
- package/blueprints/object-storage-s3/contributions/tacs/tac-2902-object-storage-s3-multipart-uploader.json +36 -0
- package/blueprints/object-storage-s3/contributions/tacs/tac-2903-object-storage-s3-event-sink.json +36 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28101.json +34 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28102.json +43 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28103.json +25 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28104.json +34 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28105.json +25 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28106.json +34 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28107.json +34 -0
- package/blueprints/object-storage-s3/contributions/user-stories/object-storage-s3-us-28108.json +34 -0
- package/blueprints/object-storage-s3/docs/topics.md +64 -0
- package/blueprints/object-storage-s3/guide/object-storage-s3.md +207 -0
- package/blueprints/observability-essentials/docs/topics.md +10 -1
- package/blueprints/observability-logging/CHANGELOG.md +4 -0
- package/blueprints/observability-logging/README.md +3 -0
- package/blueprints/observability-logging/blueprint.json +3 -2
- package/blueprints/observability-logging/docs/topics.md +9 -0
- package/blueprints/observability-probe-endpoints/docs/topics.md +10 -1
- package/blueprints/persistence-data-d1/docs/topics.md +10 -1
- package/blueprints/persistence-data-postgres/CHANGELOG.md +12 -0
- package/blueprints/persistence-data-postgres/README.md +101 -0
- package/blueprints/persistence-data-postgres/blueprint.json +80 -0
- package/blueprints/persistence-data-postgres/contributions/adrs/adr-2801-persistence-data-postgres-driver.json +30 -0
- package/blueprints/persistence-data-postgres/contributions/adrs/adr-2802-persistence-data-postgres-migration-shape.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/adrs/adr-2803-persistence-data-postgres-runner-mode.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/adrs/adr-2804-persistence-data-postgres-recovery.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/adrs/adr-2805-persistence-data-postgres-connection-pool-posture.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/probes/facade-round-trip.mjs +56 -0
- package/blueprints/persistence-data-postgres/contributions/probes/migration-apply.mjs +75 -0
- package/blueprints/persistence-data-postgres/contributions/probes/pool-posture-smoke.mjs +56 -0
- package/blueprints/persistence-data-postgres/contributions/probes/prepared-statement-scan.mjs +186 -0
- package/blueprints/persistence-data-postgres/contributions/probes/probe-utils.mjs +76 -0
- package/blueprints/persistence-data-postgres/contributions/probes/recovery-restore-round-trip.mjs +173 -0
- package/blueprints/persistence-data-postgres/contributions/probes/run-facade-round-trip.mjs +10 -0
- package/blueprints/persistence-data-postgres/contributions/probes/run-migration-apply.mjs +10 -0
- package/blueprints/persistence-data-postgres/contributions/probes/run-pool-posture-smoke.mjs +9 -0
- package/blueprints/persistence-data-postgres/contributions/probes/run-prepared-statement-scan.mjs +10 -0
- package/blueprints/persistence-data-postgres/contributions/probes/run-recovery-restore-round-trip.mjs +9 -0
- package/blueprints/persistence-data-postgres/contributions/probes/run-transaction-atomicity.mjs +10 -0
- package/blueprints/persistence-data-postgres/contributions/probes/transaction-atomicity.mjs +79 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-001.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-002.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-004.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-005.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-006.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-007.json +18 -0
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2801-persistence-data-postgres-facade.json +58 -0
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2802-persistence-data-postgres-migration-runner.json +40 -0
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2803-persistence-data-postgres-transaction-helper.json +35 -0
- package/blueprints/persistence-data-postgres/contributions/tacs/tac-2804-persistence-data-postgres-recovery-runner.json +40 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27101.json +34 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27102.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27103.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27104.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27105.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27106.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27107.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27108.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27109.json +25 -0
- package/blueprints/persistence-data-postgres/contributions/user-stories/persistence-data-postgres-us-27110.json +25 -0
- package/blueprints/persistence-data-postgres/docs/topics.md +66 -0
- package/blueprints/persistence-data-postgres/guide/persistence-data-postgres.md +172 -0
- package/blueprints/persistence-data-sqlite/docs/topics.md +10 -1
- package/blueprints/security-auth-clerk/CHANGELOG.md +4 -0
- package/blueprints/security-auth-clerk/README.md +3 -0
- package/blueprints/security-auth-clerk/blueprint.json +147 -30
- package/blueprints/security-auth-clerk/docs/topics.md +10 -1
- package/blueprints/security-auth-keycloak/CHANGELOG.md +4 -0
- package/blueprints/security-auth-keycloak/README.md +3 -0
- package/blueprints/security-auth-keycloak/blueprint.json +182 -37
- package/blueprints/security-auth-keycloak/docs/topics.md +10 -1
- package/blueprints/security-auth-magic-link/CHANGELOG.md +4 -0
- package/blueprints/security-auth-magic-link/README.md +3 -0
- package/blueprints/security-auth-magic-link/blueprint.json +159 -33
- package/blueprints/security-auth-magic-link/docs/topics.md +10 -1
- package/blueprints/security-auth-oauth2/CHANGELOG.md +4 -0
- package/blueprints/security-auth-oauth2/README.md +3 -0
- package/blueprints/security-auth-oauth2/blueprint.json +158 -32
- package/blueprints/security-auth-oauth2/docs/topics.md +10 -1
- package/blueprints/security-secrets-management/CHANGELOG.md +11 -0
- package/blueprints/security-secrets-management/blueprint.json +2 -1
- package/blueprints/security-secrets-management/docs/topics.md +10 -1
- package/fixtures/canary-manifest.json +9 -9
- package/package.json +1 -1
- package/rcf/code-nodes/cn-134.json +13 -0
- package/rcf/code-nodes/cn-135.json +12 -0
- package/rcf/code-nodes/cn-136.json +13 -0
- package/rcf/code-nodes/cn-137.json +13 -0
- package/rcf/code-nodes/cn-138.json +12 -0
- package/rcf/code-nodes/cn-139.json +12 -0
- package/rcf/code-nodes/cn-140.json +13 -0
- package/rcf/code-nodes/cn-141.json +13 -0
- package/rcf/code-nodes/cn-142.json +12 -0
- package/rcf/code-nodes/cn-143.json +13 -0
- package/rcf/code-nodes/cn-144.json +13 -0
- package/rcf/code-nodes/cn-145.json +12 -0
- package/rcf/code-nodes/cn-146.json +12 -0
- package/rcf/code-nodes/cn-147.json +13 -0
- package/rcf/code-nodes/cn-148.json +13 -0
- package/rcf/code-nodes/cn-149.json +12 -0
- package/rcf/code-nodes/cn-150.json +13 -0
- package/rcf/code-nodes/cn-151.json +13 -0
- package/rcf/code-nodes/cn-152.json +12 -0
- package/rcf/code-nodes/cn-153.json +12 -0
- package/rcf/code-nodes/cn-154.json +13 -0
- package/rcf/code-nodes/cn-155.json +14 -0
- package/rcf/code-nodes/cn-156.json +13 -0
- package/rcf/code-nodes/cn-157.json +13 -0
- package/rcf/code-nodes/cn-158.json +12 -0
- package/rcf/code-nodes/cn-159.json +13 -0
- package/rcf/code-nodes/cn-160.json +12 -0
- package/rcf/code-nodes/cn-161.json +12 -0
- package/rcf/code-nodes/cn-162.json +13 -0
- package/rcf/code-nodes/cn-163.json +12 -0
- package/rcf/code-nodes/cn-164.json +13 -0
- package/rcf/code-nodes/cn-165.json +12 -0
- package/rcf/code-nodes/cn-166.json +12 -0
- package/rcf/code-nodes/cn-167.json +12 -0
- package/rcf/code-nodes/cn-168.json +12 -0
- package/rcf/code-nodes/cn-169.json +12 -0
- package/rcf/code-nodes/cn-170.json +12 -0
- package/rcf/code-nodes/cn-171.json +12 -0
- package/rcf/code-nodes/cn-172.json +12 -0
- package/rcf/code-nodes/cn-173.json +12 -0
- package/rcf/code-nodes/cn-174.json +12 -0
- package/rcf/code-nodes/cn-175.json +13 -0
- package/rcf/code-nodes/cn-176.json +12 -0
- package/rcf/code-nodes/cn-177.json +12 -0
- package/rcf/code-nodes/cn-178.json +12 -0
- package/rcf/code-nodes/cn-179.json +12 -0
- package/rcf/code-nodes/cn-180.json +13 -0
- package/rcf/code-nodes/cn-181.json +12 -0
- package/rcf/code-nodes/cn-182.json +13 -0
- package/rcf/code-nodes/cn-183.json +12 -0
- package/rcf/code-nodes/cn-184.json +13 -0
- package/rcf/code-nodes/cn-185.json +12 -0
- package/rcf/code-nodes/cn-186.json +12 -0
- package/rcf/code-nodes/cn-200.json +14 -0
- package/rcf/code-nodes/cn-201.json +13 -0
- package/rcf/code-nodes/cn-202.json +14 -0
- package/rcf/code-nodes/cn-203.json +14 -0
- package/rcf/code-nodes/cn-204.json +13 -0
- package/rcf/code-nodes/cn-205.json +14 -0
- package/rcf/code-nodes/cn-206.json +14 -0
- package/rcf/code-nodes/cn-207.json +13 -0
- package/rcf/code-nodes/cn-208.json +14 -0
- package/rcf/code-nodes/cn-209.json +14 -0
- package/rcf/code-nodes/cn-210.json +13 -0
- package/rcf/code-nodes/cn-211.json +12 -0
- package/rcf/code-nodes/cn-212.json +12 -0
- package/rcf/code-nodes/cn-213.json +12 -0
- package/rcf/code-nodes/cn-214.json +15 -0
- package/rcf/code-nodes/cn-215.json +13 -0
- package/rcf/code-nodes/cn-216.json +14 -0
- package/rcf/code-nodes/cn-217.json +13 -0
- package/rcf/fbs/fbs-043.json +23 -0
- package/rcf/fbs/fbs-044.json +23 -0
- package/rcf/fbs/fbs-045.json +23 -0
- package/rcf/fbs/fbs-046.json +24 -0
- package/rcf/fbs/fbs-047.json +24 -0
- package/rcf/fbs/fbs-060.json +22 -0
- package/rcf/fbs/fbs-061.json +20 -0
- package/rcf/fbs/fbs-062.json +20 -0
- package/rcf/fbs/fbs-063.json +22 -0
- package/rcf/fbs/fbs-064.json +23 -0
- package/rcf/requirements/req-024.json +69 -0
- package/rcf/requirements/req-025.json +59 -0
- package/rcf/requirements/req-026.json +154 -0
- package/rcf/requirements/req-027.json +33 -0
- package/rcf/requirements/req-028.json +13 -0
- package/rcf/requirements/req-029.json +57 -0
- package/rcf/requirements/req-030.json +67 -0
- package/rcf/requirements/req-040.json +13 -0
- package/rcf/requirements/req-041.json +125 -0
- package/rcf/requirements/req-042.json +59 -0
- package/rcf/requirements/req-043.json +39 -0
- package/rcf/test-suites/ts-053.json +70 -0
- package/rcf/test-suites/ts-054.json +70 -0
- package/rcf/test-suites/ts-055.json +77 -0
- package/rcf/test-suites/ts-056.json +78 -0
- package/rcf/test-suites/ts-057.json +78 -0
- package/rcf/test-suites/ts-070.json +62 -0
- package/rcf/test-suites/ts-071.json +62 -0
- package/rcf/test-suites/ts-072.json +62 -0
- package/rcf/test-suites/ts-073.json +38 -0
- package/rcf/test-suites/ts-074.json +30 -0
- package/rcf/test-suites/ts-075.json +38 -0
- package/rcf/test-suites/ts-076.json +70 -0
- package/rcf/user-stories/us-2401.json +62 -0
- package/rcf/user-stories/us-2501.json +58 -0
- package/rcf/user-stories/us-2601.json +51 -0
- package/rcf/user-stories/us-2701.json +55 -0
- package/rcf/user-stories/us-2801.json +55 -0
- package/rcf/user-stories/us-2901.json +45 -0
- package/rcf/user-stories/us-2902.json +36 -0
- package/rcf/user-stories/us-3001.json +45 -0
- package/rcf/user-stories/us-4001.json +69 -0
- package/rcf/user-stories/us-4101.json +69 -0
- package/rcf/user-stories/us-4201.json +69 -0
- package/rcf/user-stories/us-4301.json +78 -0
- package/releases/releases.yaml +21 -1
- package/src/blueprint/apply.js +13 -1
- package/src/blueprint/capabilities.js +66 -2
- package/src/cli/blueprint.js +15 -1
|
@@ -1,48 +1,246 @@
|
|
|
1
1
|
{
|
|
2
2
|
"slug": "deploy-cloudflare-workers",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"category": "deploy",
|
|
5
5
|
"contributions": [
|
|
6
|
-
{
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
{
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
6
|
+
{
|
|
7
|
+
"id": "deploy-cloudflare-workers-REQ-001",
|
|
8
|
+
"kind": "req",
|
|
9
|
+
"path": "requirements/deploy-cloudflare-workers-req-001.json"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "deploy-cloudflare-workers-REQ-002",
|
|
13
|
+
"kind": "req",
|
|
14
|
+
"path": "requirements/deploy-cloudflare-workers-req-002.json"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "deploy-cloudflare-workers-REQ-003",
|
|
18
|
+
"kind": "req",
|
|
19
|
+
"path": "requirements/deploy-cloudflare-workers-req-003.json"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "deploy-cloudflare-workers-REQ-004",
|
|
23
|
+
"kind": "req",
|
|
24
|
+
"path": "requirements/deploy-cloudflare-workers-req-004.json"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "deploy-cloudflare-workers-REQ-005",
|
|
28
|
+
"kind": "req",
|
|
29
|
+
"path": "requirements/deploy-cloudflare-workers-req-005.json"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "deploy-cloudflare-workers-REQ-006",
|
|
33
|
+
"kind": "req",
|
|
34
|
+
"path": "requirements/deploy-cloudflare-workers-req-006.json"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "deploy-cloudflare-workers-REQ-007",
|
|
38
|
+
"kind": "req",
|
|
39
|
+
"path": "requirements/deploy-cloudflare-workers-req-007.json"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "deploy-cloudflare-workers-REQ-008",
|
|
43
|
+
"kind": "req",
|
|
44
|
+
"path": "requirements/deploy-cloudflare-workers-req-008.json"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "deploy-cloudflare-workers-REQ-009",
|
|
48
|
+
"kind": "req",
|
|
49
|
+
"path": "requirements/deploy-cloudflare-workers-req-009.json"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "deploy-cloudflare-workers-REQ-010",
|
|
53
|
+
"kind": "req",
|
|
54
|
+
"path": "requirements/deploy-cloudflare-workers-req-010.json"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "deploy-cloudflare-workers-REQ-011",
|
|
58
|
+
"kind": "req",
|
|
59
|
+
"path": "requirements/deploy-cloudflare-workers-req-011.json"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "deploy-cloudflare-workers-REQ-012",
|
|
63
|
+
"kind": "req",
|
|
64
|
+
"path": "requirements/deploy-cloudflare-workers-req-012.json"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "deploy-cloudflare-workers-US-12101",
|
|
68
|
+
"kind": "us",
|
|
69
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12101.json"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "deploy-cloudflare-workers-US-12102",
|
|
73
|
+
"kind": "us",
|
|
74
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12102.json"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "deploy-cloudflare-workers-US-12103",
|
|
78
|
+
"kind": "us",
|
|
79
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12103.json"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "deploy-cloudflare-workers-US-12104",
|
|
83
|
+
"kind": "us",
|
|
84
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12104.json"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "deploy-cloudflare-workers-US-12105",
|
|
88
|
+
"kind": "us",
|
|
89
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12105.json"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "deploy-cloudflare-workers-US-12106",
|
|
93
|
+
"kind": "us",
|
|
94
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12106.json"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "deploy-cloudflare-workers-US-12107",
|
|
98
|
+
"kind": "us",
|
|
99
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12107.json"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "deploy-cloudflare-workers-US-12108",
|
|
103
|
+
"kind": "us",
|
|
104
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12108.json"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "deploy-cloudflare-workers-US-12109",
|
|
108
|
+
"kind": "us",
|
|
109
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12109.json"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "deploy-cloudflare-workers-US-12110",
|
|
113
|
+
"kind": "us",
|
|
114
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12110.json"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "deploy-cloudflare-workers-US-12111",
|
|
118
|
+
"kind": "us",
|
|
119
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12111.json"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "deploy-cloudflare-workers-US-12112",
|
|
123
|
+
"kind": "us",
|
|
124
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12112.json"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "TAC-1301-deploy-cloudflare-workers-deploy-adapter",
|
|
128
|
+
"kind": "tac",
|
|
129
|
+
"path": "tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"id": "TAC-1302-deploy-cloudflare-workers-wrangler-manifest",
|
|
133
|
+
"kind": "tac",
|
|
134
|
+
"path": "tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"id": "TAC-1303-deploy-cloudflare-workers-preview-url-resolver",
|
|
138
|
+
"kind": "tac",
|
|
139
|
+
"path": "tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "TAC-1304-deploy-cloudflare-workers-promote-gate",
|
|
143
|
+
"kind": "tac",
|
|
144
|
+
"path": "tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"id": "TAC-1305-deploy-cloudflare-workers-served-surface-verifier",
|
|
148
|
+
"kind": "tac",
|
|
149
|
+
"path": "tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"id": "TAC-1306-deploy-cloudflare-workers-deploy-ci-workflows",
|
|
153
|
+
"kind": "tac",
|
|
154
|
+
"path": "tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json"
|
|
155
|
+
},
|
|
36
156
|
{
|
|
37
157
|
"id": "ADR-1301-deploy-cloudflare-workers-deployment-target",
|
|
38
158
|
"kind": "adr",
|
|
39
159
|
"path": "adrs/adr-1301-deploy-cloudflare-workers-deployment-target.json",
|
|
40
160
|
"scope": "global",
|
|
41
|
-
"topic": "deploymentTarget"
|
|
161
|
+
"topic": "deploymentTarget",
|
|
162
|
+
"standardsTraceClause": "generic enterprise practice"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "ADR-1302-deploy-cloudflare-workers-default-vendor",
|
|
166
|
+
"kind": "adr",
|
|
167
|
+
"path": "adrs/adr-1302-deploy-cloudflare-workers-default-vendor.json",
|
|
168
|
+
"standardsTraceClause": "generic enterprise practice"
|
|
42
169
|
},
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
170
|
+
{
|
|
171
|
+
"id": "ADR-1303-deploy-cloudflare-workers-preview-vs-production",
|
|
172
|
+
"kind": "adr",
|
|
173
|
+
"path": "adrs/adr-1303-deploy-cloudflare-workers-preview-vs-production.json",
|
|
174
|
+
"standardsTraceClause": "generic enterprise practice"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "ADR-1304-deploy-cloudflare-workers-rollback-is-promote",
|
|
178
|
+
"kind": "adr",
|
|
179
|
+
"path": "adrs/adr-1304-deploy-cloudflare-workers-rollback-is-promote.json",
|
|
180
|
+
"standardsTraceClause": "generic enterprise practice"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"id": "ADR-1305-deploy-cloudflare-workers-dev-mode-drift",
|
|
184
|
+
"kind": "adr",
|
|
185
|
+
"path": "adrs/adr-1305-deploy-cloudflare-workers-dev-mode-drift.json",
|
|
186
|
+
"standardsTraceClause": "generic enterprise practice"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "deploy-cloudflare-workers-REQ-013",
|
|
190
|
+
"kind": "req",
|
|
191
|
+
"path": "requirements/deploy-cloudflare-workers-req-013.json"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "deploy-cloudflare-workers-REQ-014",
|
|
195
|
+
"kind": "req",
|
|
196
|
+
"path": "requirements/deploy-cloudflare-workers-req-014.json"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "deploy-cloudflare-workers-US-12113",
|
|
200
|
+
"kind": "us",
|
|
201
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12113.json"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"id": "deploy-cloudflare-workers-US-12114",
|
|
205
|
+
"kind": "us",
|
|
206
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12114.json"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"id": "deploy-cloudflare-workers-US-12115",
|
|
210
|
+
"kind": "us",
|
|
211
|
+
"path": "user-stories/deploy-cloudflare-workers-us-12115.json"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"id": "ADR-1306-deploy-cloudflare-workers-spa-shape",
|
|
215
|
+
"kind": "adr",
|
|
216
|
+
"path": "adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json",
|
|
217
|
+
"recommendedDefault": true,
|
|
218
|
+
"elicited": false,
|
|
219
|
+
"standardsTraceClause": "Cloudflare Pages landing-page recommendation (2026-09-06)"
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"elicits": [
|
|
223
|
+
{
|
|
224
|
+
"id": "assets-directory",
|
|
225
|
+
"prompt": "Assets directory: the path (relative to the Worker source root) whose files Cloudflare serves at the edge as static assets under the Workers-with-static-assets shape. An empty answer keeps the bare-Worker shape (no [assets] block on the generated wrangler.toml). A non-empty answer emits [assets] directory = the answered path.",
|
|
226
|
+
"kind": "string",
|
|
227
|
+
"default": ""
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"id": "run-worker-first",
|
|
231
|
+
"prompt": "Run Worker first: whether the Worker fetch handler runs BEFORE static asset lookup for every request. True emits run_worker_first = true under the [assets] block (right for a SPA whose Worker owns arbitrary routing or whose auth middleware must gate every path). False (default) omits the field and lets Cloudflare's runtime serve a matching static asset before the Worker runs. Only meaningful when assets-directory is non-empty; the loader-side when-elicitedNonEmpty predicate is a mechanism follow-up.",
|
|
232
|
+
"kind": "boolean",
|
|
233
|
+
"default": false
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
"suggestedCompanions": [
|
|
237
|
+
{
|
|
238
|
+
"role": "logging",
|
|
239
|
+
"reason": "Every promote and every served-surface verify writes a structured deploy log record and a probe verdict; a logging companion supplies the record factory the deploy adapter and the verifier both call."
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"role": "errorHandling",
|
|
243
|
+
"reason": "A promote refusal (bad version id, verifier fail, mixed-shape wrangler manifest) constructs an internal error record; an error-handling companion supplies the record factory and the boundary at which the deploy adapter's refusals surface to the operator."
|
|
244
|
+
}
|
|
47
245
|
]
|
|
48
246
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-1306-deploy-cloudflare-workers-spa-shape",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.2.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "Workers-with-static-assets is the ratified SPA-on-Workers deploy shape; Pages is a documented alternative held for legacy projects only",
|
|
8
|
+
"context": "Cloudflare ships two shapes for browsing static assets in front of a Workers-tier deploy target: Cloudflare Pages (a workflow-shaped product with its own build pipeline and its own preview URL model) and Workers-with-static-assets (a wrangler.toml [assets] block declaring a directory the Cloudflare runtime serves at the edge). Cloudflare's own Pages landing page states, verbatim (fetched 2026-09-06): 'Workers supports most Pages use cases and offers a broader feature set. It is Cloudflare's primary platform for building applications. Start new projects with Workers.' The prior v1.1.0 blueprint blessed neither shape as the default; v1.1.0 taught the wrangler [assets] block in an asset sample but left the shape choice implicit. The T-0 round bumps the blueprint to v1.2.0 to close the gap: a rcf-lite project choosing SPA-on-Workers gets a single, ratified wrangler shape rather than a hand-rolled convention, and the ratified shape follows Cloudflare's own recommendation for new projects.",
|
|
9
|
+
"decision": "The blueprint blesses Workers-with-static-assets as the ratified SPA-on-Workers deploy shape (recommendedDefault true for new SPA projects). A project answering the elicited assets-directory parameter with a non-empty path emits an [assets] block on wrangler.toml whose directory value carries the elicited path; a project answering with an empty path keeps the bare-Worker shape (no [assets] block). The elicited run-worker-first (boolean, default false) surfaces the SPA fallback discipline: truthy answers emit run_worker_first = true under the [assets] block; falsy or unanswered answers omit the field, letting Cloudflare's runtime run asset lookup before the Worker fetch handler. The blueprint does not mint a Cloudflare Pages blueprint; a future deploy-cloudflare-pages-legacy sibling mints on demand only if a project cannot make the jump. Every existing v1.1.0 contribution carries through unchanged.",
|
|
10
|
+
"consequences": "One ratified shape lands on the shelf for greenfield SPA-on-Workers projects; the shape's standards trace is the Cloudflare Pages landing-page recommendation (2026-09-06 snapshot). The two new elicits become part of the operator surface at blueprint add: assets-directory names the static-assets root, run-worker-first names the SPA fallback discipline. A project generating both an [assets] block and a Pages-only pages_build_output_dir field is a mixed-shape drift the T-0 probe (assets-manifest-scan.mjs) refuses. A project on the legacy Pages shape stays on v1.1.0 semantics until it migrates; the guide's new Workers-with-static-assets section links Cloudflare's migrate-from-Pages walkthrough for projects that choose to jump. Future round-6 blueprints (T-1 KV, T-2 cron, T-3 DO, T-4 Access, T-5 Turnstile, T-6 rate-limiting) all compose on this shape via the shared cf-platform sample-app fixture.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Ship a Cloudflare Pages blueprint alongside deploy-cloudflare-workers",
|
|
14
|
+
"summary": "Mint a fresh deploy-cloudflare-pages blueprint that owns the Pages workflow surface (build pipeline, preview URLs, deploy hooks) and lets the operator pick shapes at apply.",
|
|
15
|
+
"reasonNotChosen": "Cloudflare's Pages landing page tells new projects to start with Workers. A Pages blueprint would ship a shape Cloudflare tells greenfield projects not to start. The maintenance load of a second deploy blueprint (its own ADRs, its own vendor URL trace, its own promote workflow) buys a shape Cloudflare itself recommends against; the round-6 spec (ruling 1) rejects the sibling and folds Workers-with-static-assets into this blueprint's minor bump instead."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Leave the shape choice implicit as the v1.1.0 blueprint does",
|
|
19
|
+
"summary": "Keep the wrangler-shape asset sample as an example only; do not mint an ADR blessing Workers-with-static-assets and do not elicit the assets-directory or run-worker-first parameters.",
|
|
20
|
+
"reasonNotChosen": "The v1.1.0 sample teaches the shape but does not commit to it; a project applying the blueprint has to reach for the sample and decide alone. Naming the ratified default as an ADR with a standards trace makes the shape decision legible in the applied project, and eliciting the two knobs surfaces the ratified shape's parameters where the operator can see them at apply."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "Bless Workers-with-static-assets only through the guide, without an ADR contribution",
|
|
24
|
+
"summary": "Add the guide section but do not mint an ADR; keep the shape as prose guidance rather than an architected decision.",
|
|
25
|
+
"reasonNotChosen": "The standards-derived-discipline discipline (blueprint-authoring.md section 8a) requires an ADR with standardsTraceClause for any decision that traces to a vendor standard. Blessing the shape only in the guide leaves no traceable decision record and no place for a superseding project-level ADR to hang off. The blueprint's own trace mechanism is exactly this shape."
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"createdAt": "2026-09-07T00:00:00Z",
|
|
29
|
+
"updatedAt": "2026-09-07T00:00:00Z"
|
|
30
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// Source-tree scan probe for the deploy-cloudflare-workers v1.2.0
|
|
2
|
+
// Workers-with-static-assets shape (T-0 of the Cloudflare round 6
|
|
3
|
+
// spec, section 5.0). accountBound false: this probe reads the
|
|
4
|
+
// applied fixture wrangler.toml and asserts three properties:
|
|
5
|
+
//
|
|
6
|
+
// 1. When the elicited assets-directory answer is non-empty, the
|
|
7
|
+
// [assets] table's directory field equals the elicited answer
|
|
8
|
+
// (assetsBlockEmitted, canonical AC-12113-1).
|
|
9
|
+
// 2. When the elicited run-worker-first answer is truthy, the
|
|
10
|
+
// [assets] table carries run_worker_first equal to true; when
|
|
11
|
+
// falsy or unanswered, run_worker_first is absent
|
|
12
|
+
// (spaFallbackShape facet of AC-12113-1).
|
|
13
|
+
// 3. The manifest never carries a Pages-only pages_build_output_dir
|
|
14
|
+
// field alongside [assets]; the two shapes are mutually
|
|
15
|
+
// exclusive per Cloudflare's static-assets doc.
|
|
16
|
+
//
|
|
17
|
+
// Verdict envelope per spec section 3.2: { verdict, detail,
|
|
18
|
+
// anchorAcId, aggregateVerdict } where anchorAcId is
|
|
19
|
+
// AC-12113-1 (the assetsBlockEmitted anchor). aggregateVerdict is
|
|
20
|
+
// pass when every result is pass, warn when any is warn (unused
|
|
21
|
+
// here), fail when any is fail. Cleans up any temporary files it
|
|
22
|
+
// wrote on exit.
|
|
23
|
+
|
|
24
|
+
import { readFile, writeFile, mkdir, rm } from 'node:fs/promises';
|
|
25
|
+
import { dirname, resolve, join } from 'node:path';
|
|
26
|
+
|
|
27
|
+
export const anchorAcId = 'AC-12113-1';
|
|
28
|
+
export const accountBound = false;
|
|
29
|
+
|
|
30
|
+
// Minimal wrangler.toml reader. Handles the small subset of TOML the
|
|
31
|
+
// blueprint's manifest declares (top-level scalars, one [assets]
|
|
32
|
+
// table, and boolean/string literals). Reaches for no runtime dep;
|
|
33
|
+
// keeps the probe accountBound-false and dependency-free.
|
|
34
|
+
export function parseWranglerToml(text) {
|
|
35
|
+
const lines = text.split(/\r?\n/);
|
|
36
|
+
const root = {};
|
|
37
|
+
let currentTable = root;
|
|
38
|
+
let currentTableName = '';
|
|
39
|
+
for (const raw of lines) {
|
|
40
|
+
const line = raw.replace(/^\s+/, '').replace(/\s+$/, '');
|
|
41
|
+
if (line === '' || line.startsWith('#')) continue;
|
|
42
|
+
const tableMatch = line.match(/^\[([A-Za-z0-9_.\-]+)\]$/);
|
|
43
|
+
if (tableMatch) {
|
|
44
|
+
currentTableName = tableMatch[1];
|
|
45
|
+
root[currentTableName] = root[currentTableName] || {};
|
|
46
|
+
currentTable = root[currentTableName];
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const kv = line.match(/^([A-Za-z0-9_\-]+)\s*=\s*(.+)$/);
|
|
50
|
+
if (!kv) continue;
|
|
51
|
+
const key = kv[1];
|
|
52
|
+
let value = kv[2].trim();
|
|
53
|
+
// Strip trailing comments (a naive #-then-space split; sufficient
|
|
54
|
+
// for the wrangler shapes this blueprint generates).
|
|
55
|
+
const hashAt = value.indexOf(' #');
|
|
56
|
+
if (hashAt !== -1) value = value.slice(0, hashAt).trim();
|
|
57
|
+
if (value === 'true') {
|
|
58
|
+
currentTable[key] = true;
|
|
59
|
+
} else if (value === 'false') {
|
|
60
|
+
currentTable[key] = false;
|
|
61
|
+
} else if (/^-?\d+$/.test(value)) {
|
|
62
|
+
currentTable[key] = Number(value);
|
|
63
|
+
} else if (value.startsWith('"') && value.endsWith('"')) {
|
|
64
|
+
currentTable[key] = value.slice(1, -1);
|
|
65
|
+
} else if (value.startsWith("'") && value.endsWith("'")) {
|
|
66
|
+
currentTable[key] = value.slice(1, -1);
|
|
67
|
+
} else {
|
|
68
|
+
currentTable[key] = value;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return root;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Drive the scan against the fixture. `opts.fixtureRoot` names the
|
|
75
|
+
// directory the wrangler.toml lives in; `opts.elicited` names the
|
|
76
|
+
// answers the fixture baked in (assets-directory string, run-worker-
|
|
77
|
+
// first boolean). Optionally `opts.simulate` is one of
|
|
78
|
+
// 'mixed-shape' or 'empty-assets': the caller rewrites wrangler.toml
|
|
79
|
+
// in a scratch copy for the simulate branches so the base fixture
|
|
80
|
+
// stays honest.
|
|
81
|
+
export async function scan(opts) {
|
|
82
|
+
const fixtureRoot = opts.fixtureRoot;
|
|
83
|
+
const elicited = opts.elicited || {};
|
|
84
|
+
const manifestPath = opts.manifestPath || join(fixtureRoot, 'wrangler.toml');
|
|
85
|
+
const text = await readFile(manifestPath, 'utf8');
|
|
86
|
+
const parsed = parseWranglerToml(text);
|
|
87
|
+
const results = [];
|
|
88
|
+
const detail = {
|
|
89
|
+
manifestPath,
|
|
90
|
+
parsed,
|
|
91
|
+
elicited: {
|
|
92
|
+
assetsDirectory: elicited['assets-directory'] || '',
|
|
93
|
+
runWorkerFirst: elicited['run-worker-first'] === true,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const assets = parsed.assets || null;
|
|
98
|
+
const answered = detail.elicited.assetsDirectory !== '';
|
|
99
|
+
if (answered) {
|
|
100
|
+
if (!assets) {
|
|
101
|
+
results.push({
|
|
102
|
+
verdict: 'fail',
|
|
103
|
+
detail: 'assets table absent: elicited assets-directory is "' + detail.elicited.assetsDirectory + '" but wrangler.toml carries no [assets] block',
|
|
104
|
+
anchorAcId,
|
|
105
|
+
});
|
|
106
|
+
} else if (assets.directory !== detail.elicited.assetsDirectory) {
|
|
107
|
+
results.push({
|
|
108
|
+
verdict: 'fail',
|
|
109
|
+
detail: 'assets.directory mismatch: wrangler.toml carries directory=' + JSON.stringify(assets.directory) + ' but elicited answer is ' + JSON.stringify(detail.elicited.assetsDirectory),
|
|
110
|
+
anchorAcId,
|
|
111
|
+
});
|
|
112
|
+
} else {
|
|
113
|
+
results.push({
|
|
114
|
+
verdict: 'pass',
|
|
115
|
+
detail: 'assets.directory equals elicited assets-directory answer ' + JSON.stringify(assets.directory),
|
|
116
|
+
anchorAcId,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const runWorkerFirstOnManifest = assets && Object.prototype.hasOwnProperty.call(assets, 'run_worker_first');
|
|
120
|
+
if (detail.elicited.runWorkerFirst) {
|
|
121
|
+
if (!runWorkerFirstOnManifest || assets.run_worker_first !== true) {
|
|
122
|
+
results.push({
|
|
123
|
+
verdict: 'fail',
|
|
124
|
+
detail: 'run_worker_first mismatch: elicited answer is true but manifest carries ' + (runWorkerFirstOnManifest ? String(assets.run_worker_first) : 'no run_worker_first key'),
|
|
125
|
+
anchorAcId,
|
|
126
|
+
});
|
|
127
|
+
} else {
|
|
128
|
+
results.push({
|
|
129
|
+
verdict: 'pass',
|
|
130
|
+
detail: 'assets.run_worker_first equals true, matching the elicited run-worker-first answer',
|
|
131
|
+
anchorAcId,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
if (runWorkerFirstOnManifest && assets.run_worker_first !== false) {
|
|
136
|
+
results.push({
|
|
137
|
+
verdict: 'fail',
|
|
138
|
+
detail: 'run_worker_first mismatch: elicited answer is falsy but manifest carries run_worker_first=' + JSON.stringify(assets.run_worker_first),
|
|
139
|
+
anchorAcId,
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
results.push({
|
|
143
|
+
verdict: 'pass',
|
|
144
|
+
detail: 'assets.run_worker_first is absent (or false), matching the falsy elicited run-worker-first answer',
|
|
145
|
+
anchorAcId,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
} else {
|
|
150
|
+
if (assets) {
|
|
151
|
+
results.push({
|
|
152
|
+
verdict: 'fail',
|
|
153
|
+
detail: 'assets table present without an elicited assets-directory answer: bare-Worker shape expected, wrangler.toml carries [assets] block',
|
|
154
|
+
anchorAcId,
|
|
155
|
+
});
|
|
156
|
+
} else {
|
|
157
|
+
results.push({
|
|
158
|
+
verdict: 'pass',
|
|
159
|
+
detail: 'no [assets] block on wrangler.toml, matching the bare-Worker shape (assets-directory elicit unanswered)',
|
|
160
|
+
anchorAcId,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const pagesFieldAtRoot = Object.prototype.hasOwnProperty.call(parsed, 'pages_build_output_dir');
|
|
166
|
+
const pagesFieldUnderAssets = assets && Object.prototype.hasOwnProperty.call(assets, 'pages_build_output_dir');
|
|
167
|
+
if (pagesFieldAtRoot || pagesFieldUnderAssets) {
|
|
168
|
+
results.push({
|
|
169
|
+
verdict: 'fail',
|
|
170
|
+
detail: 'mixed-shape drift: wrangler.toml carries pages_build_output_dir (' + (pagesFieldAtRoot ? 'top-level' : 'inside [assets]') + ') alongside the Workers-with-static-assets shape; the two are mutually exclusive per Cloudflare static-assets doc',
|
|
171
|
+
anchorAcId,
|
|
172
|
+
});
|
|
173
|
+
} else {
|
|
174
|
+
results.push({
|
|
175
|
+
verdict: 'pass',
|
|
176
|
+
detail: 'no pages_build_output_dir field on wrangler.toml (Workers-with-static-assets shape is exclusive of the Pages shape)',
|
|
177
|
+
anchorAcId,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const aggregateVerdict = results.some((r) => r.verdict === 'fail')
|
|
182
|
+
? 'fail'
|
|
183
|
+
: results.some((r) => r.verdict === 'warn')
|
|
184
|
+
? 'warn'
|
|
185
|
+
: 'pass';
|
|
186
|
+
|
|
187
|
+
return { verdict: aggregateVerdict, aggregateVerdict, anchorAcId, results, detail };
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Convenience for the run-shim: write a report file next to a
|
|
191
|
+
// project-relative .rcf/reports/ path. Creates the directory if it
|
|
192
|
+
// does not exist; the shim removes any scratch file it wrote to
|
|
193
|
+
// simulate the mixed-shape or empty-assets branch before exit.
|
|
194
|
+
export async function writeReport(reportPath, report) {
|
|
195
|
+
await mkdir(dirname(reportPath), { recursive: true });
|
|
196
|
+
await writeFile(reportPath, JSON.stringify(report, null, 2) + '\n', 'utf8');
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export async function removeIfExists(path) {
|
|
200
|
+
try {
|
|
201
|
+
await rm(path, { force: true });
|
|
202
|
+
} catch (_err) {
|
|
203
|
+
// Nothing to clean.
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export default { scan, writeReport, removeIfExists, parseWranglerToml, anchorAcId, accountBound };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-013",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Workers-with-static-assets shape: an [assets] directory declared under wrangler blesses static assets served by the Worker",
|
|
5
|
+
"description": "The blueprint blesses the Workers-with-static-assets deploy shape as the ratified SPA-on-Workers shape (per ADR-1306, quoting the Cloudflare Pages landing-page recommendation verbatim). A project answering the elicited `assets-directory` parameter with a non-empty path emits an `[assets]` block on `wrangler.toml` whose `directory` value carries the elicited path (for example `directory = \"./dist\"`). Cloudflare's Workers runtime serves files from that directory at the edge before the Worker fetch handler runs (unless `run_worker_first` is set truthy per REQ-014). A project answering with an empty path keeps the bare-Worker shape (no `[assets]` block, no static-asset lookup). The wrangler manifest MUST NOT carry any Pages-only field (`pages_build_output_dir`) alongside `[assets]`; the two shapes are mutually exclusive per Cloudflare's static-assets doc.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Cloudflare's own Pages landing page tells new projects to start with Workers; the Workers-with-static-assets shape is the primary SPA-on-Workers deploy shape. Blessing it here means a rcf-lite project choosing SPA-on-Workers gets a single, ratified wrangler shape rather than a hand-rolled convention. The mutual exclusion of `[assets]` and `pages_build_output_dir` keeps a project from silently drifting into a mixed-shape wrangler that Cloudflare's runtime refuses at deploy time.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:13-static-assets"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.2.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-09-07T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-09-07T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "deploy-cloudflare-workers-REQ-014",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "SPA fallback discipline: run_worker_first flips the assets pipeline off the fetch handler's critical path",
|
|
5
|
+
"description": "The blueprint elicits `run-worker-first` (boolean, default false) alongside the `[assets] directory` shape from REQ-013. When the operator answers truthy, the generated wrangler manifest emits `run_worker_first = true` under the `[assets]` block: Cloudflare's runtime runs the Worker's fetch handler BEFORE looking up a static asset for the requested path. That is the shape a SPA-on-Workers project uses when the Worker owns arbitrary routing or when the Worker's auth middleware must gate every path a static file could shadow. When the operator answers falsy or leaves the elicit unanswered, `run_worker_first` is absent from the manifest and Cloudflare's runtime looks up a static asset first, falling back to the Worker only when no asset matches. The Worker code and the guide teach both shapes; the elicit surface is one boolean, the wrangler shape is one line.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "deploy",
|
|
8
|
+
"priority": "should",
|
|
9
|
+
"rationale": "The default (asset lookup first, Worker on miss) is right for a static-content-heavy project. The truthy branch is what keeps auth middleware from being silently bypassed by an unauthenticated request for a file the assets pipeline serves from the edge cache. Naming the discipline as its own REQ makes the shape trade legible; anchoring the elicit to a wrangler line keeps the choice observable in the applied project.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:deploy-cloudflare-workers",
|
|
12
|
+
"category:13-static-assets"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.2.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-09-07T00:00:00Z",
|
|
17
|
+
"updatedAt": "2026-09-07T00:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "deploy-cloudflare-workers-US-12113",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "deploy-cloudflare-workers-REQ-013",
|
|
5
|
+
"version": "1.2.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"title": "SPA-on-Workers deploy shape: [assets] block emitted with the elicited directory and the run_worker_first hint",
|
|
8
|
+
"asA": "operator deploying a SPA on Cloudflare Workers",
|
|
9
|
+
"iWant": "the generated wrangler.toml to carry an [assets] block whose directory matches my elicited answer and whose run_worker_first field carries my elicited SPA fallback choice",
|
|
10
|
+
"soThat": "my SPA-on-Workers project ships with a single, ratified wrangler shape and my static assets and my auth-gated routes both behave the way Cloudflare's runtime documents them",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-12113-1",
|
|
14
|
+
"description": "Given the operator answers assets-directory with a non-empty path P at blueprint add, when the wrangler manifest generator emits wrangler.toml, then the manifest contains exactly one [assets] block whose directory field equals P (with the leading `./` preserved when the operator answered `./P`) and the manifest carries no pages_build_output_dir field. When the operator answers assets-directory with an empty string or leaves the elicit unanswered, the manifest carries no [assets] block and no pages_build_output_dir field. Anchored to TAC-1302-deploy-cloudflare-workers-wrangler-manifest; probed by assets-manifest-scan.mjs (source-tree scan against the applied fixture wrangler.toml) with anchorAcId AC-12113-1.",
|
|
15
|
+
"given": "an applied fixture whose operator answered assets-directory = ./dist at blueprint add",
|
|
16
|
+
"when": "the probe module assets-manifest-scan.mjs parses the fixture wrangler.toml",
|
|
17
|
+
"then": "the parsed structure contains an assets table whose directory string equals ./dist and no top-level pages_build_output_dir key; the probe returns verdict pass",
|
|
18
|
+
"testable": true,
|
|
19
|
+
"scope": "runtime"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "AC-12113-2",
|
|
23
|
+
"description": "Given the operator answers run-worker-first with true alongside a non-empty assets-directory, when the manifest is generated, then the [assets] block carries run_worker_first = true. Given the operator answers run-worker-first with false or leaves it unanswered, when the manifest is generated, then the [assets] block does NOT carry a run_worker_first key (Cloudflare's runtime treats the absent field as the default asset-lookup-first shape). Anchored to TAC-1302; probed by assets-manifest-scan.mjs with anchorAcId AC-12113-1 (the same module surfaces both facets of the shape).",
|
|
24
|
+
"given": "an applied fixture whose operator answered assets-directory = ./dist and run-worker-first = true",
|
|
25
|
+
"when": "the probe module parses the fixture wrangler.toml",
|
|
26
|
+
"then": "the parsed [assets] table carries run_worker_first equal to true; when the fixture is switched with SIMULATE_EMPTY_ASSETS=true the run_worker_first field is absent (the whole [assets] block is absent) and the probe still returns verdict pass because the bare-Worker shape is legal",
|
|
27
|
+
"testable": true,
|
|
28
|
+
"scope": "runtime"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"tacIds": [
|
|
32
|
+
"TAC-1302-deploy-cloudflare-workers-wrangler-manifest"
|
|
33
|
+
],
|
|
34
|
+
"createdAt": "2026-09-07T00:00:00Z",
|
|
35
|
+
"updatedAt": "2026-09-07T00:00:00Z"
|
|
36
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "deploy-cloudflare-workers-US-12114",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "deploy-cloudflare-workers-REQ-013",
|
|
5
|
+
"version": "1.2.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"title": "assets-directory elicitation: the operator picks the static-assets root at blueprint add",
|
|
8
|
+
"asA": "operator applying deploy-cloudflare-workers on a fresh project",
|
|
9
|
+
"iWant": "the blueprint to prompt me for the static-assets directory at blueprint add and remember my answer on my project's sidecar so re-apply picks it back up",
|
|
10
|
+
"soThat": "my wrangler.toml reflects my project's build output shape without me having to hand-edit the [assets] block",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-12114-1",
|
|
14
|
+
"description": "The blueprint.json elicits[] block declares an entry with id assets-directory, kind string, default empty. The blueprint loader accepts the entry (validateElicits shape gate on src/blueprint/loader.js). The CLI accepts --answer assets-directory=<path> at blueprint add; the applied sidecar records the answered value on appliedElicitations.assets-directory. When the operator does not pass --answer assets-directory, the effective value is the empty-string default and the wrangler generator emits no [assets] block.",
|
|
15
|
+
"given": "a fresh rcf init scratch project after rcf define blueprint add ./blueprints/deploy-cloudflare-workers --answer assets-directory=./public --answer run-worker-first=false",
|
|
16
|
+
"when": "the applied sidecar records the operator's answers and a wrangler.toml is generated",
|
|
17
|
+
"then": "appliedElicitations.assets-directory equals ./public; the generated wrangler.toml carries [assets] directory = \"./public\" and no run_worker_first field; the manifest carries no pages_build_output_dir field",
|
|
18
|
+
"testable": true,
|
|
19
|
+
"scope": "runtime"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"tacIds": [
|
|
23
|
+
"TAC-1302-deploy-cloudflare-workers-wrangler-manifest"
|
|
24
|
+
],
|
|
25
|
+
"createdAt": "2026-09-07T00:00:00Z",
|
|
26
|
+
"updatedAt": "2026-09-07T00:00:00Z"
|
|
27
|
+
}
|