You are W-SETTLE. Goal: the settlement placement model, SETTLEMENT.md section 4, read ALL of its placement law.
1. `omg/kit/building/settlement.mjs` (pure): `settle({seed, tier, site, style, heightAt?, size?}) -> Plan` and
   `heightOf(plan)`. Generate the terrain when the game gives none: plain (gentle noise), river (a valley with a river
   polyline and a crossing), crossroads, hill (a rounded summit), spur (a ridge falling on three sides), coast (a shore
   line). Then: water/roads/crossing -> square(s) -> landmarks (church/cathedral footprint from
   `landmarkFootprint` if landmarks.mjs exists in your tree, else the SETTLEMENT.md sizes; church on the high point on
   hill/spur, on the square otherwise, facing east) -> plots along roads with tier frontage/depth, trades placed by the
   law (smithy at the edge on the main road in, tavern on the square or at the entrance, bakery near the square, market
   hall in the market square for towns+, barns at the edge) -> walls + gates for towns/cities (gate where a main road
   crosses, towers every 40-60 m) -> terrain stacking on slopes (contour streets + stair lanes, ridge parallel to the
   contour, `y` = street-side ground height, `plinth`, retaining walls where the drop is over one storey) -> props
   (well on the square, market cross, stalls on market squares, carts, firewood, fences, gravestones) -> fields ring.
   No plot overlaps another plot, a road, a square or the water; every plot touches its road; findings in plain words.
   Deterministic per seed. Town plots get `party` and narrow `gableFront` houses; villages detached.
2. `omg/kit/building/settlement-render.mjs`: `buildSettlement(THREE, {kits, styles, plan, makeSpec, layout})` per
   SETTLEMENT.md: plots -> spec (pass the overrides party/plinth/gableFront/y) -> layout -> instances (grouped by
   instance `kit` field, default the style's kit), church/cathedral via landmarks.mjs when present, terrain mesh, roads
   and squares as ribbons/polygons draped on the terrain (Cobble_street / Dirt_track / Paving_square / Grass_meadow from
   the medieval-walls kit materials when present, else flat colours), wall atoms (town_wall_4m, town_wall_tower,
   town_gate, retaining_wall_2m, garden_wall_2m, stair_flight), props; returns colliders (one box per building, wall
   segment and large prop) and stats. Missing atoms = grey boxes.
3. `omg/kit/building/TOWN.md`: the game-builder guide (load kits, settle, buildSettlement, use colliders and heightOf
   for the player, spawn on the main square, budgets: draw calls and triangles you measured per tier). Plain words.
4. Page `browse/settlement.html`: tier x site buttons, new seed, a top-down plan view (2D overlay or camera) and an
   eye-level walk view; HUD with counts (buildings by use, draw calls, triangles, build ms). window.__ready/__show/
   __stats. Probe tools/gpu/settlement_probe.py.
Files: the files above + omg/kit/building/test/settlement.test.mjs. Do not edit village.mjs, spec.mjs, layout.mjs,
styles/* (W-TYPES owns them); call their exports. Local server port 8975, GPU probe FAL_PORT 8976.
Evidence: tests (law checks over 50 seeds per tier x site: no overlaps, trades where the law says, church on the high
point on hills, gates on main roads, determinism), GPU screenshots: a village on a hill, a town on a river with walls,
a city with a cathedral, top-down and eye level.
