From 1fec20a2a3dff5bf98d420664d0beec98129527c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 20 Sep 2026 14:05:52 +0200 Subject: [PATCH] fix(export): take the sylpheed-formats dependency by path, not by tag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes the last reason this repository depends on its own history. The pin was deliberate and carried its own exit condition, written into the comment above it: "revert to the path dependency the day the tag is an ancestor of `main`." Measured -- `formats-pin-2026-09-01` (e2630413) IS an ancestor of `main` now, so the condition is met, and the cost the comment named goes away with it: while the pin held, `sylpheed-cli` built from the workspace crate and the exporter from the tag, so `tools/port/verify-screen` compared two eras instead of detecting drift. They read one decoder again. It also removes a failure mode nobody priced in. Depending on this repo by tag is what made the #49 history rewrite break the build: every commit was replaced, the locked rev vanished, and clean checkouts could not resolve it while the rewriting machine kept working off its `~/.cargo/git` cache (PR #60). A path dependency cannot fail that way. `Cargo.lock` now has ZERO references to Sylpheed.git. ⚠️ This moves the exporter across a 243-file decoder change (8 467 insertions), so it was gated on the full suite rather than a compile: 45 suites / 377 passed / 0 failed / 14 ignored, cargo exit 0 45 binaries launched, 45 reported (a SIGKILLed suite prints no result line and would otherwise vanish from the tally) corpus report: PRESENT for disc, res3d and iso Co-Authored-By: Claude Opus 5 (1M context) --- Cargo.lock | 25 +++----------------- crates/sylpheed-export/Cargo.toml | 38 ++++++++++--------------------- 2 files changed, 15 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abce883d..26af7a0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5197,7 +5197,7 @@ dependencies = [ "colored", "image", "indicatif", - "sylpheed-formats 0.1.0", + "sylpheed-formats", "texpresso", "tokio", "tracing", @@ -5213,7 +5213,7 @@ dependencies = [ "image", "serde", "serde_json", - "sylpheed-formats 0.1.0 (git+https://git.mc02.dev/fabi/Sylpheed.git?tag=formats-pin-2026-09-01)", + "sylpheed-formats", ] [[package]] @@ -5234,25 +5234,6 @@ dependencies = [ "xdvdfs", ] -[[package]] -name = "sylpheed-formats" -version = "0.1.0" -source = "git+https://git.mc02.dev/fabi/Sylpheed.git?tag=formats-pin-2026-09-01#e26304133732792cb1df5563c21df59471f5bf7d" -dependencies = [ - "anyhow", - "binrw", - "flate2", - "futures", - "rayon", - "serde", - "serde_json", - "thiserror 2.0.18", - "tokio", - "tracing", - "ttf-parser 0.24.1", - "xdvdfs", -] - [[package]] name = "sylpheed-ppc" version = "0.1.0" @@ -5276,7 +5257,7 @@ dependencies = [ "image", "rfd", "rodio", - "sylpheed-formats 0.1.0", + "sylpheed-formats", "thiserror 2.0.18", "tracing", "tracing-subscriber", diff --git a/crates/sylpheed-export/Cargo.toml b/crates/sylpheed-export/Cargo.toml index cc39da50..51676879 100644 --- a/crates/sylpheed-export/Cargo.toml +++ b/crates/sylpheed-export/Cargo.toml @@ -55,33 +55,19 @@ license.workspace = true # a squash-merge can orphan, and no way for the exporter to be built against a # decoder it was never tested with. A decoder change and the exporter change it # requires now land in the same commit or not at all. -# PINNED BY TAG, which is what MISSION section 2 prescribes and what the tagging -# rule exists for: "the RE agent tags when it lands something you need and tells -# you over the message channel -- that is how you stay current without floating." -# That is exactly what happened here. +# ✅ UNPINNED 2026-09-20. The pin above was deliberate and carried its own exit +# condition -- "revert to the path dependency the day the tag is an ancestor of +# `main`" -- because while it held, `sylpheed-cli` built from the WORKSPACE crate +# and the exporter from the tag, so `tools/port/verify-screen` compared two eras +# instead of detecting drift. `formats-pin-2026-09-01` is now an ancestor of +# `main` (measured), so the two read one decoder again. # -# The tag carries the CORRECTED keyframe association: a placement group is an -# 8-byte header then `frames` x {u32 time; 36-byte pose}, so pose 0's time is the -# group's lead-in word and EVERY POSE IS TIMED, including the last. The working -# tree's copy still has the retired `SYLPHEED_KF_TIME_SHIFT` knob -- a superseded -# partial fix that got the association right but left pose 0 untimed, which is -# why testing it moved the untimed frame from last to first instead of removing -# it. The old reading is behind `SYLPHEED_KF_TIME_LEGACY=1` here. -# -# 🔴 THE COST, STATED: `sylpheed-cli` builds from the WORKSPACE crate, so until -# this lands on `main` the exporter and the reference renderer read DIFFERENT -# decoders and `tools/port/verify-screen` is comparing two eras rather than -# detecting drift. `tools/port/verify-capture` is unaffected -- it compares the -# port against oracle CAPTURES and never touches the CLI -- and it is the check -# that matters. Revert to the path dependency the day the tag is an ancestor of -# `main`. -# Bumped c -> d 2026-08-29. What I wanted from the new state: `d` carries parser -# and `audio.rs` changes on top of `c`. ⚠️ Its headline change -- Reborn's -# renderer drawing `rotation_deg`, and `compose` drawing a leaf that carries -# geometry -- does NOT reach this port from here: `sylpheed-cli` builds from the -# WORKSPACE crate, so the reference renderer stays unrotated until the tag lands -# on `main`. This bump is for the parser, not for the renderer. -sylpheed-formats = { git = "https://git.mc02.dev/fabi/Sylpheed.git", tag = "formats-pin-2026-09-01" } +# 🔴 AND THE PIN HAD A COST NOBODY PRICED IN: it made this repository depend on +# its OWN history by tag. The issue-#49 history rewrite replaced every commit, +# the locked rev vanished, and the build broke for every clean checkout while +# still working on the machine that did the rewrite, because its `~/.cargo/git` +# still held the old object (PR #60). A path dependency cannot fail that way. +sylpheed-formats = { path = "../sylpheed-formats" } serde = { version = "1", features = ["derive"] } serde_json = "1"