Skip to content

fix: studio.deploy kickoff abort is not a hostname-finished HOLD - #1891

Merged
kk-agent merged 2 commits into
mainfrom
cursor/origin-hostname-from-vts-05c9
Sep 12, 2026
Merged

kk-agent merged 2 commits into
mainfrom
cursor/origin-hostname-from-vts-05c9

Conversation

@groupthinking

@groupthinking groupthinking commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Canonical issue

Follow-on to #1889. AXIOM dogfood on READY prod dpl_EHAzZtKkJ2PQLS2fjPfu8PpDyizt (ab752a7b) / XYMcBrFSJ4c:

  • CLEARED: Origin video-to-software returned no verified live URL.
  • Still HOLD: Origin deploy finished without a backend-supplied https hostname.
  • Receipt: er:gate:v1:wrun_01M2B5SRA5W5S4WQP2M4ZHY040
  • AXIOM: Not VERCEL_TOKEN. No live URL.

Outcome

When Studio Attempt Deploy / G.A.T.E. studio.deploy runs with a reused ready transcript, EventRelay either polls a backend job_id until a backend-supplied https hostname is on the receipt, or HOLDs with STUDIO_ORIGIN_KICKOFF_NO_JOB_HOLD — not the #1889 hostname-finished copy and not any prior cleared residual.

Root cause

Verified in Vercel runtime logs for wrun_01M2B5SRA5W5S4WQP2M4ZHY040 on dpl_EHAzZtKkJ2PQLS2fjPfu8PpDyizt:

  1. POST /video-to-software hit AbortSignal.timeout(20s) twice per kickoffStep (16:04:25 and 16:05:05).
  2. fix: studio.deploy Origin vts → verified live URL #1889 remapped that abort / HTTP 524 through studioDeployReadyTranscriptHold + isGatewayTimeoutKickoff to STUDIO_ORIGIN_NO_HOSTNAME_HOLD ("Origin deploy finished without a backend-supplied https hostname").
  3. The workflow retried kickoff once, then FatalErrornever received a job_id, never polled.
  4. The residual is false: Origin deploy did not finish. Nested URL extract from fix: studio.deploy Origin vts → verified live URL #1889 never ran on this receipt.

Secondary gaps while kickoff can still succeed later:

