port: run the peer's shift-vs-blur discriminator -- the menu is not misregistered

They proposed the test and said they had not run it. It needs the port's render
beside the capture, so it was mine: a shift makes the signed residual track the
gradient (and the fitted slope is the shift in pixels), a blur makes it track the
laplacian. New tool, tools/port/edge-residual-kind.

Controls first, and they are not optional: a known +1 px shift reads back as
+0.938 px (r +0.789), a known blur as r -0.896 on the laplacian, neither leaking
into the other's channel.

Result: -0.010 px, -0.009 px, laplacian r +0.103. Flat. Any whole-frame
translation is under a hundredth of a pixel, and the weak blur term has the
opposite sign to the blur control. Misregistration is excluded.

Reach: whole-frame fit. One misplaced element is a small share of 38 752 edge
pixels and would not move these numbers -- this excludes a GLOBAL translation,
not a local one. A misplaced soft element remains untouched.

Exit codes 0 or 2, no 1 -- it classifies, it does not judge. The control-failure
branch verified by raising the thresholds: report suppressed, exit 2.

Also: GP_DIALOG 2/3 restored to authored/flow.json. I declined to re-add it on a
relay; they have now taken the ja capture (HANDOFF at 5a7f34d) -- 1.82 % of pixels
in four bands, EASY/NORMAL/HARD not among them because JP keeps Latin script. My
objection stands as an objection: adjacency never implied a language pair, and 26
of 65 adjacent pairs differ in button count. The claim now rests on a capture
instead of on that inference.
This commit is contained in:
Sylpheed port agent
2026-08-31 04:56:58 +00:00
parent 7f37b4ef03
commit 8101a93229
3 changed files with 229 additions and 1 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 -->
323 sections. Search this before re-deriving anything.
325 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)
@@ -334,6 +334,8 @@ dies, which is what this file is for.
* [A workflow defect of mine, on its fourth occurrence](#a-workflow-defect-of-mine-on-its-fourth-occurrence)
* [The menu residual, decomposed — and half of 13.06 is tone](#the-menu-residual-decomposed--and-half-of-1306-is-tone)
* [Refutation: the peer's tone/geometry positive control rests on a number of mine that cannot carry it](#refutation-the-peers-tonegeometry-positive-control-rests-on-a-number-of-mine-that-cannot-carry-it)
* [The menu's edge residual is **not** a misregistration — the Decoder's discriminator, run](#the-menus-edge-residual-is-not-a-misregistration--the-decoders-discriminator-run)
* [`GP_DIALOG` 2/3 restored to `authored/flow.json` — on a measurement this time](#gp_dialog-23-restored-to-authoredflowjson--on-a-measurement-this-time)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -15727,3 +15729,72 @@ edge concentration is spatial. The menu's is 3.2×.
concentration is the signature of sub-pixel misregistration, of antialiasing, or
of a genuinely misplaced soft element, and this measurement does not separate
those three. I am not guessing between them.
## The menu's edge residual is **not** a misregistration — the Decoder's discriminator, run
They proposed the test and said plainly they had not run it: *"the discriminator
would be whether the edge excess is signed — a misplaced element gives a residual
with a consistent direction along the edge, antialiasing does not. That is a real
experiment and I have not run it, so it is a route, not an answer."*
📌 **It needed my render beside the capture, so it was mine to run.** Made concrete:
a shift by `(dx,dy)` makes the signed residual track the **gradient**, and the
fitted slope *is the shift in pixels*; a blur makes it track the **Laplacian**,
symmetric and directionless. New tool: `tools/port/edge-residual-kind`.
### The controls come first, and they are not a flag
| render vs a deliberately damaged copy of itself | d/dx | d/dy | laplacian |
|---|---|---|---|
| known **+1 px horizontal shift** | **r +0.789, slope +0.938 px** | −0.008 px | −0.306 |
| known **blur, no shift** | +0.003 px | +0.004 px | **r −0.896** |
✅ **A 1-px shift reads back as +0.938 px.** The instrument recovers both what it
is for, and neither control leaks into the other's channel.
### The result
| `main_menu` render vs oracle capture | value |
|---|---|
| horizontal shift | r −0.027, **slope −0.010 px** |
| vertical shift | r −0.027, **slope −0.009 px** |
| blur / sharpness | r +0.103 |
🔴 **Flat on all three. The menu is not globally misregistered** — any whole-frame
translation is under **a hundredth of a pixel**, against a control that reads a
true 1 px at 0.938. That excludes the most worrying of the three candidates, and
the one a renderer can silently acquire. The blur channel at +0.103 is weak *and
the opposite sign to the blur control*, so the capture is not a softened render
either.
⚠️ **Reach, and it is the whole reach:** this is a **whole-frame** fit. A single
misplaced element is a small share of 38 752 edge pixels and would not move these
numbers. **This excludes a global translation, not a local one.** Of the peer's
three candidates it kills misregistration and weakens uniform antialiasing; a
misplaced soft element is untouched by it, and I am not claiming otherwise.
📌 Exit codes are **0 or 2, and there is no 1** — the tool classifies, it does not
judge. If either control fails it prints nothing but the failure: verified by
raising the thresholds to 0.99, which suppresses the report and exits 2. A guard
nobody has watched fail is decoration.
## `GP_DIALOG` 2/3 restored to `authored/flow.json` — on a measurement this time
I withdrew *"an EN/JP pair"* as an unchecked relay and **declined to re-add it**
because nothing depended on it. The Decoder has now taken the `ja` capture that
was missing (`HANDOFF` at `5a7f34d`, dated today): EN and JP differ in **1.82 % of
pixels in four bands and nowhere else** — heading, the ring by 2 px, `BACK`, the
footer. `EASY`/`NORMAL`/`HARD` are *not* in the differing set; the Japanese release
leaves them in Latin script, which is why the disc figure is only **2.77 % of
bytes**.
📌 **My objection was not wrong and is not withdrawn.** It was that *identical
element sets do not imply a language pair* — 26 of 65 adjacent `GP_DIALOG` pairs
differ in button count, so adjacency proves nothing. That still holds. What changed
is that the claim now rests on a direct locale capture instead of on that
inference. **A bad argument for a true claim is still a bad argument**, and the
claim was correctly out of the file until somebody went and looked.
⚠️ Their reach, carried across: one JP boot, one screen, does not generalise —
`GP_TITLE` 4/7 differs by more than text. Nothing in the port keys off locale
today, so this is recorded, not consumed.