From 6afe0c4ab80b0c34aefa6619598187f263201c9b Mon Sep 17 00:00:00 2001 From: sylph-decoder Date: Sun, 30 Aug 2026 14:18:30 +0000 Subject: [PATCH] re: main is 171 commits behind and carries the STALE keyframe reader Went to refute sylpheed-port's finding that their check-all allowance ("the pin is not on main, so this compares two decoder eras") explained nothing, by extending its reach past three screens. Found the premise is understated. git rev-list --left-right --count origin/main...HEAD -> 0 171 main has nothing we lack; we are 171 commits ahead of it. Its tip is dated 2026-08-29, the pin tag is not an ancestor of it, and its ui_layout.rs still reads "Keyframe time, or None for the group's last frame" -- the pre-fix association that takes a pose's time from the NEXT record and leaves a group's final pose untimed. That is the exact bug that left fade_quads.py stale and made screen-transitions.md publish a 0.87-4.08 s fade-in for a 0.20-0.27 s ramp. So "sync with main first" is currently backwards: main is the stale era, and `git merge origin/main` is a no-op from any topic branch -- it says "Already up to date" every iteration, which reads as "I am current" and means "main has nothing". Do not pin to main. The port's measurement stands: across their three screens the two eras render identically, which is consistent with the association fix moving TIMES and not pixels -- same signature as the .tbm and stale-sylpheed-cli findings. Not settled: whether the eras render identically beyond three screens (the disc-wide build-and-compare is not done), and why 171 commits are unmerged, which is a human's call. Also adds the METHOD entry the port offered: an allowance is a claim and it decays; allow by NAME, never by COUNT, because a count cannot notice that a different row started failing while the total held steady. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v --- docs/re/METHOD.md | 16 ++++++++ docs/re/main-is-the-stale-era.md | 64 ++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 docs/re/main-is-the-stale-era.md diff --git a/docs/re/METHOD.md b/docs/re/METHOD.md index 0547c32c..fbebc108 100644 --- a/docs/re/METHOD.md +++ b/docs/re/METHOD.md @@ -216,6 +216,22 @@ agent's loop prompt, i.e. nowhere durable. See [`README.md`](README.md) for the artifact, not the exit code — the artifact reached its correct 8.0 s duration while the process it came from never returned. +* **An allowance is a claim, and it decays like any other.** `sylpheed-port`'s + `check-all` printed *"2 DIFFERS, allowed: the pin is not on main, so this + compares two decoder eras"* — in green, for weeks, and both of us quoted it back + without testing it. Tested: `sylpheed-cli` built at `formats-pin-2026-08-30` and + at workspace HEAD render `title`, `title_jp` and `main_menu` **byte-identically**, + despite 508 lines of difference in `ui_layout.rs`. The eras explain nothing; the + allowance was making a real disagreement look accounted for, and the real reasons + were already written down elsewhere in their own notes. Two rules: + **an excuse in a passing check is an untested assertion that never gets read as + one**, because green output is not scrutinised; and **allow by NAME, never by + COUNT** — a count cannot notice that a *different* row started failing while the + total held steady, which is exactly the hole the allowance opens. ⚠️ Same + signature as the `.tbm` and stale-`sylpheed-cli` findings: *the times moved, the + pixels did not*. When two versions of a renderer are supposed to differ, check + whether they actually do before explaining a mismatch with the difference. + ## Runtime / emulator * **Look at the PNG** — and check its dimensions. diff --git a/docs/re/main-is-the-stale-era.md b/docs/re/main-is-the-stale-era.md new file mode 100644 index 00000000..b8292716 --- /dev/null +++ b/docs/re/main-is-the-stale-era.md @@ -0,0 +1,64 @@ +# ⚠️ `main` is 171 commits behind, and its `ui_layout.rs` carries the STALE keyframe reader + +**Status:** ✅ measured against the refs, 2026-08-30. Not a finding about the game — +a finding about this repository that changes what "sync with main" means. + +## What prompted it + +`sylpheed-port`'s `check-all` carried an allowance: *"2 DIFFERS, allowed: the pin is +not on main, so this compares two decoder eras."* They tested the **conclusion** — +`sylpheed-cli` at `formats-pin-2026-08-30` and at their workspace HEAD render +`title`, `title_jp` and `main_menu` byte-identically — and replaced the allowance +with a named set. Correct, and the pattern is now in +[`METHOD.md`](METHOD.md): *an allowance is a claim, and it decays like any other.* + +I went to refute it with more reach (three screens is not the archive) and found +the **premise** is not only true but understated. + +## The refs + +``` +$ git rev-list --left-right --count origin/main...HEAD +0 171 # main has nothing we lack; we are 171 commits ahead + +$ git log -1 --date=short --format='%h %ad %s' origin/main +1b1a4df 2026-08-29 containers: an expired token could never be replaced + +$ git merge-base --is-ancestor formats-pin-2026-08-30 origin/main ; echo $? +1 # the pin is NOT on main + +$ git show origin/main:crates/sylpheed-formats/src/ui_layout.rs | grep -n 'None. for the group' +114: /// Keyframe time, or `None` for the group's **last** frame. +``` + +That last line is the **pre-fix association** — a pose's time read from the *next* +record, leaving a group's final pose untimed. It is the exact bug that +* left `fade_quads.py` stale after the crate was fixed, and +* made [`screen-transitions.md`](screen-transitions.md) publish a fade-in of + 0.87–4.08 s for a ramp that is 0.20–0.27 s. + +## ⚠️ So "sync with `main` first" is currently backwards + +The standing instruction exists because tooling and protocol revisions once landed +on `main` while an agent worked from a branch that had neither. **Right now the +hazard runs the other way:** `main` is the stale era. `git merge origin/main` is a +no-op from any current topic branch — it reports "Already up to date" every time, +which is easy to read as *"I am current"* when it means *"main has nothing"*. + +* **Do not pin to `main`.** A build from `main` gets the keyframe reader that this + corpus spent two iterations retracting. +* The port's pin (`formats-pin-2026-08-30`) is on a **topic branch**, not on main. + That is the right choice today and a fragile one: nothing protects a tag whose + commit is unmerged. +* ✅ The port's measurement stands: across those three screens the two eras render + **identically**. That is consistent with everything else here — the association + fix moves **times**, not pixels. Same signature as the `.tbm` finding and the + stale-`sylpheed-cli` finding. + +## What this does not settle + +* **Whether the two eras render identically beyond three screens.** I set out to + test that disc-wide and stopped when the ref check turned up something larger; a + build-and-compare across all 12 `GP_TITLE` builds is still not done. +* **Why 171 commits are unmerged**, and whether that is deliberate. Merging is a + human's call — this page only records that the state exists and what it costs.