v2.49.0
Cross-shot relationships (spec §4 — pattern recognition only): the shot page's Relationships group finally fills, and the edit engine can prefer vision-confirmed alternates.
Added
- Schema v12
shot_relationships:same_setup_as/alt_take_of(symmetric) andcontinues_from(directional — the source shot continues from the target), append-only with supersede semantics. media_analysisactionsdetect_shot_relationships/commit_shot_relationships/list_shot_relationships: pairwise cosine over the per-shot visual vectors (with transcript continuity as a second signal forcontinues_from) → a deferred confirmation payload with a representative frame pair per candidate (caps pre-checked at two frames per candidate; candidates live only in the detection-state stash until committed, so re-detect never leaves ghosts) → vision-confirmed rows. Representative frames use the shot's middle sample — first/last frames often catch fades.- Shot page: the Relationships group now renders from the DB (
continues_fromshows on the continuing shot; cross-clip targets are clip-qualified).
Changed
plan_swapprefers confirmedalt_take_ofalternates over raw cosine similarity — confirmed takes sort first and are unioned in even when the cosine search missed them; each alternate's rationale states which basis ranked it.
Validation
- Live confirmation pass on the sample analysis root: 18 candidates from 33 per-shot vectors; host-chat frame-pair review confirmed 13 and rejected 5 (lookalikes and scene changes). The cracked-windshield passage landed as
continues_fromchains exactly as the QC block predicted. - 14 new unit tests (heuristics, frame-pair payload, commit/supersede/token-mismatch, panel block, swap preference). Offline suite at 1174.