Skip to content

chore(deps): pin keycut v0.2.0 and validate its live assembly receipt - #108

Merged
joepetjr merged 3 commits into
mainfrom
chore/keycut-0.2.0
Oct 28, 2026
Merged

joepetjr merged 3 commits into
mainfrom
chore/keycut-0.2.0

Conversation

@joepetjr

@joepetjr joepetjr commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

What

  • Pin keycut to v0.2.0, up from v0.1.2 (chore(release): 0.3.12, keycut v0.1.2 #105).
  • day_pipeline.extract_and_concat_segments now calls keycut's extract_and_concat_ranges_with_receipt, keeping every argument, and checks the live receipt with framegrade's load_receipt.
    • If the receipt fails validation, the error log names the field, the concat file is deleted so a resume can't reuse it, and the function returns None.
    • The signature and both callers are unchanged.

Why

This is unit Q3j of the media-quality / GPS-overlay plan. framegrade's receipt loader and EditTimeline.from_receipt were built against a frozen fixture. This PR proves that a real keycut receipt passes them.

Tests

  • New tests/test_keycut_live_receipt.py:
    • A real-ffmpeg run of keycut on a synthetic master. Its live receipt validates and maps output time back to source time within 0.15 s; keycut sizes spans from the probed piece durations.
    • The receipt's keys match tests/fixtures/assembly_receipt_v1.json at every level.
    • A receipt that fails validation makes the function return None and removes the concat.
  • Pin tests updated to keycut's intended new behaviour. Assertions are exact, not loosened:
    • the re-encode argv (test_inserts; the mirror itself landed in chore(release): 0.3.12, keycut v0.1.2 #105)
    • the clean-run command count, now 7: one keyframe probe, two copies, two piece probes for the receipt, one concat and one output probe (test_resume_correctness_segments)
    • the mocks in test_segment_extractor now return (path, receipt)
  • Run locally with keycut 0.2.0: every test file that touches keycut, edit_timeline or montage_builder, plus the changelog and docs suites, gave 544 passed and 1 failed.
    • The failure is test_installed_vcs_pins_match_pyproject. The local venv has older redactcam and seo-manager commits than main pins; keycut is not on its drift list. CI installs fresh.
  • ruff check and ruff format --check are clean, and tools/check_public_tree.py passes.

Move the keycut pin from v0.1.0 to v0.2.0. The day-master cut
(extract_and_concat_segments) now calls keycut's
extract_and_concat_ranges_with_receipt and checks the receipt it returns
with our own load_receipt. If the receipt does not validate, the function
logs an error naming the failing field and returns None, because an
output-to-source time map built from a bad receipt would be wrong. The
signature and return type are unchanged.

keycut 0.1.2 changed the re-encode fallback to seek on the input side
(-ss S -i master -ss 0 -t D). montage_builder.reencode_range_argv mirrors
that argv, so it follows; the lead-seam cut gives the same frames without
decoding from the start of the file. keycut 0.2.0 also probes piece and
output durations for the receipt, so the clean-run command count in the
resume test goes from 4 to 7.

Add a real-ffmpeg test that runs keycut on a synthetic master, loads the
live receipt, maps output time back to source time, and compares the
receipt's keys with the frozen assembly_receipt_v1.json fixture.
# Conflicts:
#	gomoveshift/pipeline/montage_builder.py
#	pyproject.toml
@joepetjr joepetjr added the needs-operator Autoland hard-denied this PR; human merge required label Oct 27, 2026
@joepetjr

Copy link
Copy Markdown
Contributor Author

Hard-denied (hard-deny: protected path family) and ready to merge -- all checks green.

Offending paths:

  • pyproject.toml

Human merge (all 3 ready hard-denied PRs in Back-Road-Creative/framegrade):
sudo gh-merge-batch Back-Road-Creative/framegrade 54 79 108 --wait --yes

This PR alone:
sudo gh-merge-approved 108 --repo Back-Road-Creative/framegrade --wait --yes

@joepetjr
joepetjr merged commit ca07c25 into main Oct 28, 2026
10 checks passed
@joepetjr
joepetjr deleted the chore/keycut-0.2.0 branch October 28, 2026 00:55
joepetjr added a commit that referenced this pull request Nov 9, 2026
…e drive argv (#259)

* feat(health): backlog rows carry the operator's per-LF labels into the drive argv

* chore(deps): pin seo-manager to waypost e63c463 (#108, per-LF location row fields)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-operator Autoland hard-denied this PR; human merge required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant