HardYards/web/world
type-two 4aee055f2d Sprint 11 gate 1: three rulings — enum widened, carport priced, venturi reconciled
The corner block's seams, all of them A's to close.

ENUM (D's flag). Anchor.type was a closed JSDoc enum 'house'|'tree'|'post',
so site_02 typed its carport 'post' to fit — quietly enrolling it in the
sail-post family that C's venturi and B's audit both read. Widened to E's own
asset strings (carport, carport_post) and, more to the point, CHECKED: it was
documentation for ten sprints, and documentation cannot fail. validateSite now
rejects an unknown type by name. The ladder is untouched either way — D keyed
it on `work`, the mechanism, which is exactly why that was right.

CARPORT (E's proposal, adopted). $180, with E's reasoning intact: gnome 25, a
night's budget 80, so 180 is 2.25 nights — a good week turned broke and felt
for the rest of the run, without ending a strong one outright. Under ~120 it's
a shrug, over ~250 a silent game over that teaches nothing.

The number lives in site JSON, not the GLB: sites are data, and what a carport
COSTS is this site's economy, not a property of the mesh. E's baked value stays
as the fallback and the proposal.

And it BILLS now. E shipped the trap and said it plainly — the anchors said
collateral "carport" and nothing said what one cost, so nothing scored it. You
could lose the worst steel in the game and pay for a $15 shackle. One broken
corner is enough (the gnome needs two: it needs the sail to land on it; the
carport doesn't need the sail at all), priced per structure so two beams is one
carport gone, not $360. The wreck swaps on the same event — E built it to the
same origin for exactly this.

VENTURI (C's question). There was no disagreement to settle. weather.core
aligns on |dot(wind, axis)| because a gap funnels either way through it, so an
axis is a LINE: -1.08 + PI = 2.0616, and my shipped 2.1 was the same gap read
from the other end. Took C's number because C MEASURED it off storm_03b and I
eyeballed mine at authoring time; the 2.2 deg of my eyeballing was worth
0.44 m/s. gain left at C's 1.35 — that's a balance lever, theirs with B's audit.

Also wired validateSiteWind at site load, C's ask from Sprint 10.

selftest 300/0/0 (was 296).
2026-07-17 17:20:11 +10:00
..
data Sprint 11 gate 1: three rulings — enum widened, carport priced, venturi reconciled 2026-07-17 17:20:11 +10:00
js Sprint 11 gate 1: three rulings — enum widened, carport priced, venturi reconciled 2026-07-17 17:20:11 +10:00
models Price the carport trap and add its wreckage 2026-07-17 15:30:37 +10:00
vendor Vendor three.js r175, add stdlib dev server and launch config 2026-07-16 21:33:42 +10:00
dev_player.html Merge all lanes; add importmap; fix /world/ absolute paths 2026-07-16 22:23:20 +10:00
dev_rigging.html Add prep-phase picking UI over RiggingSession (unblocks A step 8) 2026-07-17 00:14:34 +10:00
index.html Give the game a face: HUD, mouse prep, forecast and aftermath (gate 1) 2026-07-17 02:32:02 +10:00
selftest.html Add tools/site_audit; retract the p1 claim against C; show LANE BAL 2026-07-17 14:52:31 +10:00