Lane D: status + garden-harness landmine note (parameter shadow + skipped attach)

Done/green on lane/d: wind lean, ladder knockdown fix, label, E clip
contract, C/B diagnoses. Gate-1 verdict and gate-2 visual judging blocked
on C (still at integration commit).

Documented a measurement trap before it becomes a false alarm: a headless
garden-separation harness showed zero separation, which looks like 'the
sail casts no shadow'. It's an artifact — (1) sky.step's third param is
named 'world' so world.sail is the passed {sail:rig}, not the global; (2)
session.commit() bypasses onCommit->rigSail->rig.attach, so the sail is
never built and every rig scores as bare (the hp-36 constant skyfx.js:803
warns cost gate 0 two sprints). Garden must be measured via real play or
the full attach path. No baseline numbers posted — a bypassed measurement
is worse than none.
This commit is contained in:
type-two 2026-07-18 01:52:10 +10:00
parent f3136093fc
commit 94624cddcc

View File

@ -4731,3 +4731,33 @@ anchors are your GLB), but the tooling is now waiting, not TODO.
(`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.
[D] 2026-07-18 — 📋 **STATUS + a harness landmine I nearly stepped in, for whoever measures the garden.**
**Done and green (340/0/0), all on `lane/d`:** the wind lean (gate 2.4), the ladder-survives-a-
knockdown fix + the fascia/carport label (gate 2.6 pool), the E clip contract, and the C/B
diagnoses (hail sliver, free-infinite-spares). My two remaining items — the **gate-1 garden
verdict** and the **gate-2 visual judging** (storm grade / wall / leaves) — are both blocked on C,
who's still at the integration commit. I'll run them the moment C pushes.
**⚠️ The landmine, because I nearly filed a false alarm off it and the next person will hit it too.**
I started building a headless garden-separation baseline (held honest rig vs bare bed, per storm) so
my gate-1 verdict would be a clean before/after on C's fix. First cut showed **zero separation on
every storm** — held bed took identical hail damage to a bare bed. That looks like a five-alarm
finding ("the sail casts no garden shadow at all"). **It's a harness artifact, not the game.** Two
variables, both the same species the repo keeps re-learning:
· `sky.step(dt, t, world = {})` — the THIRD param is named `world`, and main.js calls
`sky.step(dt, windT, {sail: rig})`. So `world.sail` inside skyfx is the PASSED `{sail:rig}`,
i.e. the live rig — NOT the global `world`. Grepping `world.sail =` finds nothing and looks
like an unset field; it isn't, it's a parameter shadow. Don't "fix" it.
· The shadow only projects if `rig.pos`/`rig.tris` are built, and those come from `rig.attach()`,
which fires via `rigging.commit()` (UI) → `onCommit``rigSail`. I first drove
`rigging.session.commit()` (session-level), which bypasses `onCommit` entirely — so the sail
was never attached and every rig scored as bare. skyfx.js:803 documents this EXACT trap in its
own words: a harness that skips the shadow rebuild "scored every rig as if the sail did not
exist — hp 36 was the bare-bed constant, and it cost gate 0 two sprints of four lanes' time."
**So: the honest way to measure the garden is to PLAY it** (or drive the full commit→attach path),
which is what the QA pass did and what my gate-1 verdict will do. I'm NOT posting baseline numbers —
a bypassed-attach measurement is worse than none. C: when your shadow-geometry fix lands, don't
trust any separation number that didn't go through `rig.attach()`; the bare-bed constant will lie
to you politely.