Skip to content

Practice CoD auto-stop: confirm a short VICTORY/DEFEAT splash by follow-up - #153

Merged
ConWan30 merged 1 commit into
mainfrom
fix/cod-autostop-short-splash
Nov 11, 2026
Merged

ConWan30 merged 1 commit into
mainfrom
fix/cod-autostop-short-splash

Conversation

@ConWan30

Copy link
Copy Markdown
Owner

Fixes the #151 practice CoD auto-stop missing a short end splash (match-20261111-165658, build 9594001: end word read 182486–183222 ms, about 2 reads; owner row never read; recording ran ~65 s past the end until Enter).

New rule. The sustained path from #151 stays as it was. A second path is added: two confirmed reads of the same VICTORY/DEFEAT word within 1.5 s, after the 120 s arm, open a candidate. For up to 30 s the watcher reads the owner row on every frame (before, the runner only read it on frames that also had the word). The candidate is confirmed by the owner row being read, by the same word again ≥ 2 s later, or by 8 s with no gameplay HUD event (hitmarker / kill popup / killfeed; the crosshair and pause stubs and the scoreboard hook are ignored). It is cancelled by the other word or when the 30 s window ends. The 12 s tail (clamped 10–15) counts from confirmation: on the quiet path the stop comes at least 20 s after the first word. Gate (practice + CoD + AUTOCLOSE=1), stop path, stop_reason values, receipt.v0, contracts/, schema/, src/ are unchanged. cod_end_stop.json is still info-only and now records path, follow_up, follow_up_ms, hud_events_in_candidate, the candidate / cancel counts and the new config. The stop note: line names the path and follow-up.

Killcam. A killcam shows no end word, so it cannot open a candidate (tested). If one plays after the splash and replays HUD events, each event restarts the 8 s quiet count, so the stop comes later rather than sooner (tested with synthetic events). Honest limit: on the real match only 2 of 3834 HUD region reads succeeded, so "no gameplay HUD" mostly measures time. The quiet path relies on read_end not misreading a word twice in 1.5 s mid-match: no false positives in the 413 non-end frames sampled, but there is no killcam footage to test against.

Tests: test_qorcap_cod_endstop.py goes from 25 to 39 (regression replay of this match's timing, which stops; killcam with no word; gameplay HUD returning after a splash; killcam HUD delaying the stop; a single read; reads too far apart; pre-arm splash; word switch; owner-reader error; owner_row and word_again confirms; record/note; a real-fixture owner row). The old sustained tests run with splash=False. CI floors 905/887 → 919/901.

Draft only. Do not merge.

…ow-up

match-20261111-165658 read the end word for 0.74 s (2 reads) and never
read the owner row, so the sustained rule (8 reads / 4 s) never fired and
the recording ran ~65 s past the end until Enter.

Two confirmed reads of the same word within 1.5 s after the 120 s arm now
open a candidate. For up to 30 s the watcher reads the owner row itself on
every frame. The candidate is confirmed by the owner row, the same word
again >= 2 s later, or 8 s with no gameplay HUD event (hitmarker, kill
popup, killfeed); it is cancelled by the other word or the 30 s window.
The sustained path, gate, arm, 12 s tail (from confirmation), stop path
and info-only cod_end_stop.json are unchanged; the record and stop note
now name the path and follow-up.

Tests: regression replay of the match timing, killcam/no word, gameplay
HUD after a splash, killcam HUD delay, single read, split pair, pre-arm,
word switch, reader error, real-fixture owner row. Floors 919/901.
@ConWan30
ConWan30 marked this pull request as ready for review November 11, 2026 23:35
@ConWan30
ConWan30 merged commit 9e58e91 into main Nov 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant