Repository navigation
Export portable MOV experiments with validated complete media - #141
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
The new symbolic-link destination refusal remains untranslated and lacks entries in all three translation catalogs, causing an English diagnostic regardless of the selected locale.
1 open issue
What changed in this PR
Adds portable .trz export for audited, indexed constant-rate MOV experiments, extending MoTrack’s existing image-packaging workflow. Broader movie containers remain unsupported; this does not resolve the historical MOV/Open Recent issue.
Changes:
- Copies complete MOV media and validates staged frame counts and timestamps before atomic replacement.
- Extends desktop export while preserving save destinations, dirty state and undo/redo history.
- Adds native, desktop and corpus regression coverage, plus documentation and translation updates. Current-head cross-platform CI and actual-Tracker acceptance remain pending.
| File | Description |
|---|---|
translations/motrack_fr.ts |
Updates French catalog entries for media export. |
translations/motrack_es.ts |
Updates Spanish catalog entries for media export. |
translations/motrack_de.ts |
Updates German catalog entries for media export. |
tools/corpus.py |
Adds MOV package oracles and three round-trip modes. |
tests/tracker_movie_package_test.cpp |
Tests complete-media preservation, refusals and destination protection. |
tests/test_corpus.py |
Tests MOV package XML and byte-validation oracles. |
tests/image_package_workspace_test.cpp |
Covers desktop MOV export, session preservation and cancellation. |
tests/corpus/README.md |
Documents portable MOV acceptance requirements. |
tests/corpus/manifest.json |
Enables MOV package round-trip coverage. |
tests/corpus_probe.cpp |
Adds native MOV package export modes. |
src/tracker_writer.hpp |
Declares the portable MOV writer contract. |
src/tracker_image_package.cpp |
Shares packaging logic and validates staged MOV media. |
src/paired_save.hpp |
Declares destination-locked MOV copy export. |
src/main_window.hpp |
Renames the archive chooser for shared media use. |
src/main_window.cpp |
Enables and dispatches indexed MOV export. |
README.md |
Documents portable image and MOV export workflows. |
docs/upstream-issues.md |
Records merged MOV archive evidence and remaining restrictions. |
docs/native-format.md |
Defines portable MOV packaging guarantees and limits. |
docs/migration-plan.md |
Updates implementation status and scoped acceptance evidence. |
CMakeLists.txt |
Links media validation and registers MOV package tests. |
Review effort: Balanced
There was a problem hiding this comment.
🔵 Needs a closer look
Required current-head Tracker load/save, fresh-process reopen, and three-platform validation remain pending, so the available source-only, native, and oracle evidence cannot establish MOV interoperability.
No open issues 🎉
1 resolved since last review
Review effort: Balanced
There was a problem hiding this comment.
Note
Copilot was unable to run its full agentic suite in this review.
Copilot review overview
3 open issues
requireReadable(...)is used for non-I/O validation (index/frame-time mismatch). When this fails,… · Newverify_media_package_exportno longer checkspackage.testzip()and does not normalize… · New The section title still says “Desktop portable-image export” but the content and UI now describe a… · New
3 resolved since last review
Review effort: Lite
There was a problem hiding this comment.
Note
Copilot was unable to run its full agentic suite in this review.
Copilot review overview
4 open issues
Movie packaging relies later ondocument.project.clip.sourceFrameCountbeing present and matching… · New Addingcache_policychanges the emitted report schema for all modes, not just the new… · New The object names (imageArchiveProgress,cancelImageArchiveExport) are now misleading because… · New Building the expected packaged-movie XML via a string `.replace("constant-rate.mov",… · New
3 resolved since last review
Review effort: Lite
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues are recorded for the portable MOV archive export changes.
No open issues 🎉
4 resolved since last review
Addingcache_policychanges the emitted report schema for all modes, not just the new… Movie packaging relies later ondocument.project.clip.sourceFrameCountbeing present and matching… Building the expected packaged-movie XML via a string `.replace("constant-rate.mov",… The object names (imageArchiveProgress,cancelImageArchiveExport) are now misleading because…
Review effort: Balanced



Change
A linked MOV experiment can now be exported as a portable
.trzthrough File → Export portable archive…. The package copies the complete movie without conversion, preserves audited mass/mark/clip-range edits, and keeps the current document's save destinations, dirty state and undo/redo history. Opening the package supports the existing paired Save workflow and optional native companion.The shared image/MOV adapter uses bounded staging, ZIP validation, atomic replacement, cancellation and destination locks. Before replacement, FFmpeg re-indexes the immutable staged movie and requires its complete frame count and timestamps to match the document. Unreadable media and changed movie timing receive distinct translated diagnostics. The independent package oracle checks every bounded member's CRC, hash and XML content and reports corrupt ZIPs consistently.
Validation
Tested and reviewed revision:
d0e1a66cac54aeb8f559c9d5c5835330f34ca7d3.linked-mov/packaged-movie,packaged-movie-clipandpackaged-movie-clip-single. Each starts after native save/reopen and original-project removal; all external movie files are removed before Tracker opens the actual archive. Complete XML/movie-byte checks, Tracker save/fresh-process reopen and native reimport pass. Existing four-mode all-tab MOV archive acceptance also passes.Regression coverage includes full media outside clip bounds, source removal/relocation, native/archive reopen, stale timing/corrupt movies and ZIP CRCs, unsupported inputs, cancellation, destination locks/pending recovery, desktop export, undo/redo and ordinary/paired saving afterward.
Compatibility and review
Other movie containers remain refused under #140. The audited MOV writer retains unchanged timing, calibration and track identity requirements. Broader containers, variable timing, filters, unsupported schemas and full export authoring remain unfinished. This adds scoped coverage related to #65; it does not reproduce or close the historical MOV/Open Recent report. Java remains development-reference tooling only.
docs/code-review.md; all discussions resolved.