fix(tools): require consecutive frames for flash analysis #1467
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!1467
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/frame-log-integrity"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The binary frame-log writer may drop queued records.
scripts/framelog.pyreports missing frames but still compares neighbouring stored records as consecutive presented frames, so a missing immediate neighbour can produce a false one-frame flash.Require both sequence steps of a flash triplet to be one modulo uint32, keep advancing the rolling brightness cache across gaps, and report eligible/skipped triplets. Preserve brightness thresholds and PNG event ranking. Validate incomplete/short captures and invalid headers with useful CLI errors;
--inspectchecks metadata without NumPy. Analyse a completed stable capture; this does not infer completeness across pauses or diagnose every visual defect.Validation:
a37ab47: 192 captured records, 96 game/96 made, 190 eligible triplets, no missing records, analysis exit0. Original checkpoint hashes unchanged. This is producer/reader format compatibility, not runtime validation of the newer main renderer.9d6936aplus this patch: 190 passed, 4 failed, 16 skipped. The same baseline environment failures remain (Windows symlink privileges, fps-overlay fixture initializer_list, native SDK precompile guard, display-startup unused-global warning under local LLVM). Exact-head fork CI follows.Python-only change; no renderer/host implementation or capture-format change. No game files, captures, images or private logs included. PR1418 addresses the separate text probe reader.
Current-head validation
Current head
ddfe875, based on main75f6d89. Earlier local/runtime results describe their recorded source hashes.The standalone contribution patch is unchanged after the audited main refresh; exact-head build/source checks are refreshed below. Earlier runtime evidence remains tied to its recorded hash.
Fork runs are separate from upstream Actions approval; no maintainer approval gate is bypassed.
Looks good. I read the gating against the writer in gpu/vk/vk_replay.cpp. The queue can drop records (the 512 cap), and seq/at are assigned under present_image_mu, so requiring both steps of a triplet to be +1 mod 2^32 is the right fix. The rolling prev/cur still advances across gaps, so the next contiguous triplet is compared against the right neighbours, and the thresholds and PNG ranking are untouched. The stdlib-only header validation and
--inspectare a nice touch. The new test needs no run_all.py entry because it is picked up by the tests/test_*.py discovery, and it only touches scripts/framelog.py, so it doesn't clash with #1418 (that one changes scripts/probe.py).Nits only, no need to act:
main()returns 0 only on the--inspectpath and implicitly None otherwise. Both exit 0, so it's harmless, but an explicitreturn 0at the end would be tidier.I didn't build or run it; CI is not reported on this branch upstream, only the fork runs in the description.