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
package/blueprints/application-onboarding-tour/probe-packs/application-onboarding-tour.pack.mjs
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// application-onboarding-tour probe pack (v1.0.0).
|
|
2
|
+
//
|
|
3
|
+
// Four surface-observable checks anchored to the blueprint AC ids:
|
|
4
|
+
// AC-26101-1 step-container focus lifecycle and Escape (drives the tour open,
|
|
5
|
+
// asserts the first step renders, walks Tab through the tour
|
|
6
|
+
// controls, presses Escape, asserts dismissal)
|
|
7
|
+
// AC-26102-1 tooltip-as-dialog contract (opens a step, reads the DOM, asserts
|
|
8
|
+
// role="dialog" and aria-labelledby; asserts focus moves to the
|
|
9
|
+
// tooltip on open; asserts focus is not obscured at breakpoints
|
|
10
|
+
// 1440 and 360 via the browser.resize seam)
|
|
11
|
+
// AC-26103-1 checklist slot (asserts the checklist renders inside <details open>
|
|
12
|
+
// on the dashboard-top anchor when application-dashboard is applied
|
|
13
|
+
// and inside a <details> closed on the settings-page anchor when not)
|
|
14
|
+
// AC-26104-1 completion-state persistence (completes the tour, reads the
|
|
15
|
+
// completion-state store per the elicited shape, activates restart
|
|
16
|
+
// from the settings surface, asserts the tour re-opens)
|
|
17
|
+
//
|
|
18
|
+
// Every check drives the real Playwright browser the T-0 runner injects and
|
|
19
|
+
// reads its per-check applicability from the blueprint applied sidecar
|
|
20
|
+
// (rcf/blueprints/application-onboarding-tour.applied.json) written by the apply
|
|
21
|
+
// verb. T-5 has no requiresAppliedCapabilities, but the checklist-slot check
|
|
22
|
+
// gates its dashboard-vs-settings branch on the applied-blueprint set
|
|
23
|
+
// (application-dashboard present or not), and the persistence check gates its
|
|
24
|
+
// backend on the elicited completion-state-store answer (with the Q4 fallback
|
|
25
|
+
// spa-local-storage when no persistence blueprint is applied).
|
|
26
|
+
//
|
|
27
|
+
// Sample-app fixture: packages/rcf-lite/test/fixtures/probe-pack-application-onboarding-tour/.
|
|
28
|
+
// The fixture ships APPS and STORE env / ?apps= / ?store= query switches
|
|
29
|
+
// mirroring the applied-blueprint set and the elicited completion-state store,
|
|
30
|
+
// plus four break switches (?break=no-role, ?break=focus-escape,
|
|
31
|
+
// ?break=no-collapse, ?break=no-persist) driving the negative runs.
|
|
32
|
+
|
|
33
|
+
import { readFile } from 'node:fs/promises';
|
|
34
|
+
import { join } from 'node:path';
|
|
35
|
+
|
|
36
|
+
async function readAppliedSidecar(projectRoot) {
|
|
37
|
+
if (!projectRoot) return { appliedCapabilities: [], appliedElicitations: {}, appliedBlueprints: [] };
|
|
38
|
+
try {
|
|
39
|
+
const raw = await readFile(join(projectRoot, 'rcf', 'blueprints', 'application-onboarding-tour.applied.json'), 'utf8');
|
|
40
|
+
const doc = JSON.parse(raw);
|
|
41
|
+
return {
|
|
42
|
+
appliedCapabilities: Array.isArray(doc.appliedCapabilities) ? doc.appliedCapabilities.slice() : [],
|
|
43
|
+
appliedElicitations: typeof doc.appliedElicitations === 'object' && doc.appliedElicitations ? doc.appliedElicitations : {},
|
|
44
|
+
appliedBlueprints: Array.isArray(doc.appliedBlueprints) ? doc.appliedBlueprints.slice() : [],
|
|
45
|
+
};
|
|
46
|
+
} catch {
|
|
47
|
+
return { appliedCapabilities: [], appliedElicitations: {}, appliedBlueprints: [] };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function withUrl(runtimeUrl, path) {
|
|
52
|
+
return new URL(path, runtimeUrl).toString();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function appsQuery(sidecar) {
|
|
56
|
+
// The sidecar's appliedBlueprints[] is the truth; on a fixture where the
|
|
57
|
+
// sidecar is absent (a bare test run) the fixture defaults route through
|
|
58
|
+
// the ?apps= query so the check still runs against the honest branch.
|
|
59
|
+
return sidecar.appliedBlueprints.join(',');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default {
|
|
63
|
+
packName: 'application-onboarding-tour',
|
|
64
|
+
version: '1.0.0',
|
|
65
|
+
blueprintSlug: 'application-onboarding-tour',
|
|
66
|
+
// Applies to any FBS that realises the step-runner TAC or whose navModel
|
|
67
|
+
// routes match the operator-configured tour-anchor path glob (any /tour,
|
|
68
|
+
// /welcome, /getting-started, /onboarding path is a legal anchor).
|
|
69
|
+
appliesTo: ({ fbs }) => {
|
|
70
|
+
const routes = fbs?.designStage?.navModel?.routes ?? [];
|
|
71
|
+
const tacIds = fbs?.contextRequirements?.tacIds ?? [];
|
|
72
|
+
if (tacIds.includes('TAC-2701-application-onboarding-tour-step-runner')) return true;
|
|
73
|
+
return routes.some((r) => typeof r?.path === 'string' && /\/(tour|welcome|getting-started|onboarding)(\/|$)/.test(r.path));
|
|
74
|
+
},
|
|
75
|
+
boot: { bootCommand: null, waitForUrl: null, waitForSelector: null },
|
|
76
|
+
checks: [
|
|
77
|
+
{
|
|
78
|
+
id: 'AC-26101-1',
|
|
79
|
+
severity: 'block',
|
|
80
|
+
description: 'Step-container focus lifecycle: the tour opens the first step on a first-run principal, Tab reaches every tour control inside the tooltip in DOM order without escaping to the underlying surface, and Escape dismisses the tour and returns focus to the anchor (WCAG 2.1.1 Keyboard, 2.1.2 No Keyboard Trap, 2.4.3 Focus Order)',
|
|
81
|
+
appliesTo: async () => true,
|
|
82
|
+
run: async ({ browser, runtimeUrl, projectRoot }) => {
|
|
83
|
+
if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
|
|
84
|
+
const sidecar = await readAppliedSidecar(projectRoot);
|
|
85
|
+
const apps = appsQuery(sidecar);
|
|
86
|
+
await browser.goto(withUrl(runtimeUrl, `/tour?first-run=1&apps=${encodeURIComponent(apps)}`));
|
|
87
|
+
const open = await browser.evaluate(() => {
|
|
88
|
+
const tip = document.querySelector('[data-role="onboarding-tour-tooltip"]');
|
|
89
|
+
if (!tip) return { present: false };
|
|
90
|
+
const role = tip.getAttribute('role');
|
|
91
|
+
const step = tip.getAttribute('data-step-id');
|
|
92
|
+
const controls = Array.from(tip.querySelectorAll('[data-tour-control]')).map((c) => c.getAttribute('data-tour-control'));
|
|
93
|
+
const focusInside = tip.contains(document.activeElement);
|
|
94
|
+
return { present: true, role, step, controls, focusInside };
|
|
95
|
+
});
|
|
96
|
+
if (!open.present) return { verdict: 'fail', detail: 'onboarding tooltip [data-role="onboarding-tour-tooltip"] not rendered on first run' };
|
|
97
|
+
if (open.role !== 'dialog') return { verdict: 'fail', detail: `tooltip role expected dialog, got ${open.role}` };
|
|
98
|
+
if (!open.focusInside) return { verdict: 'fail', detail: 'focus did not move into the tooltip on open' };
|
|
99
|
+
const requiredControls = ['previous', 'next', 'dismiss'];
|
|
100
|
+
const missingControls = requiredControls.filter((c) => !open.controls.includes(c));
|
|
101
|
+
if (missingControls.length > 0) return { verdict: 'fail', detail: `tooltip missing tour controls: ${JSON.stringify(missingControls)} present=${JSON.stringify(open.controls)}` };
|
|
102
|
+
// Walk Tab across every control; refuse if focus escapes the tooltip.
|
|
103
|
+
for (let i = 0; i < open.controls.length + 1; i += 1) {
|
|
104
|
+
await browser.press('Tab');
|
|
105
|
+
}
|
|
106
|
+
const walk = await browser.evaluate(() => {
|
|
107
|
+
const tip = document.querySelector('[data-role="onboarding-tour-tooltip"]');
|
|
108
|
+
return { focusInside: tip ? tip.contains(document.activeElement) : false };
|
|
109
|
+
});
|
|
110
|
+
if (!walk.focusInside) return { verdict: 'fail', detail: 'Tab traversal escaped the tooltip (focus trap failed)' };
|
|
111
|
+
await browser.press('Escape');
|
|
112
|
+
const closed = await browser.evaluate(() => {
|
|
113
|
+
const tip = document.querySelector('[data-role="onboarding-tour-tooltip"]');
|
|
114
|
+
return { present: !!tip };
|
|
115
|
+
});
|
|
116
|
+
if (closed.present) return { verdict: 'fail', detail: 'tooltip still present after Escape (dismiss did not fire)' };
|
|
117
|
+
return { verdict: 'pass', detail: `step=${open.step} controls=${JSON.stringify(open.controls)} focus trapped and Escape dismissed cleanly` };
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: 'AC-26102-1',
|
|
122
|
+
severity: 'block',
|
|
123
|
+
description: 'Tooltip-as-dialog contract per the ARIA APG dialog-modal pattern: role="dialog", aria-labelledby to the step heading, aria-describedby to the step body, focus moves in on open, focus not obscured at the 1440 wide and 360 narrow breakpoints (WCAG 2.4.11 Focus Not Obscured Minimum)',
|
|
124
|
+
appliesTo: async () => true,
|
|
125
|
+
run: async ({ browser, runtimeUrl, projectRoot }) => {
|
|
126
|
+
if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
|
|
127
|
+
const sidecar = await readAppliedSidecar(projectRoot);
|
|
128
|
+
const apps = appsQuery(sidecar);
|
|
129
|
+
// Wide breakpoint first.
|
|
130
|
+
await browser.resize(1440, 900);
|
|
131
|
+
await browser.goto(withUrl(runtimeUrl, `/tour?first-run=1&apps=${encodeURIComponent(apps)}`));
|
|
132
|
+
const wide = await browser.evaluate(() => {
|
|
133
|
+
const tip = document.querySelector('[data-role="onboarding-tour-tooltip"]');
|
|
134
|
+
if (!tip) return { present: false };
|
|
135
|
+
const headingId = tip.getAttribute('aria-labelledby');
|
|
136
|
+
const bodyId = tip.getAttribute('aria-describedby');
|
|
137
|
+
const headingEl = headingId ? document.getElementById(headingId) : null;
|
|
138
|
+
const bodyEl = bodyId ? document.getElementById(bodyId) : null;
|
|
139
|
+
const rect = tip.getBoundingClientRect();
|
|
140
|
+
const inViewport = rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth;
|
|
141
|
+
return { present: true, role: tip.getAttribute('role'), headingId, bodyId, headingText: headingEl ? headingEl.textContent : null, bodyText: bodyEl ? bodyEl.textContent : null, inViewport, rect: { top: rect.top, left: rect.left, right: rect.right, bottom: rect.bottom }, viewport: { w: window.innerWidth, h: window.innerHeight } };
|
|
142
|
+
});
|
|
143
|
+
if (!wide.present) return { verdict: 'fail', detail: 'tooltip not rendered at 1440x900' };
|
|
144
|
+
if (wide.role !== 'dialog') return { verdict: 'fail', detail: `tooltip role expected dialog at 1440, got ${wide.role}` };
|
|
145
|
+
if (!wide.headingId || !wide.headingText) return { verdict: 'fail', detail: `tooltip aria-labelledby ("${wide.headingId}") does not point at a live heading element` };
|
|
146
|
+
if (!wide.bodyId || !wide.bodyText) return { verdict: 'fail', detail: `tooltip aria-describedby ("${wide.bodyId}") does not point at a live body element` };
|
|
147
|
+
if (!wide.inViewport) return { verdict: 'fail', detail: `tooltip focus obscured at 1440x900: rect=${JSON.stringify(wide.rect)} viewport=${JSON.stringify(wide.viewport)}` };
|
|
148
|
+
// Narrow breakpoint.
|
|
149
|
+
await browser.resize(360, 640);
|
|
150
|
+
await browser.goto(withUrl(runtimeUrl, `/tour?first-run=1&apps=${encodeURIComponent(apps)}`));
|
|
151
|
+
const narrow = await browser.evaluate(() => {
|
|
152
|
+
const tip = document.querySelector('[data-role="onboarding-tour-tooltip"]');
|
|
153
|
+
if (!tip) return { present: false };
|
|
154
|
+
const rect = tip.getBoundingClientRect();
|
|
155
|
+
const inViewport = rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.innerHeight && rect.right <= window.innerWidth;
|
|
156
|
+
return { present: true, rect: { top: rect.top, left: rect.left, right: rect.right, bottom: rect.bottom }, viewport: { w: window.innerWidth, h: window.innerHeight }, inViewport };
|
|
157
|
+
});
|
|
158
|
+
if (!narrow.present) return { verdict: 'fail', detail: 'tooltip not rendered at 360x640' };
|
|
159
|
+
if (!narrow.inViewport) return { verdict: 'fail', detail: `tooltip focus obscured at 360x640: rect=${JSON.stringify(narrow.rect)} viewport=${JSON.stringify(narrow.viewport)}` };
|
|
160
|
+
return { verdict: 'pass', detail: `dialog contract clean at 1440 and 360; aria-labelledby="${wide.headingId}" aria-describedby="${wide.bodyId}"` };
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
id: 'AC-26103-1',
|
|
165
|
+
severity: 'block',
|
|
166
|
+
description: 'Checklist slot: renders inside <details open> on the dashboard-top anchor when application-dashboard is applied, and inside <details> (closed) on the settings-page anchor when not; both branches carry data-role="onboarding-tour-checklist"',
|
|
167
|
+
appliesTo: async () => true,
|
|
168
|
+
run: async ({ browser, runtimeUrl, projectRoot }) => {
|
|
169
|
+
if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
|
|
170
|
+
const sidecar = await readAppliedSidecar(projectRoot);
|
|
171
|
+
const apps = appsQuery(sidecar);
|
|
172
|
+
const dashboardApplied = sidecar.appliedBlueprints.includes('application-dashboard');
|
|
173
|
+
const targetPath = dashboardApplied ? '/dashboard' : '/settings';
|
|
174
|
+
await browser.goto(withUrl(runtimeUrl, `${targetPath}?apps=${encodeURIComponent(apps)}`));
|
|
175
|
+
const dom = await browser.evaluate((expectedAnchor) => {
|
|
176
|
+
const checklist = document.querySelector('details[data-role="onboarding-tour-checklist"]');
|
|
177
|
+
if (!checklist) return { present: false };
|
|
178
|
+
const isOpen = checklist.hasAttribute('open');
|
|
179
|
+
const anchor = checklist.getAttribute('data-anchor');
|
|
180
|
+
const items = Array.from(checklist.querySelectorAll('[data-checklist-item]')).map((el) => el.getAttribute('data-checklist-item'));
|
|
181
|
+
return { present: true, isOpen, anchor, items, expectedAnchor };
|
|
182
|
+
}, dashboardApplied ? 'dashboard-top' : 'settings-page');
|
|
183
|
+
if (!dom.present) return { verdict: 'fail', detail: `details[data-role="onboarding-tour-checklist"] not found at ${targetPath} (apps=${apps})` };
|
|
184
|
+
if (dashboardApplied && !dom.isOpen) return { verdict: 'fail', detail: `checklist on dashboard-top anchor is not <details open> (anchor="${dom.anchor}")` };
|
|
185
|
+
if (!dashboardApplied && dom.isOpen) return { verdict: 'fail', detail: `checklist on settings-page anchor rendered <details open> but should default closed (anchor="${dom.anchor}")` };
|
|
186
|
+
if (dom.anchor !== dom.expectedAnchor) return { verdict: 'fail', detail: `data-anchor expected "${dom.expectedAnchor}", got "${dom.anchor}"` };
|
|
187
|
+
return { verdict: 'pass', detail: `anchor=${dom.anchor} open=${dom.isOpen} items=${JSON.stringify(dom.items)} (dashboardApplied=${dashboardApplied})` };
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: 'AC-26104-1',
|
|
192
|
+
severity: 'block',
|
|
193
|
+
description: 'Completion-state persistence: completing the tour writes to the elicited completion-state store (spa-local-storage per the Q4 fallback when no persistence blueprint is applied; spa-session-storage or server-side-per-principal per the elicit); the restart-tour control on the settings surface clears the record and re-opens the tour on the next principal load',
|
|
194
|
+
appliesTo: async () => true,
|
|
195
|
+
run: async ({ browser, runtimeUrl, projectRoot }) => {
|
|
196
|
+
if (!browser) return { verdict: 'fail', detail: 'no packBrowser wired' };
|
|
197
|
+
const sidecar = await readAppliedSidecar(projectRoot);
|
|
198
|
+
const apps = appsQuery(sidecar);
|
|
199
|
+
const store = sidecar.appliedElicitations['completion-state-store'] || 'spa-local-storage';
|
|
200
|
+
await browser.goto(withUrl(runtimeUrl, `/tour?first-run=1&apps=${encodeURIComponent(apps)}&store=${encodeURIComponent(store)}&complete=1`));
|
|
201
|
+
const afterComplete = await browser.evaluate((s) => {
|
|
202
|
+
const marker = document.querySelector('[data-role="onboarding-tour-completion-marker"]');
|
|
203
|
+
const writtenAttr = marker ? marker.getAttribute('data-written-to') : null;
|
|
204
|
+
const key = 'onboarding-tour:completion';
|
|
205
|
+
let readBack = null;
|
|
206
|
+
try {
|
|
207
|
+
if (s === 'spa-local-storage') readBack = window.localStorage.getItem(key);
|
|
208
|
+
else if (s === 'spa-session-storage') readBack = window.sessionStorage.getItem(key);
|
|
209
|
+
} catch (e) {
|
|
210
|
+
readBack = `storage-error: ${e.message}`;
|
|
211
|
+
}
|
|
212
|
+
return { markerPresent: !!marker, writtenAttr, readBack };
|
|
213
|
+
}, store);
|
|
214
|
+
if (!afterComplete.markerPresent) return { verdict: 'fail', detail: `completion marker [data-role="onboarding-tour-completion-marker"] not present after complete flow (store=${store})` };
|
|
215
|
+
if (afterComplete.writtenAttr !== store) return { verdict: 'fail', detail: `completion marker data-written-to expected "${store}", got "${afterComplete.writtenAttr}"` };
|
|
216
|
+
if ((store === 'spa-local-storage' || store === 'spa-session-storage') && !afterComplete.readBack) {
|
|
217
|
+
return { verdict: 'fail', detail: `store "${store}" reports no persisted record under key onboarding-tour:completion` };
|
|
218
|
+
}
|
|
219
|
+
// Drive the restart control.
|
|
220
|
+
await browser.goto(withUrl(runtimeUrl, `/settings?apps=${encodeURIComponent(apps)}&store=${encodeURIComponent(store)}`));
|
|
221
|
+
const restartBtn = await browser.evaluate(() => !!document.querySelector('button[data-action="restart-tour"]'));
|
|
222
|
+
if (!restartBtn) return { verdict: 'fail', detail: 'restart-tour control not reachable on settings surface' };
|
|
223
|
+
await browser.click('button[data-action="restart-tour"]');
|
|
224
|
+
await browser.goto(withUrl(runtimeUrl, `/tour?apps=${encodeURIComponent(apps)}&store=${encodeURIComponent(store)}`));
|
|
225
|
+
const reopen = await browser.evaluate(() => !!document.querySelector('[data-role="onboarding-tour-tooltip"]'));
|
|
226
|
+
if (!reopen) return { verdict: 'fail', detail: 'tour did not re-open on the highest-value surface after restart' };
|
|
227
|
+
return { verdict: 'pass', detail: `store=${store} completion persisted, restart cleared, tour re-opened` };
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
};
|
|
@@ -34,11 +34,11 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
34
34
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
35
35
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
36
36
|
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
37
|
-
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.
|
|
37
|
+
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.1 | `secretsSource` |
|
|
38
38
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
39
39
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
40
40
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
41
|
-
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.
|
|
41
|
+
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.2.0 | `deploymentTarget` |
|
|
42
42
|
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
43
43
|
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.1.0 | `healthProbes`, `readinessSemantics` |
|
|
44
44
|
| observability-logging | 15101-15899 | 16xx | shipped v1.0.0 | `logging` |
|
|
@@ -48,6 +48,15 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
48
48
|
| application-dashboard | 19101-19899 | 20xx | shipped v1.0.0 | none |
|
|
49
49
|
| application-notifications-in-app | 20101-20899 | 21xx | shipped v1.0.0 | none |
|
|
50
50
|
| application-admin-console | 21101-21899 | 22xx | shipped v1.0.0 | none |
|
|
51
|
+
| application-empty-error-states | 22101-22899 | 23xx | shipped v1.0.0 | none |
|
|
52
|
+
| application-file-upload | 23101-23899 | 24xx | shipped v1.0.0 | none |
|
|
53
|
+
| application-forms-wizard | 24101-24899 | 25xx | shipped v1.0.0 | none |
|
|
54
|
+
| application-account-settings | 25101-25899 | 26xx | shipped v1.0.0 | none |
|
|
55
|
+
| application-onboarding-tour | 26101-26899 | 27xx | shipped v1.0.0 | none |
|
|
56
|
+
| persistence-data-postgres | 27101-27899 | 28xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
57
|
+
| object-storage-s3 | 28101-28899 | 29xx | shipped v1.0.0 | `objectStorageContract` |
|
|
58
|
+
| messaging-queue-cloudflare | 29101-29899 | 30xx | shipped v1.0.0 | `deliverySemantics` |
|
|
59
|
+
| jobs-background | 30101-30899 | 31xx | shipped v1.0.0 | `backgroundJobModel` |
|
|
51
60
|
|
|
52
61
|
SPA v1.1.0 stays on the LOW end of its band: v1.0.0 occupied US-1101 through US-1128; v1.1.0 adds US-1129 and US-1130, leaving headroom above 1130 for future minor bumps and for project-side stories that mechanically derive to the 11xx numeric range.
|
|
53
62
|
|
|
@@ -42,7 +42,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
42
42
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
43
43
|
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
44
44
|
| observability-essentials | 7101-7899 | 8xx | shipped v2.0.0 | `statusPageContract` |
|
|
45
|
-
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.
|
|
45
|
+
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.1 | `secretsSource` |
|
|
46
46
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
47
47
|
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
48
48
|
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
@@ -54,6 +54,15 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
54
54
|
| application-dashboard | 19101-19899 | 20xx | shipped v1.0.0 | none |
|
|
55
55
|
| application-notifications-in-app | 20101-20899 | 21xx | shipped v1.0.0 | none |
|
|
56
56
|
| application-admin-console | 21101-21899 | 22xx | shipped v1.0.0 | none |
|
|
57
|
+
| application-empty-error-states | 22101-22899 | 23xx | shipped v1.0.0 | none |
|
|
58
|
+
| application-file-upload | 23101-23899 | 24xx | shipped v1.0.0 | none |
|
|
59
|
+
| application-forms-wizard | 24101-24899 | 25xx | shipped v1.0.0 | none |
|
|
60
|
+
| application-account-settings | 25101-25899 | 26xx | shipped v1.0.0 | none |
|
|
61
|
+
| application-onboarding-tour | 26101-26899 | 27xx | shipped v1.0.0 | none |
|
|
62
|
+
| persistence-data-postgres | 27101-27899 | 28xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
63
|
+
| object-storage-s3 | 28101-28899 | 29xx | shipped v1.0.0 | `objectStorageContract` |
|
|
64
|
+
| messaging-queue-cloudflare | 29101-29899 | 30xx | shipped v1.0.0 | `deliverySemantics` |
|
|
65
|
+
| jobs-background | 30101-30899 | 31xx | shipped v1.0.0 | `backgroundJobModel` |
|
|
57
66
|
|
|
58
67
|
US 6101-6110 sit at the LOW end of the 6101-6899 band on purpose. A project-side story that mechanically derives from `delivery-ci-workflows-REQ-011` into the number `6111` would collide against delivery-ci-workflows-US-6111 in this package; the band leaves headroom at the HIGH end (US 6181-6899) so a project's own stories anchored to delivery-ci-workflows REQs can allocate without conflict. The watchpost run4 lesson applies here too.
|
|
59
68
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `deploy-cloudflare-workers` blueprint are recorded here.
|
|
4
|
+
The format follows Keep a Changelog. Versions are semver, per
|
|
5
|
+
`packages/rcf-lite/docs/blueprint-authoring.md` section 6.
|
|
6
|
+
|
|
7
|
+
## 1.2.0 - 2026-09-07
|
|
8
|
+
|
|
9
|
+
Additive minor bump. Blesses the Workers-with-static-assets shape as the
|
|
10
|
+
ratified SPA-on-Workers deploy shape, per the Cloudflare Pages
|
|
11
|
+
landing-page recommendation (2026-09-06). Seven new contributions in the
|
|
12
|
+
existing 12xx US band and 13xx suffix block; every shipped v1.1.0
|
|
13
|
+
contribution carries through unchanged.
|
|
14
|
+
|
|
15
|
+
Added
|
|
16
|
+
|
|
17
|
+
- REQ `deploy-cloudflare-workers-REQ-013`: Workers-with-static-assets
|
|
18
|
+
shape. An elicited `[assets] directory` value is emitted on
|
|
19
|
+
`wrangler.toml`; the manifest never carries `pages_build_output_dir`
|
|
20
|
+
alongside `[assets]`.
|
|
21
|
+
- REQ `deploy-cloudflare-workers-REQ-014`: SPA fallback discipline via
|
|
22
|
+
elicited `run_worker_first`. A truthy answer emits
|
|
23
|
+
`run_worker_first = true` under `[assets]`; a falsy or unanswered
|
|
24
|
+
answer omits the field and lets Cloudflare's runtime serve assets
|
|
25
|
+
before the Worker fetch handler runs.
|
|
26
|
+
- US `-US-12113`: SPA-on-Workers deploy. Runtime-observable ACs on the
|
|
27
|
+
emitted `[assets]` block shape.
|
|
28
|
+
- US `-US-12114`: assets-directory elicitation. Recorded on the applied
|
|
29
|
+
sidecar as `appliedElicitations.assets-directory`.
|
|
30
|
+
- US `-US-12115`: migrate-from-Pages guidance. Guide section links
|
|
31
|
+
Cloudflare's own migrate-from-Pages walkthrough.
|
|
32
|
+
- ADR `ADR-1306-deploy-cloudflare-workers-spa-shape`: Workers-with-
|
|
33
|
+
static-assets as the ratified SPA-on-Workers deploy shape.
|
|
34
|
+
Contribution entry carries `recommendedDefault: true` and
|
|
35
|
+
`standardsTraceClause: Cloudflare Pages landing-page recommendation
|
|
36
|
+
(2026-09-06)`. Body quotes the landing-page recommendation verbatim
|
|
37
|
+
(fetched 2026-09-06 in the round-6 proposal and re-verified at
|
|
38
|
+
ratification).
|
|
39
|
+
- Elicits (top-level `elicits[]`): `assets-directory` (string, default
|
|
40
|
+
empty) and `run-worker-first` (boolean, default false). The spec's
|
|
41
|
+
intended `when: {elicitedNonEmpty: [assets-directory]}` predicate on
|
|
42
|
+
`run-worker-first` is not shipped this round because the loader's
|
|
43
|
+
supported `when` block only accepts `requiresCapability` arrays; the
|
|
44
|
+
guide teaches that `run-worker-first` is only meaningful when
|
|
45
|
+
`assets-directory` is non-empty.
|
|
46
|
+
- Probe module `contributions/probes/assets-manifest-scan.mjs`
|
|
47
|
+
(`anchorAcId: AC-12113-1`, `accountBound: false`): parses the applied
|
|
48
|
+
fixture `wrangler.toml`, asserts `[assets] directory` matches the
|
|
49
|
+
elicited answer, asserts `run_worker_first` matches the elicited
|
|
50
|
+
answer, and refuses on any `pages_build_output_dir` presence.
|
|
51
|
+
|
|
52
|
+
Changed
|
|
53
|
+
|
|
54
|
+
- Existing ADR contribution entries (`ADR-1301` through `ADR-1305`)
|
|
55
|
+
gain the `generic enterprise practice` sentinel on
|
|
56
|
+
`standardsTraceClause` at the contribution entry, per
|
|
57
|
+
`blueprint-authoring.md` section 8a.4. The ADR bodies are not touched.
|
|
58
|
+
|
|
59
|
+
Notes
|
|
60
|
+
|
|
61
|
+
- No new capability minted; `capabilities` remains absent.
|
|
62
|
+
- No new global topic minted; the existing `deploymentTarget` topic on
|
|
63
|
+
ADR-1301 covers the deploy shape unchanged.
|
|
64
|
+
- No runtime dependency added to applying projects.
|
|
65
|
+
- `suggestedCompanions` unchanged (`logging`, `errorHandling`).
|
|
66
|
+
- The shared `cf-platform` sample-app fixture at
|
|
67
|
+
`packages/rcf-lite/test/fixtures/cf-platform/` ships alongside this
|
|
68
|
+
bump as the probe target. T-1 (KV), T-2 (cron), T-3 (Durable Objects)
|
|
69
|
+
and T-5's Turnstile sub-fixture extend the same fixture later.
|
|
@@ -44,6 +44,18 @@ See `docs/topics.md` for the exact strings, the expected resolutions, the deline
|
|
|
44
44
|
|
|
45
45
|
Repo-root wrangler manifest as the sole declaration of Worker name, entry, compatibility settings, and every binding; one Deploy Adapter as the sole caller of the vendor CLI on the boundary; every merge to main uploads a Worker version reachable at both a permanent per-version-id URL and a stable preview alias URL; the uploaded version never serves production traffic; production only changes when the `promote` workflow runs on an explicit operator trigger; the promote workflow accepts one input `versionId` (empty defaults to newest-of-main); rollback IS a promote of a prior version id, on the same workflow, with the same audit shape; every promote runs the Served-surface Verifier against the production URL with bounded retries; a promote whose verifier fails is not marked successful; every uploaded version carries build provenance (commit sha, build timestamp, CI run URL) readable at a fixed health-probe path; the health probe's `versionSha` field is the served-surface verifier's confirmation that the promoted version is the version being served; no secret value ever lives in the wrangler manifest, in a committed environment file, in a CI variable readable outside the promote job, or in any CI log line; a probe against a dev-mode local URL is refused as coverage for a `deployed`-scope AC; the manifest loader refuses a wrangler config whose production route resolves to the same host as the preview alias URL. Every bar is carried by ACs in the doc set, not by this README.
|
|
46
46
|
|
|
47
|
+
## What v1.2.0 adds
|
|
48
|
+
|
|
49
|
+
v1.2.0 is an additive-minor bump. Every shipped v1.1.0 contribution carries through unchanged; the compose invocation is identical (`rcf define blueprint add <path-to>/blueprints/deploy-cloudflare-workers` unchanged); no capability minted; no new global topic; no runtime dependency added; `suggestedCompanions` unchanged (`logging`, `errorHandling`). The bump blesses the Workers-with-static-assets shape as the ratified SPA-on-Workers deploy shape, per the Cloudflare Pages landing-page recommendation (fetched 2026-09-06, verbatim quote on `ADR-1306`).
|
|
50
|
+
|
|
51
|
+
- **Workers-with-static-assets shape (`REQ-013`, `REQ-014`).** Two new REQs cover the `[assets] directory` block on `wrangler.toml` and the SPA fallback discipline via `run_worker_first`. Three new USs in the existing 12xx band (`US-12113` SPA-on-Workers deploy, `US-12114` assets-directory elicitation, `US-12115` migrate-from-Pages guidance) bind the runtime-observable ACs to `TAC-1302-deploy-cloudflare-workers-wrangler-manifest`.
|
|
52
|
+
- **Ratified shape decision (`ADR-1306-deploy-cloudflare-workers-spa-shape`).** Body carries the Cloudflare landing-page quote verbatim; the contribution entry carries `recommendedDefault: true` and `standardsTraceClause: Cloudflare Pages landing-page recommendation (2026-09-06)` per `blueprint-authoring.md` section 8a.2. The ADR names a project-level supersede path for projects that keep the bare-Worker shape or stay on Pages.
|
|
53
|
+
- **Two new elicits.** `assets-directory` (kind `string`, default empty) picks the static-assets root; `run-worker-first` (kind `boolean`, default `false`) picks the SPA fallback discipline. The loader-side `when-elicitedNonEmpty` predicate the spec calls for is a mechanism follow-up, so `run-worker-first` fires unconditionally in v1.2.0; the guide teaches that the elicit is only meaningful when `assets-directory` is non-empty.
|
|
54
|
+
- **Probe module (`contributions/probes/assets-manifest-scan.mjs`).** `accountBound: false`, `anchorAcId: AC-12113-1`. Source-tree parser reads the applied fixture's `wrangler.toml` and asserts the `[assets]` shape against the elicited answers; refuses on `pages_build_output_dir` presence anywhere on the manifest (the Workers-with-static-assets shape and the Pages shape are mutually exclusive per the Cloudflare static-assets doc).
|
|
55
|
+
- **Shared sample-app fixture (`packages/rcf-lite/test/fixtures/cf-platform/`).** T-0 mints the fixture; T-1 (KV), T-2 (cron), T-3 (Durable Objects) and T-5's Turnstile sub-fixture extend it later. Ships `wrangler.toml` with the ratified `[assets]` block, `dist/index.html`, a minimal `src/index.mjs` Worker entry, `package.json` with `wrangler` as a devDependency and `wrangler dev` as the start script, a `run-assets-manifest-scan.mjs` shim wiring the probe against the fixture, and a `README.md` naming the manual `wrangler dev` boot line and the two induced-failure switches (`SIMULATE_MIXED_SHAPE`, `SIMULATE_EMPTY_ASSETS`). The fixture never binds port 4200.
|
|
56
|
+
|
|
57
|
+
A project on v1.1.0 picks up v1.2.0 with the same compose invocation; a fresh apply on a project answering both elicits reads the applied sidecar at `rcf/blueprints/deploy-cloudflare-workers.applied.json`. A project on Pages that wants to migrate reads the guide's new `Workers-with-static-assets: the SPA-on-Workers shape` section for the Cloudflare migrate-from-Pages link.
|
|
58
|
+
|
|
47
59
|
## What v1.1.0 adds
|
|
48
60
|
|
|
49
61
|
v1.1.0 is an additive-non-global minor bump. No global topics change; no contribution is removed; the compose invocation is unchanged. The bump cures seven content findings that the round-2 dogfood acceptance build surfaced when a stranger followed the v1.0.0 teaching against wrangler 4.x reality (three HIGH, three MEDIUM, one LOW). Every fixed teaching is execution-verified against the shipped vendor CLI, with one depth-stop caveat: the bootstrap flow taught in `assets/wrangler-samples/bootstrap-vs-steady-state.md` (F-006) is composed from vendor CLI refusals reproduced against a real Worker (the three refusal-message excerpts in the asset are byte-verified against the shipped CLI's output) and each individual vendor primitive it composes is verified in isolation, but the composed `wrangler deploy --secrets-file <tmp>` bootstrap sequence itself is not end-to-end executed as a single verified run in this ship. A project applying the blueprint exercises the composed sequence the first time it bootstraps a Worker.
|