Skip to content

Support MOV archive edits and guard unsupported movie containers - #139

Merged
mgradwohl merged 3 commits into
mainfrom
tracker-movie-archive-saving
Nov 9, 2026
Merged

mgradwohl merged 3 commits into
mainfrom
tracker-movie-archive-saving

Conversation

@mgradwohl

@mgradwohl mgradwohl commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Change

MoTrack can now save mass, mark and clip-range edits in an existing audited constant-rate MOV .trz, using normal paired Save and native reopen after the original input is removed. Other experiments, compressed members, complete media and supporting files are preserved.

The first real Tracker check exposed a reference limitation: Tracker 6.3.5 fails to extract the original AVI archive before any MoTrack edits. That case stays pinned and explicitly excluded from accepted application round trips; the writer refuses non-MOV movie archives without replacing the destination. #140 records the failing run, exact reference bytecode/source evidence and remaining container work. This is separate from the historical MOV/Open Recent report in #65.

The positive fixture contains a genuine independently authored raw RGB24 MOV and a second image experiment. Four modes cover full-range, strided, single-frame and interrupted/recovered paired saves. All require actual Tracker loading of both tabs, resaving and freshly reopening each, native reimport, and complete movie/image byte checks. Baseline archives are copied alone into fresh directories so neighboring media cannot substitute for extraction.

The reference harness initializes Tracker's normal public cache preference inside each subprocess's private home. A bare TFrame otherwise leaves that preference unset and deletes extracted movies on process exit; a bounded headless control reproduced that difference. All-tab reports require the configured policy, while complete media hashes and fresh-process reopening remain mandatory.

Validation

  • Formatting and static analysis: all tracked C++ files pass clang-format; all five changed C++ translation units pass clang-tidy. Changed Markdown relative links resolve.
  • Relevant tests and regression coverage: All 10 Windows CTest groups pass (123.28 seconds). All 89 Python corpus tests and 30 native/headless Java XML/coordinate cases pass. All four native MOV archive export/oracle/reimport modes pass. Native FFmpeg and pinned headless Xuggle independently check all MOV pixels/timestamps; UTC/Pacific-Kiritimati generations match exactly and the original AVI generator remains byte-identical. Desktop tests cover mass/clip editing, undo/redo, paired saving, original removal and both saved-file reopen paths. The new AVI refusal regression failed before the guard and passes with existing destination bytes preserved.
  • Windows / macOS / Linux checks: Windows, macOS and Linux build checks pass at f166ba9a634bf6476b5eb32c69e144def9e8aaca in run 42568545597. The Linux actual-Tracker baseline and all four MOV archive export modes pass, including both-tab fresh reopen, complete media hashes and native reimport. Both contributor setup checks also pass; Ubuntu setup passed its targeted retry after an upstream CMake download HTTP 504. All six required checks are green on the same revision.
  • Combined C++ line coverage (90% minimum): Local Windows 95.74% (8857/9251). Three existing LLVM function-profile mismatch warnings remain visible. Combined CI coverage passes at 95.82% (8887/9275).

Compatibility and review

MOV archive output reuses the existing source/member/digest checks and constant-rate adapter. Movie timing, calibration, track identity and broader schemas remain restricted. New portable movie packaging, broader archive containers, variable-rate movies and filters remain unfinished. No Java dependency is added to the native application and no user-facing strings were added.

  • Full-port requirements R02/R03/R05 and their evidence are updated in docs/migration-plan.md; each remains partial. Guard archive movie formats that pinned Tracker cannot reopen #140 is included in docs/upstream-issues.md.
  • Applied docs/code-review.md to this diff.
  • Updated relevant documentation; translations are N/A because no visible strings changed.
  • Distinguished local validation from pending/completed CI and retained the known failing reference instead of accepting it.

Copilot AI balanced review requested due to automatic review settings November 9, 2026 05:11

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

Current-head Tracker load/save/fresh-process reopen acceptance for both tabs and three-platform CI remain pending, so the supplied local/headless checks do not establish the new movie-archive write path’s interoperability.

No open issues 🎉

What changed in this PR

Enables editing and saving audited constant-rate movies inside existing Tracker .trz archives through MoTrack’s archive writer and paired Save workflow, while preserving other experiments and embedded files.

Changes:

  • Allows existing movie archives to use the established mass, mark and clip-range editing adapter.
  • Adds a mixed movie/image fixture and regression coverage for archive preservation, native reopen, paired-save recovery and four Tracker round-trip modes.
  • Documents supported workflows and remaining limits. Current-head Tracker application acceptance and three-platform CI remain pending; this does not resolve the historical MOV/Open Recent report.
File Description
tools/​reference/​ArchiveMovieFixture.java Generates the reproducible mixed movie/image archive fixture.
tools/​corpus.py Adds movie-archive round-trip modes and saved-media verification.
tests/​tracker_archive_writer_test.cpp Covers movie archive edits, native reopen and safe refusal paths.
tests/​test_corpus.py Tests mixed-tab checks and invalid archived-media references.
tests/​paired_workspace_test.cpp Exercises desktop paired saving and reopening after original removal.
tests/​corpus/​README.md Documents fixture provenance and archive acceptance checks.
tests/​corpus/​manifest.json Registers the movie archive and independent tab expectations.
tests/​corpus_probe.cpp Adds movie-archive export modes and recovery-state checks.
src/​tracker_writer.hpp Documents the archive writer’s supported movie scope.
src/​tracker_writer.cpp Removes the blanket refusal of movie archive exports.
README.md Describes supported movie-archive saving workflows.
docs/​native-format.md Records archive preservation contracts, restrictions and validation.
docs/​migration-plan.md Updates implementation status and distinguishes completed from pending evidence.

Review effort: Balanced

@mgradwohl mgradwohl changed the title Support editing and saving existing Tracker movie archives Support MOV archive edits and guard unsupported movie containers Nov 9, 2026
@mgradwohl
mgradwohl requested a balanced review from Copilot November 9, 2026 05:30

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 suffix exception permits movie-archive exports despite a demonstrated resave failure that leaves a nonexistent media reference; exports must remain blocked until isolated save/reopen and complete media checks pass.

1 open issue

Review effort: Balanced

Comment thread src/tracker_writer.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

MOV archive and reference-cache changes still await current-head Tracker 6.3.5 all-tab load/save/fresh-reopen acceptance and three-platform CI, while native/headless checks alone cannot establish interoperability.

1 open issue

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.

🟢 Approval recommended

No active review issues are reported for the scoped MOV archive support changes.

No open issues 🎉

1 resolved since last review

Review effort: Balanced

@mgradwohl
mgradwohl merged commit 19e126d into main Nov 9, 2026
13 of 14 checks passed
@mgradwohl
mgradwohl deleted the tracker-movie-archive-saving branch November 9, 2026 06:15
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