Repository navigation
fix(platform): stop before the traffic pause when an upgrade cannot finish - #437
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b9a224ec4e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bbe98e36c4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
🚀 Deploying Preview to Cloudflare 🚀Preview URL: https://fix-platform-upgrade-drift-void-cloud.voidzero-docs.workers.dev (commit 87e43b4)This URL reflects your latest Preview deploymentPreview Deployments by commit
|
…inish A platform Worker changed in the Cloudflare dashboard or API made every upgrade fail after traffic was paused: the Cloudflare CLI asks before it replaces such a change, and Void runs it without a terminal. Void now finds these Workers before it changes anything. In a terminal it asks, then lets the Cloudflare CLI show the changes and upload an undeployed version after resources are ready and before traffic pauses. Without a terminal it stops and names the command to run once in a terminal. The runtime token's Email Routing permissions are checked before the pause when platform email is on, and the late setup error names the missing permission. Platform mail now has a default sender at noreply@<mail domain>, so operators no longer set EMAIL_FROM by hand. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
…annot be read A failed Cloudflare read counted as "no change", so the run could pause traffic and then fail in the Cloudflare CLI or in Void's version-record check. Void now retries a read that fails with 429, 5xx or a network error, then stops before it changes a platform Worker. A Worker without one version at 100% of traffic stops the run too, because the deploy needs one. The stop messages now say what is true at that point: no platform Worker changed and the command did not pause traffic. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH
f923fd9 to
87e43b4
Compare
Problem
An operator upgraded a self-hosted platform from 0.27 to 1.1. Every upgrade attempt failed after Void paused application traffic, and every retry failed the same way.
Causes, checked against cf 1.0.0-beta.17 and live throwaway Workers:
deployandversions uploadlast_deployed_from=api, ordashwith a config diff that is not add-only, cf asks. Without a TTY it aborts. No flag or env var skips it.stdio: ['ignore', 'pipe', 'pipe']EMAIL_FROM, and the API README told operators to set it in the dashboard.What this PR changes
Other changes:
401on the token saved on this machine warns and continues, because the platform may use a newer token. A late shared-email setup failure now names the likely permission.<display name> <noreply@<EMAIL_SENDER_DOMAIN>>. An explicitEMAIL_FROMstill wins. Void Cloud's hosted sender does not change.--strictflag". It names an outside change only for the marker cases. A remote secret with the same name as a Void value says which secret to delete. A workflow owned by another Worker says to delete or rename it.EMAIL_FROM/AUTH_REDIRECT_URIby hand.Decisions
--yesis not consent to replace outside changes. cf has no non-interactive override, so CI stops and names the command to run once in a terminal.installPlatform, after resources and the database are ready, before the gate. An upgrade that adds a resource (for example the deployment queue) needs it to exist before cf can upload a valid version.dashmarkers403stops with text that names the saved token and the env var.401warns and continues.EMAIL_FROMset in the dashboard is a change outside Void, and the next upgrade asks before it replaces it.Behavior changes to note in the release
void platform upgrade|repair|enable|rollbackandinstall --resumestop before they change a platform Worker or pause traffic when a platform Worker was changed in the Cloudflare dashboard or API. In a terminal they ask first. In CI, run the command once in a terminal.--plan, also stop when Cloudflare cannot answer for a platform Worker after 2 retries, or when a platform Worker has no single version at 100% of traffic.noreply@<mail domain>by default.EMAIL_FROMis optional. A platform that had email on but noEMAIL_FROMstarts to send mail after the upgrade: invitations report "sent", and the first error alert per project can cover all errors since its alerts started to fail.Known limits
last_deployed_from, so Void cannot see them before the gate. The error after the gate now says what to delete.dashWorker whose diff is add-only now stops CI, where main uploaded it without asking.dashorapi, for example a repair after a dashboard rollback to Void's own version. Main did not run cf on that path, so it passed.install --resumeand--plancannot read the database before the run. During the one-time change to configurable sign-in, they can ask once more than needed. They never stop after the pause.dash), and whether Void's custom-domain attach changes the marker (the test account has no zone). cf aborts onapiwith the same rule when Void uploads, so anapimarker adds a new stop only on the reuse path above.Testing
vp run test(changed-file selection)vp run check,vp lint,vp fmt --check,vp run build:coreapi; Yes uploads an undeployed version and resets the marker tocf_cli; consent then deploy succeeds; API settings PATCH removes the Void record; Void's own operations keepcf_cli🤖 Generated with Claude Code
https://claude.ai/code/session_0123r5HnanmW2VUrZ7VWDufH