fix: studio.deploy HOLD only after poll, not attempt-started - #1895
Merged
Conversation
#1893 bound a G.A.T.E. HOLD on kickoff with waiting copy. AXIOM treated that as terminal while Origin/job could still be pollable. Co-authored-by: Hayden <groupthinking@users.noreply.github.com>
Contributor
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-authored-by: Hayden <groupthinking@users.noreply.github.com>
kk-agent
marked this pull request as ready for review
September 12, 2026 17:30
Contributor
🔴 E2E Test Results: FAILURE DETECTED
Test Output |
Contributor
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Snapshot WarningsEnsure that dependencies are being submitted on PR branches. Re-running this action after a short time may resolve the issue. See the documentation for more information and troubleshooting advice. Scanned FilesNone |
Contributor
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.
Canonical issue
Follow-on to #1893. AXIOM dogfood on READY prod
dpl_HheLD9BJr8jts34NDQgMGcta2Fnb(6dd8fe23) /XYMcBrFSJ4c:Deploy attempt started. Waiting for a verified https live URL.er:gate:v1:wrun_01M2B9NW5JA5JQNBTWDRRSHXD6Outcome
studio.deploy/ G.A.T.E. either PASSes with a backend-supplied https live URL + receipt, or HOLDs with a residual that means Origin/deploy truly finished without a hostname — not a premature “waiting” HOLD while a job is still obtainable / pollable.Root cause
Verified in tree on
6dd8fe23(#1893):pollStudioDeploywithSTUDIO_DEPLOY_ATTEMPT_STARTED_HOLD. That HOLD +er:gate:v1:{runId}is the AXIOM terminal residual./api/workflows/studio-deploy/:runIdonly attachesresultwhencompleted/failed. A still-running WDK job is invisible to the client, so exhausted polls claimed kickoff-no-job even when a job may still be pollable.getStudioDeployStatusonly read top-levelresult.live_url, so a nesteddeployment.urls.vercelwas dropped.This is not an invented hostname and not a guessed Hayden secret.
What changed
gateReceiptstill clears; newrunIdstill binds. No in-flight waiting HOLD.studioDeployPollResidualclassifies: live URL → null; still-running (no visible job / still pollable) →STUDIO_ORIGIN_STILL_POLLABLE_HOLD; terminal + no job → kickoff-no-job; terminal + job + no URL → hostname-finished.extractBackendLiveUrlon the client GET so nested vercel hosts pass through.What was NOT done
VERCEL_TOKEN/EVENTRELAY_API_KEY/ Hayden secrets.Hayden stop (not taken)
No job error in this tree proves a missing credential only Hayden has. If a later AXIOM job error proves that, that is the Loop→CoS ask — not guessed here.
Scope
How cleared residuals stay cleared
Reuse / origin-no-live / timeout-abort raw string / HTTP 524 / bot / UNKNOWN / workflow-run / return-value / BACKEND_URL / hostname-finished / kickoff-no-job / Attempting-deploy hang / stale #1853 receipt tests still assert those strings are absent from the wrong path. New residual for a still-running
wrun_01M2B9NW5JA5JQNBTWDRRSHXD6is still-pollable, not attempt-started.Risk
Verification
Head:
7a11ac2c1eb76b7ed828d18a195f47a70d0dd6destudio-workflow,gate-transition,studio-pipeline-status,pipeline-async-job,studio-deploy, studio-deploy route +[runId]route)Production evidence
Cannot signed-in dogfood AXIOM here. Target residual:
dpl_HheLD9BJr8jts34NDQgMGcta2Fnb/wrun_01M2B9NW5JA5JQNBTWDRRSHXD6/Deploy attempt started. Waiting for a verified https live URL.Proof used: tree on6dd8fe23(in-flight G.A.T.E. HOLD, GET result only on completed/failed, 420s client window, top-level live_url only).Agent handoff