HardYards/tools
m3ultra 6f2990c76a site_audit: browser front-end — audit any site off the real dressed world
Gate 2's actual deliverable. The node tool cannot dress, so it can only audit
the built-in snapshot or a resolved export and REFUSES A's dress-source site
JSON. This is the honest audit: audit.html builds the site the way the game does
— createWorld(await loadSite(name)) then dress() — and reads world.anchors, the
single source of DRESSED positions (GLB fascia + branch anchors, 8°-raked posts,
all of it), then runs the SAME sweep. It is the only way to audit a site with a
carport (site_02) before it ships.

    tools/site_audit/audit.html?site=backyard_01
    tools/site_audit/audit.html?site=site_02_corner_block&storm=storm_03_southerly

The winnability math now lives in ONE place, sweep.js, imported by both
front-ends — a tool built to catch reimplemented-formula drift doesn't get to
keep two copies of its own sweep. audit.mjs is refactored onto it (output
byte-identical); the node refusal message now hands you the exact audit.html URL.

Validated in-browser against backyard_01: dressed 12/12 anchors (GLBs loaded),
PASS, best line p1,p2,p3,p4 $65+$15 spare — identical to the node snapshot
verdict and to balance.test, off A's real data with no snapshot. That
cross-agreement also re-proves A's extraction is byte-identical.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 16:06:36 +10:00
..
assetcheck Bake joined-node rotations so bounding boxes are tight 2026-07-16 21:43:06 +10:00
blender Add carport_01 for site_02, and the pyrrhic end card 2026-07-17 14:29:08 +10:00
cardpreview Add carport_01 for site_02, and the pyrrhic end card 2026-07-17 14:29:08 +10:00
character Bake M3 animation pack: 11 new Mixamo clips into player_anims.glb 2026-07-16 23:06:40 +10:00
site_audit site_audit: browser front-end — audit any site off the real dressed world 2026-07-17 16:06:36 +10:00
yardshot Add hail juice, plant shred, and a way to screenshot the game 2026-07-17 03:03:54 +10:00