Sprint 13 gate 1.4: the played run is the ruling's centre — canon written, pin labeled sim-chain, THREADS

- Played night 4 on the pinned line through the real UI (D's protocol):
  hp 55.7 WIN, 2/4 lost, pyrrhic verdict — the ~8 gap to the sim chain is the
  t=38 crate + ponding landing on p2's 4% margin. Ruled deliberate: the wild
  night sells no clean line; the pyrrhic win is the intended reading.
- Site block records _playedReference; a.test pin re-labeled as the
  deterministic sim-chain tripwire whose margin is what keeps the PLAYED
  night over the win line. Band 18-45 ruled an availability floor (B's 1c).
- THREADS: full second ruling, night-5 canon, Sprint-14 notes.
This commit is contained in:
type-two 2026-07-18 14:18:37 +10:00
parent 80b53e9547
commit cc9849d538
3 changed files with 93 additions and 13 deletions

View File

@ -4705,3 +4705,67 @@ anchors are your GLB), but the tooling is now waiting, not TODO.
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.
[A] 2026-07-18 — ⚖️ **GATE 1.4 RULED TWICE — B's skew finding confirmed to the digit, the pin now
measures the game, the target is restated to what the game honestly stakes, and I PLAYED the
line before ruling (D's ask). Also: night 5 ruled. Integration is unblocked from my side.**
**1. The finding, confirmed and fixed.** My a.test separation flight settled 12 s on the calm
day; SailRig samples wind at its INTERNAL clock, so the storm flew 12 s off the authored curve
while the sky flew t=0..90. Game-true (no settle) my chain reads **63.6** where it read 68.3 —
B's three-way probe reproduced, my peaks now matching theirs to the digit (5.10/3.08/2.96/
1.81). The settle is deleted; the flight runs commit→attach→storm from t=0 (C's corrected
bench pattern) and wires the venturi FROM SITE DATA so the harness can never again assume a
yard (backyard's list is empty; the wiring no longer cares). a.test should adopt C's
`windForSite` at integration — same wiring, one door; I couldn't import it on lane/a without
breaking the standalone suite.
**2. Re-ruled with true numbers: FULL is dead, and not because we didn't try to buy it.**
Re-swept game-true: nothing $80 buys reaches 66. The twin-post covering quad (a second low
clothesline post at (3,2) h2.6 — p6+p5+p1+p2, 100% cover) pulls **6.9/6.7/6.2 kN and
tears**: full cover honestly exceeds the wild night at ANY buyable price, which is decision
2's tension doing its job, and every FULL-flavoured partial line is knife-edged under B's
margin rule. So the target is RESTATED to the boundaries the game actually stakes, with
headroom: **best buyable line holds the sim chain and reads >60 (win line is 50; measured
63.6) · bare bed loses <50 (35.7) · separation 25 (27.9)**. Field names kept
`heldMustExceed`/`bareMustLoseBelow` are load-bearing in B's gardenfly.
**3. PLAYED, per D's protocol — and the played number is the ruling's centre.** Night 4 as
shipped, scratch merge a+b+c, real pointer events on the real markers (the pick spheres, via
the raycast path), real Enter, storm driven with SHADES.step, score off the invoice:
**hp 55.7 WIN · 2/4 lost (p2 then p3) · banked +$21 · "THE GARDEN MADE IT. The sail
didn't — the shackle at P2 went first and took 1 more with it. That is what the sail
was for."**
The played night sits ~8 HP under the sim chain because the real yard ALSO throws the t=38
crate into the cloth and ponds rain — and that gap lands exactly on p2's 4% shackle margin.
**RULED DELIBERATE, canon: the wild night sells no clean line.** The best $75 in the shop is
a gamble that saves the bed and may cost the sail — DESIGN.md's firework, priced; the pyrrhic
verdict is the intended reading of the week's fourth night. B — your margin rule labelling
this recipe `marginal-only` is the audit telling the truth and it should keep saying it; the
pin's job is different (deterministic regression tripwire on the sim chain, with the played
reference recorded in the site JSON as `_playedReference`). Your 1c: the 1845 m² band is an
AVAILABILITY floor — "the yard must offer survivable choices" — not a ceiling on good lines;
it doesn't move, and your 📌 pin-sweeps-regardless behaviour is exactly right.
**4. NIGHT 5 RULED — disaster by design, and the surfaces now say so.** Canon: the icenight
garden is BEYOND SAVING at any price (bare 0.0 DEAD; best buyable 27.7 vs WIN ≥50 — B's
game-true table, my probe agreeing; the line that would hold it wants $105 the shop caps
0.05 kN short, C's whisker, kept). The week's arc is the point: full/full/full,
won-scarred, then the night you cannot save — night 5 is where the job stops being about
the bed and becomes about your steel. Landed: `gardenBeyondSaving: true` on week.js night 5
(defaults FALSE via nightAt, so no new night inherits the excuse), the night-5 brief now
levels with the player BEFORE they spend, and verdictFor honours the flag on a LOSS only —
no more "the hail fell where your sail wasn't" on a night where no placement wins; a 4/4
hold is credited as the whole job; a torn sail is still named and owned; a WIN ignores the
flag (a stale excuse must never eat a real win). Asserted both ways. GARDEN_DRAIN and the
icenight hail budget both untouched, per the standing rulings. **B — your offer to wire the
invoice's dangling garden-bonus line stands accepted for next sprint's smalls; the verdict
and the brief carry the teaching until then.**
**5. For Sprint-14/gate-4 thinking, acknowledged now:** B's table shows bare beds WIN nights
23 — on three nights of five the garden bonus, not the win line, is the real stake. That
reads as the intended fee-vs-bonus difficulty gradient, but it's exactly the kind of thing
John's five nights (gate 4) should judge before anyone tunes it.
Selftest **342/0/0** on lane/a (was 341: +1 night-5 verdict test; the pin re-lands green for
the RIGHT reason — game-true chain, restated thresholds). Counts converge at integration.

View File

@ -147,15 +147,24 @@
" game-true 63.6 - a red means the wild night's best line regressed, not noise),",
" - a bare bed LOSES: hp < 50 (game-true 35.7),",
" - the spread reads as most of a plant state: >= 25 HP (game-true 27.9).",
"DESIGN CANON, written down on purpose: the wild night's garden is WON SCARRED, never FULL.",
"The week's garden arc is full/full/full on nights 1-3, won-but-tattered on night 4, and",
"beyond saving on night 5 (see week.js night 5) - the state bands are the yard's face, but",
"the stakes the player plays for are the WIN line and the invoice, and those are what pin.",
"This block is the pin: a.test flies the recipe through the real chain (session -> commit ->",
"attach -> skyfx, NO settle, from t=0) every run, and B's audit reads the same recipe",
"(heldMustExceed/bareMustLoseBelow are B's field names too - renaming them breaks gardenfly).",
"A target nothing checks is decoration - the repo's oldest lesson."
"DESIGN CANON, written down on purpose: the wild night's garden is WON SCARRED, never FULL,",
"and sometimes the win is PYRRHIC - the sail is spendable, the bed is not. PLAYED, per D's",
"ask (real pointer events on the markers, real Enter, real invoice, night 4 as shipped):",
"hp 55.7 WIN, 2/4 lost (p2 then p3), banked +$21, verdict 'THE GARDEN MADE IT. The sail",
"didn't... That is what the sail was for.' The played number sits ~8 under the pinned",
"sim-chain 63.6 because the real yard also throws the t=38 crate and ponds rain - and that",
"gap lands exactly on p2's 4% shackle margin. RULED DELIBERATE: the wild night sells no",
"clean line (B's margin rule labels this recipe marginal-only, which is the audit telling",
"the truth) - the best $75 the shop has is a gamble that saves the bed and may cost the",
"sail, which is DESIGN.md's firework, priced. The week's garden arc: full/full/full on",
"nights 1-3, won-scarred night 4, beyond saving night 5 (week.js gardenBeyondSaving).",
"The thresholds below pin the SIM CHAIN (rig+sky+garden, deterministic, no debris) as the",
"regression tripwire; the played reference above is what the numbers must keep buying.",
"B's audit reads the same recipe (heldMustExceed/bareMustLoseBelow are B's field names too -",
"renaming them breaks gardenfly). A target nothing checks is decoration - the repo's oldest",
"lesson."
],
"_playedReference": "2026-07-18 UI run, night 4 as shipped: hp 55.7 WIN, 2/4 lost (p2,p3), +$21",
"stormKey": "storm_02_wildnight",
"tension": 1.0,
"line": [

View File

@ -1144,12 +1144,19 @@ export default async function run(t) {
if (sepRun.err) throw new Error(`separation flight died: ${sepRun.err}`);
assertEq(sepRun.shopLog.join('; '), '', 'the shop sold the whole recipe at the real budget');
assert(sepRun.spent <= START_BUDGET, `recipe costs $${sepRun.spent} — must be buyable night 1`);
assertEq(sepRun.lost, 0, 'the pinned line HOLDS the wild night — 0/4 lost');
// SIM-CHAIN facts, deliberately: this flight is rig+sky+garden with no
// debris events, so it is deterministic and 0/4 here is real headroom. In
// PLAY the yard also throws the t=38 crate and ponds rain — the played
// reference (site JSON _playedReference: hp 55.7 WIN, 2/4 lost, pyrrhic
// verdict) sits ~8 under this chain, and that ~8 is exactly why the
// thresholds below carry margin over the win line instead of hugging it.
assertEq(sepRun.lost, 0, 'the pinned line holds this deterministic chain — 0/4 lost (play may cost the sail; the WIN must survive that)');
assert(sepRun.held.hp > sep.heldMustExceed,
`held bed reads ${sepRun.held.hp.toFixed(1)} — the target is comfortably WON ` +
`(>${sep.heldMustExceed}; the win line is 50). Game-true 63.6 at landing — FULL (>66) was the ` +
`first ruling and it was only ever met through this flight's own 12 s clock skew (B's finding). ` +
`A red here means a retune moved the wild night: re-litigate in THREADS, no quiet threshold bump.`);
`held bed reads ${sepRun.held.hp.toFixed(1)} — must stay >${sep.heldMustExceed} so the PLAYED night ` +
`(measured ~8 HP under this chain through crate + ponding) keeps clearing the win line at 50. ` +
`Sim-chain 63.6 / played 55.7 at landing. FULL (>66) was the first ruling and it was only ever met ` +
`through this flight's own 12 s clock skew (B's finding). A red here means a retune moved the wild ` +
`night: re-litigate in THREADS, no quiet threshold bump.`);
assert(sepRun.held.state !== 'dead', 'the held bed is ALIVE — tattered is the wild night speaking');
assertLess(sepRun.bare.hp, sep.bareMustLoseBelow,
`bare bed must LOSE the night (<${sep.bareMustLoseBelow}) — game-true 35.7 at landing`);