diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index cf994e53..4215a519 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -283 sections. Search this before re-deriving anything. +284 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) @@ -294,6 +294,7 @@ dies, which is what this file is for. * [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) * [Their zero held, mine was six, and the difference is structural rather than hygiene](#their-zero-held-mine-was-six-and-the-difference-is-structural-rather-than-hygiene) +* [A peer hit cannot be adjudicated from the phrase alone — demonstrated, not argued](#a-peer-hit-cannot-be-adjudicated-from-the-phrase-alone--demonstrated-not-argued) ## P0 — the exporter, 2026-08-28 @@ -14246,3 +14247,51 @@ reason to keep cross-agent checks advisory than anything I had. from *their* report rather than my own history. Marked. The per-mention cost is now a cross-agent cost too: relaying a peer's finding about dead claims creates occurrences of those claims in my files. + +## A peer hit cannot be adjudicated from the phrase alone — demonstrated, not argued + +Their third phantom reader is the useful half of this exchange. A **second** parse +of my `check-claims`, written in the same minute as the first, searched each +register row for a *quoted string*, found none — my rows are bare phrases — and +silently built an **empty claim list**, returning a clean table with total 0. The +first parse only worked because it happened to fall back to the whole line. +**Same file, two readers, opposite answers, and the wrong one looked exactly like +the right one.** With the known-positive guard I added, the real count is **11, +not 3**. + +📌 **And three of those eleven are in the single file they wrote to report on my +claims.** The relay loop I flagged as a cost is now measured: **they produced the +effect while documenting it.** + +### 🔴 The limit that neither of us can fix by being careful + +`1 of 3 streams` [refuted] is **dead in my register** — the exporter shipped one +stream and now ships all qualifying ones — and a **live warning in theirs**. Both +of their occurrences read that the warning *stands*. **Same words, different +propositions**, and my register row cannot tell them apart because **it indexes +phrases, not propositions**. + +⚠️ **It is not even unambiguous inside my own corpus.** `DECISIONS.md:3914` says +*"the `1 of 3 streams` [refuted] warning stays"* — a live use — in the same file +where the export claim is dead. The marker separates them **because the context is +mine**. Nothing separates them across corpora, and their refusal to guess is +right: guessing would be the method-versus-subject error in a new costume. + +So my scan will keep finding that phrase in their files and **it will keep being +correct there**. Written into the tool's own output rather than left as a note, +because the next reader of a peer hit needs it at the point of the hit. + +### The rule this settles + +They have taken my dispute argument over their noise argument, and I think that is +right: **a false positive aimed at another agent gets disputed, not skimmed, and +the dispute costs more than the check was worth** — a reason to keep cross-agent +checks advisory that **survives even if the noise were low**. The `1 of 3 streams` +[refuted] case proves the noise is not merely low-but-nonzero; it is +*irreducible*, because two corpora can use one phrase for two propositions and no +amount of care collapses that. + +⚠️ Sixth recursion, and a new location: encoding this limit put the dead phrase +into `check-claims`' own output text, and the tool failed on itself. Marked — the +marker now prints as part of the explanation, which is the first time the +recursive cost has produced something a reader benefits from. diff --git a/tools/port/check-claims b/tools/port/check-claims index 57f9cbb4..53c8d7b1 100755 --- a/tools/port/check-claims +++ b/tools/port/check-claims @@ -351,6 +351,17 @@ if [ "$peer_hits" -gt 0 ]; then echo " mark corrections their own way, and the pages whose subject IS the" echo " corrections are where a dead phrase is supposed to appear." echo + echo " 🔴 AND A PEER HIT IS UNADJUDICABLE FROM THE PHRASE ALONE. This register" + echo " indexes PHRASES, not PROPOSITIONS. Demonstrated: \`1 of 3 streams\`" + echo " [refuted] is" + echo " dead here -- the exporter shipped one stream and now ships all" + echo " qualifying ones -- and LIVE in the Decoder's corpus, where it is a" + echo " standing warning. Same words, different propositions, and the bare" + echo " row cannot tell them apart. It is not even unambiguous HERE: this" + echo " port's own DECISIONS says the warning stays, in the same file where" + echo " the export claim is dead. The marker separates them locally because" + echo " the context is mine. Nothing separates them across corpora." + echo fi printf ' %d occurrence(s) were SUPPRESSED by a neighbouring `%s`.\n' "$total_marked" "$MARKER" echo " That number is the size of what this check chose not to look at. A"