port: check-all excused two failing rows with a measurably false reason
The suite reported '2 DIFFERS, allowed: the pin is not on main, so this compares two decoder eras', and I had quoted that for several iterations without testing it. Built sylpheed-cli at formats-pin-2026-08-30 and at workspace HEAD and rendered through both: title, title_jp and main_menu come out 0 pixels different, despite 508 lines of difference in ui_layout.rs. The eras are not the cause, and the allowance was excusing a real signal with a wrong explanation. A second defect in the same eight lines: the expiry tested formats-pin-2026-08-29d while Cargo.toml pins formats-pin-2026-08-30, so it would have expired on a tag this tree does not use. The real reasons are per-screen and already documented: title is the ptloop sweep phase residual, title_jp is the --pose=rest sparkle handling -- where the port's shipped pose scores +0.9994 against the game to the reference's +0.8727, so the port is closer to the game on the row the script calls a disagreement. Replaced with a named set: title and title_jp by name, any other DIFFERS fails. A count cannot notice a different screen drifting while the total stays at two. Controlled both directions -- passes on the known pair, fails on main_menu or extras. The pin reminder now reads the tag out of Cargo.toml so it cannot drift. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -9,7 +9,7 @@ dies, which is what this file is for.
|
||||
|
||||
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
|
||||
|
||||
163 sections. Search this before re-deriving anything.
|
||||
164 sections. Search this before re-deriving anything.
|
||||
|
||||
* [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28)
|
||||
* [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28)
|
||||
@@ -174,6 +174,7 @@ dies, which is what this file is for.
|
||||
* [🔴 CORRECTION: my 18-vs-19 "agreement" compared two different intervals](#correction-my-18-vs-19-agreement-compared-two-different-intervals)
|
||||
* [`check-all` passes — after an hour-long hang that was the suite's own fault](#check-all-passes--after-an-hour-long-hang-that-was-the-suites-own-fault)
|
||||
* [Ⓐ and Ⓑ are not the same shape, and my `black_hold` treats them as if they were](#and--are-not-the-same-shape-and-my-black_hold-treats-them-as-if-they-were)
|
||||
* [🔴 `check-all` excused two failing rows with a reason that is measurably false](#check-all-excused-two-failing-rows-with-a-reason-that-is-measurably-false)
|
||||
|
||||
<!-- /INDEX -->
|
||||
## P0 — the exporter, 2026-08-28
|
||||
@@ -9406,3 +9407,61 @@ bad constant to build on.
|
||||
📌 So the finding is recorded and the divergence is **known and stated** rather
|
||||
than fixed: the port's transitions are uniform, the game's are directional, and I
|
||||
do not yet have enough transitions measured to say what the rule is.
|
||||
|
||||
## 🔴 `check-all` excused two failing rows with a reason that is measurably false
|
||||
|
||||
The suite reported *"2 DIFFERS, allowed: the pin is not on main, so this compares
|
||||
two decoder eras."* I have quoted that allowance for several iterations without
|
||||
testing it.
|
||||
|
||||
**Tested.** Built `sylpheed-cli` at `formats-pin-2026-08-30` — the tag the
|
||||
exporter is pinned to — and at the workspace HEAD, and rendered the same builds
|
||||
through both:
|
||||
|
||||
| screen | pixels differing between the two eras |
|
||||
|---|---|
|
||||
| `title` | **0** |
|
||||
| `title_jp` | **0** |
|
||||
| `main_menu` | **0** |
|
||||
|
||||
✅ **Byte-identical**, despite **508 lines** of difference in `ui_layout.rs`
|
||||
between the two revisions. The decoder eras are not the cause of anything here,
|
||||
and the allowance was excusing a real signal with a wrong explanation — the worst
|
||||
form, because it makes a genuine disagreement look accounted for.
|
||||
|
||||
🔴 **A second, independent defect in the same eight lines.** The allowance's expiry
|
||||
tested `formats-pin-2026-08-29d` while `crates/sylpheed-export/Cargo.toml` pins
|
||||
`formats-pin-2026-08-30`. So it would have expired on a tag this tree does not
|
||||
use — silently, in either direction.
|
||||
|
||||
### What the rows actually are, both already documented elsewhere
|
||||
|
||||
* **`title`** — the `ptloop` **sweep phase** residual: max 6 / over3 790,
|
||||
unchanged across every renderer change since P1.
|
||||
* **`title_jp`** — the **`--pose=rest` sparkle handling**. Adjudicated against the
|
||||
oracle: the port's *shipped* pose scores r **+0.9994** against the game where
|
||||
the reference scores +0.8727, and `--pose=rest` is what this script compares.
|
||||
**The port is closer to the game on the row the script calls a disagreement.**
|
||||
|
||||
### The replacement is a named set, not a count with an excuse
|
||||
|
||||
A count can only say *how many*; it cannot notice that a **different** screen
|
||||
started drifting while the total stayed at two. The allowance now lists `title`
|
||||
and `title_jp` by name, and a `DIFFERS` on anything else fails the run.
|
||||
|
||||
✅ Controlled in both directions, because a guard that cannot fail is not a guard:
|
||||
|
||||
| log | verdict |
|
||||
|---|---|
|
||||
| `title`, `title_jp` | passes |
|
||||
| `title`, **`main_menu`** | **fails on `main_menu`** |
|
||||
| **`extras`** alone | **fails on `extras`** |
|
||||
| clean | passes |
|
||||
|
||||
The pin reminder survives as its own line, and now reads the tag **out of
|
||||
`Cargo.toml`** so it cannot drift out of step with the dependency again.
|
||||
|
||||
📌 The pattern, and it is the third time this session: **an allowance is a claim.**
|
||||
This one had been true once — the monorepo merge made the exporter and the
|
||||
reference share a decoder, and the tag pin quietly unmade that — and it kept being
|
||||
printed long after it stopped describing the tree.
|
||||
|
||||
Reference in New Issue
Block a user