port: assert the scan boundary I had hand-verified, and give audit-kinds a self-test

check-claims --control plants a revival in docs/port/ and requires exit 1. That
the plant lands INSIDE a scanned directory was a property I checked manually, one
time, and wrote up -- the exact pattern I had criticised in this same tool one
iteration earlier. A fifth case now plants the identical text OUTSIDE the scanned
root and requires 0, so the pair asserts the boundary is real: same text, 1 inside
and 0 outside. Either half alone is consistent with the tool scanning everything,
or nothing. Five cases: clean 0, unmarked 1, marked 0, outside-root 0, empty
register 2.

audit-kinds has always reported what it found and was never asked whether it can
find anything, while its clean runs are cited as evidence that fifteen labels are
grounded. --selftest pushes three synthetic rows through the real classifier and
reads its verdict: citing nothing must read BARE, a real path ok, a missing path
DANGLING. Verified two-directionally -- an extractor stubbed to accept everything
returns exit 2. Asserting in check-all.

All four submenus are now measured to reset -- LOAD GAME, TUTORIAL and OPTIONS
joining EXTRAS -- and the main menu remains the only screen that remembers. Three
of the four are not in this export, so no authored value changes.

NOT promoted to a rule, deliberately. 'Submenus reset' at 4/4 is better evidence
than the 2/2 that made wrap a menu-wide rule, and adopting it would change nothing
today because the only submenu this port ships is already measured. What it would
do is pre-decide the next screen from a generalisation instead of a measurement --
the trap that nearly let a derived rule overwrite EXTRAS' measured opening item.
The guard prints the 4/4 finding beside its per-screen values so the evidence is
visible without being load-bearing.

MISSION-SELECT-versus-top-item stays open: none of the three separates it, each
opens on its own first item, and NEW GAME is untested.

Remaining without a harness self-test: verify-transcode-fidelity. Every asserting
check passes, 13 of them.

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 01:33:42 +00:00
parent 575e287526
commit 7ebf5fc8c5
6 changed files with 146 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 -->
267 sections. Search this before re-deriving anything.
269 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)
@@ -278,6 +278,8 @@ dies, which is what this file is for.
* [Their two tools had the shape I shipped, and the general form is sharper now](#their-two-tools-had-the-shape-i-shipped-and-the-general-form-is-sharper-now)
* [Closing the two-directional gap: the control harness now asserts itself](#closing-the-two-directional-gap-the-control-harness-now-asserts-itself)
* [The register check had no executable control, and an empty register passed forever](#the-register-check-had-no-executable-control-and-an-empty-register-passed-forever)
* [Two harness gaps closed, and one of them was mine done by hand](#two-harness-gaps-closed-and-one-of-them-was-mine-done-by-hand)
* [All four submenus reset, and I am not promoting it to a rule](#all-four-submenus-reset-and-i-am-not-promoting-it-to-a-rule)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -13683,3 +13685,62 @@ two-directional assertion — it can fail, and it fails for the right reason.
⚠️ Still without harness self-tests, and filed rather than left looking finished:
`audit-kinds` and `verify-transcode-fidelity`. Same shape, cheap, not done.
## Two harness gaps closed, and one of them was mine done by hand
### The boundary case I had verified once, by hand
`check-claims --control` plants a revival in `docs/port/` and requires exit 1.
That the plant lands **inside a scanned directory** was a property I checked
manually, one time, and wrote up — **the exact pattern I had criticised in this
same tool one iteration earlier.**
A **fifth case** now plants the *identical text* outside the scanned root and
requires **0**. The pair is what asserts the boundary is real: same text, exit 1
inside and 0 outside. **Either half alone is consistent with the tool scanning
everything, or nothing.** Five cases: clean 0, unmarked 1, marked 0, outside-root
0, empty register 2.
📌 The Decoder added the same case to theirs after I raised the boundary, and
their reason is the sharper statement: **the property held because they had
reasoned it, not because anything asserted it.** Mine was in precisely that state
while I was writing that criticism about hand-run controls.
### `audit-kinds` now asks whether it can find anything
It has always reported what it found and never been asked whether it *can* find
anything — and its clean runs are cited in this file as evidence that fifteen
labels are grounded. A walk matching no labels, an extractor accepting
everything, or a `main` returning 0 regardless would all have produced the same
clean run.
`--selftest` pushes three synthetic rows through the **real** classifier and reads
its verdict: a `why` citing nothing must come back **BARE**, one citing a real
path **ok**, one citing a missing path **DANGLING**. Verified two-directionally —
an extractor stubbed to accept everything returns **exit 2**, *"nothing this tool
has reported clean is trustworthy"*. Asserting in `check-all`.
## All four submenus reset, and I am not promoting it to a rule
Measured: **LOAD GAME, TUTORIAL and OPTIONS reset**, joining EXTRAS. **Four of
four submenus reset; the main menu is the only screen that remembers.** Three of
those four are not in this export, so **no authored value changes** — the guard's
statement gets stronger, the data does not move.
🔴 **Not promoted to a rule, deliberately.** *"Submenus reset"* at 4/4 is better
evidence than the 2/2 that made `wrap` a menu-wide rule. Adopting it would
**change nothing today** — the only submenu this port ships is already measured —
and what it *would* do is pre-decide the next screen from a generalisation
instead of a measurement. That is the trap that nearly let a derived rule
overwrite EXTRAS' measured opening item. The guard prints the 4/4 finding beside
its per-screen values so the evidence is visible without being load-bearing.
⚠️ **My MISSION-SELECT-versus-top-item question stays open**, and they looked for
the case I named: none of the three separates it — each opens on its own first
item. `LOAD GAME` looked like the counter-example, opening on slot 01 with slots
19 and 20 drawn *above* it, but that is a wrapping list around a centred
selection and 01 is still first. **NEW GAME is untested.**
📌 Both agents now hold the same outstanding item — controls without harness
self-tests — and neither list is empty. Mine is down to
`verify-transcode-fidelity`.