Skip to content

Export portable MOV experiments with validated complete media - #141

Merged
mgradwohl merged 5 commits into
mainfrom
tracker-portable-movie-packaging
Nov 9, 2026
Merged

mgradwohl merged 5 commits into
mainfrom
tracker-portable-movie-packaging

Conversation

@mgradwohl

@mgradwohl mgradwohl commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Change

A linked MOV experiment can now be exported as a portable .trz through 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.

  • All six required checks pass in CI run 42583275559: Windows, macOS and Linux builds/tests, contributor setup, static analysis and the coverage gate. Ubuntu setup passed after retrying an upstream CMake-download HTTP 504; no code or check was bypassed.
  • Linux actual-Tracker acceptance passes linked-mov/packaged-movie, packaged-movie-clip and packaged-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.
  • Combined C++ line coverage: 95.83% (8931/9320), above the unchanged 90% gate.
  • Complete local Windows suite: all ten CTest groups pass in 127.98 seconds, with 95.76% (8902/9296) coverage. All 90 Python corpus tests, 24 affected package/desktop tests, formatting, affected-source static analysis and translation XML checks pass. Three existing LLVM function-profile mismatch warnings remain visible.
  • Current-head code review recommends approval with no open issues. Optional suggestions and disproved link concerns have evidence-based dispositions in their threads.

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.

  • Applied docs/code-review.md; all discussions resolved.
  • Updated R03/R05 and format/corpus/user documentation, including the earlier merged Support MOV archive edits and guard unsupported movie containers #139 evidence.
  • Updated French, German and Spanish catalogs with unfinished entries for new messages.
  • Distinguished local verification, current-head CI and actual-Tracker acceptance.

Copilot AI balanced review requested due to automatic review settings November 9, 2026 06:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment thread src/tracker_image_package.cpp Resolved

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread CMakeLists.txt Resolved
Comment thread CMakeLists.txt Resolved
Comment thread src/main_window.cpp Resolved

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread src/tracker_image_package.cpp Resolved
Comment thread tools/corpus.py Resolved
Comment thread docs/native-format.md Resolved

Copilot AI left a comment

Copy link
Copy Markdown

Comment thread src/tracker_image_package.cpp Resolved
Comment thread tools/corpus.py Resolved
Comment thread src/main_window.cpp Resolved
Comment thread tests/test_corpus.py Resolved

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mgradwohl
mgradwohl merged commit 4e619ac into main Nov 9, 2026
12 of 14 checks passed
@mgradwohl
mgradwohl deleted the tracker-portable-movie-packaging branch November 9, 2026 08:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants