Repository navigation
Verify existing migration files before conditional uploads - #83
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Legacy migration retries and the second verification pass currently attempt a full conditional upload before checking an already-copied destination. A live archive restore copied and independently verified every object, but repeatedly failed before source retirement. Large redundant uploads are an avoidable failure point in that path.
Read existing destinations first and accept them only when their bytes exactly match the source. Missing destinations still use conditional creation, and a lost race still requires the original readback comparison. Differing content remains a hard failure; no arbitrary upload error is treated as success. Add bounded migration-phase diagnostics without raw errors, file paths, payloads, or identities so a remaining failure can be located.
This follows the recovery receiver and its Admission caller. Only Site Studio needs another release. The saved admin request was retried successfully with its original idempotency key after deployment. Source archives and verified destination copies remain intact.
Cloudflare's public runtime implementation writes the upload body before handling the response, making early rejection of a redundant conditional upload a plausible cause; this is not yet a confirmed production diagnosis.
Validation: full
bun run checkpassed (760 app tests, 225 frontend tests, runtime/public boundary checks, TypeScript, Svelte checks, and production build); the actual local Admission-to-Site-Studio recovery integration passed 2/2 against this worktree; Wrangler dry-run, diff check, and secret scan passed. Independent Astra review found no blocker. The production request and public redirect passed verification after release.Implemented by Codex GPT-5.6 Sol, coordinated and independently reviewed by GPT-6 Astra.
Production verification completed September 22, 2026: the supported Admission admin action returned
restoredfor the seven-project archive (47 stored objects). The old published address returns 302 withCache-Control: no-store; its canonical destination returns 200 with the expected document and opaque-origin sandbox. All six private legacy routes and protected metadata return 404. The original archive remains preserved. Ian's own dashboard/login confirmation is still a human follow-up.Deployed commits: Admission/Doorway
7afbbcad7e4c6175896c5d73fb4885e2a5ca1a59; Site Studio6916dc5060e43e85dc2ae872e7c78da0ad56efdd. Each was read back at one version serving 100%. Site release 35767394009 passed. The retry used the original saved idempotency request after the focused fix in Site Studio #83.