TrackItem.move() desyncs selection/display from data model on duplicated ▎ sequence (16fps source); cut+paste resyncs
After multiple TrackItem.move() calls on a duplicated sequence, the
▎ sequence's display and selection state become desynced from the data model:
▎ clips play correctly and report correct start/end values, but the timeline
▎ draws ghost clips and Edit > Select All only finds a subset. Cutting and
▎ pasting the affected clips fully resyncs the state.
Steps to reproduce
1. Open a Premiere project with one source sequence whose video timebase
reports as 16 fps (a Microsoft Teams MP4 export reproduces this; happy to
attach a sample if useful).
2. Run a CEP/ExtendScript that:
- calls sourceSequence.clone(),
- razors the duplicate at multiple time boundaries via
qe.project...getVideoTrackAt(i).razor(timecode),
- removes clips outside the kept ranges via trackItem.remove(false, true),
- moves each remaining TrackItem by a negative offset using
trackItem.move(timeOffset) where timeOffset.seconds is set to a negative
number large enough to pack the kept ranges to the head of the timeline.
3. Inspect the resulting duplicate.
Expected
The duplicate's video and audio tracks each contain N retained clips at packed
positions. Edit > Select All highlights all of them; the timeline lane draws
all of them; playback covers all of them.
Actual
- Playback covers all N retained clips correctly. ✓
- Reading clip.start.seconds / clip.end.seconds for every retained item
returns the correct packed positions. ✓ (Verified by logging before/after
every move().)
- The timeline lane draws roughly N clips but several are ghost graphics at
stale positions and the "real" ones don't all show.
- Edit > Select All highlights only a subset (in my run, 4 of 12).
- Cmd+A → Cmd+X → Cmd+V makes all N clips appear correctly and become
individually selectable. From that point forward the sequence behaves
normally.
- Closing and reopening the project does not resync the state.
- app.project.openSequence(sequenceID) to reopen the sequence in the panel
does not resync the state.

