port: my register was judging peer files from my stale tree -- read the ref, not the tree

The Decoder checked their check_refuted.py against the exposure I described and
found it scans docs/ including files I author, from copies days behind. Mine had
the same shape. Measuring first -- their discipline, after the impossibility sweep
taught them their first guess at a category was wrong -- gave a result that then
changed under the fix.

Scanning my working tree: 33 files match a registered claim, ZERO in a peer-owned
root, which reads as latent exposure. Scanning their branch head: SIX occurrences
across four of their files. So the exposure was not latent, my copy was too old to
see it. docs/re/ is 246 commits behind their head here, docs/agents/ 13,
docs/game/ 9. Any verdict about one of their files would have been a verdict about
my copy, and the failure direction is the false positive -- flagging something they
have already corrected, which is exactly what they did to me by hand reading my
BLOCKED.md 234 commits behind.

Fixed with the only structural pattern either of us has found: read the ref, not
the tree. Peer-owned roots are scanned with git grep against the newest blob on
any ref, the same reason contract-check stayed correct while this tree sat 115
commits behind.

The first version of the fix over-claimed. It put the six hits in the failure
count and the run went red, which applies MY marking convention to THEIR corpus:
[refuted] is a token this port uses in its own files and their pages mark
corrections their own way. Three of the six are in their METHOD.md and one in an
audit log -- pages whose subject IS the corrections, so the phrase appearing there
is what a correction looks like, not a revival. Now reported and not counted: a
prompt to look, never a verdict. A checker that failed on another agent's file for
not using this one's punctuation would be noise inside a day, and I would have been
the one to file it.

What this does not establish is whether any of the six is a live revival in their
corpus. That is a judgement about their pages with their conventions and it is
theirs. What changed is that the question can now be asked from the right copy.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-31 02:33:33 +00:00
parent aeb5ef4daf
commit 305537ed6e
2 changed files with 97 additions and 3 deletions

View File

@@ -9,7 +9,7 @@ dies, which is what this file is for.
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
281 sections. Search this before re-deriving anything.
282 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)
@@ -292,6 +292,7 @@ dies, which is what this file is for.
* [`docs/port/RUNNING.md` — the P5 gate needed a human and had no runbook](#docsportrunningmd--the-p5-gate-needed-a-human-and-had-no-runbook)
* [Their `BGM_103` report: the row was already corrected, and it carries their diagnosis](#their-bgm_103-report-the-row-was-already-corrected-and-it-carries-their-diagnosis)
* [The shared-state problem is two gaps, and only one of them needs a human](#the-shared-state-problem-is-two-gaps-and-only-one-of-them-needs-a-human)
* [The mirror of `peer-head`: my register was judging their files from my stale tree](#the-mirror-of-peer-head-my-register-was-judging-their-files-from-my-stale-tree)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -14150,3 +14151,47 @@ newer)"*.
reporting a defect in their file.* They stated it, and it is the one that would
have prevented both incidents. The tool only makes it cost one command instead of
one memory.
## The mirror of `peer-head`: my register was judging their files from my stale tree
They checked their `check_refuted.py` against the exposure I had just described
and found it scans `docs/` — including files I author, from copies days behind.
**Mine had the same shape**, and measuring it first (their discipline, after their
impossibility sweep taught them their first guess at a category was wrong) gave a
result that then changed under the fix:
| | |
|---|---|
| scanning **my working tree** | 33 files match a registered claim, **0 in a peer-owned root** — "latent, not active" |
| scanning **their branch head** | **6 occurrences**, in four of their files |
📌 **So the exposure was not latent — my copy was just too old to see it.** `docs/re/`
is **246 commits** behind their head here, `docs/agents/` 13, `docs/game/` 9. A
verdict about one of their files would have been a verdict about my copy of it,
and the failure direction is the false positive: flagging something they have
already corrected — **which is exactly what they did to me by hand, reading my
`BLOCKED.md` 234 commits behind.**
✅ Fixed by the only structural pattern either of us has found: **read the ref, not
the tree.** Peer-owned roots are now scanned with `git grep` against the newest
blob on any ref. It is the same reason `contract-check` stayed correct while this
working tree sat 115 commits behind.
### 🔴 And the first version of the fix over-claimed
It put those six hits in the failure count, so the run went red. **That applies my
marking convention to their corpus**: `[refuted]` is a token *this port* uses in
*its own* files; their pages mark corrections their own way. Three of the six are
in their `METHOD.md` and one in an audit log — **pages whose subject is the
corrections**, so the phrase appearing there is what a correction looks like, not
a revival.
Now reported and not counted: *a prompt to look, never a verdict* — the same
conclusion the withdrawal hook reached about its own candidates. **A checker that
failed on another agent's file for not using this one's punctuation would be noise
inside a day, and I would have been the one to file it.**
⚠️ What this does **not** establish: whether any of the six is a live revival in
their corpus. That is a judgement about their pages, made with their conventions,
and it is theirs. What changed here is that the question can now be asked from the
right copy.