Cloudflare Production Builder
Apply this guidance proportionally. It is a production reasoning aid, not a
mandatory ceremony layer. Stay within the user's requested operation and do not
turn a diagnosis or recovery into an architecture program.
Choose the operating mode
- Answer or diagnose: inspect only the evidence needed to explain the
behavior. Do not mutate or design a replacement unless asked.
- Recover: restore a known-good capability with the smallest supported,
reversible operation. Preserve evidence and defer refactoring.
- Change or migrate: design compatibility, durability, rollout, verification,
and rollback for the surfaces actually affected.
Do not mix recovery and refactoring in one production operation.
Core contract
- Identify authoritative state, the coordination key, the durability boundary,
and user-visible completion.
- Treat source, build, upload, configuration, migration, traffic, route,
stateful lifecycle, and live behavior as separate facts only when the task
depends on those surfaces.
- Prefer immutable artifacts and conditional pointer changes. Make external
mutations idempotent, fenced, conditional, or compensatable.
- Classify errors before retrying. Persist terminal domain failures; bound
transient retries; read authoritative provider state after an ambiguous
mutation before replay. Do not turn artifact verification into a resumable
controller unless the product operation itself requires durable execution.
- Preserve accepted work across handoff failures. Use a durable record and a
repair path when an initiating request can disappear.
- Verify the owning live path and exact identity after a production mutation.
Use precise language such as
version uploaded, traffic switched, and
live smoke passed.
For SHA-derived, write-once release artifacts, reconcile means bounded
provider readback and a fail-closed decision. Adopt an existing artifact only
when every immutable property matches. Never repair a mismatch in place, add a
durable current-artifact pointer, or create another publication authority merely
to make image, host, application, namespace, or version creation retryable.
Traffic publication and rollback should switch one recorded immutable pointer
when the topology supports it; build-time artifact preparation stays outside
that publication path.
Prefer provider-native hot paths
For a measured Cloudflare bottleneck, identify the existing binding, bulk API,
or authenticated REST operation before starting Wrangler or making a network
round trip per item. Consider R2 bindings or direct REST uploads with an
existing scoped token, D1 batch() or set-based SQL, KV bulk writes, Queue
sendBatch(), direct Workers version/deployment readbacks, content-addressed
asset reuse, and coalesced Durable Object writes when semantics permit.
Keep concurrency and transient retries bounded; preserve credential scope,
provider limits, metadata, immutable verification, publication ordering, and
rollback. Do not introduce S3 credentials, broader permissions, or a new
service merely to optimize transport. Keep Wrangler for infrequent complex
deployment mutations unless a supported API preserves every safety invariant;
verify provider response schemas with a real canary.
Proportional workflow
- Inspect current code and provisioned state for the touched surface. Resolve
the exact account, environment, resource, bindings, and live version before
mutation.
- State the intended authority and repair/rollback path. For simple work, one
sentence is enough.
- Run focused local or remote checks that can falsify the change. Do not add
unrelated global gates.
- When authorized to deploy, upload and inspect before switching when the
provider supports it. Use a verification path supported by the topology.
- After mutation, verify only the affected rollout axes plus the user-visible
capability. Record exact identities and rollback evidence.
When a cutover temporarily retains an old Worker, Durable Object namespace, or
container application as the exact rollback target, leave it byte-for-byte and
configuration-for-configuration unchanged through the rollback-compatibility
window. Retention is temporary compatibility, not permanent dual-running.
Remove the old artifact only in a separate bounded cleanup after live and
rollback compatibility have been proven; do not hide that deletion inside the
cutover or ordinary artifact garbage collection.
Pause when the exact production target, current state, retry safety, or rollback
target cannot be resolved. A blocker in an unrelated surface is not permission
to broaden the operation.
Integrate preview and newly launched capabilities safely
When a preview or newly launched Cloudflare capability materially improves the
design, use it deliberately rather than trusting remembered APIs:
- Retrieve current first-party docs and changelog entries at action time. Note
the capability's maturity, launch date, documented limits, and production
support status.
- Inspect the installed package's
package.json, README/examples, exports, and
.d.ts files. Installed types are the compilation contract; marketing docs
are not.
- Put the preview surface behind a narrow adapter so churn does not spread
through domain code. Keep a supported fallback or an explicit failure mode
when the capability is not production-suitable.
- Pin the exact package version during the proving release. Compile and build
immediately after wiring each preview primitive; do not defer integration
feedback until the full system exists.
- Inspect generated artifacts, not just source: Worker entrypoint, generated
Wrangler config, asset directories, binding names, Durable Object migrations,
and the path the release system will actually upload.
- Scan the final bundle for
.dev.vars*, .env*, credentials, and unexpected
local files. Fail or scrub the build before packaging; a clean Git ignore is
not evidence that build output is clean.
- Record the exact version and local evidence separately from live evidence.
Do not claim production behavior until the exact uploaded artifact, bindings,
routes, migrations, and owning live path have passed smoke verification.
Treat type casts between preview packages as an adapter concern and test the
runtime seam. Structurally similar workspace, loader, or RPC types from different
package versions can compile only after a cast while still disagreeing at
runtime.
Load references selectively
- primitive-selection.md: use when the
product or coordination primitive is genuinely undecided.
- durable-execution.md: use for asynchronous
handoffs, retries, queues, Workflows, or long-running external work.
- storage-and-caching.md: use for storage,
cache, and authorization boundaries.
- deployments-and-migrations.md: use
for multi-surface rollout, schema or Durable Object lifecycle, and rollback.
- multitenant-hosting-and-security.md:
use when customer-controlled code, public-fork changes, or another adversarial
execution boundary requires tenant isolation. Do not load it solely because a
preview comes from a same-repository PR by trusted collaborators.
- observability-testing-and-cost.md:
use when adding or reviewing telemetry, test layers, or spend controls.
Retrieve current first-party Cloudflare documentation before relying on API
signatures, configuration, limits, pricing, retention, or product support.
1---2name: cloudflare-production-builder3description: Design, review, debug, migrate, or deploy production systems on Cloudflare Workers and related Developer Platform products. Use for material architecture, durability, release, migration, rollback, or live-verification decisions across Workers, Durable Objects, D1, R2, Queues, Workflows, bindings, and routes.4---56# Cloudflare Production Builder78Apply this guidance proportionally. It is a production reasoning aid, not a9mandatory ceremony layer. Stay within the user's requested operation and do not10turn a diagnosis or recovery into an architecture program.1112## Choose the operating mode1314- **Answer or diagnose:** inspect only the evidence needed to explain the15 behavior. Do not mutate or design a replacement unless asked.16- **Recover:** restore a known-good capability with the smallest supported,17 reversible operation. Preserve evidence and defer refactoring.18- **Change or migrate:** design compatibility, durability, rollout, verification,19 and rollback for the surfaces actually affected.2021Do not mix recovery and refactoring in one production operation.2223## Core contract24251. Identify authoritative state, the coordination key, the durability boundary,26 and user-visible completion.272. Treat source, build, upload, configuration, migration, traffic, route,28 stateful lifecycle, and live behavior as separate facts only when the task29 depends on those surfaces.303. Prefer immutable artifacts and conditional pointer changes. Make external31 mutations idempotent, fenced, conditional, or compensatable.324. Classify errors before retrying. Persist terminal domain failures; bound33 transient retries; read authoritative provider state after an ambiguous34 mutation before replay. Do not turn artifact verification into a resumable35 controller unless the product operation itself requires durable execution.365. Preserve accepted work across handoff failures. Use a durable record and a37 repair path when an initiating request can disappear.386. Verify the owning live path and exact identity after a production mutation.39 Use precise language such as `version uploaded`, `traffic switched`, and40 `live smoke passed`.4142For SHA-derived, write-once release artifacts, `reconcile` means bounded43provider readback and a fail-closed decision. Adopt an existing artifact only44when every immutable property matches. Never repair a mismatch in place, add a45durable current-artifact pointer, or create another publication authority merely46to make image, host, application, namespace, or version creation retryable.47Traffic publication and rollback should switch one recorded immutable pointer48when the topology supports it; build-time artifact preparation stays outside49that publication path.5051## Prefer provider-native hot paths5253For a measured Cloudflare bottleneck, identify the existing binding, bulk API,54or authenticated REST operation before starting Wrangler or making a network55round trip per item. Consider R2 bindings or direct REST uploads with an56existing scoped token, D1 `batch()` or set-based SQL, KV bulk writes, Queue57`sendBatch()`, direct Workers version/deployment readbacks, content-addressed58asset reuse, and coalesced Durable Object writes when semantics permit.5960Keep concurrency and transient retries bounded; preserve credential scope,61provider limits, metadata, immutable verification, publication ordering, and62rollback. Do not introduce S3 credentials, broader permissions, or a new63service merely to optimize transport. Keep Wrangler for infrequent complex64deployment mutations unless a supported API preserves every safety invariant;65verify provider response schemas with a real canary.6667## Proportional workflow68691. Inspect current code and provisioned state for the touched surface. Resolve70 the exact account, environment, resource, bindings, and live version before71 mutation.722. State the intended authority and repair/rollback path. For simple work, one73 sentence is enough.743. Run focused local or remote checks that can falsify the change. Do not add75 unrelated global gates.764. When authorized to deploy, upload and inspect before switching when the77 provider supports it. Use a verification path supported by the topology.785. After mutation, verify only the affected rollout axes plus the user-visible79 capability. Record exact identities and rollback evidence.8081When a cutover temporarily retains an old Worker, Durable Object namespace, or82container application as the exact rollback target, leave it byte-for-byte and83configuration-for-configuration unchanged through the rollback-compatibility84window. Retention is temporary compatibility, not permanent dual-running.85Remove the old artifact only in a separate bounded cleanup after live and86rollback compatibility have been proven; do not hide that deletion inside the87cutover or ordinary artifact garbage collection.8889Pause when the exact production target, current state, retry safety, or rollback90target cannot be resolved. A blocker in an unrelated surface is not permission91to broaden the operation.9293## Integrate preview and newly launched capabilities safely9495When a preview or newly launched Cloudflare capability materially improves the96design, use it deliberately rather than trusting remembered APIs:97981. Retrieve current first-party docs and changelog entries at action time. Note99 the capability's maturity, launch date, documented limits, and production100 support status.1012. Inspect the installed package's `package.json`, README/examples, exports, and102 `.d.ts` files. Installed types are the compilation contract; marketing docs103 are not.1043. Put the preview surface behind a narrow adapter so churn does not spread105 through domain code. Keep a supported fallback or an explicit failure mode106 when the capability is not production-suitable.1074. Pin the exact package version during the proving release. Compile and build108 immediately after wiring each preview primitive; do not defer integration109 feedback until the full system exists.1105. Inspect generated artifacts, not just source: Worker entrypoint, generated111 Wrangler config, asset directories, binding names, Durable Object migrations,112 and the path the release system will actually upload.1136. Scan the final bundle for `.dev.vars*`, `.env*`, credentials, and unexpected114 local files. Fail or scrub the build before packaging; a clean Git ignore is115 not evidence that build output is clean.1167. Record the exact version and local evidence separately from live evidence.117 Do not claim production behavior until the exact uploaded artifact, bindings,118 routes, migrations, and owning live path have passed smoke verification.119120Treat type casts between preview packages as an adapter concern and test the121runtime seam. Structurally similar workspace, loader, or RPC types from different122package versions can compile only after a cast while still disagreeing at123runtime.124125## Load references selectively126127- [primitive-selection.md](references/primitive-selection.md): use when the128 product or coordination primitive is genuinely undecided.129- [durable-execution.md](references/durable-execution.md): use for asynchronous130 handoffs, retries, queues, Workflows, or long-running external work.131- [storage-and-caching.md](references/storage-and-caching.md): use for storage,132 cache, and authorization boundaries.133- [deployments-and-migrations.md](references/deployments-and-migrations.md): use134 for multi-surface rollout, schema or Durable Object lifecycle, and rollback.135- [multitenant-hosting-and-security.md](references/multitenant-hosting-and-security.md):136 use when customer-controlled code, public-fork changes, or another adversarial137 execution boundary requires tenant isolation. Do not load it solely because a138 preview comes from a same-repository PR by trusted collaborators.139- [observability-testing-and-cost.md](references/observability-testing-and-cost.md):140 use when adding or reviewing telemetry, test layers, or spend controls.141142Retrieve current first-party Cloudflare documentation before relying on API143signatures, configuration, limits, pricing, retention, or product support.