diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 3dfab33..b1befb4 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -17,6 +17,7 @@ file.* | does rigging save the garden here? | `tools/garden_bench/` + `tools/site_audit/gardenfly.js` | garden outcomes, separation targets, margin rule | | per-anchor wind exposure over a storm | `tools/storm_envelope/` | the storm-side second harness | | regenerate all canon GLBs | `blender -b -P tools/blender/build_yard_assets.py` | deterministic; `--only ` for one asset | +| does this asset LOOK right? | `tools/assetcheck/look.html?a=name1,name2` | the game's renderer + the 1.7 m capsule; the only check that answers "wrong shape" | | job-sheet/invoice design preview | `tools/jobsheet/index.html?v=...` | E's design-ahead handover pattern | | deploy to partly.party/hardyards | `sh tools/deploy_hardyards.sh` | ships `web/` ONLY; self-verifies | @@ -61,8 +62,17 @@ the site JSON, wired explicitly, so a site says what it contains. The bike - `rating_hint` (float) on anchor nodes — effective failure = `hw.rating × ratingHint`. Unset ⇒ 1 at adoption; the sim reads the anchor, live. - `collateral` (string) on anchor nodes — what breaks when this anchor's - corner blows. `collateral_key` on a structure whose priced thing has a - different name than the structure (house → "gutter"). + corner blows. `collateral_key` on ANY asset that carries a price, naming + which collateral string that price answers to. Not just the odd ones out + (house → "gutter"): the carport went five sprints resolving only because + site_02 happens to id its structure "carport", and a second carport placed + in the editor would have been a free failure. +- `tie_off: false` on an `*_anchor` node that is NOT a tie-off (a carry point, + a light hint, a stand position). **Silence is not neutral here** — + `adoptAnchor` does `rating_hint ?? 1`, so an unrated anchor node is the best + steel in the game the moment a site names it. Three e.test.js rules enforce + this class of honesty across every GLB: no silent anchors, no collateral + string nobody prices, no `anchor_type` outside `ANCHOR_TYPE`. - Named nodes matter: `pickup_anchor` (where carried items sit), the `fascia_anchor_*` family, etc. Check `world.js` adoptAnchor before renaming anything. @@ -72,7 +82,13 @@ the site JSON, wired explicitly, so a site says what it contains. The bike toward three.js **−Z**. Never write a docstring about orientation without measuring the exported GLB in three.js coords — E's bike comment lied about its own geometry and only a browser-coords assert caught the flip. Dims/tri-count -verifies CANNOT catch a wrong shape or a flipped lean; look at the render. +verifies CANNOT catch a wrong shape or a flipped lean; look at the render — +`tools/assetcheck/look.html` exists for exactly that, and the Blender contact +sheet is NOT a substitute (its view transform rendered a #8C7FC0 canopy as +near-white; a colour judgement made there is a judgement about Blender). +Better still, bake the orientation claim as an extra and assert the claim +against the geometry, so the note and the mesh can only lie together +(`swing_set_01.wreck_falls_toward`). ## Authoring a site (a "level") diff --git a/tools/assetcheck/look.html b/tools/assetcheck/look.html new file mode 100644 index 0000000..85eaa51 --- /dev/null +++ b/tools/assetcheck/look.html @@ -0,0 +1,107 @@ + + +assetcheck — LOOK at it, in the real renderer + + +
loading…
+ +