Lane D: THREADS — root lean landed, closes E's gate-2.4 handoff

Wired the wind lean as a root pose per E's analysis. Keyed on windBase not
raw speedAt (measured: raw strobes 8-18 flips/min, windBase 0-2 per storm).
Verified live at 71 km/h, leanDir dot wind = 1.0. gate 2.4 wind-clips line
is done with zero new clips: brace and stagger already shipped/wired, lean
is root. Open question to E: is the WindPosture additive worth authoring.
This commit is contained in:
type-two 2026-07-18 01:35:02 +10:00
parent 7758b65331
commit f3136093fc

View File

@ -4694,3 +4694,40 @@ anchors are your GLB), but the tooling is now waiting, not TODO.
entry above — it's blocked on John's Mixamo fetch on ultra, flagged to A). Storm-grade / wall /
leaves are C's to land before I can judge them. So my gate-2 verdict pass is parked until C and E
ship; the ladder+label pool work is done and green in the meantime.
[D] 2026-07-18 — 🌬 **LANE E — I WIRED THE ROOT LEAN, AND YOU WERE RIGHT ON EVERY COUNT. It's live and
it reads.** You said build the lean as root, not clip; look at it before authoring; and that
`_rotOnly` makes a baked lean impossible anyway. All three held. Landed on `lane/d`, 340/0/0.
**What shipped:** `sim.lean` (0..1) + `sim.leanDir`, a foot-pivot torso tip toward downwind, max
~17° (a third of a knockdown's π/2), composed under the yaw in PlayerView as the else-branch of
the pitch tip — the sim guarantees `lean=0` whenever `pitch>0`, so a lean and a fall can never
fight. Same three-instance pattern you named: knockdown pitch, climbY, now this.
**The one place I moved off your number, with the measurement:** you posted breeze thresholds
5.5 / 13.9 (Beaufort 7) off `wind.speedAt`. I keyed magnitude on **`windBase`** (the ~4 s EMA)
instead of the raw sample, because raw `speedAt` strobes the posture — 818 band-equivalent flips
per minute across the five storms, a lean that flickers every few seconds. `windBase` settles it
to **02 changes per 90 s storm**: gentle never leans, wild leans once and stays. So sustained
wind is the posture and the gust stays the stumble/knock event, which is the line your brace/
stagger analysis already drew. Thresholds ended up 8.3 (= C's leaf-start, 30 km/h) to 22 m/s full;
the bands fall on the rating ladder — night 1 upright, 23 lean, 45 in the gale, matching my
earlier table.
**Verified live, not just green:** storm_02 at t=55, windBase 22 → full lean, and `leanDir · wind
= 1.000` (dead downwind). Screenshotted the figure at 71 km/h braced against it — it visibly
leans, arms trailing, instead of standing to attention. **That's the QA finding fixed at ~80% by
the root alone, exactly as you predicted.**
**Your call now, and I mean it as a genuine question, not a decline:** is the remaining 20% worth
your `WindPosture` additive (spine curl + shoulder hunch + arm across the face)? You proved spine
rotation survives `_rotOnly`, so it'll land. My read from the screenshot: the root lean carries the
silhouette, but the arms hang slack — a hunch would sell the *effort*, which the root can't. I'd
take it if it's cheap, but I won't block gate 2 on it and neither should you. Look at the live lean
first (pull `lane/d`, wild night, orbit to side-on) and tell me if the gap is worth an authoring
afternoon. No asset = no dependency on John's fetch either way, which is the happy part.
**The wind-clips line of gate 2.4 is therefore DONE** without a single new clip — the brace
(`TakeCover`) and stagger (`StumbleBack`/`Reaction`) already shipped and are wired, and the lean is
root. The sprint asked for three clips; the answer was one already-present clip, two already-wired,
and a root pose. Nicely under budget.