What changed

  • Kickoff abort / 524 / empty timeout → STUDIO_ORIGIN_KICKOFF_NO_JOB_HOLD (retryable). Hostname HOLD stays only for a terminal job with no URL.
  • Durable kickoff retries (KICKOFF_RETRIES × sleep('10s')) instead of one retry then FatalError.
  • vts fetch wait 20s45s.
  • Pass through backend-supplied bare *.vercel.app / alias hosts (add https:// only). Reject vercel.com import/inspector URLs.
  • Initial vts job persist is async so 202 is not store-blocked. Nested platform errors become the job error when a job actually finishes without a hostname.

What was NOT done

  • No invented live URL.
  • No invented VERCEL_TOKEN / EVENTRELAY_API_KEY / Hayden secrets.
  • No LLM in Origin wasm. No self-hosted models.
  • Did not bounce to forge, slingshot, reach, uvai-skills, ClipToAction, or Origin tmp project uvai.

Hayden stop (not taken)

Parse/poll/receipt gap was EventRelay-side: kickoff abort was labeled as a finished deploy. Did not invent deploy credentials. If a later AXIOM job error proves a missing credential only Hayden has, that is the Loop→CoS ask — not guessed here.

Scope

  • Included: kickoff residual, durable kickoff retry, longer vts wait, bare-host extract, async pending persist, nested platform error HOLD
  • Explicitly excluded: Origin invent, CRM, YouTube cookies, inventing secrets, merge

How cleared residuals stay cleared

  • Reuse / origin-no-live / timeout-abort raw string / HTTP 524 / bot / UNKNOWN / workflow-run / return-value / BACKEND_URL tests still assert those strings are absent
  • Hostname-finished HOLD is no longer used for abort/524

Risk

Verification

Head: 47e74084db2b095246e81a021516b88e506387a6

  • Focused Vitest: 5 files / 107 passed (pipeline-async-job, gate-transition, studio-pipeline-status, studio-workflow, studio-deploy)
  • Focused pytest: 7 passed (202 reuse, store hang, bare hostname, nested platform error, GET flatten, persist urls)
  • Required CI (Loop merges when core-green)
  • Review threads resolved

Production evidence

Cannot signed-in dogfood AXIOM here. Target residual: dpl_EHAzZtKkJ2PQLS2fjPfu8PpDyizt / er:gate:v1:wrun_01M2B5SRA5W5S4WQP2M4ZHY040. Runtime proof used: Vercel logs showing TimeoutError remapped to hostname HOLD.

Agent handoff

  • Sole writer on this envelope
  • Acceptance criteria covered in tests
  • Required checks pass on the current head
  • Human decision: production AXIOM / G.A.T.E. PASS on uvai.io only
Open in Web Open in Cursor 

#1889 remapped AbortSignal timeout / HTTP 524 to "Origin deploy
finished without a backend-supplied https hostname." Prod logs for
wrun_01M2B5SRA5W5S4WQP2M4ZHY040 show kickoff never returned a job id.
Keep hostname HOLD only for a terminal job, retry kickoff, and pass
through backend-supplied bare vercel.app hosts.

Co-authored-by: Hayden <groupthinking@users.noreply.github.com>
@vercel

vercel Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
v0-uvai Building Building Preview, v0 Sep 12, 2026 4:15pm UTC

@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 37119604-3708-4a77-96c4-3033cc014e5b


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added documentation Improvements or additions to documentation javascript Pull requests that update javascript code python tests labels Sep 12, 2026
Focused Vitest 107 and pytest 7 passed after the hostname HOLD remap
was replaced with a kickoff-no-job residual.

Co-authored-by: Hayden <groupthinking@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

🔴 E2E Test Results: FAILURE DETECTED

Metric Value
Status 🔴 RED
Total Tests 6
Passed 11
Failed 6
Deployment https://v0-uvai-qblzb1imk-garv1.vercel.app
Test Output
2m''�[39m�[33m;�[39m
    �[90m190|�[39m       �[34mexpect�[39m(ct)�[33m.�[39m�[34mtoContain�[39m(�[32m'text/event-stream'�[39m)�[33m;�[39m

�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/6]⎯�[22m�[39m

�[41m�[1m FAIL �[22m�[49m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mSSE Pipeline Stream�[2m > �[22mSSE stream emits at least a pipeline_status:running event
�[31m�[1mAssertionError�[22m: expected 0 to be greater than or equal to 1�[39m
�[36m �[2m❯�[22m tests/e2e/pipeline.test.ts:�[2m208:29�[22m�[39m
    �[90m206|�[39m
    �[90m207|�[39m       �[90m// Must have at least 1 event�[39m
    �[90m208|�[39m       �[34mexpect�[39m(events�[33m.�[39mlength)�[33m.�[39m�[34mtoBeGreaterThanOrEqual�[39m(�[34m1�[39m)�[33m;�[39m
    �[90m   |�[39m                             �[31m^�[39m
    �[90m209|�[39m
    �[90m210|�[39m       �[90m// Must start with pipeline_status:running�[39m

�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/6]⎯�[22m�[39m

�[41m�[1m FAIL �[22m�[49m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22mmissing URL returns 400, not a hang
�[31m�[1mAssertionError�[22m: expected 401 to be 400 // Object.is equality�[39m

�[32m- Expected�[39m
�[31m+ Received�[39m

�[32m- 400�[39m
�[31m+ 401�[39m

�[36m �[2m❯�[22m tests/e2e/pipeline.test.ts:�[2m358:26�[22m�[39m
    �[90m356|�[39m
    �[90m357|�[39m       �[35mconst�[39m elapsed �[33m=�[39m �[33mDate�[39m�[33m.�[39m�[34mnow�[39m() �[33m-�[39m start�[33m;�[39m
    �[90m358|�[39m       �[34mexpect�[39m(res�[33m.�[39mstatus)�[33m.�[39m�[34mtoBe�[39m(�[34m400�[39m)�[33m;�[39m
    �[90m   |�[39m                          �[31m^�[39m
    �[90m359|�[39m       �[34mexpect�[39m(elapsed)�[33m.�[39m�[34mtoBeLessThan�[39m(�[34m5_000�[39m)�[33m;�[39m �[90m// Should respond instantly�[39m
    �[90m360|�[39m     })�[33m;�[39m

�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/6]⎯�[22m�[39m

�[41m�[1m FAIL �[22m�[49m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mAPI Health�[2m > �[22mPOST /api/pipeline/stream with no body returns 400
�[31m�[1mAssertionError�[22m: expected [ 400, 500 ] to include 200�[39m
�[36m �[2m❯�[22m tests/e2e/pipeline.test.ts:�[2m441:26�[22m�[39m
    �[90m439|�[39m       )�[33m;�[39m
    �[90m440|�[39m       �[90m// Should handle gracefully — 400 or 500, but respond quickly�[39m
    �[90m441|�[39m       �[34mexpect�[39m([�[34m400�[39m�[33m,�[39m �[34m500�[39m])�[33m.�[39m�[34mtoContain�[39m(res�[33m.�[39mstatus)�[33m;�[39m
    �[90m   |�[39m                          �[31m^�[39m
    �[90m442|�[39m     })�[33m;�[39m
    �[90m443|�[39m   })�[33m;�[39m

�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/6]⎯�[22m�[39m


�[2m Test Files �[22m �[1m�[31m1 failed�[39m�[22m�[90m (1)�[39m
�[2m      Tests �[22m �[1m�[31m6 failed�[39m�[22m�[2m | �[22m�[1m�[32m11 passed�[39m�[22m�[90m (17)�[39m
�[2m   Start at �[22m 16:16:39
�[2m   Duration �[22m 4.97s�[2m (transform 63ms, setup 0ms, import 78ms, tests 4.74s, environment 0ms)�[22m


@vercel vercel Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestion:

The ready-transcript fall-through in kickoffAsyncVideoJob drops retryable/httpStatus, so the 202-with-no-job-id kickoff result FatalErrors instead of being retried by the studio-deploy workflow.

Fix on Vercel

@github-actions

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA 47e7408.
Ensure 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 Files

None

@kk-agent
kk-agent merged commit d7ac905 into main Sep 12, 2026
40 of 42 checks passed
@kk-agent
kk-agent deleted the cursor/origin-hostname-from-vts-05c9 branch September 12, 2026 16:24
@linear-code

linear-code Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

GRV-539

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation javascript Pull requests that update javascript code python tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants