@@ -2623,3 +2623,54 @@ project file, seed data included (`app/seed/test50.bmp.json` has 24 real
26232623` eventOverrides ` entries) - renaming it would need a migration path for
26242624a purely cosmetic, user-invisible consistency gain, which isn't a trade
26252625worth making under this deadline.
2626+
2627+ ** 2026-09-07, later the same day: demo video recorded, brief-compliance
2628+ audit, KNOWN_LIMITATIONS staleness pass.** The demo video (` Demo_Video.mp4 ` ,
2629+ 3:22) was recorded, following the sequence planned earlier the same day:
2630+ test51 live end to end (load, background/ROI, one keyboard ROI correction,
2631+ live tracking, event detection with a human-review override and a note,
2632+ measures, export CSV+XLSX+project file, all shown live), test50 via Load
2633+ Example (resume banner confirmed working), test53 via Open project file
2634+ (the video-match/recompute-without-retracking flow shown live, honest about
2635+ being a resume rather than a fresh run), ending on a deliberate "Clear
2636+ everything." Verified frame-by-frame (not by watching, since the reviewing
2637+ session had no audio/playback access) by sampling stills across the whole
2638+ timeline with OpenCV - confirmed duration/resolution match the claimed
2639+ length, confirmed the full planned sequence is present and nothing is stuck
2640+ or broken. One real, minor, accepted-as-is finding: zooming the video panel
2641+ to 150% briefly drags the whole page into horizontal scroll (~ 40s, clipping
2642+ the header) before self-correcting - a real containment bug (the video
2643+ panel's zoom isn't scoped to its own container), logged in
2644+ KNOWN_LIMITATIONS.md below rather than re-recorded, since it's cosmetic,
2645+ self-corrects, and re-recording this close to the deadline carries more
2646+ risk than the bug itself.
2647+
2648+ A mechanical brief-compliance check (` audits/2026-09-07-brief-compliance.md ` ,
2649+ run against ` tasks/01-barnes-maze.md ` 's own line items) came back 60 YES, 2
2650+ PARTIAL, 0 NO, 1 unconfirmed. The two PARTIALs (test50/test53 shown via
2651+ pre-tracked reload rather than a live re-track in the demo video) are the
2652+ deliberate design already described above, not gaps - reconfirmed here so a
2653+ future reader doesn't mistake the PARTIAL verdict for an oversight. The one
2654+ unconfirmed item (whether the README states outright that no GPU is
2655+ required) was real: grepped and confirmed the claim was never written down
2656+ anywhere, despite CLAUDE.md naming "a 2019 laptop with no GPU" as the target
2657+ hardware from the start. Fixed: one sentence added to README's "Who this is
2658+ for" section.
2659+
2660+ Also ran a staleness audit (forked out, read-only first) of README.md,
2661+ KNOWN_LIMITATIONS.md, DECISIONS.md, and AI_NOTES.md against current app
2662+ state - the same failure class named earlier in this file (docs drifting
2663+ behind a fast-moving build). DECISIONS.md's own last ~ 20 entries and
2664+ AI_NOTES.md (still under a page, no factual errors) both checked out clean.
2665+ KNOWN_LIMITATIONS.md had one real gap: four UX-audit findings from earlier
2666+ Monday's session (decode-miss vs. tracking-miss both collapsing into one
2667+ "failed" count in ` track.js ` , the video-flag dialog's ` flagVideoForm.reset() `
2668+ always reopening blank and silently overwriting an existing flag on
2669+ resubmit, the tracking-failure strip's color-only fraction gradient with no
2670+ pattern cue, and the raster PNG export baking in pattern-distinct visit bars
2671+ but never the legend that explains them) had been found and fixed-elsewhere
2672+ in conversation, but never actually written into this file - so the file
2673+ still read as if everything was resolved. Added as a new entry, each claim
2674+ re-verified directly against the current code (exact line numbers) rather
2675+ than restated from memory, since the whole point of this pass was not to
2676+ propagate a stale claim into a supposedly-fresh one.
0 commit comments