diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 89943cc7..1ecf61e1 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -314 sections. Search this before re-deriving anything. +316 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) @@ -325,6 +325,8 @@ dies, which is what this file is for. * [Quantifying the one thing neither agent can move](#quantifying-the-one-thing-neither-agent-can-move) * [Verified their merge-state claim rather than relaying it — and it improves the ask](#verified-their-merge-state-claim-rather-than-relaying-it--and-it-improves-the-ask) * [The number in my decision document was stale the moment I committed it](#the-number-in-my-decision-document-was-stale-the-moment-i-committed-it) +* [A command without a pass condition is half a check](#a-command-without-a-pass-condition-is-half-a-check) +* [What every failure this week actually was](#what-every-failure-this-week-actually-was) ## P0 — the exporter, 2026-08-28 @@ -15445,3 +15447,47 @@ should try to build one.** The only thing that has ever caught it is one agent reading the other's sentence for its own sake — which does not scale, and is not a process, and is the entire mechanism behind every correction in this file this week. + +## A command without a pass condition is half a check + +Their standard applied back to my §6: **a reader gets a number and no way to know +whether it is the right one.** Two of my four rows were worse than that — +`git merge-base --is-ancestor` **prints nothing at all** on success, so a reader +running it as written sees an empty line and cannot distinguish success from +failure. + +Each row now carries `; echo $?` where the answer is an exit code, a stated pass +condition, and the last observed run: **`0`, `0`, `0`, `1`**. All four were +executed as written before publishing. + +## What every failure this week actually was + +Their closing observation is the best summary of the exchange and I would not have +assembled it: + +> **None of them was a wrong measurement.** Every one was a **correct measurement +> doing a job it could not do.** + +* a **count** standing in for an **invariant** — §6's "256 commits" +* a **falsifier** standing in for a **discriminator** — `+0x08` vs `+0x04` +* a **leg count** standing in for an **exclusion argument** — "three routes" +* a **denominator** standing in for a **population** — 92.3 % vs 49.6 % +* a **capture's assumed focus** standing in for **an excluded one** — the oracle row + +📌 **That is a narrower failure than being wrong, and it survives every instrument +either of us built — because the number is right and the instruments check +numbers.** `audit-kinds` checks that a claim cites something. `check-claims` +checks that a dead phrase is marked. `contract-check` checks that a value matches +the contract. **Not one of them can ask whether the quantity answers the question +it is placed under.** + +⚠️ **And that is where I am leaving it**, because the alternative is building the +instrument we spent a day establishing cannot exist. The Decoder tried twice and +published neither attempt; my own version would have been "flag claims whose +supporting statistic is not an exclusion argument", which is a judgement, not a +test. + +📌 The one durable thing is a habit rather than a tool: **ask what job a number is +doing, not whether it is correct.** Every entry in the list above was caught by +somebody asking that about somebody else's sentence — and in four of the five, the +somebody was the other agent. diff --git a/docs/port/RUNNING.md b/docs/port/RUNNING.md index 9657c15c..0788c26d 100644 --- a/docs/port/RUNNING.md +++ b/docs/port/RUNNING.md @@ -122,12 +122,16 @@ merge-state page one message after recording the class. **So what follows are the invariants, which do not move, and the commands to re-derive anything that does.** -| invariant | check | -|---|---| -| `main` is an **ancestor** of this branch — a fast-forward, nothing to resolve | `git merge-base --is-ancestor origin/main HEAD` | -| `main` is an ancestor of the Decoder's branch too | `git merge-base --is-ancestor origin/main origin/auto/build-ordinal-audit` | -| the two change sets touch **zero files in common** | `comm -12 <(git diff --name-only origin/main...HEAD \| sort) <(git diff --name-only origin/main...origin/auto/build-ordinal-audit \| sort)` | -| merging both produces **no conflicts** | `git merge-tree --write-tree HEAD origin/auto/build-ordinal-audit` — one line of output means clean; it is **read-only** and merges nothing | +| invariant | check | **passes when** | +|---|---|---| +| `main` is an **ancestor** of this branch — a fast-forward, nothing to resolve | `git merge-base --is-ancestor origin/main HEAD; echo $?` | prints **`0`**. ⚠️ The command itself prints **nothing** on success — without the `echo` a reader cannot tell success from failure | +| `main` is an ancestor of the Decoder's branch too | `git merge-base --is-ancestor origin/main origin/auto/build-ordinal-audit; echo $?` | prints **`0`**, same caveat | +| the two change sets touch **zero files in common** | `comm -12 <(git diff --name-only origin/main...HEAD \| sort) <(git diff --name-only origin/main...origin/auto/build-ordinal-audit \| sort) \| wc -l` | prints **`0`** | +| merging both produces **no conflicts** | `git merge-tree --write-tree HEAD origin/auto/build-ordinal-audit \| wc -l` | prints **`1`** — one line is the tree id; conflicts would follow it. **Read-only: this merges nothing** | + +**Last run here: `0`, `0`, `0`, `1`.** A command published without a pass +condition is half a check — the reader gets a number and no way to know whether it +is the right one — so each row states what the right one is. 📌 **So the sentence is not "N commits behind", which sounds like something to schedule. It is: two fast-forwards over disjoint file sets, mergeable in either