From the 2026-07-03 comprehensive review. Blocks #29 (per-clip pin/rollback) — pin/rollback decisions key off this parse.
parseVersion treats any _v<suffix> as a version tag: rfind("_v") (src/project/MediaVersioning.cpp:65-83) matches _visual, _video, _version. intro_visual.mov → base intro, tag isual; groupKeyOf then collapses it with intro.mov into one group, and since an empty tag ranks lowest, intro_visual becomes the "latest" primary. Two unrelated files show as one MediaBin row, and dragging "intro" auto-rolls to intro_visual.
Also: mixed-alnum tags fall to lexicographic compare (:100-103) — _v2a sorts after _v10a; only pure-digit tags compare numerically.
Fix: require the tag to start with a digit (_v + digits, optional suffix), and make mixed tags compare numerically on the leading digits. While in the area: MediaBinWindow.cpp:539-549 keys the clip-derived-metadata cache by clip.filepath (logical) but looks it up by entry.originalPath (versioned) — keys never match for versioned entries, so the prefer-clip-metadata path is dead and always falls back to probe.
From the 2026-07-03 comprehensive review. Blocks #29 (per-clip pin/rollback) — pin/rollback decisions key off this parse.
parseVersiontreats any_v<suffix>as a version tag:rfind("_v")(src/project/MediaVersioning.cpp:65-83) matches_visual,_video,_version.intro_visual.mov→ baseintro, tagisual; groupKeyOf then collapses it withintro.movinto one group, and since an empty tag ranks lowest,intro_visualbecomes the "latest" primary. Two unrelated files show as one MediaBin row, and dragging "intro" auto-rolls tointro_visual.Also: mixed-alnum tags fall to lexicographic compare (:100-103) —
_v2asorts after_v10a; only pure-digit tags compare numerically.Fix: require the tag to start with a digit (
_v+ digits, optional suffix), and make mixed tags compare numerically on the leading digits. While in the area: MediaBinWindow.cpp:539-549 keys the clip-derived-metadata cache byclip.filepath(logical) but looks it up byentry.originalPath(versioned) — keys never match for versioned entries, so the prefer-clip-metadata path is dead and always falls back to probe.