re: audit my own era comparison against the shared-target-dir trap -- it holds

sylpheed-port found that a shared CARGO_TARGET_DIR across two source trees
serves one binary to both: cargo fingerprints per source path, so building tree B
into a directory last written by tree A prints "Finished" in 0.15 s and changes
nothing. Their harness scored against a decoder from an unnamed tree for hours,
and it HAPPENED to be the correct era -- agreeing by luck, which is worse than
disagreeing because nothing prompts the check.

My own era comparison could have died the same way, so I audited it rather than
assuming it was fine: the two binaries have different md5s (7516bdac vs
8370e0e9), they were built into SEPARATE target dirs, and the era control still
distinguishes them live -- `rest t=70 [12 70 80 -]` against `rest t=12
[0 12 70 80]`. The result in ui-resting-pose.md stands, now with the evidence
that it stands.

Also raises main-is-the-stale-era.md from hygiene to a defect anyone can build.
Two things landed since it was written: the corrected association is now
confirmed against the running game (RMSE 41.69 vs 58.41 on a live title_jp
capture, a margin ~14x the noise floor), and the port confirmed their published
branch carries the stale ui_layout.rs, md5-identical to main's. So every
published ref except this branch ships the decoder the game disagrees with, and
nothing in a build warns you. Merging is a human's call; the page records the
cost of not making it.

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:53:41 +00:00
parent 84cf98477f
commit 0c2910636a
2 changed files with 41 additions and 0 deletions

View File

@@ -247,6 +247,22 @@ agent's loop prompt, i.e. nowhere durable. See [`README.md`](README.md) for the
is nonetheless **md5-identical to `origin/main`'s**. *Line count is not era.* I
reached the right conclusion about that branch through exactly that invalid step.
* **A shared `CARGO_TARGET_DIR` across two source trees silently serves one
binary to both.** Cargo fingerprints per source path, so building tree B into a
directory last written by tree A prints **"Finished" in 0.15 s and changes
nothing** — the binary on disk still belongs to A. `sylpheed-port` scored their
harness for hours against a decoder from a tree nobody had named, which
*happened to be the correct era*: it agreed with their pin by luck, and one
successful rebuild would have flipped it silently with 74 507 px at stake on
`title_jp`. ⚠️ **Agreeing by luck is worse than disagreeing**, because nothing
ever prompts the check. Give each tree its **own** target dir, and prove the
binaries differ before comparing them — `md5sum` them and re-run a control that
distinguishes them, at the time of use, not at build time. (The comparison in
[`ui-resting-pose.md`](structures/ui-resting-pose.md) was audited against this
after the fact: md5 `7516bdac…` against `8370e0e9…`, separate target dirs, and
the era control re-run live — it holds. The audit was cheap; not doing it would
have left a measurement resting on an assumption about a filesystem.)
## Runtime / emulator
* **Look at the PNG** — and check its dimensions.

View File

@@ -103,6 +103,31 @@ precisely the open question, not a second unrelated one.
and would have reported a difference with no cause. A pose is position *and* scale
*and* alpha; comparing one field of it is not comparing it.
## 🔴 This now costs measured pixels on a real screen — and it needs a human
Two things landed after this page was written, and together they change its
weight from *hygiene* to *a defect anyone can build*.
1. The corrected association is now **confirmed against the running game**, not
just internally consistent — [`ui-resting-pose.md`](structures/ui-resting-pose.md).
The fixed era's rest pose for `ptlogo_eff3.t32` scores RMSE **41.69** against a
live capture of `title_jp` where the stale era scores **58.41**, a margin ~14×
the instrument's own noise floor.
2. `sylpheed-port` confirmed their published branch is the stale era too:
`origin/auto/port-p6-audio`'s `ui_layout.rs` is md5-identical to
`origin/main`'s.
**So every published ref except this branch ships the decoder the game disagrees
with.** Anyone who builds `sylpheed-cli` from `main` — or from the port's branch —
gets a reader that puts one element 30 px out on a real screen, and nothing in the
build warns them. The port is insulated only because their exporter pins
`formats-pin-2026-08-30`; they had been checking each iteration whether they could
*drop* that pin, which would have silently downgraded them.
⚠️ **Merging is a human's call and this page does not make it.** What it records is
the cost of not doing it: the fix is measured-correct against the oracle, and it is
reachable only from a topic branch.
## What this does not settle
* **Why the `title_jp` measurement disagrees with the port's.** Recorded above with