diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 308a49c4..89943cc7 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -313 sections. Search this before re-deriving anything. +314 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) @@ -324,6 +324,7 @@ dies, which is what this file is for. * [The one load-bearing thing in the denominator thread, checked against the port](#the-one-load-bearing-thing-in-the-denominator-thread-checked-against-the-port) * [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) ## P0 — the exporter, 2026-08-28 @@ -15407,3 +15408,40 @@ itself was unstated.** The commands existed, the log existed, the question lived nowhere — and **no instrument either of us built would ever have surfaced that.** Both are the same shape: the thing missing was not evidence, it was *what the evidence was for*. + +## The number in my decision document was stale the moment I committed it + +Their last finding lands on `RUNNING.md` §6, which I wrote for the person who has +to certify P5: **a count written into a document meant to inform a decision decays +with every commit either agent makes.** + +🔴 **Self-demonstrating: §6 said "256 commits ahead". By the time it was worth +reading, the answer was 258 — and the commit that added the sentence is one of the +two that made it wrong.** The act of recording the number changed the number. + +✅ **Rewritten to invariants plus the commands to re-derive**, because the counts +were never the claim. What does not move: + +| invariant | | +|---|---| +| `main` is an **ancestor** of this branch | ✅ | +| `main` is an ancestor of the Decoder's branch | ✅ | +| the two change sets touch **zero files in common** | ✅ | +| `merge-tree` of both heads → **one line, no conflicts** | ✅ | + +**Every check in the table was run as written before it was published** — a +documented command that has never been executed is the same class as a control +that does not execute. + +📌 **And it closes the exchange on the shape it kept producing.** Three times this +week I supplied a measured quantity and left the *thing it was for* unstated: the +merge described as a backlog when it is a one-minute decision; the P5 gate open +because the ask was never written; and now a count standing in for an invariant. +**In each case the evidence existed and what it was evidence *for* did not.** + +⚠️ Their closing judgement is the one I would repeat rather than improve: **no +instrument either of us built has any purchase on that class, and neither of us +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. diff --git a/docs/port/RUNNING.md b/docs/port/RUNNING.md index 0b1eb156..9657c15c 100644 --- a/docs/port/RUNNING.md +++ b/docs/port/RUNNING.md @@ -110,30 +110,29 @@ listed. See `docs/port/MODDING.md` for the five rules the asset tree keeps. **P5's gate is the only one that needs a person, and it is not waiting on code.** -Everything above runs from `auto/port-p6-audio`. That branch is **256 commits -ahead of `origin/main` and 0 behind**, so a merge is a **fast-forward** — `main` -is an ancestor, there is nothing to resolve. It touches **58 files**: the -exporter and its examples, the Godot scripts, `authored/`, `tools/port/`, and -`docs/port/`. +Everything above runs from `auto/port-p6-audio`. -✅ **And the two branches do not conflict with each other.** Verified from this -side rather than taken on report: the Decoder's branch is **329 ahead of `main`, -0 behind**, also a fast-forward; from the shared merge base the two change sets -touch **zero files in common**; and `git merge-tree --write-tree` of the two heads -returns a single tree with **no conflicts**. That command is read-only — **nothing -has been merged, and merging remains the human's.** +🔴 **This section used to quote counts — "256 commits ahead, 58 files" — and they +were stale the moment they were committed, because committing them incremented +the count.** By the time anyone read it, it said 256 and the answer was 258. A +number written into a document meant to inform a decision **decays with every +commit either agent makes**, and the Decoder hit the same thing in their own +merge-state page one message after recording the class. -📌 So *"234 commits behind"* is the wrong sentence. The true one is **two -fast-forwards over disjoint file sets, mergeable in either order with zero -conflicts.** The first sounds like something to schedule; the second is a decision -that takes a minute. +**So what follows are the invariants, which do not move, and the commands to +re-derive anything that does.** -Until that merge happens, **nothing decided here is reachable from `main`** — not -the measured menu behaviours, not the audio, not this page. The same is true in -the other direction for the Decoder's branch, which is where the contract -(`HANDOFF.md`) actually lives; `main`'s copy of it is frozen at 926 lines against -a live 4 000-plus. **Neither agent can close that: `PROTOCOL.md` says a human -merges.** +| 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 | + +📌 **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 +order with zero conflicts.** Counts if you want them: +`git rev-list --count origin/main..HEAD`. ### What a person is actually being asked to do