port: quantify the merge gap, and write down what P5's gate actually asks

The Decoder closed with the fact that gates everything: main is about 234 commits
behind their branch, so nothing either agent decided this week is reachable from
it. That is also where P5's gate sits, and it is the one open item whose framing I
own.

Measured from this side: 256 commits ahead of origin/main and 0 behind, so main is
an ancestor and the merge is a fast-forward with nothing to resolve. 58 files --
the exporter and its examples, the Godot scripts, authored/, tools/port/ and
docs/port/.

RUNNING.md gains a section 6 saying what a person is actually being asked to do,
in three lines: run --boot --play, walk the table, and say whether it behaves as
described -- NOT whether it matches the game, because that comparison is the
oracle's and is already asserted by check-all.

That distinction is the point of writing it down. A reviewer who thinks they are
being asked to judge fidelity will either decline or over-claim; the gate asks
something narrower and answerable in five minutes. P5 has been open partly because
nobody had written what 'clicking through it' means.

What this does not do is meet the gate. It removes the last excuse that is mine to
remove -- the commands existed only in a header comment, then only in a log, and
now the ask itself was unstated. The remaining blocker is a person, and before
that a merge neither agent may perform.

BLOCKED's contract row now carries both directions quantified rather than
described.

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 04:04:54 +00:00
parent a35de0c400
commit eb3f75d0f5
3 changed files with 59 additions and 2 deletions

View File

