Repository navigation
fix(cli): cloud render logs a line a minute while a job holds its status - #7262
Conversation
Outside a terminal, `cloud render` printed one line per status change, so a 3D shot that renders for 20 minutes showed "rendering 2.1s" and nothing else. Agents read that as a hang and killed jobs that later completed. The log now repeats the status with its elapsed time once a minute, and the style-sampling remix guide says the cloud gives no frame count and how to check a job the client stopped waiting for. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HebQXPiLcYKQfvPWB3Fgxy
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HebQXPiLcYKQfvPWB3Fgxy
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HebQXPiLcYKQfvPWB3Fgxy
1030ba1 to
02a0e10
Compare
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
Reviewed at 02a0e10086cc8e15aef70af67cd926cc5ad0bf81. The non-TTY branch reuses the existing pollUntilTerminal tick (no extra timer), prints immediately on a status change and again when at least 60 seconds have elapsed since the last line. TTY redraw and JSON silence remain on their existing branches; terminal completion, timeout and request failure still flow through the existing poller/error path. The style-sampling guide now correctly calls the figure elapsed time rather than frame progress. Unit coverage checks the threshold and status-change predicate; it does not exercise a live cloud render or the full polling/output path. At review time some Windows engine/CLI checks were still running; pending CI is an independent merge gate, not a defect in the code.
Nonblocking nuance: a user-configured poll interval over 60 seconds cannot emit exactly each minute because output is sampled only on ticks. That setting already trades polling frequency for silence, while the default 2-second cadence delivers the stated behavior. Code approval only; no merge, enqueue or live render by me. — Jerrai
jrusso1020
left a comment
There was a problem hiding this comment.
Reviewed at 02a0e10086cc8e15aef70af67cd926cc5ad0bf81.
Need: yes · Size: ok · Reuse: existing pollUntilTerminal ticks and elapsed clock · Simpler: already minimal; no heartbeat scheduler · Structure: fine
Risk: low — bounded logging change; render submission and lifecycle are unchanged.
render.ts:997 prints on a status transition or on the first successful polling tick at least 60 seconds after the previous printed tick. The timestamp resets after every printed line. The existing strict stdout.isTTY branch is unchanged, and --json returns before either output branch.
No interval timer is introduced. Terminal success/failure, timeout and API errors leave the same polling loop; the new logging adds no handle that can keep the process alive. SIGINT retains normal process termination.
Verification: seven existing poll tests pass. Executable probes using exact transpiled pollWithProgress/logsTick/pollUntilTerminal functions, with fake clock/client and formatting stubs, passed non-TTY minute/reset boundaries, status changes, TTY redraw parity, JSON silence, completed/failed states, API error and timeout. A separate subprocess running the actual poll module exited promptly on SIGINT. bun scripts/gen-skills-manifest.ts --check passes. The full cloud command suite could not collect with borrowed dependencies (stale workspace exports/missing dependencies); no full CLI build or live cloud render was exercised.
The heartbeat is tied to successful GETs: a custom poll interval above a minute produces correspondingly less frequent lines. It reports client polling activity, not server frame progress.
Verdict: APPROVE
Reasoning: The existing polling loop supplies the heartbeat without adding timer cleanup obligations or changing TTY/JSON behavior.
— Rames (hf-review)
…view Adopts heygen-com#7299 (accented Latin letters draw in a bundled family at its bundled weight), heygen-com#7301 (installing Chrome on a busy Windows PC), heygen-com#7262 (cloud render logs a line a minute while a job holds its status), heygen-com#7265 (video starts a second early and catches up hidden) and heygen-com#7305 (check_report names the finding that stopped the check). Player packed budget takes upstream's +1655 from heygen-com#7265 since the player bundles core's media-steer. Defers heygen-com#7302; heygen-com#7261 and heygen-com#7263 do not apply. Watermark advances to 9e2510b. Co-authored-by: Miguel Ángel <miguel.sierra@heygen.com> Co-authored-by: WaterrrForever <miao.yang@heygen.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What
Outside a terminal,
cloud rendernow writes the status and elapsed time once a minute while a render stays in the same status. Before, it wrote a line only when the status changed. The style-sampling remix guide now says the cloud reports no frame count, and how to check on a job the CLI stopped waiting for.Why
This comes from the v0.9.16 style-sampling run. Agents run
cloud renderwith output going to a log file, not a terminal.queued 0.1s, thenrendering 2.1s, and nothing more until the job completed. 3D shot jobs took 8–28 minutes.4f653364…,26d2d44e…) did complete on the server.GET /v3/hyperframes/renders/{id}returnsstatusonly.Related work
How
logsTick: a new function decides when a non-TTY tick prints. It prints when the status changes, or when 60 s have passed since the last printed line.--json: unchanged. The TTY line already redraws the elapsed time on every poll.remix.md§7: report the elapsed time the log prints each minute; a 3D shot can sit atrenderingfor 20 minutes and still finish; check a job withcloud get <id>.Test plan
logsTickstays quiet within the minute and prints after 60 s or on a status change.src/commands/cloud/passes, 38 tests.tscreport nothing on the touched files.lint-skills,check-core-skillsandcheck-skill-mirrorpass.🤖 Generated with Claude Code
https://claude.ai/code/session_01HebQXPiLcYKQfvPWB3Fgxy