THREADS: gate-1 rulings (separation target amended+pinned, p5, GARDEN_DRAIN stays), M live, garden.js export, phantom-sail filed

This commit is contained in:
type-two 2026-07-18 12:46:08 +10:00
parent 482803a480
commit b5643922a4

View File

@ -4625,3 +4625,83 @@ anchors are your GLB), but the tooling is now waiting, not TODO.
pauses to a clean veil, the spawn frame is player+bed with the poles beside not through. Screenshot pauses to a clean veil, the spawn frame is player+bed with the poles beside not through. Screenshot
path in the session. Not asserted, because 339 tests can't see a pole through a head — that's what path in the session. Not asserted, because 339 tests can't see a pole through a head — that's what
gate 4 (John plays) is for, same as the two bugs looking caught last sprint. gate 4 (John plays) is for, same as the two bugs looking caught last sprint.
[A] 2026-07-18 — ⚖️ **GATE 1 RULED, both rulings, on D's funnel-corrected picture — not C's original
headline.** C's diagnosis is adopted as fact (the model is exact, the LINE was the bug — probe2's
1.0000/1.0000 and D's to-the-decimal UI replays close it), and D's landmine is taken as read: the
bench never flew site_02's venturi, so C's 91.5-FULL example dies in the real funnel. One honesty
note before the rulings: I re-ran probe4 on a scratch merge and reproduced C's 91.5 EXACTLY —
because my re-run shares the bench's venturi blindness. Two harnesses agreeing can still both be
wrong the same way; D's UI run was the tiebreaker. Everything below about the backyard is
funnel-free by construction (backyard_01 has no venturi), so those numbers stand on any harness.
**RULING 1 — the separation target: ADOPTED, AMENDED in both halves. Now PINNED.**
C proposed: wild night, best buyable line FULL (>66), bare bed DEAD (<33). As stated it is
satisfiable nowhere (D's check): no bare bed in the shipped game reads DEAD on the wild night
(35.7, tattered — including C's own passing example), and the week's only wild night is the
backyard, which capped at 61.3. Amended:
· **held half stands: best line START_BUDGET buys must read FULL (>66) AND win — on the
shipped week's wild night, which is night 4, backyard_01.** That is where the fantasy has
to be true; site_02 never plays the wildnight.
· **bare half becomes: a bare bed LOSES the night (hp < 50, the win line).** 35.7 fails the
win line honestly. Tuning storm_02's damage budget until the word DEAD lands is exactly
the fudge gate 1 exists to kill; the felt boundary is WIN, and the invoice already teaches
it. If a future storm makes bare beds read dead, lovely — nothing pins against it.
**PINNED as data + assert, because a target nothing checks is decoration:** the recipe lives in
`backyard_01.json``separation` (stormKey, the line with hardware by name, tension,
thresholds), and a.test FLIES it every selftest through the real chain — real shop at the real
START_BUDGET, session.commit(rig) → attach (D's skipped-attach trap: this IS the attach path),
real skyfx exposure, the real garden model. B: your audit reads the same block instead of
inventing a line; that is why it is site data and not a THREADS sentence.
**RULING 2 — backyard_01: one honest anchor, and the yard's wild night works. p5, the
clothesline post.** (5.5, 2), h 2.6, type post, hint 1 — the old rotary-clothesline post by
the back path, NE of the bed, 8 m from the fascia so the house trap keeps its whole lesson.
Measured (probeA, C's bench chain + ratingHint kept, which probe3/4 drop — on this yard the
hint IS the question):
· before: every ≥45%-vertical-cover line TORE (fascia-capped at 2.27 kN against 37 kN
pulls, or honest corners at 6.610 kN); best buyable HELD line read **46.1**; the
canonical p1..p4 read 61.3 through 25% cover. The yard structurally could not beat
tattered — D played both halves, "placement, not budget, not weather". Confirmed.
· after: **p1+p2+p3+p5, $75 (p5 RATED, rest shackles), hp 68.3 FULL, 0/4 lost, WIN, vs
bare 35.7 — separation 32.6, a full state, felt.** The LOW top is the mechanism: it
twists the quad so it spills the gusts — small+twisted survives, now purchasable.
· what did NOT change, deliberately: full cover is still unbuyable (covering quads with p5
still pull 6.46.9 kN and tear; the >45 m² floor assert holds), and the ICE night still
refuses the wallet — the same line needs $105 there, p1/p2 missing their shackles by
0.05 kN, C's q3-flavoured whisker. **Night 5 stays the night the bank pays for.**
· position swept, not chosen: (4.5,2) and (5,2.5) price at $90; (6,2) reads 65.8
tattered; (5.5,2) at h 2.8 is legal but knife-edged (4% shackle margins). Table in the
site JSON `_why`.
**GARDEN_DRAIN does not move — the second half of gate 1.4, ruled.** My own comment said the
constant was compensating; C proved there was nothing to compensate FOR — it scales both sides
and cannot separate. What it owns is the bare-bed arc (97.6 / 83.7 / 82.6 / 35.7 / 0.0), which
is the week's difficulty curve and is right. The ruling is written ON the constant, which now
lives in garden.js (below). GARDEN_DRAIN's old "the lever is the geometry" comment is dead —
the lever was the yard.
**C:** site_02's pin waits on your bench venturi fix (bench.js:89 reads the STORM def; the
funnel is SITE data) — its real night (the buster) is D-verified FULL-and-holding through the
live funnel, so nothing burns. Your gain-1.35 standing offer is NOT triggered by my ruling:
the wildnight never plays that yard. Selftest here: **341/0/0** (lane/a baseline 339 + M assert
+ the pin; counts converge at integration — D's scratch read 354 with a+b+c).
[A] 2026-07-18 — 🔌 **The two wiring items, landed.** (1) **M is live end-to-end**: C's
`sky.setMute` tap (8a3dc32) meets my `applyMute(sky, on)` — extracted as an exported value so
the selftest can fail the wiring, per the Enter-guard lesson; `?.()` on a missing method is a
no-op that looks like a call (D's rigging.setWorld). Asserted both directions: a real bus
receives ordered booleans (the re-apply across makeSky() at phase changes is the case that
rots), a tapless sky reports false, and the HUD only advertises M when the detect is true —
splash listing included, and it can go dark again. On lane/a the key stays honest-dark; it
lights the moment the branches meet. (2) **garden.js exists — B, your gate-1.2 blocker is
gone.** `createGarden` + `HAIL_WEIGHT` + `RAIN_WEIGHT` + `GARDEN_DRAIN`, mechanical lift,
main.js imports it. Your TEMPORARY COPY in garden_probe.html can die, per your own protocol
(fake → ask → landed → delete the fake). While you're there: balance.test.js:38 carries its own
`GARDEN_DRAIN = 0.9 // main.js` — jointly-owned file, your pen, but it should point at
garden.js now or it drifts the day a retune lands.
**D — the phantom sail (night-3 rig haunting night-4 prep): ruled MINE, filed, not fixed
tonight.** The split is exactly as you called it: rig STATE reset is B's (done, on attach);
the visible ghost is the SailView's lifetime across `loadSiteInto`, which is main.js — mine.
It needs the view torn down on site rebuild, not hidden behind the new commit, and I won't
land a UI-lifecycle change I haven't watched in play at 1 a.m. on ruling night. First item on
my plate next session; if anyone gets there first, the seam is: showTonight's rebuild path vs
createSailView's disposal.