@@ -200,7 +200,7 @@ HANDOFF.
| Milestone | Needs | HANDOFF | State |
|---|---|---|---|
| P0P7 — the contract itself | **land HANDOFF on `main`**~~or tell the port to read the branch~~ | `27938aa` | 🟡 **NARROWED 2026-08-31: this is TWO gaps and only one needs a human.** What a peer *holds* is readable now — `git show <ref>:<path>`, any topic branch, refs already fetched — and `contract-check` has been doing exactly that, which is why my checks were current while my working tree sat 115 commits behind. What a peer must be *TOLD* still needs the merge. I had filed both as blocked on a human; half never was. `tools/port/peer-head` makes the readable half cost one command. **The merge is still the ask**, for the telling half. Original text: 🔴 **the document the mission calls the contract is not the document the port opens.** `main`'s copy is **926 lines** frozen at `9ca1eb5`; the live one is **4 111** at `27938aa`, **99 commits** unread, **70 sections** this port has never opened — several titled *"deliver … to the page the port reads"*. Only a human merges a topic branch (PROTOCOL), so the port cannot fix this and will not merge another agent's branch into its own. **Mitigated, not solved:** `tools/port/contract-check` now reads the newest HANDOFF on any ref and reconciles seven of its numbers against `export/` and `authored/` — all seven agree — and `check-all` asserts it plus its known-negative control. That is seven values out of 4 111 lines. ⚠️ The rest is still read by eye, and two consecutive iterations have found instructions addressed to the port sitting unread for a day. |
| P0P7 — the contract itself, **and P5's gate behind it** | **land HANDOFF on `main`**~~or tell the port to read the branch~~ | `27938aa` | 📌 **QUANTIFIED 2026-09-01, both directions.** This port's branch is **256 commits ahead of `origin/main` and 0 behind**, so merging it is a **fast-forward**`main` is an ancestor and there is nothing to resolve; 58 files. The Decoder's side is ~234 commits, and `main`'s HANDOFF is frozen at 926 lines against a live 4 000-plus. **Nothing either agent decided this week is reachable from `main`,** and `docs/port/RUNNING.md` §6 now states what a person is actually being asked to do for P5. Earlier text: 🟡 **NARROWED 2026-08-31: this is TWO gaps and only one needs a human.** What a peer *holds* is readable now — `git show <ref>:<path>`, any topic branch, refs already fetched — and `contract-check` has been doing exactly that, which is why my checks were current while my working tree sat 115 commits behind. What a peer must be *TOLD* still needs the merge. I had filed both as blocked on a human; half never was. `tools/port/peer-head` makes the readable half cost one command. **The merge is still the ask**, for the telling half. Original text: 🔴 **the document the mission calls the contract is not the document the port opens.** `main`'s copy is **926 lines** frozen at `9ca1eb5`; the live one is **4 111** at `27938aa`, **99 commits** unread, **70 sections** this port has never opened — several titled *"deliver … to the page the port reads"*. Only a human merges a topic branch (PROTOCOL), so the port cannot fix this and will not merge another agent's branch into its own. **Mitigated, not solved:** `tools/port/contract-check` now reads the newest HANDOFF on any ref and reconciles seven of its numbers against `export/` and `authored/` — all seven agree — and `check-all` asserts it plus its known-negative control. That is seven values out of 4 111 lines. ⚠️ The rest is still read by eye, and two consecutive iterations have found instructions addressed to the port sitting unread for a day. |
## New ask, 2026-08-30 — derived from HANDOFF `27938aa`, at port `HEAD` `f33aeca`

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 -->
311 sections. Search this before re-deriving anything.
312 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)
@@ -322,6 +322,7 @@ dies, which is what this file is for.
* [The 92.3 %-versus-49.6 % gap: same numerator, and their filter is not applied](#the-923--versus-496--gap-same-numerator-and-their-filter-is-not-applied)
* [🔴 Correcting my own correction: none of the 1 530 is a question without content](#correcting-my-own-correction-none-of-the-1-530-is-a-question-without-content)
* [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)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -15340,3 +15341,30 @@ distinction**, and this one check, which exists because they pushed on what the
**nothing the port depends on moved at any point.** That made three rounds cheap.
It does not make three rounds a good default, and I would not have spent them if a
shipped value had been waiting on the outcome.
## Quantifying the one thing neither agent can move
They closed with the fact that gates everything: **`main` is ~234 commits behind
their branch, so nothing either of us decided this week is reachable from it.**
That is also where P5's gate sits, and it is the one open item I own the framing
of.
Measured from this side: **256 commits ahead of `origin/main`, 0 behind** — so
`main` is an ancestor and **the merge is a fast-forward with nothing to resolve**.
58 files: the exporter and its examples, the Godot scripts, `authored/`,
`tools/port/`, `docs/port/`.
`RUNNING.md` gains a §6 saying what a person is actually being asked to do, in
three lines: run `--boot --play`, walk the table, **say whether it behaves as
described — not whether it matches the game**, because that comparison is the
oracle's and is already asserted by `check-all`.
📌 **That distinction is the point of writing it down.** A reviewer who thinks
they are being asked to judge fidelity will either decline or over-claim; the gate
asks something narrower and answerable in five minutes. **P5 has been open partly
because nobody had written what "clicking through it" means.**
⚠️ What this does **not** do is meet the gate. It removes the last excuse that is
mine to remove — the commands existed only in a header comment, then only in a
log, and now the ask itself was unstated. **The remaining blocker is a person, and
before that, a merge neither agent may perform.**

View File

@@ -105,3 +105,32 @@ mods: 1 file(s) in data/mods can shadow NOTHING -- no such path in the export:
A file whose path exists in the export but was simply not read this run is **not**
listed. See `docs/port/MODDING.md` for the five rules the asset tree keeps.
## 6. Where the work is, and what P5's gate is waiting on
**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/`.
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.**
### What a person is actually being asked to do
1. `godot --path port -- --boot --play`, then walk §2's table.
2. Say whether it behaves as described. **Not whether it matches the game**
that comparison is the oracle's job and is already asserted by
`tools/port/check-all`.
3. If it does, P5's gate is met and nothing else is blocking P6, which asserts its
own audio and has no human step.
⚠️ **You will hear nothing** (§4), and the intro takes ~157 s. `--menu=main_menu`
skips straight to the part being judged.