HardYards/tools
type-two 6e0608a6fb Lane E S17 gate 3.1: THE CORRODED TIER — mutations restored, tell verified at 20 m, droop pinned to geometry
Recovers an interrupted session and finishes its verification honestly.

RESTORED (the predecessor was killed mid-mutation-check):
- build_sail_post_corroded still had negative control M1 APPLIED — clean
  galvanised steel, DROOP=0 — so both shipped GLBs were the untelled post.
  Restored: steel_weathered/rust/rust_deep, DROOP_DEG = 38.
- asset_report.json held 1 of 37 assets and contact_sheet.png was a 196 KB
  truncated write. Both were interrupted artifacts, not decisions; a clean
  rebuild restores 37 assets and a 5.07 MB 1680x4200 sheet.

DETERMINISM: 37/37 GLBs byte-identical across two consecutive full runs;
report and contact sheet byte-identical too. Zero churn on the 35 pre-existing
GLBs.

ASSERT THAT COULD NOT FAIL, KILLED: the sag pin (honestY - corrodedY > 0.05)
reads 0.060 at ZERO droop, because the eye hangs off a weld line 160 mm down
the post — measured on the M-B build, anchor at (0, 3.920, 0). It measured the
weld offset and called it a sag. Replaced with the droop ANGLE derived from
the exported anchor and pinned to baked extras (padeye_droop_deg / arm_m /
weld_y_threejs / dir_threejs), all stated in three.js coords — the axis trap
closed the swing_set way, so note and mesh can only lie together.

ASSERT WHOSE REASON WAS BACKWARDS, FIXED: the 20 m pin claimed the corroded
shaft read darker. Measured off look.html's canvas at 20 m: honest lum 50,
corroded lum 94 — it renders twice as BRIGHT. Base colour is darker but
metalness drives the pixels (gal 0.90/0.35 goes near-black with no env map;
weathered 0.55/0.60 is diffuse). Test now pins both halves and names the
mechanism the player actually sees.

Three tells split into three tests so one failure cannot mask the others —
pre-split, the M-A mutation went red on rust area and never reached the
lightness or droop asserts at all.

Mutation-checked in the browser, all three witnessed red: M-A clean steel
(1/3 + 2/3 red, 3/3 green, factory GREEN throughout — the trap it cannot see,
confirmed); M-B flat eye (3/3 red, others green); M-C baked note lies while
mesh is honest (3/3 red, proving the pin reads the extra, not a literal).

Selftest 483/0/0 (474 baseline + 9 exactly). Tell verified by looking at
20 m at the game's own camera height, screenshots taken.

editor.js untouched — palette hunk filed verbatim in THREADS for A.
contracts.js ANCHOR_TYPE widening flagged for A.
Lane D flagged: the tier is placeable, gate 3.2 unblocked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 01:51:57 +10:00
..
assetcheck assetcheck/look.html: the verify that answers "is this the right shape" 2026-07-18 16:01:39 +10:00
blender Lane E S17 gate 3.1: THE CORRODED TIER — mutations restored, tell verified at 20 m, droop pinned to geometry 2026-07-21 01:51:57 +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
fabric_bet Lane C S16: storm_06_soaker — the pea-hail soaker, measured over both yards; fabric_bet probe; gardenfly porosity opt 2026-07-20 20:06:12 +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 S16: adopt C's gardenfly porosity hunk byte-identical — convergent, uncontested 2026-07-20 20:42:51 +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