Skip to content

fix: restore ready-transcript reuse on studio.deploy (no YouTube re-fetch) - #1887

Merged
kk-agent merged 1 commit into
mainfrom
cursor/studio-deploy-ready-transcript-reuse-ae8e
Sep 12, 2026
Merged

fix: restore ready-transcript reuse on studio.deploy (no YouTube re-fetch)#1887
kk-agent merged 1 commit into
mainfrom
cursor/studio-deploy-ready-transcript-reuse-ae8e

Conversation

@groupthinking

@groupthinking groupthinking commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Canonical issue

Named cut: restore ready-transcript reuse on studio.deploy (no YouTube re-fetch) without regressing timeout/524

Outcome

When the Studio transcript / pack is already ready, Attempt Deploy / studio.deploy reuses it and never re-hits YouTube via /videos/process.

#1884 remapped timeout / 524 / empty poll messages to the residual:

Ready transcript was not reused. Deploy must not re-fetch YouTube. No verified deploy receipt.

even when the transcript was already posted to origin POST /video-to-software. That false reuse-miss is cleared.

Continue polls stay Deploy job … still pending. Timeout / 524 become an honest origin miss (Studio transcript was reused. Origin video-to-software returned no verified live URL.) — not this residual and not prior cleared residuals. A YouTube bot string still maps to the reuse HOLD. Origin vts with a usable transcript returns 202 + job_id immediately so WDK can poll for a verified https:// live URL + EventRelay receipt. Claim guard unchanged: no invented Origin / live URL.

AXIOM: dpl_BL2mQMcrQEyuKB1LjmwCgEeA4V9Y / XYMcBrFSJ4c, receipt er:gate:v1:wrun_01M2B05JJZNTD7MKANV0RN0J28. Transcript already ready. No live URL until origin supplies one.

Scope

  • Included:
    • Reuse ready transcript; never /videos/process on that path
    • studioDeployReadyTranscriptHold remaps YouTube re-fetch only; timeout/524/empty → origin-no-live HOLD
    • decideStudioDeployPoll continue never inherits the reuse-miss string
    • WDK kickoff abort catch uses origin-no-live (not studioDeployReadyTranscriptHold())
    • Origin /video-to-software returns 202 immediately when a usable transcript is provided
    • Tests lock reuse / no YouTube re-fetch / no false reuse-miss HOLD
  • Explicitly excluded:
    • YouTube cookies / Hayden secret (unless reuse proven insufficient)
    • Origin invent / CRM / EVENTRELAY_API_KEY
    • Invented live URLs
    • Reopening fix: return 202 from video-to-software before CF 524 #1878
    • Changing claim-guard / fail-closed G.A.T.E.
    • Non-required E2E Pipeline Tests (historical flake; continue-on-error: true; missing VERCEL_AUTOMATION_BYPASS_SECRET)

Must not regress

Risk

  • Risk level: medium
  • Failure mode: origin still never returns a verified live URL → honest HOLD that is not reuse-miss, not timeout-abort, and not prior cleared residuals
  • Rollback: revert this PR

Verification

Tied to head 7cf708e3b.

  • Focused Vitest: pipeline-async-job, gate-transition, studio-pipeline-status, studio-workflow, studio-deploy route, studio-deploy — 100 passed
  • Focused pytest: ready-transcript 202 without sync wait, 202 on budget exceed, ready transcript skips YouTube extract
  • Required core CI on 7cf708e3b: validate, guards, lint-python, lint-frontend, build, test, test-frontend — all success
  • Coverage success
  • E2E Pipeline Tests — failed; non-required (continue-on-error: true); same historical flake as fix: studio.deploy no abort-timeout → live URL #1884 (preview 401 / empty bypass secret); not in this cut
  • Review threads: none blocking

Production evidence

Vercel preview exists for this branch. Cannot signed-in dogfood AXIOM here. No invented live URL. Loop merge/squash → prod READY dpl_ for AXIOM XYMcBrFSJ4c.

Agent handoff

Open in Web Open in Cursor 

Stop remapping timeout/524/empty poll copy to the reuse-miss HOLD.
Return origin 202 immediately when a usable transcript is already ready
so Attempt Deploy never re-hits YouTube /videos/process.

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 Ready Ready Preview, v0 Sep 12, 2026 2:36pm 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: 03815769-be20-417a-aa23-a1f5c8734372


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
@cursor cursor Bot changed the title fix: restore ready-transcript reuse on studio.deploy fix: restore ready-transcript reuse on studio.deploy (no YouTube re-fetch) Sep 12, 2026
@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-cz53t4i06-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 14:36:36
�[2m   Duration �[22m 6.66s�[2m (transform 44ms, setup 0ms, import 55ms, tests 6.51s, environment 0ms)�[22m


@kk-agent
kk-agent marked this pull request as ready for review September 12, 2026 14:36
@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 7cf708e.
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 b6c0b44 into main Sep 12, 2026
52 of 54 checks passed
@kk-agent
kk-agent deleted the cursor/studio-deploy-ready-transcript-reuse-ae8e branch September 12, 2026 14:48
@linear-code

linear-code Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

GRV-537

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