v0.27.1
·
15 commits
to main
since this release
Patch Changes
- App-token failures during
dev/deploynow carry their HTTP status and server code, and an app id the platform cannot resolve refuses loudly withapp_not_foundinstead of silently writing.dev.varswithoutAPP_IDENTITY_TOKEN— which made every platform call fail verification at runtime with nothing printed. Deploy's--jsonenvelope distinguishes these failures too: a token/.dev.varsfailure that is not anApiErrorand not a refreshed-cache failure now reports its owndev_vars_failedcode instead of ridingsecrets_refresh_failed. - Deploy no longer uploads secret values: the deploy form names the secrets config (
secretsConfig,wranglerEnv ?? 'prd') and the platform reads its own store at commit — one authority, no plaintext values on the deploy wire. Store-side, the config-missing refusal is now enforced server-side (409secrets_config_missing, with the same executablesecrets configs createfix) where it cannot be bypassed, an uninitialized store deploys as authoritative-empty exactly as before, and a store read failure fails closed (503, nothing deployed). The CLI still refuses early — before build and uploads — and still rewrites.dev.varsfor dev parity; it now also hard-requires thesecretsSource: 'store-read-v1'capability from the deploy service so it can never deploy against an older server that would misread the new shape as an upload with no secret bindings and strip every live user secret from an owner deploy. One check moved later: a stored secret whose name is reserved or collides with a declared wrangler binding is now refused by the platform at commit (after asset upload) rather than by the CLI before build — the price of retiring the client-side copy of that check. For one release the server also accepts the legacyuserSecretsfield from pre-0.24 CLIs (mutually exclusive withsecretsConfig; sending both is refused), so existing installs keep deploying through the transition; the legacy arm is removed in 0.25 — update to keep deploying after that. - Feature installer: drop the never-used
cssintegration area and per-fileoverwriteflag (no feature has ever declared either), and remove the internalpresence-testfeature. - Remove dead client-era wire riders:
retaggedis gone fromPOST /api/apps/:appId/transfer/acceptresponses,GET /api/deploy/:appId(deployment-status read, no live consumer) is gone, and the GitHub-sourcestale_baseguard plus thebaseReleaseIddeploy field (always null from every shipped CLI) are gone. - Deploy/rollback contract fixes from review: a same-key deploy retry that straddles a concurrent
secrets setnow supersedes the still-prepared reservation and proceeds (instead of dyingidempotency_key_reused; after activation the mismatch stays a hard refusal). Rollback's not-active refusal is now codedapp_undeployed(wasapp_suspended— the suspended status was retired, and stale registry rows are normalized toundeployedon schema init). Rollback'sdo_guard_unavailablerefusal now carries the Cloudflare-side cause asdetail, which the CLI renders as itsCause:line. The CLI's deadbindings_read_unavailablepassthrough (no server ever emits it) is removed. /api/secrets/*error contract: internal faults (registry down, binding missing) keep answering a generic 500 with no internal error text echoed to the client — unchanged — but the fault's own message is now logged server-side as a string, so those 500s stop being undiagnosable from Workers Logs. Also:deploy'ssecrets_config_missingrefusal now carriesactionRequired: truewith its executablesecrets configs createaction, matching the sibling refusals.