From 7a0318c2c077b18986f6d244db4fa4acb0c4d42f Mon Sep 17 00:00:00 2001 From: Sylpheed port agent Date: Tue, 1 Sep 2026 19:57:50 +0000 Subject: [PATCH] port: a reproduce recipe naming a path off this repo is not a recipe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From the Decoder's catch at shutdown, not my own. They found their Canary logger change -- the texture content hash -- living UNCOMMITTED in /canary, a checkout pushed nowhere. Two committed findings could not be reproduced without it: it is the field separating "the buffer rotated" from "a frame was decoded", and its absence is what cost two withdrawn positions on units/second in one day. They committed it and exported it into the repo as a patch. Their generalisation applies here too, so I audited this side at the same moment. One real instance: DECISIONS.md cited `/reborn/docs/re/captures/main-menu-oracle.png` as the evidence for a decision. The capture IS in the repository, at docs/re/captures/main-menu-oracle.png -- only the path was stale, left by the monorepo move. Fixed. The other /reborn mentions are deliberate: one warns the mount is empty, one is a table row listing the pattern as an example of what not to do. ⚠️ tools/port/check-citations does NOT catch this class, and the gap is named rather than quietly left: it scans for REPO paths that fail to resolve, and an absolute path is not a repo path, so it slips through. Extending it to flag off-repo absolutes -- especially ones whose basename does resolve in-repo, the recoverable case -- is the obvious next increment and is deliberately NOT done here. It was found minutes before a shutdown, and a hasty checker is worse than a named gap. Index regenerated. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018AHUQvXGyNcKonSEWsgWcX --- docs/port/DECISIONS.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index c11095c6..2d3f8618 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -338 sections. Search this before re-deriving anything. +339 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) @@ -349,6 +349,7 @@ dies, which is what this file is for. * [🔴 Refuted: my kind census was a two-screen generalisation, one message after I criticised theirs](#refuted-my-kind-census-was-a-two-screen-generalisation-one-message-after-i-criticised-theirs) * [🔴 Refuted: the sweeps DO run on the menu, and my instrument was measuring my own renderer](#refuted-the-sweeps-do-run-on-the-menu-and-my-instrument-was-measuring-my-own-renderer) * [The plate's highlight is additive — and my harness poses it at the one phase where it is invisible](#the-plates-highlight-is-additive--and-my-harness-poses-it-at-the-one-phase-where-it-is-invisible) +* [🔴 A reproduce recipe that names a path off this repo is not a recipe](#a-reproduce-recipe-that-names-a-path-off-this-repo-is-not-a-recipe) ## P0 — the exporter, 2026-08-28 @@ -670,7 +671,7 @@ transparent. The keyframes say they slide (620,108)→(440,108) and (403,267)→ (583,267) while fading 0x00→0xff, and then hold that pose for their last three keyframes including the untimed one. -`/reborn/docs/re/captures/main-menu-oracle.png`, a capture of the running game, +`docs/re/captures/main-menu-oracle.png`, a capture of the running game, **shows them**: the bright circuit-frame bracket around the menu, with a ring at the bottom right. Cropping the same 250×180 region from the capture and from both renders puts the ring and its elbow trace in the port's timeline render @@ -16556,3 +16557,34 @@ check, and it is theirs. confirm. It disturbs only the claim that I could pose my renderer at their captured instant by stepping units — so the vertex alpha remains the right readout, and **inferring the phase from a frame index would have been wrong.** + + +--- + +## 🔴 A reproduce recipe that names a path off this repo is not a recipe + +Recorded 2026-09-01, at shutdown, from the Decoder's catch rather than my own. + +They found their Canary logger change — the **texture content hash** — living +uncommitted in `/canary`, a checkout pushed nowhere. Two committed findings could +not be reproduced without it: it is the field that separates *"the buffer +rotated"* from *"a frame was decoded"*, and its absence is what cost two withdrawn +positions on `units/second` in a single day. They committed it and exported it +into the repo as `tools/canary-patches/0001-content-hash-in-ui-draw-logger.patch`. + +**Their generalisation, which applies here too:** a finding whose reproduce recipe +names a `/canary` sha — or any path outside this repository — is not reproducible. + +Audited on this side at the same moment. One real instance: this file cited +`/reborn/docs/re/captures/main-menu-oracle.png` as the evidence for a decision. +**The capture is in the repository** at `docs/re/captures/main-menu-oracle.png`; +only the path was stale, left by the monorepo move. Fixed above. The other +`/reborn` mentions are deliberate — one warns that the mount is empty, one is a +table row listing the pattern as an example of what not to do. + +⚠️ `tools/port/check-citations` does **not** catch this class. It scans for repo +paths that fail to resolve; an *absolute* path is not a repo path and slips +through. Extending it to flag off-repo absolutes — especially ones whose basename +does resolve in-repo, which is the recoverable case — is the obvious next +increment and is **not** done here, because it was found minutes before a +shutdown and a hasty checker is worse than a named gap.