f3bf038515
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f3bf038515 |
Sprint 14 gate 1 close: round-trip pinned, pool items landed, free-carport fixed
Gate 1.5 -- the round trip. a.test drives the editor's OWN placement function (placeEntry, exported for exactly this) through template -> place -> export -> parse -> validateSite -> createWorld -> dress, then asserts the GLB-backed anchors ADOPTED and the carport's 0.22/0.30 came out the far side. Mutation-checked with five deliberate breakages; four went red and ONE DID NOT -- the key-order test shuffled only root keys, every one of which is in KEY_ORDER, so the alphabetical fallback it claimed to protect was never reached. Rewritten around unknown keys, re-mutated, red in both halves. A determinism test that passed while testing nothing. Picking bug, found by dispatching real PointerEvents rather than reading the code: clicking an object's FOOT selected nothing, because the pick handle is a cylinder centred 1.7 m up and from a raised camera the ray has already run ~2 m horizontally by the time it climbs there. pickRef now falls back to nearest-placed-thing within 1.3 m of the ground hit -- camera-angle independent, so it can't rot when the pitch changes. Phantom sail (pool, filed unlanded in S13) -- LANDED and negative-controlled. Teardown factored into disposeSailView() and called from loadSiteInto before refreshCameraSolids (which reads sailView and would re-register a disposed mesh as a camera collider). Rig state goes with the view. Verified through the real game both ways: with the fix removed the cloth still hangs over the corner block, screenshotted. Dev-line (pool) -- two findings, both landed. The line counted `pieces` only, so it read "debris 0" while seven leaves flew; now reports both populations off C's leafCount. And index.html's boot-failure handler wrote into #dev, which is display:none off localhost -- so a failed boot on partly.party showed a stranger a blank page. It has its own visible #fatal element now. E's gap 2, runtime half -- and it was worse than "one click away": nextId namespaces structures s1, s2..., so the FIRST carport the editor places was already free. collateralFor/wreckStructure/isWrecked now resolve through structKey (site collateralKey, then GLB collateral_key, then id last so every existing site is untouched). Negative-controlled: id-equality prices an editor carport to null. E's tie_off:false honoured at both ends. E's swing set and jacaranda are in the palette behind a `requires` gate, so they switch themselves on when the ANCHOR_TYPE widening merges. Also: `return t.skip(msg)` is a fake pass -- Suite.skip pushes a new result and lets the current test record as pass. a.test had six; all converted to the documented 'SKIPPED --' idiom. Selftest 373/0/0, no skips. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
16dee119d6 |
Sprint 14 gate 1: the yard editor core + two shipped bugs it found
web/world/editor.html + js/editor.js. Loads any existing site or an empty template and renders the REAL dressed world through the same loadSite/createWorld/dress path the game boots -- not a diagram, and no second renderer to keep in sync. Place/drag/delete on the ground plane by raycast, writing the SAME named-key site-JSON shapes world.js already reads (the gnome pattern; there is deliberately no generic props[] and the editor does not invent one). Live validateSite into a panel, canonical stable-key-order export with a loud _INVALID key, visible _design/_why authoring fields, and an export panel that says export != shipped. Published the DOM seam contract in editor.html's header so B's SCORE IT and C's wind authoring can start against it immediately -- mountPanel + a class kit, the way E's .letterhead kit worked in Sprint 12. Two rendering bugs in world.js that the editor surfaced in its first ten minutes, both verified by looking at the yard rather than by reasoning: - the graybox house was built unconditionally and dress() only retires it when a house GLB loads, so site_02_corner_block -- which declares no house -- has been shipping a 16x3x6 m grey slab across night 3's whole north horizon, in solids, on the public URL. - SHED alone was bound raw while SHED_TABLE/GNOME/BIKE all get their degrees converted, so SHED.rotY was undefined, the shed's quaternion was all NaN, and three.js silently declines to draw a NaN world matrix. The Hendersons' shed has never rendered; ladder.js has been leaning the ladder on thin air. Also: createWorld threw on a site with no shedTable (unreachable for both shipped sites, reached by the editor template on its first frame). Now null, which every consumer already guards and which CONTRACT.world permits. Selftest 362/0/0. Asserts for the two fixes land with the round-trip test in the next commit -- pushing now because B and C are blocked on the seam. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |