rcf-lite 0.22.0 → 0.24.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 +38 -0
- package/bin/rcf.js +13 -2
- package/blueprints/application-account-settings/docs/topics.md +9 -1
- package/blueprints/application-admin-console/CHANGELOG.md +12 -0
- package/blueprints/application-admin-console/blueprint.json +34 -1
- package/blueprints/application-admin-console/contributions/adrs/adr-2214-application-admin-console-consume-zero-trust-gate.json +25 -0
- package/blueprints/application-admin-console/contributions/requirements/application-admin-console-req-014.json +17 -0
- package/blueprints/application-admin-console/contributions/tacs/tac-2214-application-admin-console-access-gated-signin-surface.json +32 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21815.json +27 -0
- package/blueprints/application-admin-console/contributions/user-stories/application-admin-console-us-21816.json +27 -0
- package/blueprints/application-admin-console/docs/topics.md +9 -1
- package/blueprints/application-admin-console/guide/application-admin-console.md +24 -0
- package/blueprints/application-admin-console/probe-packs/application-admin-console.pack.mjs +26 -1
- package/blueprints/application-api-rest/docs/topics.md +9 -1
- package/blueprints/application-charts/docs/topics.md +9 -1
- package/blueprints/application-dashboard/docs/topics.md +9 -1
- package/blueprints/application-datatable/docs/topics.md +9 -1
- package/blueprints/application-empty-error-states/docs/topics.md +9 -1
- package/blueprints/application-error-handling/docs/topics.md +9 -1
- package/blueprints/application-file-upload/docs/topics.md +9 -1
- package/blueprints/application-forms-wizard/docs/topics.md +9 -1
- package/blueprints/application-notifications-in-app/docs/topics.md +9 -1
- package/blueprints/application-onboarding-tour/docs/topics.md +9 -1
- package/blueprints/application-spa/docs/topics.md +10 -2
- package/blueprints/delivery-ci-workflows/docs/topics.md +9 -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 +10 -2
- package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +25 -0
- package/blueprints/edge-cloudflare-access/CHANGELOG.md +23 -0
- package/blueprints/edge-cloudflare-access/README.md +141 -0
- package/blueprints/edge-cloudflare-access/blueprint.json +197 -0
- package/blueprints/edge-cloudflare-access/contributions/adrs/adr-3501-edge-cloudflare-access-jwt-gate.json +14 -0
- package/blueprints/edge-cloudflare-access/contributions/adrs/adr-3502-edge-cloudflare-access-identity-provider.json +25 -0
- package/blueprints/edge-cloudflare-access/contributions/adrs/adr-3503-edge-cloudflare-access-policy-scope.json +12 -0
- package/blueprints/edge-cloudflare-access/contributions/adrs/adr-3504-edge-cloudflare-access-audit-retention.json +12 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/admin-console-gate-surface.mjs +100 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/audit-event-secrecy.mjs +70 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/jwt-validator-fixture.mjs +63 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/jwt-validator-reject.mjs +95 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/probe-utils.mjs +90 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/real-account-gated-url.mjs +65 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/run-admin-console-gate-surface.mjs +5 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/run-audit-event-secrecy.mjs +5 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/run-jwt-validator-fixture.mjs +5 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/run-jwt-validator-reject.mjs +5 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/run-real-account-gated-url.mjs +5 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/run-wrangler-seam.mjs +5 -0
- package/blueprints/edge-cloudflare-access/contributions/probes/wrangler-seam.mjs +203 -0
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-001.json +17 -0
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-002.json +17 -0
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-003.json +17 -0
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-004.json +17 -0
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-005.json +17 -0
- package/blueprints/edge-cloudflare-access/contributions/requirements/edge-cloudflare-access-req-006.json +18 -0
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3501-edge-cloudflare-access-jwt-validator.json +31 -0
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3502-edge-cloudflare-access-application-declaration.json +33 -0
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3503-edge-cloudflare-access-policy-shape.json +25 -0
- package/blueprints/edge-cloudflare-access/contributions/tacs/tac-3504-edge-cloudflare-access-audit-sink.json +25 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34101.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34102.json +28 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34103.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34104.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34105.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34106.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34107.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34108.json +27 -0
- package/blueprints/edge-cloudflare-access/contributions/user-stories/edge-cloudflare-access-us-34109.json +27 -0
- package/blueprints/edge-cloudflare-access/docs/topics.md +68 -0
- package/blueprints/edge-cloudflare-access/guide/edge-cloudflare-access.md +180 -0
- package/blueprints/edge-cloudflare-rate-limiting/CHANGELOG.md +10 -0
- package/blueprints/edge-cloudflare-rate-limiting/README.md +73 -0
- package/blueprints/edge-cloudflare-rate-limiting/blueprint.json +174 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/adrs/adr-3701-edge-cloudflare-rate-limiting-throttle-contract.json +14 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/adrs/adr-3702-edge-cloudflare-rate-limiting-layering.json +14 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/adrs/adr-3703-edge-cloudflare-rate-limiting-manifest-shape.json +14 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/adrs/adr-3704-edge-cloudflare-rate-limiting-drift-audit-cadence.json +14 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/event-secrecy.mjs +104 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/manifest-presence.mjs +95 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/manifest-schema-validate.mjs +130 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/probe-utils.mjs +111 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/real-account-burst-and-429.mjs +104 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/run-event-secrecy.mjs +5 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/run-manifest-presence.mjs +5 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/run-manifest-schema-validate.mjs +5 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/probes/run-real-account-burst-and-429.mjs +5 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-001.json +17 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-002.json +17 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-003.json +17 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-004.json +17 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/requirements/edge-cloudflare-rate-limiting-req-005.json +17 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/schemas/rate-limit-rule.schema.json +67 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3701-edge-cloudflare-rate-limiting-manifest-schema.json +31 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3702-edge-cloudflare-rate-limiting-management-surface-doc.json +25 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/tacs/tac-3703-edge-cloudflare-rate-limiting-drift-audit-runner.json +26 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36101.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36102.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36103.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36104.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36105.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36106.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36107.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/contributions/user-stories/edge-cloudflare-rate-limiting-us-36108.json +27 -0
- package/blueprints/edge-cloudflare-rate-limiting/docs/topics.md +68 -0
- package/blueprints/edge-cloudflare-rate-limiting/guide/edge-cloudflare-rate-limiting.md +88 -0
- package/blueprints/edge-cloudflare-turnstile/CHANGELOG.md +20 -0
- package/blueprints/edge-cloudflare-turnstile/README.md +95 -0
- package/blueprints/edge-cloudflare-turnstile/blueprint.json +161 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/adrs/adr-3601-edge-cloudflare-turnstile-verifier-contract.json +14 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/adrs/adr-3602-edge-cloudflare-turnstile-widget-mode.json +14 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/adrs/adr-3603-edge-cloudflare-turnstile-refuse-shape.json +14 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/event-secrecy.mjs +51 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/guard-shape-scan.mjs +48 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/probe-utils.mjs +139 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/run-event-secrecy.mjs +5 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/run-guard-shape-scan.mjs +5 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/run-secret-shape-scan.mjs +5 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/run-siteverify-fixture.mjs +5 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/secret-shape-scan.mjs +77 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/probes/siteverify-fixture.mjs +53 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-001.json +17 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-002.json +17 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-003.json +17 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-004.json +17 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/requirements/edge-cloudflare-turnstile-req-005.json +17 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3601-edge-cloudflare-turnstile-widget-mount.json +26 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3602-edge-cloudflare-turnstile-server-verifier.json +36 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/tacs/tac-3603-edge-cloudflare-turnstile-magic-link-hook.json +25 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35101.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35102.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35103.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35104.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35105.json +36 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35106.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35107.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/contributions/user-stories/edge-cloudflare-turnstile-us-35108.json +27 -0
- package/blueprints/edge-cloudflare-turnstile/docs/topics.md +68 -0
- package/blueprints/edge-cloudflare-turnstile/guide/edge-cloudflare-turnstile.md +104 -0
- package/blueprints/edge-cloudflare-turnstile/probe-packs/edge-cloudflare-turnstile.pack.mjs +146 -0
- package/blueprints/email-smtp-resend/docs/topics.md +9 -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 +68 -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 +68 -0
- package/blueprints/messaging-queue-cloudflare/guide/messaging-queue-cloudflare.md +110 -0
- package/blueprints/object-storage-s3/docs/topics.md +9 -1
- package/blueprints/observability-essentials/docs/topics.md +9 -1
- package/blueprints/observability-logging/docs/topics.md +9 -1
- package/blueprints/observability-probe-endpoints/docs/topics.md +9 -1
- package/blueprints/persistence-data-d1/docs/topics.md +9 -1
- package/blueprints/persistence-data-postgres/docs/topics.md +9 -1
- package/blueprints/persistence-data-sqlite/docs/topics.md +9 -1
- package/blueprints/platform-cloudflare-cron-triggers/CHANGELOG.md +22 -0
- package/blueprints/platform-cloudflare-cron-triggers/README.md +117 -0
- package/blueprints/platform-cloudflare-cron-triggers/blueprint.json +85 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/adrs/adr-3301-platform-cloudflare-cron-triggers-scheduled-trigger-contract.json +14 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/adrs/adr-3302-platform-cloudflare-cron-triggers-dispatcher-mode.json +14 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/adrs/adr-3303-platform-cloudflare-cron-triggers-skew-tolerance-default.json +14 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/dispatcher-routing.mjs +64 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/event-secrecy.mjs +100 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/probe-utils.mjs +70 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/real-account-scheduled-smoke.mjs +100 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/run-dispatcher-routing.mjs +5 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/run-event-secrecy.mjs +5 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/run-real-account-scheduled-smoke.mjs +5 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/run-skew-tolerance.mjs +5 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/run-wrangler-test-scheduled.mjs +5 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/skew-tolerance.mjs +130 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/probes/wrangler-test-scheduled.mjs +129 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-001.json +17 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-002.json +17 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-003.json +17 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/requirements/platform-cloudflare-cron-triggers-req-004.json +17 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3301-platform-cloudflare-cron-triggers-scheduled-handler.json +22 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3302-platform-cloudflare-cron-triggers-expression-router.json +22 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/tacs/tac-3303-platform-cloudflare-cron-triggers-event-sink.json +21 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32101.json +25 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32102.json +34 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32103.json +34 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32104.json +34 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32105.json +25 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32106.json +25 -0
- package/blueprints/platform-cloudflare-cron-triggers/contributions/user-stories/platform-cloudflare-cron-triggers-us-32107.json +25 -0
- package/blueprints/platform-cloudflare-cron-triggers/docs/topics.md +71 -0
- package/blueprints/platform-cloudflare-cron-triggers/guide/platform-cloudflare-cron-triggers.md +119 -0
- package/blueprints/platform-cloudflare-durable-objects/CHANGELOG.md +23 -0
- package/blueprints/platform-cloudflare-durable-objects/README.md +200 -0
- package/blueprints/platform-cloudflare-durable-objects/blueprint.json +243 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/adrs/adr-3401-platform-cloudflare-durable-objects-single-cell-contract.json +14 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/adrs/adr-3402-platform-cloudflare-durable-objects-websocket-hub-contract.json +14 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/adrs/adr-3403-platform-cloudflare-durable-objects-storage-backend.json +14 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/adrs/adr-3404-platform-cloudflare-durable-objects-migrations-shape.json +14 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/adrs/adr-3405-platform-cloudflare-durable-objects-hibernation-posture.json +14 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/alarm-fires-once.mjs +63 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/namespace-facade-ready.mjs +60 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/probe-utils.mjs +105 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/real-account-storage-smoke.mjs +58 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-alarm-fires-once.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-namespace-facade-ready.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-real-account-storage-smoke.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-single-cell-concurrent-increment.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-sole-reader-scan.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-storage-round-trip.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-websocket-hub-broadcast.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/run-wrangler-seam.mjs +5 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/single-cell-concurrent-increment.mjs +56 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/sole-reader-scan.mjs +117 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/storage-round-trip.mjs +87 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/websocket-hub-broadcast.mjs +112 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/probes/wrangler-seam.mjs +257 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-001.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-002.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-003.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-004.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-005.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-006.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-007.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/requirements/platform-cloudflare-durable-objects-req-008.json +17 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3401-platform-cloudflare-durable-objects-namespace-facade.json +31 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3402-platform-cloudflare-durable-objects-single-cell-shape.json +30 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3403-platform-cloudflare-durable-objects-alarm-handler.json +29 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3404-platform-cloudflare-durable-objects-websocket-hub.json +31 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/tacs/tac-3405-platform-cloudflare-durable-objects-event-sink.json +24 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33101.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33102.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33103.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33104.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33105.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33106.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33107.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33108.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33109.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33110.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33111.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33112.json +27 -0
- package/blueprints/platform-cloudflare-durable-objects/contributions/user-stories/platform-cloudflare-durable-objects-us-33113.json +25 -0
- package/blueprints/platform-cloudflare-durable-objects/docs/topics.md +73 -0
- package/blueprints/platform-cloudflare-durable-objects/guide/platform-cloudflare-durable-objects.md +237 -0
- package/blueprints/platform-cloudflare-kv/CHANGELOG.md +21 -0
- package/blueprints/platform-cloudflare-kv/README.md +159 -0
- package/blueprints/platform-cloudflare-kv/blueprint.json +87 -0
- package/blueprints/platform-cloudflare-kv/contributions/adrs/adr-3201-platform-cloudflare-kv-key-value-store-contract.json +14 -0
- package/blueprints/platform-cloudflare-kv/contributions/adrs/adr-3202-platform-cloudflare-kv-default-cache-ttl.json +14 -0
- package/blueprints/platform-cloudflare-kv/contributions/adrs/adr-3203-platform-cloudflare-kv-key-naming-convention.json +14 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/cache-aside-hit-then-miss.mjs +82 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/event-secrecy.mjs +102 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/facade-round-trip.mjs +92 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/list-with-prefix.mjs +52 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/probe-utils.mjs +73 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/real-account-eventual-consistency-smoke.mjs +102 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/run-cache-aside-hit-then-miss.mjs +5 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/run-event-secrecy.mjs +5 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/run-facade-round-trip.mjs +5 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/run-list-with-prefix.mjs +5 -0
- package/blueprints/platform-cloudflare-kv/contributions/probes/run-real-account-eventual-consistency-smoke.mjs +5 -0
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-001.json +18 -0
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-002.json +18 -0
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-003.json +18 -0
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-004.json +18 -0
- package/blueprints/platform-cloudflare-kv/contributions/requirements/platform-cloudflare-kv-req-005.json +18 -0
- package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3201-platform-cloudflare-kv-facade.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3202-platform-cloudflare-kv-cache-aside.json +26 -0
- package/blueprints/platform-cloudflare-kv/contributions/tacs/tac-3203-platform-cloudflare-kv-event-sink.json +25 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31101.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31102.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31103.json +36 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31104.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31105.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31106.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31107.json +27 -0
- package/blueprints/platform-cloudflare-kv/contributions/user-stories/platform-cloudflare-kv-us-31108.json +27 -0
- package/blueprints/platform-cloudflare-kv/docs/topics.md +71 -0
- package/blueprints/platform-cloudflare-kv/guide/platform-cloudflare-kv.md +138 -0
- package/blueprints/security-auth-clerk/docs/topics.md +9 -1
- package/blueprints/security-auth-keycloak/docs/topics.md +9 -1
- package/blueprints/security-auth-magic-link/docs/topics.md +9 -1
- package/blueprints/security-auth-oauth2/docs/topics.md +9 -1
- package/blueprints/security-secrets-management/docs/topics.md +9 -1
- package/fixtures/canary-manifest.json +6 -6
- package/package.json +1 -1
- package/rcf/adrs/adr-2214-application-admin-console-consume-zero-trust-gate.json +13 -0
- package/rcf/adrs/adr-3501-edge-cloudflare-access-jwt-gate.json +13 -0
- package/rcf/adrs/adr-3502-edge-cloudflare-access-identity-provider.json +13 -0
- package/rcf/adrs/adr-3503-edge-cloudflare-access-policy-scope.json +13 -0
- package/rcf/adrs/adr-3504-edge-cloudflare-access-audit-retention.json +13 -0
- package/rcf/adrs/adr-3601-edge-cloudflare-turnstile-verifier-contract.json +13 -0
- package/rcf/adrs/adr-3602-edge-cloudflare-turnstile-widget-mode.json +13 -0
- package/rcf/adrs/adr-3603-edge-cloudflare-turnstile-refuse-shape.json +13 -0
- package/rcf/adrs/adr-3701-edge-cloudflare-rate-limiting-throttle-contract.json +13 -0
- package/rcf/adrs/adr-3702-edge-cloudflare-rate-limiting-layering.json +13 -0
- package/rcf/adrs/adr-3703-edge-cloudflare-rate-limiting-manifest-shape.json +13 -0
- package/rcf/adrs/adr-3704-edge-cloudflare-rate-limiting-drift-audit-cadence.json +13 -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/code-nodes/cn-230.json +13 -0
- package/rcf/code-nodes/cn-231.json +14 -0
- package/rcf/code-nodes/cn-232.json +13 -0
- package/rcf/code-nodes/cn-233.json +14 -0
- package/rcf/code-nodes/cn-234.json +13 -0
- package/rcf/code-nodes/cn-260.json +21 -0
- package/rcf/code-nodes/cn-261.json +14 -0
- package/rcf/code-nodes/cn-262.json +18 -0
- package/rcf/code-nodes/cn-263.json +12 -0
- package/rcf/code-nodes/cn-264.json +13 -0
- package/rcf/code-nodes/cn-265.json +15 -0
- package/rcf/code-nodes/cn-266.json +12 -0
- package/rcf/code-nodes/cn-267.json +12 -0
- package/rcf/code-nodes/cn-290.json +21 -0
- package/rcf/code-nodes/cn-291.json +12 -0
- package/rcf/code-nodes/cn-292.json +13 -0
- package/rcf/code-nodes/cn-293.json +13 -0
- package/rcf/code-nodes/cn-294.json +13 -0
- package/rcf/code-nodes/cn-295.json +12 -0
- package/rcf/code-nodes/cn-296.json +12 -0
- package/rcf/code-nodes/cn-297.json +12 -0
- package/rcf/code-nodes/cn-298.json +12 -0
- package/rcf/code-nodes/cn-299.json +12 -0
- package/rcf/code-nodes/cn-300.json +12 -0
- package/rcf/code-nodes/cn-301.json +14 -0
- package/rcf/code-nodes/cn-302.json +12 -0
- package/rcf/code-nodes/cn-303.json +12 -0
- package/rcf/code-nodes/cn-304.json +21 -0
- package/rcf/code-nodes/cn-320.json +20 -0
- package/rcf/code-nodes/cn-321.json +14 -0
- package/rcf/code-nodes/cn-350.json +19 -0
- package/rcf/code-nodes/cn-380.json +19 -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/fbs/fbs-070.json +24 -0
- package/rcf/fbs/fbs-080.json +24 -0
- package/rcf/fbs/fbs-090.json +24 -0
- package/rcf/fbs/fbs-100.json +23 -0
- package/rcf/fbs/fbs-101.json +16 -0
- package/rcf/fbs/fbs-110.json +23 -0
- package/rcf/fbs/fbs-120.json +22 -0
- package/rcf/requirements/req-029.json +57 -0
- package/rcf/requirements/req-030.json +67 -0
- package/rcf/requirements/req-042.json +59 -0
- package/rcf/requirements/req-043.json +39 -0
- package/rcf/requirements/req-050.json +18 -0
- package/rcf/requirements/req-051.json +18 -0
- package/rcf/requirements/req-052.json +18 -0
- package/rcf/requirements/req-053.json +18 -0
- package/rcf/requirements/req-054.json +18 -0
- package/rcf/requirements/req-060.json +20 -0
- package/rcf/requirements/req-061.json +18 -0
- package/rcf/requirements/req-062.json +20 -0
- package/rcf/requirements/req-063.json +20 -0
- package/rcf/requirements/req-070.json +18 -0
- package/rcf/requirements/req-071.json +18 -0
- package/rcf/requirements/req-072.json +18 -0
- package/rcf/requirements/req-073.json +18 -0
- package/rcf/requirements/req-074.json +18 -0
- package/rcf/requirements/req-075.json +18 -0
- package/rcf/requirements/req-076.json +18 -0
- package/rcf/requirements/req-077.json +18 -0
- package/rcf/requirements/req-080.json +18 -0
- package/rcf/requirements/req-081.json +18 -0
- package/rcf/requirements/req-082.json +18 -0
- package/rcf/requirements/req-083.json +18 -0
- package/rcf/requirements/req-084.json +18 -0
- package/rcf/requirements/req-085.json +18 -0
- package/rcf/requirements/req-086.json +18 -0
- package/rcf/requirements/req-090.json +44 -0
- package/rcf/requirements/req-091.json +53 -0
- package/rcf/requirements/req-092.json +32 -0
- package/rcf/requirements/req-093.json +52 -0
- package/rcf/requirements/req-094.json +32 -0
- package/rcf/requirements/req-100.json +13 -0
- package/rcf/requirements/req-101.json +13 -0
- package/rcf/requirements/req-102.json +13 -0
- package/rcf/requirements/req-103.json +13 -0
- package/rcf/requirements/req-104.json +13 -0
- package/rcf/tacs/tac-2214-application-admin-console-access-gated-signin-surface.json +15 -0
- package/rcf/tacs/tac-3501-edge-cloudflare-access-jwt-validator.json +15 -0
- package/rcf/tacs/tac-3502-edge-cloudflare-access-application-declaration.json +15 -0
- package/rcf/tacs/tac-3503-edge-cloudflare-access-policy-shape.json +15 -0
- package/rcf/tacs/tac-3504-edge-cloudflare-access-audit-sink.json +15 -0
- package/rcf/tacs/tac-3601-edge-cloudflare-turnstile-widget-mount.json +15 -0
- package/rcf/tacs/tac-3602-edge-cloudflare-turnstile-server-verifier.json +15 -0
- package/rcf/tacs/tac-3603-edge-cloudflare-turnstile-magic-link-hook.json +15 -0
- package/rcf/tacs/tac-3701-edge-cloudflare-rate-limiting-manifest-schema.json +16 -0
- package/rcf/tacs/tac-3702-edge-cloudflare-rate-limiting-management-surface-doc.json +15 -0
- package/rcf/tacs/tac-3703-edge-cloudflare-rate-limiting-drift-audit-runner.json +16 -0
- package/rcf/test-suites/ts-052.json +58 -8
- 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/test-suites/ts-080.json +22 -0
- package/rcf/test-suites/ts-081.json +22 -0
- package/rcf/test-suites/ts-082.json +30 -0
- package/rcf/test-suites/ts-083.json +22 -0
- package/rcf/test-suites/ts-084.json +30 -0
- package/rcf/test-suites/ts-085.json +22 -0
- package/rcf/test-suites/ts-086.json +22 -0
- package/rcf/test-suites/ts-087.json +22 -0
- package/rcf/test-suites/ts-090.json +22 -0
- package/rcf/test-suites/ts-091.json +22 -0
- package/rcf/test-suites/ts-092.json +22 -0
- package/rcf/test-suites/ts-093.json +30 -0
- package/rcf/test-suites/ts-094.json +30 -0
- package/rcf/test-suites/ts-095.json +30 -0
- package/rcf/test-suites/ts-096.json +22 -0
- package/rcf/test-suites/ts-100.json +22 -0
- package/rcf/test-suites/ts-101.json +22 -0
- package/rcf/test-suites/ts-102.json +22 -0
- package/rcf/test-suites/ts-103.json +22 -0
- package/rcf/test-suites/ts-104.json +22 -0
- package/rcf/test-suites/ts-105.json +22 -0
- package/rcf/test-suites/ts-106.json +22 -0
- package/rcf/test-suites/ts-107.json +22 -0
- package/rcf/test-suites/ts-108.json +22 -0
- package/rcf/test-suites/ts-109.json +22 -0
- package/rcf/test-suites/ts-110.json +22 -0
- package/rcf/test-suites/ts-111.json +22 -0
- package/rcf/test-suites/ts-112.json +22 -0
- package/rcf/test-suites/ts-113.json +22 -0
- package/rcf/test-suites/ts-114.json +22 -0
- package/rcf/test-suites/ts-115.json +22 -0
- package/rcf/test-suites/ts-116.json +22 -0
- package/rcf/test-suites/ts-117.json +22 -0
- package/rcf/test-suites/ts-118.json +22 -0
- package/rcf/test-suites/ts-119.json +30 -0
- package/rcf/test-suites/ts-120.json +22 -0
- package/rcf/test-suites/ts-121.json +22 -0
- package/rcf/test-suites/ts-122.json +22 -0
- package/rcf/test-suites/ts-123.json +22 -0
- package/rcf/test-suites/ts-124.json +22 -0
- package/rcf/test-suites/ts-125.json +22 -0
- package/rcf/test-suites/ts-126.json +22 -0
- package/rcf/test-suites/ts-127.json +22 -0
- package/rcf/test-suites/ts-130.json +22 -0
- package/rcf/test-suites/ts-131.json +22 -0
- package/rcf/test-suites/ts-132.json +22 -0
- package/rcf/test-suites/ts-133.json +22 -0
- package/rcf/test-suites/ts-134.json +22 -0
- package/rcf/test-suites/ts-135.json +22 -0
- package/rcf/test-suites/ts-136.json +22 -0
- package/rcf/test-suites/ts-137.json +22 -0
- package/rcf/user-stories/us-10001.json +23 -0
- package/rcf/user-stories/us-10101.json +23 -0
- package/rcf/user-stories/us-10201.json +23 -0
- package/rcf/user-stories/us-10301.json +23 -0
- package/rcf/user-stories/us-10401.json +23 -0
- package/rcf/user-stories/us-10601.json +23 -0
- package/rcf/user-stories/us-10701.json +23 -0
- package/rcf/user-stories/us-10801.json +23 -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-4201.json +69 -0
- package/rcf/user-stories/us-4301.json +78 -0
- package/rcf/user-stories/us-5001.json +27 -0
- package/rcf/user-stories/us-5002.json +27 -0
- package/rcf/user-stories/us-5101.json +36 -0
- package/rcf/user-stories/us-5102.json +27 -0
- package/rcf/user-stories/us-5201.json +36 -0
- package/rcf/user-stories/us-5301.json +27 -0
- package/rcf/user-stories/us-5302.json +27 -0
- package/rcf/user-stories/us-5401.json +27 -0
- package/rcf/user-stories/us-6001.json +27 -0
- package/rcf/user-stories/us-6002.json +27 -0
- package/rcf/user-stories/us-6003.json +27 -0
- package/rcf/user-stories/us-6101.json +36 -0
- package/rcf/user-stories/us-6201.json +36 -0
- package/rcf/user-stories/us-6301.json +36 -0
- package/rcf/user-stories/us-6302.json +27 -0
- package/rcf/user-stories/us-7001.json +27 -0
- package/rcf/user-stories/us-7002.json +27 -0
- package/rcf/user-stories/us-7101.json +27 -0
- package/rcf/user-stories/us-7201.json +27 -0
- package/rcf/user-stories/us-7301.json +27 -0
- package/rcf/user-stories/us-7401.json +27 -0
- package/rcf/user-stories/us-7402.json +27 -0
- package/rcf/user-stories/us-7501.json +27 -0
- package/rcf/user-stories/us-7601.json +27 -0
- package/rcf/user-stories/us-7701.json +27 -0
- package/rcf/user-stories/us-8001.json +24 -0
- package/rcf/user-stories/us-8002.json +24 -0
- package/rcf/user-stories/us-8003.json +24 -0
- package/rcf/user-stories/us-8101.json +24 -0
- package/rcf/user-stories/us-8201.json +24 -0
- package/rcf/user-stories/us-8301.json +24 -0
- package/rcf/user-stories/us-8401.json +24 -0
- package/rcf/user-stories/us-8501.json +24 -0
- package/rcf/user-stories/us-8502.json +24 -0
- package/rcf/user-stories/us-8601.json +24 -0
- package/rcf/user-stories/us-8602.json +24 -0
- package/rcf/user-stories/us-9001.json +27 -0
- package/rcf/user-stories/us-9002.json +27 -0
- package/rcf/user-stories/us-9101.json +27 -0
- package/rcf/user-stories/us-9102.json +27 -0
- package/rcf/user-stories/us-9201.json +27 -0
- package/rcf/user-stories/us-9301.json +27 -0
- package/rcf/user-stories/us-9302.json +27 -0
- package/rcf/user-stories/us-9401.json +27 -0
- package/releases/releases.yaml +21 -1
- package/src/blueprint/apply.js +7 -4
- package/src/blueprint/capabilities.js +25 -0
- package/src/cli/blueprint.js +8 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:28.334Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:28.623Z",
|
|
4
|
+
"purpose": "Cover AC-10101-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10101-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-131",
|
|
10
|
+
"usId": "US-10101",
|
|
11
|
+
"title": "T-6 AC-10101-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-131-guide-management-surface-doc",
|
|
15
|
+
"acId": "AC-10101-1",
|
|
16
|
+
"description": "AC-10101-1 anatomy proof (T-6 rate-limiting slice, TC-131-guide-management-surface-doc)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10101-1 anatomy proof (TC-131-guide-management-surface-doc)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:28.913Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:29.200Z",
|
|
4
|
+
"purpose": "Cover AC-10201-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10201-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-132",
|
|
10
|
+
"usId": "US-10201",
|
|
11
|
+
"title": "T-6 AC-10201-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-132-real-account-burst-and-429-or-skipped",
|
|
15
|
+
"acId": "AC-10201-1",
|
|
16
|
+
"description": "AC-10201-1 anatomy proof (T-6 rate-limiting slice, TC-132-real-account-burst-and-429-or-skipped)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10201-1 anatomy proof (TC-132-real-account-burst-and-429-or-skipped)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:29.506Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:29.793Z",
|
|
4
|
+
"purpose": "Cover AC-10301-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10301-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-133",
|
|
10
|
+
"usId": "US-10301",
|
|
11
|
+
"title": "T-6 AC-10301-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-133-drift-audit-runner-diff",
|
|
15
|
+
"acId": "AC-10301-1",
|
|
16
|
+
"description": "AC-10301-1 anatomy proof (T-6 rate-limiting slice, TC-133-drift-audit-runner-diff)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10301-1 anatomy proof (TC-133-drift-audit-runner-diff)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:30.086Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:30.375Z",
|
|
4
|
+
"purpose": "Cover AC-10401-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10401-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-134",
|
|
10
|
+
"usId": "US-10401",
|
|
11
|
+
"title": "T-6 AC-10401-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-134-composition-guide-section",
|
|
15
|
+
"acId": "AC-10401-1",
|
|
16
|
+
"description": "AC-10401-1 anatomy proof (T-6 rate-limiting slice, TC-134-composition-guide-section)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10401-1 anatomy proof (TC-134-composition-guide-section)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:30.663Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:30.952Z",
|
|
4
|
+
"purpose": "Cover AC-10601-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10601-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-135",
|
|
10
|
+
"usId": "US-10601",
|
|
11
|
+
"title": "T-6 AC-10601-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-135-manifest-schema-validate-pass-and-fail",
|
|
15
|
+
"acId": "AC-10601-1",
|
|
16
|
+
"description": "AC-10601-1 anatomy proof (T-6 rate-limiting slice, TC-135-manifest-schema-validate-pass-and-fail)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10601-1 anatomy proof (TC-135-manifest-schema-validate-pass-and-fail)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:31.243Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:31.532Z",
|
|
4
|
+
"purpose": "Cover AC-10701-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10701-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-136",
|
|
10
|
+
"usId": "US-10701",
|
|
11
|
+
"title": "T-6 AC-10701-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-136-event-secrecy-pass-and-leak",
|
|
15
|
+
"acId": "AC-10701-1",
|
|
16
|
+
"description": "AC-10701-1 anatomy proof (T-6 rate-limiting slice, TC-136-event-secrecy-pass-and-leak)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10701-1 anatomy proof (TC-136-event-secrecy-pass-and-leak)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:31.821Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:32.111Z",
|
|
4
|
+
"purpose": "Cover AC-10801-1 via the T-6 anatomy test in test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-10801-1"
|
|
8
|
+
],
|
|
9
|
+
"id": "TS-137",
|
|
10
|
+
"usId": "US-10801",
|
|
11
|
+
"title": "T-6 AC-10801-1 anatomy proof",
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-137-manifest-presence-missing-fail",
|
|
15
|
+
"acId": "AC-10801-1",
|
|
16
|
+
"description": "AC-10801-1 anatomy proof (T-6 rate-limiting slice, TC-137-manifest-presence-missing-fail)",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"testPointer": "test/blueprint/edge-cloudflare-rate-limiting-anatomy.test.js::T-6 rate-limiting AC-10801-1 anatomy proof (TC-137-manifest-presence-missing-fail)"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "draft"
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:02.422Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:02.422Z",
|
|
4
|
+
"asA": "shelf consumer applying the edge-cloudflare-rate-limiting v1.0.0 blueprint on a Workers project using the cf-edge fixture",
|
|
5
|
+
"iWant": "the elicited manifest directory to hold at least one committed JSON file per rate-limit rule, each carrying the seven documented fields and no plaintext secret",
|
|
6
|
+
"soThat": "the rules are source-controlled and reviewable and the operator has a stable source of truth to apply to the live zone",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10001-1",
|
|
10
|
+
"description": "The cf-edge fixture's cloudflare/rate-limits/ directory holds at least one JSON file per rule; every file parses; every file carries id, expression, threshold, period, characteristics, action, duration; no file body carries a plaintext bearer token, private key or inline CF_API_TOKEN reference.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3701-edge-cloudflare-rate-limiting-manifest-schema"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10001",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-100",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 rate-limit manifest present in cf-edge cloudflare/rate-limits/ carrying seven required fields without plaintext secrets"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:02.760Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:02.760Z",
|
|
4
|
+
"asA": "operator on the applying project preparing to push rate-limit rules from the local manifest to the live Cloudflare zone",
|
|
5
|
+
"iWant": "a documented flow with both wrangler command steps and a Cloudflare dashboard walkthrough",
|
|
6
|
+
"soThat": "I can pick the flow that suits my operating discipline and reproduce the apply from the manifest",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10101-1",
|
|
10
|
+
"description": "The blueprint guide documents an operator-facing management surface with a wrangler command flow and a Cloudflare dashboard flow; the guide references https://developers.cloudflare.com/waf/rate-limiting-rules/.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3702-edge-cloudflare-rate-limiting-management-surface-doc"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10101",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-101",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 operator-facing management surface: wrangler command flow and Cloudflare dashboard flow documented in the guide"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:03.086Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:03.086Z",
|
|
4
|
+
"asA": "operator running the real-account burst probe against a scheduled HQ-owned URL",
|
|
5
|
+
"iWant": "the probe to fire an undici burst above the rule threshold and observe the (N+1)th and subsequent requests return HTTP 429 with Retry-After and Cf-Ray, or record accountBoundSkipped in CI",
|
|
6
|
+
"soThat": "the over-threshold behaviour is verified against a real Cloudflare account when the account is available, and CI without an account records the honest verdict per ruling 6",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10201-1",
|
|
10
|
+
"description": "With CI_HAS_CLOUDFLARE_ACCOUNT=true and CF_RATE_LIMIT_URL set, the burst probe returns 429 with Retry-After and Cf-Ray on over-threshold requests; without either env var it records accountBoundSkipped: true and aggregates to pass per spec section 3.5 and ruling 6.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3701-edge-cloudflare-rate-limiting-manifest-schema"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10201",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-102",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 real-account burst returns 429 with Retry-After and Cf-Ray on over-threshold requests, or accountBoundSkipped in CI per ruling 6"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:03.411Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:03.411Z",
|
|
4
|
+
"asA": "operator on the applying project running the scheduled drift-audit runner behind the elicited cadence",
|
|
5
|
+
"iWant": "the runner to fetch the live rules via the Cloudflare API and diff each against the local manifest, constructing metadata-only drift records",
|
|
6
|
+
"soThat": "manifest drift is surfaced through the logging companion rather than lingering unnoticed",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10301-1",
|
|
10
|
+
"description": "Given a fixture manifest with threshold 60 and a fake live-zone response with threshold 90 on the same rule id, the runner constructs one drift record with {ruleId, clientIpHash, outcome, timestamp, diff:[{field:threshold, manifestValue:60, liveValue:90}]}; no full IP, body or user-agent field is present.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3703-edge-cloudflare-rate-limiting-drift-audit-runner"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10301",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-103",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 drift-audit runner reads live rules and diffs against manifest, constructing metadata-only drift records"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:03.736Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:03.736Z",
|
|
4
|
+
"asA": "operator applying both edge-cloudflare-rate-limiting and security-auth-magic-link on the same project",
|
|
5
|
+
"iWant": "the guide to name the ADR-3702 layering explicitly with a copy-paste example",
|
|
6
|
+
"soThat": "I understand the two-rule shape at apply time rather than by trial and error",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10401-1",
|
|
10
|
+
"description": "The guide contains a Composition with security-auth-magic-link section referencing ADR-3702, naming the two characteristic sets (IP-per-URL and per-email per-minute) verbatim, and showing a copy-paste example of both blueprints applied.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3702-edge-cloudflare-rate-limiting-management-surface-doc"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10401",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-104",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 composition with security-auth-magic-link: zone rule layers over the per-email application rule per ADR-3702, documented in the guide"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:04.062Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:04.062Z",
|
|
4
|
+
"asA": "operator committing new rate-limit rule files under the elicited manifest directory",
|
|
5
|
+
"iWant": "the shipped JSON Schema to validate every rule file and the manifest-schema-validate probe to surface any file that violates the shape",
|
|
6
|
+
"soThat": "invalid manifest changes are caught in the fixture probe rather than at operator apply time",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10601-1",
|
|
10
|
+
"description": "The manifest-schema-validate probe validates every manifest file against the shipped rate-limit-rule.schema.json (draft-07); valid files pass; a manifest file missing threshold (SIMULATE_SCHEMA_INVALID=true) fails validation with the offending field named in the detail.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3701-edge-cloudflare-rate-limiting-manifest-schema"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10601",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-100",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 manifest schema validates every rule file against the shipped draft-07 schema and refuses invalid shapes"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:04.389Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:04.389Z",
|
|
4
|
+
"asA": "operator reading drift-audit reports and rate-limit event records through the applied logging companion",
|
|
5
|
+
"iWant": "every drift-audit record to carry only metadata-safe fields, never a full IP, request body or user agent string",
|
|
6
|
+
"soThat": "the audit trail is safe to store, forward and read without additional PII scrubbing",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10701-1",
|
|
10
|
+
"description": "The event-secrecy probe drives the drift-audit runner with a synthetic input pair; every record carries only {ruleId, clientIpHash, outcome, timestamp, diff}; SIMULATE_EVENT_LEAK_IP=true injects a full IP into the outcome so the probe surfaces the leak.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3703-edge-cloudflare-rate-limiting-drift-audit-runner"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10701",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-103",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 drift-audit event records carry ruleId, clientIpHash, outcome, timestamp, diff only; no full IP, body or user-agent"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T21:41:04.712Z",
|
|
3
|
+
"updatedAt": "2026-09-07T21:41:04.712Z",
|
|
4
|
+
"asA": "operator that accidentally deletes or moves a manifest file",
|
|
5
|
+
"iWant": "the manifest-presence probe to surface the missing file at fixture probe time",
|
|
6
|
+
"soThat": "a manifest under-population defect is caught in CI rather than at operator apply time",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-10801-1",
|
|
10
|
+
"description": "With SIMULATE_MANIFEST_MISSING=true the manifest-presence probe returns aggregateVerdict: fail and names the missing file basename in the detail; without the switch the probe passes.",
|
|
11
|
+
"testable": true
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"tacIds": [
|
|
15
|
+
"TAC-3701-edge-cloudflare-rate-limiting-manifest-schema"
|
|
16
|
+
],
|
|
17
|
+
"usId": "US-10801",
|
|
18
|
+
"prdId": "PRD-001",
|
|
19
|
+
"reqId": "REQ-100",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"status": "draft",
|
|
22
|
+
"title": "T-6 manifest-presence probe refuses a missing manifest file and names the basename in the detail"
|
|
23
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T09:11:05.053Z",
|
|
3
|
+
"updatedAt": "2026-09-07T09:11:05.053Z",
|
|
4
|
+
"asA": "shelf consumer applying the deploy-cloudflare-workers v1.2.0 blueprint on a fresh SPA-on-Workers project",
|
|
5
|
+
"iWant": "the shipped v1.2.0 blueprint files (blueprint.json version 1.2.0 with the seven-contribution delta on top of the v1.1.0 shipped set; two new REQ contributions deploy-cloudflare-workers-REQ-013 and REQ-014; three new US contributions in the existing 12xx band deploy-cloudflare-workers-US-12113 SPA-on-Workers deploy, US-12114 assets-directory elicitation, US-12115 migrate-from-Pages guidance; one new ADR contribution ADR-1306-deploy-cloudflare-workers-spa-shape with the verbatim Cloudflare Pages landing-page quote and standardsTraceClause Cloudflare Pages landing-page recommendation 2026-09-06; one new probe module assets-manifest-scan.mjs anchored to AC-2901-2 assetsBlockEmitted; two new elicits assets-directory and run-worker-first) proven against the cf-platform shared sample-app fixture",
|
|
6
|
+
"soThat": "a rcf-lite project applying deploy-cloudflare-workers v1.2.0 gets a Workers-with-static-assets shape ratified over Pages for greenfield SPA-on-Workers projects (per the Cloudflare Pages landing-page recommendation, verbatim quoted on ADR-1306), an elicited [assets] directory in wrangler.toml, a probed assertion of the emitted assets block, an unchanged v1.1.0 contribution set (12 REQs, 12 USs, 6 TACs, 5 ADRs, deploymentTarget global topic, suggestedCompanions logging and errorHandling), and a shared sample-app fixture that T-1 through T-3 and T-5 extend later",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-2901-1",
|
|
10
|
+
"description": "The shelf carries blueprints/deploy-cloudflare-workers/blueprint.json declaring slug deploy-cloudflare-workers, version 1.2.0, category deploy; the contributions array holds 41 entries splitting 14 req + 15 us + 6 tac + 6 adr (the probe is NOT a contribution kind under the loader's CONTRIBUTABLE_KINDS gate; assets-manifest-scan.mjs ships under contributions/probes/ as a source file only, cross-referenced from the shipped README and the applied fixture shim); the delta over v1.1.0 is six contribution-kind entries plus the probe module: 2 REQs REQ-013 and REQ-014, 3 USs US-12113 US-12114 US-12115, 1 ADR ADR-1306 with recommendedDefault true and standardsTraceClause Cloudflare Pages landing-page recommendation (2026-09-06) on the contribution entry, 1 probe contribution assets-manifest-scan with anchorAcId AC-12113-1 and accountBound false; providesRoles absent, capabilities absent, requiresAppliedCapabilities absent, suggestedCompanions unchanged with logging and errorHandling; the top-level elicits[] gains the two new entries assets-directory and run-worker-first; every ADR contribution entry carries a non-null standardsTraceClause per section 8a.2.",
|
|
11
|
+
"given": "the shelf tree after this blueprint delta lands",
|
|
12
|
+
"when": "jq queries against blueprints/deploy-cloudflare-workers/blueprint.json",
|
|
13
|
+
"then": "jq .slug returns deploy-cloudflare-workers; jq .version returns 1.2.0; jq .contributions returns an array whose kinds split 14 req, 15 us, 6 tac, 6 adr (total 41 entries); the probe module lives under blueprints/deploy-cloudflare-workers/contributions/probes/assets-manifest-scan.mjs and is NOT listed as a contribution; jq .capabilities returns null; jq .suggestedCompanions maps to logging and errorHandling; jq .elicits returns an array containing assets-directory and run-worker-first; jq .contributions[] where kind is adr yields standardsTraceClause non-null for every entry",
|
|
14
|
+
"testable": true,
|
|
15
|
+
"scope": "runtime"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "AC-2901-2",
|
|
19
|
+
"description": "The canonical AC assetsBlockEmitted (from spec section 5.0 example ACs) is realised as blueprint contribution AC-12113-1 on US-12113 with a runtime-observable then clause. The shipped probe blueprints/deploy-cloudflare-workers/contributions/probes/assets-manifest-scan.mjs exports a Node module whose default export is a scan verb returning the section 3.2 verdict envelope {verdict, detail, anchorAcId, aggregateVerdict} with anchorAcId AC-12113-1 and accountBound false; the module parses the applied fixture wrangler.toml, asserts the [assets] block directory matches the elicited assets-directory answer, and asserts the absence of any pages_build_output_dir field.",
|
|
20
|
+
"given": "the cf-platform sample-app fixture at packages/rcf-lite/test/fixtures/cf-platform/ with wrangler.toml carrying [assets] directory = ./dist and no pages_build_output_dir field",
|
|
21
|
+
"when": "the shim run-assets-manifest-scan.mjs drives the probe module against the fixture wrangler.toml",
|
|
22
|
+
"then": "the process exits 0 and the written report at .rcf/reports/blueprints/deploy-cloudflare-workers/assets-manifest-scan.json carries aggregateVerdict pass with a detail record naming directory ./dist and no pages_build_output_dir field on the parsed wrangler.toml",
|
|
23
|
+
"testable": true,
|
|
24
|
+
"scope": "runtime"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "AC-2901-3",
|
|
28
|
+
"description": "The rcf-lite repo chain is extended with the T-0 delta and validates clean; the chain adds two REQs REQ-029 and REQ-030 under PRD-001, three USs US-2901 US-2902 US-3001, three test suites TS-073 TS-074 TS-075, one FBS FBS-063, and one CN CN-209 anchoring the assets-manifest-scan.mjs probe module; every US carries at least one AC; every AC is covered by a TC on the paired TS with a resolvable test-pointer to test/blueprint/deploy-cloudflare-workers-v-1-2-0-anatomy.test.js. Repo counts bump: requirements 31 to 33, userStories 60 to 63, fbs 50 to 51, testSuite 60 to 63, codeNode 195 to 196.",
|
|
29
|
+
"given": "the extended repo chain on the T-0 branch after all define create commands have run",
|
|
30
|
+
"when": "node bin/rcf.js define validate runs from packages/rcf-lite",
|
|
31
|
+
"then": "the CLI reports rcf define validate: tree is clean and both node bin/rcf.js audit coverage --strict and node bin/rcf.js audit eval coverage --strict exit 0",
|
|
32
|
+
"testable": true,
|
|
33
|
+
"scope": "runtime"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"tags": [
|
|
37
|
+
"blueprint:deploy-cloudflare-workers"
|
|
38
|
+
],
|
|
39
|
+
"usId": "US-2901",
|
|
40
|
+
"prdId": "PRD-001",
|
|
41
|
+
"reqId": "REQ-029",
|
|
42
|
+
"version": "0.1.0",
|
|
43
|
+
"status": "draft",
|
|
44
|
+
"title": "T-0 delta on deploy-cloudflare-workers v1.2.0 shelf: seven-contribution additive minor bump plus cf-platform fixture with the assets-manifest-scan probe passing"
|
|
45
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T09:11:05.250Z",
|
|
3
|
+
"updatedAt": "2026-09-07T09:11:05.250Z",
|
|
4
|
+
"asA": "shelf consumer applying the deploy-cloudflare-workers v1.2.0 blueprint who wants the two new elicits to appear in the operator elicit prompt with sane defaults",
|
|
5
|
+
"iWant": "the blueprint.json top-level elicits[] to declare both new entries (assets-directory kind string default empty; run-worker-first kind boolean default false), the CLI to accept --answer assets-directory=<path> and --answer run-worker-first=<bool> at blueprint add, and the generated wrangler.toml under the applied project to reflect the answered values",
|
|
6
|
+
"soThat": "a project answering assets-directory=./dist gets [assets] directory = \"./dist\" emitted in its wrangler.toml, a project not answering assets-directory keeps the bare-Worker shape without any [assets] block, and the two elicits do not affect any shipped v1.1.0 contribution",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-2902-1",
|
|
10
|
+
"description": "The blueprint.json elicits[] block gains exactly two new entries: assets-directory with id assets-directory, kind string, default empty string, prompt describing the applied static-assets root; run-worker-first with id run-worker-first, kind boolean, default false, prompt describing the SPA fallback discipline that a truthy answer runs the Worker before asset lookup. The two elicits pass the loader's validateElicits shape gate on src/blueprint/loader.js (id kebab-slug, kind one of enum|string|boolean, default matches kind). Neither elicit carries providesCapability (both are shape choices not custom-auth discovery). The spec's intended when-predicate {elicitedNonEmpty: [assets-directory]} on run-worker-first is NOT shipped this round because the loader's supported when block only accepts requiresCapability arrays; the guide names the shape trade and CONCERNS on the PR names the smallest loader extension to close the gap.",
|
|
11
|
+
"given": "the shipped blueprint.json at blueprints/deploy-cloudflare-workers/blueprint.json",
|
|
12
|
+
"when": "jq .elicits returns the top-level array and the loader loads blueprint.json without a validation error",
|
|
13
|
+
"then": "the array contains exactly two entries whose ids are assets-directory and run-worker-first, with the shapes above; jq validation and the loader both accept the shape",
|
|
14
|
+
"testable": true,
|
|
15
|
+
"scope": "library"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "AC-2902-2",
|
|
19
|
+
"description": "The cf-platform fixture at packages/rcf-lite/test/fixtures/cf-platform/ ships a wrangler.toml with [assets] directory = \"./dist\" and run_worker_first = true baked into the [assets] block. The fixture ships dist/index.html so the assets directory exists on disk. The fixture ships src/index.mjs as the minimal Worker entry, a package.json declaring wrangler as a devDependency and start = wrangler dev, a run-assets-manifest-scan.mjs shim requiring the probe module from blueprints/deploy-cloudflare-workers/contributions/probes/assets-manifest-scan.mjs, and a README naming the wrangler dev boot line, the two elicit answers baked into wrangler.toml, and the two induced-failure switches SIMULATE_MIXED_SHAPE (inserts a pages_build_output_dir field so the probe surfaces the mixed-shape refusal) and SIMULATE_EMPTY_ASSETS (removes the [assets] block so the probe records the bare-Worker shape and passes with an empty-directory record).",
|
|
20
|
+
"given": "the cf-platform fixture tree after this T-0 slice lands",
|
|
21
|
+
"when": "ls -R the fixture directory",
|
|
22
|
+
"then": "the fixture ships wrangler.toml with the [assets] block, dist/index.html, src/index.mjs, package.json with wrangler dev, run-assets-manifest-scan.mjs and README.md with the switches and boot line documented",
|
|
23
|
+
"testable": true,
|
|
24
|
+
"scope": "runtime"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"tags": [
|
|
28
|
+
"blueprint:deploy-cloudflare-workers"
|
|
29
|
+
],
|
|
30
|
+
"usId": "US-2902",
|
|
31
|
+
"prdId": "PRD-001",
|
|
32
|
+
"reqId": "REQ-029",
|
|
33
|
+
"version": "0.1.0",
|
|
34
|
+
"status": "draft",
|
|
35
|
+
"title": "T-0 assets-directory and run-worker-first elicits on blueprint.json top-level elicits[] and baked into the cf-platform fixture wrangler.toml"
|
|
36
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-07T09:11:05.463Z",
|
|
3
|
+
"updatedAt": "2026-09-07T09:11:05.463Z",
|
|
4
|
+
"asA": "shelf consumer applying the deploy-cloudflare-workers v1.2.0 blueprint on a project migrating from Cloudflare Pages",
|
|
5
|
+
"iWant": "an ADR blessing the Workers-with-static-assets shape as the ratified SPA-on-Workers deploy shape over Pages (ADR-1306-deploy-cloudflare-workers-spa-shape) carrying the verbatim Cloudflare Pages landing-page recommendation, a guide section titled Workers-with-static-assets: the SPA-on-Workers shape that links the Cloudflare migrate-from-Pages guide, and the SPA fallback discipline elicited via run_worker_first so a truthy answer emits run_worker_first = true under the [assets] block on the generated wrangler.toml",
|
|
6
|
+
"soThat": "a project can read the ratified shape decision with its standards trace to Cloudflare's own landing-page recommendation and know exactly how to migrate its Pages routing to Workers",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-3001-1",
|
|
10
|
+
"description": "The ADR contribution entry ADR-1306-deploy-cloudflare-workers-spa-shape sits under contributions/adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json and validates against the rcf-schemas 0.6.1 ADR shape (required fields adrId prdId tadId version status title context decision consequences createdAt updatedAt; optional alternativesConsidered supersededBy relatedAdrs). Its body carries the verbatim Cloudflare Pages landing-page quote 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., alongside a decision blessing Workers-with-static-assets as the SPA-on-Workers deploy shape and consequences naming the two new elicits assets-directory and run-worker-first. The ADR contribution entry in blueprint.json carries recommendedDefault true, elicited false and standardsTraceClause Cloudflare Pages landing-page recommendation (2026-09-06). The ADR body does NOT carry standardsTraceClause (per section 8a.2 the clause belongs on the contribution entry).",
|
|
11
|
+
"given": "the shipped ADR contribution",
|
|
12
|
+
"when": "jq queries against blueprint.json contribution entry and the ADR JSON body",
|
|
13
|
+
"then": "the blueprint.json entry carries standardsTraceClause set to the 2026-09-06 landing-page recommendation clause; the ADR body carries the verbatim Cloudflare Pages landing-page quote in context or decision; the ADR body does not carry standardsTraceClause; the ADR body validates against the 0.6.1 ADR schema",
|
|
14
|
+
"testable": true,
|
|
15
|
+
"scope": "library"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "AC-3001-2",
|
|
19
|
+
"description": "The guide at blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md gains a new section titled Workers-with-static-assets: the SPA-on-Workers shape with the verbatim Cloudflare landing-page quote, the two elicit signatures (assets-directory string default empty; run-worker-first boolean default false), a copy-paste wrangler.toml snippet showing the [assets] block with directory and the run_worker_first hint, and a link to the Cloudflare migrate-from-Pages guide at https://developers.cloudflare.com/workers/static-assets/migration-guides/migrate-from-pages/. The Cloudflare Workers static-assets doc at https://developers.cloudflare.com/workers/static-assets/ is cited in the same section. Both URLs return 200 at gate time.",
|
|
20
|
+
"given": "the updated guide file",
|
|
21
|
+
"when": "grep the guide for the new section heading and the two Cloudflare URLs",
|
|
22
|
+
"then": "the section heading appears once with the exact title; the migrate-from-Pages URL and the static-assets doc URL appear at least once each; both URLs return HTTP 200 on a plain curl -fsSI",
|
|
23
|
+
"testable": true,
|
|
24
|
+
"scope": "library"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "AC-3001-3",
|
|
28
|
+
"description": "The spec's second canonical AC spaFallbackShape is realised in the blueprint contributions as AC-12113-2 on US-12113 with a runtime-observable then clause anchored to TAC-1302-deploy-cloudflare-workers-wrangler-manifest. The shipped probe assets-manifest-scan.mjs asserts run_worker_first presence and value under the [assets] block against the elicited answer. On the cf-platform fixture (which bakes run_worker_first = true) the probe returns verdict pass and the report carries a detail record naming runWorkerFirst true. On the SIMULATE_MIXED_SHAPE=true branch the fixture inserts a pages_build_output_dir field and the probe returns verdict fail naming the offending pages_build_output_dir line. On the SIMULATE_EMPTY_ASSETS=true branch the fixture removes the [assets] block and the probe returns verdict pass with an empty-directory record (bare-Worker shape).",
|
|
29
|
+
"given": "the shipped probe module and the cf-platform fixture with induced-failure switches",
|
|
30
|
+
"when": "run-assets-manifest-scan.mjs drives the probe on each of the three fixture states",
|
|
31
|
+
"then": "aggregateVerdict pass on the canonical state; aggregateVerdict fail on SIMULATE_MIXED_SHAPE with detail naming pages_build_output_dir; aggregateVerdict pass on SIMULATE_EMPTY_ASSETS with the empty-directory record",
|
|
32
|
+
"testable": true,
|
|
33
|
+
"scope": "runtime"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"tags": [
|
|
37
|
+
"blueprint:deploy-cloudflare-workers"
|
|
38
|
+
],
|
|
39
|
+
"usId": "US-3001",
|
|
40
|
+
"prdId": "PRD-001",
|
|
41
|
+
"reqId": "REQ-030",
|
|
42
|
+
"version": "0.1.0",
|
|
43
|
+
"status": "draft",
|
|
44
|
+
"title": "T-0 ADR-1306-deploy-cloudflare-workers-spa-shape, guide section with migrate-from-Pages link, and probed spaFallbackShape with induced-failure switches"
|
|
45
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-06T19:17:37.906Z",
|
|
3
|
+
"updatedAt": "2026-09-06T19:17:37.906Z",
|
|
4
|
+
"asA": "shelf consumer applying the messaging-queue-cloudflare v1.0.0 blueprint",
|
|
5
|
+
"iWant": "the shipped blueprint files with 20 to 24 contributions, six probes, and the T-3 side of the shared sample-app fixture that boots a Cloudflare Worker under wrangler dev with a queue binding and a DLQ binding, plus gate-runnable proof that every probe passes on the canonical fixture state and refuses on each induced-failure switch",
|
|
6
|
+
"soThat": "a rcf-lite project applying this blueprint gets a producer facade over the Cloudflare Queues binding with publish, consume, ack, retry, and DLQ, a lifecycle-event sink with metadata-only fields, and the queue capability the jobs-background blueprint composes on at apply time, with runtime-observable ACs proven by probes the HQ gate runs against a real wrangler dev process",
|
|
7
|
+
"acceptanceCriteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "AC-4201-1",
|
|
10
|
+
"description": "The shelf carries blueprints/messaging-queue-cloudflare/blueprint.json declaring slug messaging-queue-cloudflare, version 1.0.0, category messaging, 21 contributions in the 6 REQ / 8 US / 3 TAC / 4 ADR groups per infra round 5 spec section 5.3; capabilities is [queue]; suggestedCompanions declares logging and errorHandling with spec section 5.3 reasons; providesRoles is absent; requiresAppliedCapabilities is absent; every ADR contribution entry carries a non-null standardsTraceClause per section 8a.2.",
|
|
11
|
+
"given": "the shelf tree after this blueprint lands",
|
|
12
|
+
"when": "jq queries against blueprints/messaging-queue-cloudflare/blueprint.json",
|
|
13
|
+
"then": "jq .slug returns messaging-queue-cloudflare; jq .version returns 1.0.0; jq .contributions | length returns 21; jq .capabilities returns [queue]; jq .suggestedCompanions | length returns 2; jq .contributions[] | select(.kind==adr) | .standardsTraceClause returns a non-null string for every entry",
|
|
14
|
+
"testable": true,
|
|
15
|
+
"scope": "runtime"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "AC-4201-2",
|
|
19
|
+
"description": "rcf define blueprint add ./blueprints/messaging-queue-cloudflare applies the 21 contributions cleanly on a fresh init project; rcf define validate reports the tree clean; both rcf audit coverage --strict and rcf audit eval coverage --strict exit 0 on the scratch project.",
|
|
20
|
+
"given": "a fresh rcf init scratch project",
|
|
21
|
+
"when": "rcf define blueprint add ./blueprints/messaging-queue-cloudflare runs, then rcf define validate, then rcf audit coverage --strict, then rcf audit eval coverage --strict",
|
|
22
|
+
"then": "every command exits 0; the scratch project's rcf tree contains the 21 contributions; no globalAdrTopic conflict is raised",
|
|
23
|
+
"testable": true,
|
|
24
|
+
"scope": "runtime"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "AC-4201-3",
|
|
28
|
+
"description": "REQ-004 description names the dead_letter_queue field literal (per fetched Cloudflare Queues DLQ documentation) and the DLQ retention 4 days; jq grep on the contribution set returns at least one match for dead_letter_queue and at least one match for the retention constant.",
|
|
29
|
+
"given": "the shelf blueprint contribution set",
|
|
30
|
+
"when": "jq .contributions[] | select(.id==messaging-queue-cloudflare-REQ-004) | .description on the requirement file",
|
|
31
|
+
"then": "the description mentions dead_letter_queue and 4 days retention with the source URL literal https://developers.cloudflare.com/queues/configuration/dead-letter-queues/",
|
|
32
|
+
"testable": true,
|
|
33
|
+
"scope": "runtime"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "AC-4201-4",
|
|
37
|
+
"description": "The six probe modules under blueprints/messaging-queue-cloudflare/contributions/probes/ each pass against a running wrangler-dev seam brought up from the shared sample-app fixture: producer-facade-ready asserts producerReady fires with the queue name; publish-to-delivery asserts consumer receives all 5 messages with matching bodies and trace-ids; retry-and-dlq asserts DLQ contents at attempt-counter 3 and messageDeadLettered fires; event-secrecy asserts no PII fixture text in any event record; real-account-concurrency-smoke exits 0 with accountBoundSkipped true without CI_HAS_CLOUDFLARE_ACCOUNT or runs a real 500-message round-trip when the env var is set. Each per-blueprint probe report at .rcf/reports/blueprints/messaging-queue-cloudflare/<probe-name>.json carries aggregateVerdict pass.",
|
|
38
|
+
"given": "the shared sample-app fixture at packages/rcf-lite/test/fixtures/infra-s3-and-queue/ with the T-3 wrangler-dev seam booted (or the in-memory queue-driver mode active for probes needing no live Wrangler process)",
|
|
39
|
+
"when": "each of the six run-<probe-name>.mjs shims runs against the fixture in sequence",
|
|
40
|
+
"then": "every shim exits 0; every per-blueprint report file carries aggregateVerdict pass; every result carries an anchorAcId matching a contributed AC id on the blueprint",
|
|
41
|
+
"testable": true,
|
|
42
|
+
"scope": "runtime"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "AC-4201-5",
|
|
46
|
+
"description": "The sample-app fixture's three induced-failure switches surface each probe's negative-run behaviour: SIMULATE_CONSUMER_RETRY=true drives the retry-and-dlq probe's re-delivery path and (at max-attempts) the DLQ landing; SIMULATE_DLQ_OVERFLOW=true drives the retry-and-dlq probe past max-attempts on the first delivery so the message lands on the DLQ within one delivery cycle; SIMULATE_PII_IN_BODY=true drives the event-secrecy probe with a PII fixture body and asserts the event record whitelist enforces (no PII leak).",
|
|
47
|
+
"given": "the shared fixture with the T-3 seam active",
|
|
48
|
+
"when": "each named induced-failure switch is set in turn and the paired probe runs",
|
|
49
|
+
"then": "SIMULATE_CONSUMER_RETRY true yields retry-and-dlq report with attempt-counter increments to 3 and messageDeadLettered fires; SIMULATE_DLQ_OVERFLOW true yields retry-and-dlq report reaching DLQ on first cycle with aggregateVerdict pass; SIMULATE_PII_IN_BODY true yields event-secrecy report with aggregateVerdict pass proving the whitelist blocks the PII leak (or fail if the whitelist is bypassed); the fixture README documents each switch and the paired probe",
|
|
50
|
+
"testable": true,
|
|
51
|
+
"scope": "runtime"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "AC-4201-6",
|
|
55
|
+
"description": "The blueprint ships a sample-app fixture entry, a README, a CHANGELOG, a guide, and a docs/topics.md entry; the shelf-wide id-band registry table gains a messaging-queue-cloudflare row at US band 29101-29899 / ADR-TAC suffix block 30xx across every shipped blueprint's docs/topics.md; packages/rcf-lite/docs/blueprint-authoring.md section 6a capability-declaration table gains one row for queue naming the reserved messaging-queue-postgres sibling per infra round 5 spec section 5.6 and Baz decision 7.",
|
|
56
|
+
"given": "the shelf tree after this blueprint lands",
|
|
57
|
+
"when": "grep queries walk every blueprint's docs/topics.md and the section 6a table",
|
|
58
|
+
"then": "packages/rcf-lite/docs/blueprint-authoring.md contains a table row beginning | queue | with the reserved messaging-queue-postgres sibling note; every shipped blueprint's docs/topics.md carries a row beginning | messaging-queue-cloudflare | with the 29101-29899 band and 30xx suffix; blueprints/messaging-queue-cloudflare/README.md, CHANGELOG.md, guide/messaging-queue-cloudflare.md, docs/topics.md, and the extended packages/rcf-lite/test/fixtures/infra-s3-and-queue/ all exist; the fixture README names the wrangler dev incantation and three wired induced-failure switches",
|
|
59
|
+
"testable": true,
|
|
60
|
+
"scope": "runtime"
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"usId": "US-4201",
|
|
64
|
+
"prdId": "PRD-001",
|
|
65
|
+
"reqId": "REQ-042",
|
|
66
|
+
"version": "0.1.0",
|
|
67
|
+
"status": "draft",
|
|
68
|
+
"title": "The messaging-queue-cloudflare blueprint ships on the shelf with four wrangler-dev probes plus one accountBound real-account concurrency smoke"
|
|
69
|
+
}
|