diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index d83bc685..14087766 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -197 sections. Search this before re-deriving anything. +198 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) @@ -208,6 +208,7 @@ dies, which is what this file is for. * [Sweeping my own `--help` and headers, after theirs](#sweeping-my-own---help-and-headers-after-theirs) * [`black_hold_units`: my own tripwire has tripped, and I am not resolving it alone](#black_hold_units-my-own-tripwire-has-tripped-and-i-am-not-resolving-it-alone) * [Their sharpened tell, applied to my tree: two descriptions the code below had already refuted](#their-sharpened-tell-applied-to-my-tree-two-descriptions-the-code-below-had-already-refuted) +* [The grep found two more — and the reason is my correction *habit*, not my attention](#the-grep-found-two-more--and-the-reason-is-my-correction-habit-not-my-attention) ## P0 — the exporter, 2026-08-28 @@ -11107,3 +11108,58 @@ here, so the change is visible rather than silently overwritten. passing because 0.15 s of slack exceeded the 0.131 s defect it hid is **not a weak check but an inverted one — the tolerance was doing the work the measurement was supposed to.** + +## The grep found two more — and the reason is my correction *habit*, not my attention + +Their generalisation of my `untimed` marker is the cheap version and it works: +**search for the vocabulary the dead rule needed.** A description that survived a +fix still speaks the dead rule's language, which makes it findable without reading +anything. Swept my tree for the nouns of every rule refuted this session — +*shifted*, *no time slot*, *first-declared*, *two decoder eras*, +*standalone/composited*. + +Most hits were already-quoted corrections (`check.rs`, `check-all`) or the live +guard message in `verify-screen`. **Two were real:** + +| | | +|---|---| +| `verify-screen:57` | still asserted *"all four are **COMPOSITED** rather than standalone"* — the reading I withdrew a few iterations ago after they tested it disc-wide at 7.9 % | +| `boot.gd:197` | opened *"the one unknown duration per screen … the disc has no time slot there"*, then retracted it in the next sentence | + +### 🔴 The diagnosis is a habit, not a lapse + +This is the **third and fourth** instance, after `spin_period_units` and +`exit_ramp_units`. In every one of the four, **the correction sits below the false +claim in the same comment block, and I wrote both.** + +**My corrections are additive.** I append a `🔴 CORRECTION` block and leave the +original sentence standing above it, which is right for a *record* — the change +should be visible, and their practice of quoting the original is exactly that — +but it is wrong for a *statement*. A reader takes the first assertion; the +retraction three lines later has already lost. That is why "having been bitten +four times" produced four instances rather than fewer: **the habit that creates +them is the same habit I adopted to make corrections honest.** + +✅ The fix is to keep quoting the original but **demote it grammatically** — lead +with "what this used to say", so the false sentence can never be read as the live +one. Both hits rewritten that way. + +✅ Verified as a comment-only edit **by artifact rather than by reading**, which is +their practice: the `main_menu` render is byte-identical before and after, and +`verify-screen` parses. + +📌 So the toolkit now has **two mechanical searches**: their *hedge around a +quantity the current reader states exactly* for prose, and *the vocabulary the old +rule needed* for code. Neither requires understanding what you are looking at, +which is the point — five instances of this class survived people who understood +the material perfectly well. + +### On their caution about my failed rule + +⚠️ They flag that *gap + incoming clear = 16/16/18* failing on the splash pair +*"may be the honest signal rather than an exception to carve out"* — three +transitions supporting a constant and one structurally different case breaking it +is the shape of a rule fitted to its own sample. ✅ Agreed, and worth stating +plainly: **I did not carve out the exception.** The rule was rejected, not +narrowed to menu transitions, and `black_hold_units` remains escalated rather than +set from it. diff --git a/port/scripts/boot.gd b/port/scripts/boot.gd index 93af659e..7def26db 100644 --- a/port/scripts/boot.gd +++ b/port/scripts/boot.gd @@ -193,8 +193,10 @@ func _ready() -> void: get_tree().quit(2) return view.units_per_second = float(timing["keyframe_units_per_second"]) - # The one unknown duration per screen: the ramp into the final untimed - # keyframe. Authored, because the disc has no time slot there. + # WHAT THIS USED TO BE, stated first because the sentence below is what a + # reader would otherwise carry away: "the one unknown duration per screen -- + # the ramp into the final untimed keyframe, authored because the disc has no + # time slot there." That is pre-fix and false in both halves. # `exit_ramp_units` is DELETED from authored/timing.json -- under the corrected # record layout every pose is timed, so there is no untimed final keyframe to # give a synthetic time to. The default below is now unreachable rather than diff --git a/tools/port/verify-screen b/tools/port/verify-screen index d67a224e..fd1095d4 100755 --- a/tools/port/verify-screen +++ b/tools/port/verify-screen @@ -54,7 +54,9 @@ # 2026-08-30: a screen "carries its own background" when it declares a # full-screen untextured primitive at `t=0` with `fade_argb 0xff000000` -- # opaque black. Twelve do (`pteff00`, `palogo_eff0`, `pgloading_eff00`). -# Four do NOT, and all four are COMPOSITED rather than standalone: +# Four do NOT. I first called those four "composited rather than standalone"; +# that reading is REFUTED disc-wide (see below) and what they share is only +# that they do not begin from black: # # press_start / press_start_jp -- one element, the plate, drawn OVER the # title; its own `name_why` says so. The game never shows it on black.