You are W-HOUSES5 (round 5). Goal: houses that look hand-built and differ by trade, sit on the ground without buried
openings, fill their plot exactly, and have proper window openings. Read omg/kit/building/CITY-LAYOUT.md (sections 4-5;
section 5 is the operator's review of 8 Oct 2026), styles/medieval.mjs, layout.mjs, render.mjs, TYPES.md.
LOOK first: /tmp/r5-shots/out/b-hill-low.png and e-wall-plot.png (the "weird pane": a flat dark quad inside unglazed
openings with light gaps beside it), c-hill-walk.png (buried openings on a slope), h-city-aerial-close.png and
d-hill-walk2.png (every house the same kind), /tmp/r5-ref/streets.jpg (the operator's reference streets),
/tmp/medlay/ref/t7m48.jpg and t7m54.jpg (craftsmen houses, cottages).

Files you own: omg/kit/building/styles/medieval.mjs, layout.mjs (only where needed for reveals/irregularity),
kits-src/medieval/style.json (the barn type), TYPES.md (a "round 5" section), test/houses.test.mjs (+ new tests),
browse/houses.html, tools/gpu/houses_probe.py. Do NOT touch settlement.mjs / settlement-render.mjs (W-GROUND owns them).

FROZEN overrides the planner passes to makeSpec(style, type, seed, o) (all optional; absent = today's behaviour):
- o.w: the exact frontage (m). The main volume's width along the street must equal o.w within 0.02 m: fit the bays
  (bay width 1.6-3.6 m, change the bay count if needed; the door bay keeps its minimum).
- o.ground = { back: [min, max], left: [min, max], right: [min, max] }: ground along each wall's foot relative to the
  street floor (y = 0). LAW: no window, door or cellar window whose bottom is below max + 0.25 m on that wall (drop it:
  blank wall); the stone base reaches min on every wall (nothing floats); a door is drawn only where ground meets its
  bottom within 0.35 m (backGrade/backDoor rules from round 4 still hold). Party walls (o.party) ignore ground.
- o.irregular: 0..1. Hand-built look scaled by it: upper storeys offset a few cm and lean up to 0.5 degree, the ridge sags
  (3-12 cm at mid-span, tile rows follow), eaves not quite straight, braces and posts jitter by a few cm, windows not on
  a perfect grid (+-5 cm), storey heights vary per house. Party-wall planes stay planar so neighbours still meet, and the
  door-ground law is untouched. Deterministic per seed.
- o.stepUp: 0-3: stone steps (0.17 m each, 0.3 m deep, door width + 0.4 m) in front of the street door; the floor is that
  much above the street.
1. Windows: delete the dark backing quad (const SEE_THROUGH / backing in styles/medieval.mjs, added by the root last
   round). Unglazed openings (window.shutter, window.cellar) get a real reveal: four jamb faces in the wall material
   through the wall thickness (0.25 m) and a dark warm interior face exactly filling the clear opening at the back, no
   light gap anywhere; shutters stay open. Check the result close up from 3 angles.
2. The o.ground, o.w, o.stepUp and o.irregular laws above, with tests (door-bottom vs ground; no opening below max +
   0.25; width == o.w for a range of widths 4-14 m; irregular 0 == today's spec byte for byte).
3. Distinct trades: from 30 m a player must tell them apart (silhouette, front, props), not by a sign alone.
   - barn (new type, style.types.barn in kits-src/medieval/style.json and makeSpec): long and low (8-14 x 6-9 m), one
     tall storey + loft, steep roof coming low, walls of Barn_plank (kit medieval-town-v2; fallback Oak_frame_grey
     panels), barn_door_double centred on the street/yard side, barn_loft_door in a gable, barn_vent_slit pairs, no
     chimney, no glazing; hay_bale (medieval-trades) and hay_cart (v2) beside it.
   - smithy: the open forge_shed with chimney_forge on the STREET side or the street-facing end (not hidden behind),
     anvil and grindstone in front, sign_smith, soot-dark stone ground floor.
   - bakery: bread_oven bulging from the street-facing gable or side (footed), window_bakery counter at the front, a
     tall chimney, sign_pretzel, a basket_produce or firewood_stack by the door.
   - tavern: wider (4-5 bays), a double door, big tavern_sign, trestle_table x2 + barrel_stack (v2) and lanterns in front.
   - shop: window_shop with its counter at ground floor, trade sign as today.
   Kit medieval-town-v2 is being built by Astra now (jobs/medieval-town-v2/STYLE.md lists the frozen atom and material
   names: barn_door_double, barn_loft_door, barn_vent_slit, tile_strip_aged_a/b, ridge_tile_aged, grime_skirt,
   hay_cart, trough, barrel_stack, trestle_table; materials Clay_tile_aged, Barn_plank, Plaster_aged_white,
   Plaster_aged_ochre, Oak_frame_aged, Grime_skirt, Thatch_reed_light). Use the TRADES_KIT pattern: kit absent = grey
   boxes / today's atoms and materials, never a crash. The root imports the kit to main when it lands.
4. Aged look (operator: "roof texture is super cheap", "texturing is lacking"): when v2 is present use the aged strips and
   ridge, the aged plaster and oak, Thatch_reed_light, and a grime_skirt along every exposed wall foot; per house a small
   roof tint shift (+-8 % brightness/hue) so a row of roofs is not one flat colour.
Budget: a full-detail house stays <= 1.15x today's triangles (irregularity must not multiply geometry; instancing kept).
Page browse/houses.html: add a row per trade (barn, smithy, bakery, tavern, shop) and an irregular 0 / 0.5 / 1 row.
Local server port 8987, GPU probe FAL_PORT 8988. Evidence: tests, GPU screenshots you LOOK at (catalogue page; a close
up of an unglazed window from 3 angles; each trade at 30 m and at 8 m; a slope case with o.ground back [1.5, 2.5])
under /tmp/w-houses5-shots/.
Coordination: your worktree and ports are private. Do NOT take coord claims; never combine a coord command with other
commands in one shell call.
Time box: stop by 16:40 CET with what works committed (commit after each numbered item).
