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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-30 14:18:30 +00:00
parent d9accf9403
commit 5a5cfef745
2 changed files with 80 additions and 0 deletions

View File

@@ -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.

View File

@@ -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.874.08 s for a ramp that is 0.200.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.