diff --git a/docs/re/f6-unit2-parent-alpha-multiplies.md b/docs/re/f6-unit2-parent-alpha-multiplies.md new file mode 100644 index 00000000..b139fc02 --- /dev/null +++ b/docs/re/f6-unit2-parent-alpha-multiplies.md @@ -0,0 +1,57 @@ +# F6 unit 2 — the parent's alpha **IS** multiplied into the sweep leaf + +**Status: ✅ measured ⟨capture⟩.** 2026-09-02. + +**Question:** during the title build-in, does the sweep's drawn alpha follow the +leaf alone, or leaf × parent? +**Look at:** the sweep quad's drawn alpha. `pteff03`'s **leaf never goes below +128** (keys `0:255 150:128 540:255 600:255`), so **any drawn alpha below 128 can +only come from something else multiplying in.** +**Not covered:** F5; the leaf's clock origin; where the sweep is on screen. + +--- + +## The measurement + +One boot, one Ⓐ to skip the attract video, then no input — the title builds in +undisturbed. `tools/re-capture/title_sweep_probe.sh`. + +The sweeps are the two rotated, 600 %-scaled strips, identified by size: **NDC +1.38 × 3.15** and **1.39 × 3.15**, which is the corpus's own independently +measured AABB height of **1134 px** (`2 × 1134 / 720 = 3.15`). + +``` +1.38 x 3.15 n=1140 frames 746..2499 alphas 8 24 33 50 58 74 83 100 107 … +1.39 x 3.15 n= 614 frames 747..2498 alphas 16 41 67 91 116 128 129 130 131 … +``` + +> **Drawn alpha reaches 8.** `pteff03`'s leaf alpha is bounded below by **128**. +> `8 < 128`, so the leaf cannot produce it alone. **The parent's alpha is +> multiplied in.** + +## 🔴 This refutes the port's flagged decode — which is exactly what it asked for + +`screen_view.gd` records as decoded that *"the leaf runs on its OWN timeline and +the parent's alpha is NOT multiplied in"*, and flags honestly that every +observation behind it had parent alpha 0, so *"the leaf wins"* and *"the parent is +ignored because it draws nothing"* were never separated — naming `t = 100…238` as +the interval that would separate them. + +**This capture is in that interval and separates them: the parent is not ignored.** +The port was right that its evidence could not tell the two apart, and right about +which measurement would. + +📌 **And it bears on F6's original report.** The parent ramps `0→255` across +`t=70→100`. If that multiplies in, the sweep is *invisible before t≈70 and dim +until 100* — so a human reporting it "starts late" is seeing a real gate, even +though `238…250` is an exit (unit 1). The gate is the parent's **entry** ramp, not +the 238 cluster. + +## Reach + +⟨capture⟩, one boot, the two sweep quads identified **by size** against a +previously measured AABB — not by name, since the draw stream carries no names. +The bound argument needs only that `pteff03`'s leaf minimum is 128, which is +⟨disc⟩. ⚠️ It does **not** establish the multiply is plain `leaf × parent` rather +than some other combination that also dips below 128; it establishes that the +parent participates. diff --git a/tools/re-capture/title_sweep_probe.sh b/tools/re-capture/title_sweep_probe.sh new file mode 100755 index 00000000..7a26e3f4 --- /dev/null +++ b/tools/re-capture/title_sweep_probe.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# F6 unit 2 -- capture the TITLE's build-in and read the sweep's drawn alpha. +# +# Discriminator: pteff03's LEAF declares alpha 255 from its own t=0, while its +# PARENT ramps 0->255 across t=70..100. So in the drawn vertex colour: +# flat 255 throughout => the parent is NOT multiplied in +# a ramp 0->255 => it IS +# That also settles the port's own flagged ambiguity, whose stated separating +# interval (t=100..238) is the same one F6 is about. +# +# Simpler than the menu probe on purpose: ONE A press to skip the attract video, +# then no further input, so the title builds in undisturbed and stays. +set -u +export HOME=/sylph-home/re SDL_AUDIODRIVER=dummy DISPLAY=:98 +export XENIA_PAD_FILE=/tmp/xenia_pad.txt +OUT="${1:-/sylph-home/re/f6}"; mkdir -p "$OUT"; rm -f "$OUT"/xenia_re_ui_draws_*.log +pad(){ printf '%s' "$1" > "$XENIA_PAD_FILE.tmp"; mv "$XENIA_PAD_FILE.tmp" "$XENIA_PAD_FILE"; } +pad "" +( cd "$OUT" && nohup run-canary --log_ui_draws=true \ + --ui_draw_capture_frames=2500 --ui_draw_capture_max=600000 \ + >"$OUT/canary.stdout" 2>"$OUT/canary.stderr" & ) +sleep 8 +win="$(xdotool search --name "Xenia-canary" | tail -1)" +[ -n "$win" ] || { echo "FATAL: no Xenia window"; pkill -x xenia_canary; exit 1; } +xdotool windowactivate "$win" 2>/dev/null; xdotool key --window "$win" F10; xdotool key F10 +echo "armed at ${SECONDS}s" +sleep 12; pad "press=A"; sleep 0.4; pad ""; echo "A (skip video) at ${SECONDS}s" +sleep 45 # let the title build in and settle, no further input +pkill -x xenia_canary +echo "done at ${SECONDS}s"; ls -la "$OUT"/*.log 2>/dev/null