diff --git a/authored/rendering.json b/authored/rendering.json index 1c341e3d..7d441bf4 100644 --- a/authored/rendering.json +++ b/authored/rendering.json @@ -100,18 +100,55 @@ "match' is a weak instrument for an absence. Two weak signals in opposite", "directions is a reason to scope, not to pick.", "", - "What settles the menu: a direct capture of it, which the Decoder has offered." + "What settles the menu: a direct capture of it, which the Decoder has offered.", + "", + "🔴 RE-MEASURED 2026-08-31, BECAUSE THE EVIDENCE ABOVE WAS TAKEN WITH THE WRONG", + "BLEND. The phase sweep that produced '0.061 % off-screen, 0.183 % mid-screen'", + "drew the sweeps ALPHA-OVER. They are additive -- measured off the running game", + "the same day (`additive_elements`) -- so an on-screen sweep composited the wrong", + "way was being scored against the capture, and 'mid-screen is worse' could have", + "been an artefact of my own compositing rather than of the sweeps being absent.", + "", + "Re-run with additive sweeps and looping switched on for the menu, against", + "`live-main-menu.png`:", + "", + " phase 0 0.0208 % sweeps paint 0 px -- off screen", + " phase 150 0.0851 % sweeps paint 58 027 px, bbox 884x720", + " phase 300 0.0205 % sweeps paint 0 px -- off screen", + " phase 75 / 225 / 375 / 450 / 525: 0.086..0.122 %", + " run-once-and-park, which is what the port ships: 0.0208 %", + "", + "✅ THE CONCLUSION HELD AND GOT STRONGER. The ratio was 3x with the wrong blend", + "and is 4-6x with the right one, and the absolute numbers improved everywhere.", + "The capture still matches best with the sweeps NOT VISIBLE. So this entry stays", + "scoped to the title, and the correction is recorded rather than the scoping", + "changed.", + "", + "⚠️ It is still one capture and 'best match' is still a weak instrument for an", + "absence -- that caveat is not repaired by fixing the blend, only cleared of one", + "confound.", + "", + "📌 AND THE NEW DRAW LOG DOES NOT SETTLE IT EITHER, though it looks like it", + "should. `docs/re/captures/ui-draws/blend-main-menu-2026-08-31.log` shows both", + "sweep strips SUBMITTED on the main menu, in every frame group. That is not", + "evidence they animate there: a quad parked off-screen at x=1521 is still a draw", + "call. A DRAW IS NOT A VISIBLE ELEMENT, and reading that log as 'the sweeps run", + "on the menu' would have contradicted the pixels for no reason." ], "loop_leaf_kind": "measured", "additive_elements": { "main_menu": [ "pteff12", "ptframe1", - "ptframe2" + "ptframe2", + "ptloop01", + "ptloop02" ], "extras": [ "pteff20", - "ptframe3" + "ptframe3", + "ptloop01", + "ptloop02" ] }, "additive_elements_why": [ @@ -136,6 +173,21 @@ "menu -- 12 draws additive and 18 alpha-over. The frames and `ptbase` share a", "shader. Only the blend register differs.", "", + "`ptloop01` and `ptloop02` are the two ROTATED SWEEP STRIPS, added 2026-08-31.", + "`docs/re/structures/ui-blend-mode-measured.md`'s summary table names them", + "additive in the same row as the frames, and their control 1 identifies them: the", + "NDC->pixel conversion reproduces 1134 and 1303 px, two heights measured by a", + "different tool in a different session (`data/title-sweep-drawn-at-rest.txt`), on", + "BOTH screens. So this is an identification with an independent check behind it,", + "not a name match -- the automatic matcher reports 'no match' for these two.", + "", + "⚠️ AND IT CHANGES NOTHING VISIBLE TODAY, which is why it is worth writing down.", + "On the menus the port runs the leaf group ONCE and parks it off-screen, so these", + "two paint no pixels at any pose the port can be put in (checked: suppressing", + "both sprites at leaf-time 100, 200 and 300 changes 0 pixels). The entry is here", + "because it is measured, not because it does anything. What it DOES do is fix the", + "instrument for the menu-looping question -- see `loop_leaf_on_screens_why`.", + "", "⚠️ EVERY ID HERE IS A MEASURED DRAW, and the list stops where the measurement", "does. THREE THINGS ARE NOT IN IT:", "", diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 4f06a1b3..3ddf34f8 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -332 sections. Search this before re-deriving anything. +333 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) @@ -343,6 +343,7 @@ dies, which is what this file is for. * [Refutation attempt: the Decoder's kind-0 claim survives, checked from my own data](#refutation-attempt-the-decoders-kind-0-claim-survives-checked-from-my-own-data) * [The blend is measured, so the port draws it — main_menu 13.21 → 10.67](#the-blend-is-measured-so-the-port-draws-it--main_menu-1321--1067) * [🔴 Refuted: my "no fully-opaque pixel" sharpener](#refuted-my-no-fully-opaque-pixel-sharpener) +* [The sweeps: a measured blend, a corroborated identification, and a confound in my own evidence](#the-sweeps-a-measured-blend-a-corroborated-identification-and-a-confound-in-my-own-evidence) ## P0 — the exporter, 2026-08-28 @@ -16173,3 +16174,67 @@ survived — the draw path was the right place to look, and it answered — but reason I gave for looking there was wrong. Recording it because the conclusion being vindicated is exactly the circumstance in which a bad supporting argument survives unexamined. + +## The sweeps: a measured blend, a corroborated identification, and a confound in my own evidence + +### Transcribed: both rotated sweep strips are additive + +`ui-blend-mode-measured.md`'s summary table names them additive in the same row as +the frames. They are `ptloop01`/`ptloop02` here, now in `additive_elements` for +both measured screens. + +⚠️ **It changes nothing visible today.** On the menus the port runs the leaf group +once and parks it off-screen, so both paint zero pixels at every pose the port can +be put in — checked by suppressing both sprites at leaf-time 100, 200 and 300: +**0 px changed each time**. The entry is there because it is measured, not because +it does anything. What it *does* do is repair the instrument below. + +### ✅ Refutation attempt on their identification — survives, with a number of mine + +The automatic name matcher reports **"no match"** for those two draws; they are +identified only by the Decoder's control, which reproduces heights **1134** and +**1303** from a different tool in a different session. A claim resting on one +control is worth attacking. + +It survives, and my own geometry corroborates it independently: rendering the menu +at a phase where the sweeps are on screen and suppressing them gives a footprint +of **884 × 720**, against the log's **889.6** wide — **0.6 % apart**, and I did not +use their number to produce mine. The heights differ (720 against 1134) exactly as +they should: my bounding box is clipped by the screen, theirs is the untruncated +quad extent. + +### 🔴 And the blend was a confound in my *own* prior evidence + +`loop_leaf_why` scoped leaf-looping to the title partly on a measurement of mine: +sweeping the phase against `live-main-menu.png`, the port matched best with the +sweeps **off-screen (0.061 %)** and three times worse mid-screen (0.183 %). + +**That sweep drew them alpha-over.** They are additive. So an on-screen sweep was +being composited the wrong way and scored against the capture — "mid-screen is +worse" could have been an artefact of my own renderer rather than of the sweeps +being absent. Re-run with the correct blend and looping switched on for the menu, +through a scratch export root so nothing in the repo changed: + +| | diff vs capture | sweeps | +|---|---|---| +| phase 0 | **0.0208 %** | 0 px — off screen | +| phase 150 | 0.0851 % | **58 027 px**, bbox 884×720 | +| phase 300 | **0.0205 %** | 0 px — off screen | +| phases 75/225/375/450/525 | 0.086–0.122 % | on screen | +| run-once-and-park (what ships) | **0.0208 %** | parked | + +✅ **The conclusion held and strengthened** — the ratio was 3× with the wrong blend +and is **4–6×** with the right one. The capture still matches best with the sweeps +not visible, so the scoping stays and the *correction* is what got recorded. + +⚠️ Still one capture, and "best match" is still a weak instrument for an absence. +Fixing the blend cleared one confound; it did not repair that. + +### 📌 A draw is not a visible element + +The new log shows both sweep strips **submitted on the main menu, in every frame +group**. It would be easy — and wrong — to read that as "the sweeps animate on the +menu", which is exactly the question `loop_leaf_why` left open and would have +contradicted the pixels for no reason. **A quad parked off-screen at x=1521 is +still a draw call.** The log settles the *blend*; it does not settle *visibility*, +and those two came in the same artefact.