Repository navigation
Studio marks clips captured after a batch that ran while it was closed (part of #545) - #760
Conversation
…nned ones Each manifest now records the payload's highlight ids, source demos, project file, capture mode and AGR rate. batch_catch_up checks a still-planned batch's takes on disk at startup (or once the game closes) and rewrites the manifest as unwatched. Part of #545 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The capture payload sends each highlight's id and the open project. batch_catch_up.js marks the caught-up highlights Captured, in the project file the batch came from or in the open queue. Part of #545 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged the updated #757 in (f4cf3c9). native 670, desktop-studio 126 pass; clippy clean. Live test by Claude, 2026-10-14 night (Brain account, POST, Seek Between Clips on). Release build from this head via Main path passes. Started the batch; once the hook log showed Gap found: closing during the launch handoff loses the batch. On the first try I closed Studio ~12 s after Start, which was before Studio had sent Side finding: |
… the game After Start, Studio sends the batch's start to the game ~5 s after the hook's pipe answers. Closed in that window, the game sat at its main menu with no batch, while the close prompt said it keeps capturing. The capture loop now records where the start stands (BatchStart). On close, a start still on its way is waited for (up to 30 s, with a countdown and Keep Studio open). Once it is sent the usual prompt shows; if it never gets there, or the game hasn't launched yet, the prompt says the batch hasn't started and Cancel batch and close cancels it. desktop-studio's tests no longer write into the real activity log: every Scratch points DOD_STUDIO_LOG_DIR at a temp folder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged The handoff gap
Test log
Decisions
Local results
Still needs a live test by you (release build via
|
…thing The close prompt's wait and question share one dialog. Clicking the title bar's X again during the wait opened a second wait over the first; when the first wait ended, its dismiss answered the second, whose own dismiss then closed the first's question, and Studio stayed open with no answer given. A second close now answers no at once while the first is open. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Correctness review of tonight's commit 600e720 (close during the start handoff, Fixed (55bcb15):
Checked and judged fine:
Tests after the fix: 🤖 Generated with Claude Code |
# Conflicts: # studio/src/main.js
|
Merged dev in (dce5864): one main.js import conflict, kept dev's refreshRenderButtons import alongside this PR's createBatchCatchUp. main.js is 868/900. Locally cargo test 1860, JS unit 619, e2e 312, clippy + fmt clean; CI green. |
# Conflicts: # studio/src/main.js # studio/src/project_session.js # studio/src/themed_confirm.js
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
capture_manager.rs: verify_capture_takes keeps dev's on_checked progress callback (#952) and still delegates to this branch's verify_capture_takes_settling, which now takes the callback too; the catch-up passes a no-op. themed_confirm.js: keeps both hideConfirm (#545) and destructive (#880). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch away (#880) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged dev in, and a live test on POST: passesMerge: two conflicts, both where #885's Live test (POST-Anniversary install, Brain account, a debug build started outside cargo so the game outlives Studio; 3 highlights of
One note: the toast is the default 3 s. At startup, or minutes later when the game closes, that is easy to miss; the log line stays. PRE not run: this PR changes nothing in the hook or the game side, only Studio. |
Release note: New: If DoD Studio was closed during a capture batch, it marks the finished clips as captured the next time it opens.
Part of #545 (part 2, without reconnecting to a still-running game).
Stacked on #757 (
feat/seek-default-434), so this PR gets no CI until #757 merges and it is retargeted todev. Local results are below.What it does
The batch manifest records its highlights.
manifests/session_*.jsonnow also holds each payload highlight's id (take_index.js'sstreakUid), its source demo, the project file the batch was started from, and the capture mode and AGR rate. All#[serde(default)], so older manifests still load.manifest_file::read_planned_inreads back the ones still at outcomeplanned.Catch-up on start (
studio/src-tauri/src/batch_catch_up.rs, commandcatch_up_unwatched_batches). Studio checks each planned batch's takes on disk with the same check a watched batch runs at its end (no 1.5 s settle: the batch ended long ago). It writes the capture settings beside each take and rewrites the manifest asunwatched, so each batch is caught up once.A game still running: the batch may still be going, so the check waits until no
hl.exeis left (polled every 2 s), then sends abatch_catch_upevent. Only the sessions planned at startup are checked, so a batch this Studio starts in the meantime is never caught up by mistake.Marking (
studio/src/batch_catch_up.js,createBatchCatchUpfactory, Vitest tests). Each captured block's highlights are marked Captured with the same forward-only rule as a watched batch: a verified Rendered is kept, a hand-set one is overruled. The take index gets the takes too, so a later render resolves them. Where the marks go:A toast says how many clips are on disk and how many highlights were marked.
The capture payload sends
streak_uidsandproject_path.project_session.jsexposesgetSessionPath(), andmain.jsonly wires the factory.The close-during-batch prompt's text now says Studio checks the takes when it next opens. It also no longer says the game stays open: since feat(goldsrc-hooks): the game quits itself at a batch's end when Studio isn't watching (Part of #545) #549 the hook quits the game itself.
Decisions
running_game_pids) and its pipe name (events_pipe_name), but resuming live watching needs the batch's progress state: block correlation, markers and the ETA. That state lived in the Studio that closed, and rebuilding it is well over an hour's work. Studio waits for the game to close instead, then catches up.What's left on #545
Local results
rustup run 1.98.1 cargo fmt --all --check: cleanrustup run 1.98.1 cargo clippy --workspace --all-targets --exclude goldsrc-hooks --exclude web-analyzer --locked -- -D warnings: cleancargo test -p desktop-studio --locked: 121 passed (new: 2 inbatch_catch_up, 2 inmanifest_file)npm run test:unit: 381 passed (new: 9 inbatch_catch_up.test.js;main_js_budgetpasses)npx playwright test: 228 passedUser test (either install)
git checkout feat/batch-catch-up-545, start Studio (npm run tauri devfromstudio/, or a build). A dev build kills the game when Studio closes (part 4), so use an installed-style build (build-and-launch.ps1) for this test.[batch-catch-up]line.🤖 Generated with Claude Code