HardYards/tools
type-two d946636de1 Lane B S14 gate 2.3: converge onto C's pin — their knobs, their guard, my chain
C measured my proposed pin and it could not have failed. Converging rather than
landing a second pin that disagrees. Knobs are now C's:
  site_02_corner_block / storm_02_wildnight / throat (-6,y,0) / t=60.0 / exact ===

Three wrong answers before this, all the same failure:
  1. backyard_01 has venturi: [] — nothing to detect. (I found this one.)
  2. site_02's BED is funnel-blind, Δ 0.0000 m/s. (Both of us, independently.)
  3. t=30 on the wildnight is worth 0.44%. I MISSED THIS ONE: my throat
     measurement read a healthy Δ +4.948 m/s and I trusted it, but that was on
     storm_03b_earlybuster, not the wildnight the pin flies. A sensitivity
     measured on one storm says nothing about another. The mutation check I was
     proud of would have passed on the wrong storm.

Adopted C's vacuity guard and its 25% threshold — one number, not two. It is
the check that would have caught my proposal on its own: mutation asks 'did it
move', the guard asks 'is the funnel worth enough here that a wiring bug could
not hide in the rounding'.

Game side now imports main.js's createWindRouter instead of retyping its two
wiring lines (C's correction). My old version built BOTH sides with
windForSite, so it could only have caught a bad input, never a router that
routed wrong.

CONVERGENCE RECEIPT — my chain reads C's numbers to the decimal:
  t=60 throat  editor 47.38  game 47.38  exact === true  funnel-off 31.60 = 33.3%
  t=30 throat  on 18.55  off 18.46  = 0.44%   (C's finding, reproduced)

What my half adds over C's: C pins windForSite (the builder) against the game;
this pins buildScoringWorld — the path SCORE IT actually runs — against the
same router. Three chains, one number.

Kept the garden bed as a SECOND probe on C's explicit offer: what the sail
shades is what the audit is about, and equality there is a real claim even
though the funnel is not what decides it. Labelled as carrying no funnel
tripwire, because it cannot.

Mutation-checked: setting t back to 30 reds the guard and both tripwires with
the exact diagnostic (0.44%, 18.46 -> 18.55) while the EQUALITY asserts stay
green — which is precisely C's argument, reproduced on my own chain.

Selftest 375 passed / 0 failed / 0 skipped.
2026-07-18 16:41:36 +10:00
..
assetcheck Bake joined-node rotations so bounding boxes are tight 2026-07-16 21:43:06 +10:00
blender Gutter priced and wrecked: GUTTER_COLLATERAL=90 baked with reasoning; torn-gutter house wreck, carport pattern 2026-07-17 20:21:24 +10:00
cardpreview Add carport_01 for site_02, and the pyrrhic end card 2026-07-17 14:29:08 +10:00
character Lane E, Sprint 13: no wind clip — the pipeline can't supply one, and the lean was never a clip 2026-07-18 00:45:22 +10:00
garden_bench Lane C S13 correction: the bench flew site_02 funnel-OFF and tree-FROZEN; wild-night headline dies 2026-07-18 13:08:21 +10:00
jobsheet Lane E, Sprint 11: client juice — job sheet, invoice, and the kid's bike 2026-07-17 17:39:58 +10:00
site_audit Lane B S14 gate 2.3: converge onto C's pin — their knobs, their guard, my chain 2026-07-18 16:41:36 +10:00
storm_envelope storm_envelope: the wind side of the failure envelope, per anchor (gate 2.4) 2026-07-17 20:10:17 +10:00
yardshot Add hail juice, plant shred, and a way to screenshot the game 2026-07-17 03:03:54 +10:00
deploy_hardyards.sh Add deploy_hardyards.sh: partly.party deploy per the games-VPS pattern 2026-07-17 21:39:09 +10:00