Template scan of entire source found the knife/letter-opener close-up at
t=130-133s in the film (scene 17, 127.76-133.04s). Previous wrong match was
pointing at scene 309 (the coffee/window scene) for both shots because the
strong continuity seed from beat 14 overwhelmed the global search.
Two-segment provisional match written to cache manually:
seg[0] knife: scene 17 in=130.32s dur=2.80s score=0.72 (confirmed)
seg[1] coffee: scene 309 in=2615.52s dur=1.28s score=0.38 (provisional)
Regenerated CUTTER_REPORT and match_report with correct beat 15 clips/stills.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1. Action-group classifier conflated object-touches and person-touches.
"man touches the red door with a small object" was being tagged as
forehead_touch because "touch" was in the forehead_touch needles set.
That made the realign pass yank Beat 16 from scene 451 (correct: man
painting red door, IV stand) over to scene 623 (woman/man in bed) —
a totally wrong shot at score 0.344.
Fix: removed generic "touch*" verbs from forehead_touch's needle set.
forehead_touch is now added in _semantic_action_groups() only when a
touch verb is paired with an explicit body-part target (forehead,
face, cheek, head, hand, ...) and not paired with an object target
(door, handle, brush, tool, lock, ...).
Effect on Beat 16 after `match --beat 16 --vision`:
scene 623 in=5476.28 score=0.344 -> scene 451 in=3912.48 score=0.626.
2. Cutter-report stills/clips were keyed by source-video mtime, so a
match-position change without a video change served stale frames from
the previous match. Dropped the mtime cache; both extractors now
render fresh every time. Slower (~minute per full regen) but correct.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Refreshed CUTTER_REPORT.{md,html} plus stills and clips from the latest
match cache. Notable changes vs prior cache:
- 6 confirmed (was 5): newly confirmed beats 2, 9, 12, 17 (beat 8 lost
confirmed status, beat 18 lost match entirely; both will be addressed
per-beat).
- Beat 2: previously unmatched -> scene 3 in=35.190s score 0.761 (OK).
- Beat 20: scene 613 in=5284.706s score 0.663 (OK), correct phase via
recovery.
- Beats 21, 23: previously unmatched -> now provisional via recovery.
- Beat 18: regression, currently MAN. (was confirmed before).
- Beat 24: still MAN. (end credits, expected).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- cli.py auto-regen now produces video clips on every match (no opt-in
flag). Best presentation comes first; speed cost (~minutes per match)
is accepted.
- output/cutter_stills/ and output/cutter_clips/ are no longer gitignored.
All 45 stills and 45 short MP4 previews are committed alongside the
CUTTER_REPORT.{md,html} so the remote repo always shows the current
state — even when the report files are inspected without running the
generator.
- Other output/ contents (FCPXML, EDL, debug folders, HTML report) stay
ignored.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>