HardYards/web/world/js
type-two 2fd7b579b4 Lane A S18 gate 2 pickup: 🧵 THE FABRIC REACHES THE SIM — the F key was moving the paperwork and never the physics
B found gate 2's variable and it was in my file. rig.setFabric() had exactly one
call site (RiggingSession.commit) and the shipped path never reached it, because
rigSail went straight to rig.attach(). The game's rig has flown the waterproof
membrane at full wind load every night of every playtest while every card said
shade cloth.

Reproduced the bug here before fixing it: fresh boot read rig.porosity 0 against
session.fabric shade cloth (0.3). After the wire, through the real Enter key:
0.3 and 0.3, agreeing.

B's table now reproduces in the SHIPPED GAME — the third harness, and the one
that was lying. Night 5, the yard's pinned recipe by hand, committed with Enter:
p5 5.10 / p2 3.08 / p3 1.81 / p1 2.96, 0/4 lost, garden 63.5 inside the pinned
tattered-win band. B's bench: 5.11 / 3.07 / 1.78 / 2.97, 0/4. Before the fix the
same recipe broke p2 at 3.48 and p3 at 3.90 — D's cold play to the decimal.

Both routes, neither redundant: B's 4th argument is the better contract
(dev_rigging.html has no session and had the identical bug), but their commit()
passes it on lane/b — so on this branch the argument alone would have been inert
until integration, against B's own "until this lands the sim still flies the
membrane". rigSail takes the argument and falls back to session.fabric, the
expression this file already read for the paperwork. At merge the argument wins;
delete the fallback then.

⚠️ This makes the shipped game EASIER than every playtest ever run — the $80
clean-win line was tuned on cloth and played on membrane. D must re-fly the week.
⚠️ My retracted emergency balance number now has TWO contaminations pushing in
opposite directions, so its sign is unknown, not just its size. Fully withdrawn.

Selftest 539/0/0, unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 20:14:47 +10:00
..
tests Lane A S18: 👁️ played the callout — five bugs 535 green asserts could not see, all fixed and pinned; gate 5's A half 2026-07-25 19:53:47 +10:00
anchor_ratings.gen.js WIP Lane E S17 gate 3.1: corroded tier (PREDECESSOR STATE — negative control M1 still applied) 2026-07-21 01:18:44 +10:00
board.js Lane A S18: ⚖️ E's items answered — 0.80 RULED, palette hunk applied, and the second law deleted because I proved it cannot fire 2026-07-25 20:01:47 +10:00
broom.js Lane D: calibrate the douse to B's real ponds; fix the sagging-belly refusal 2026-07-17 09:23:17 +10:00
camera.js Sprint 13 gate 2.5: two camera fixes — spawn framing, aftermath cloth-swallow 2026-07-18 01:18:29 +10:00
contracts.js WIP Lane E S17 gate 3.1: corroded tier (PREDECESSOR STATE — negative control M1 still applied) 2026-07-21 01:18:44 +10:00
debris.js debris: delete the dead sail.nodes seam — sail._applyDebris is the one contact model 2026-07-18 19:03:36 +10:00
editor_score.js Lane B S17 gates 0.3 + 2: the card names its cloth, the session speaks for the client 2026-07-21 02:45:49 +10:00
editor_storm.js Lane C S16: gate 3 lands — the fabric bet pinned, forecast argues it, storm in the lists; selftest 438/0/0 2026-07-20 20:33:10 +10:00
editor.js Lane A S18: ⚖️ E's items answered — 0.80 RULED, palette hunk applied, and the second law deleted because I proved it cannot fire 2026-07-25 20:01:47 +10:00
editor.wind.js Lane C S15: converge gate 2.2 onto B's THREADS proposal — B's filename/global/source/default taken, storm+time API kept; THREADS: seam receipt + gate-1.3 storm-side zero-delta confirmation 2026-07-20 18:23:31 +10:00
garden.js Sprint 13: garden model exported as garden.js (B's gate-1.2 blocker) + applyMute(sky,on) as a value 2026-07-18 12:44:37 +10:00
hud.js Lane A S18: 👁️ played the callout — five bugs 535 green asserts could not see, all fixed and pinned; gate 5's A half 2026-07-25 19:53:47 +10:00
interact.js Lane D: calibrate the douse to B's real ponds; fix the sagging-belly refusal 2026-07-17 09:23:17 +10:00
ladder.js Lane D: ladder survives a mid-carry knockdown, and the prompt names the right bracket 2026-07-18 01:00:01 +10:00
main.js Lane A S18 gate 2 pickup: 🧵 THE FABRIC REACHES THE SIM — the F key was moving the paperwork and never the physics 2026-07-25 20:14:47 +10:00
player.js Lane D: the player leans into the wind (gate 2.4 — as a root pose, not a clip) 2026-07-18 01:33:47 +10:00
player.sim.js Lane D: the player leans into the wind (gate 2.4 — as a root pose, not a clip) 2026-07-18 01:33:47 +10:00
ratings.js Lane E S15 gate 1.2: ratings.js — factoryExtras(type), the runtime end of the manifest; refuses to guess for ambiguous types, warns once 2026-07-20 17:49:38 +10:00
rigging.js Lane B S17 gates 0.3 + 2: the card names its cloth, the session speaks for the client 2026-07-21 02:45:49 +10:00
rigging.selftest.js Lane B S17 gate 3: the corroded tier prices honestly in the card 2026-07-21 03:59:53 +10:00
sail.js Lane B S17 gate 0.2: THE SECOND WIRE — a fully-lost sail re-arms the heal 2026-07-21 02:45:28 +10:00
sail.selftest.js Lane B S17 gate 0.2: THE SECOND WIRE — a fully-lost sail re-arms the heal 2026-07-21 02:45:28 +10:00
skyfx.js Lane C S13 gate 2.3 + D's sliver: ambient leaves from 30 km/h; hail pool hides at zero 2026-07-18 11:51:26 +10:00
stormgen.js Lane C S16: makeStorm(seed) — seeded storms inside authored envelopes (gate 3.2) 2026-07-20 20:11:34 +10:00
testkit.js Gate 0: name the harness dispute's cause; make skips real (testkit) 2026-07-17 10:21:01 +10:00
weather.core.js Lane C S16: gate 3 lands — the fabric bet pinned, forecast argues it, storm in the lists; selftest 438/0/0 2026-07-20 20:33:10 +10:00
weather.js Lane C S17 gate 1 (cont.): the OFFER BAND and the PAIRING law — night 7 stops lying 2026-07-21 03:07:02 +10:00
week.js Lane A S18 gate 1 spine: 🚨 THE EMERGENCY CALLOUT — a night that starts in storm, a DISPATCH, double rates, the ledger unchanged 2026-07-25 19:30:19 +10:00
world.js Sprint 15 integration: merge all lanes (418/0/0), apply E's world.js manifest patch, [I] entry 2026-07-20 19:38:11 +10:00