You are W-LIFE6 (round 6). Operator review (8 Oct 2026, 23:20 CET): "it still reads as a very cheap village/town: ...
no vegetation, no props, etc. The church esplanade is plain and geometrical ... How can we make it more alive?" Your
job: make settlements LIVED IN: vegetation, dressed fronts and yards, a church square with life.
Read first: CITY-LAYOUT.md (all), SETTLEMENT.md section "4.9 The props law", settlement.mjs (props, PROP_FOOT, PROP_KIT,
freeDoors), settlement-render.mjs (props, putAtom, instancing), the kits in browse/kits/*/kit.json (which prop atoms exist:
barrels, crates, carts, firewood, hay, benches, stalls, wells, gravestones, lanterns, hay_cart, trough, barrel_stack,
trestle_table...).

Files you own (new): omg/kit/building/dress.mjs (plans vegetation + extra props from the finished plan: pure data, seeded,
deterministic), omg/kit/building/dress-render.mjs (turns it into instanced meshes), browse/vendor/fge-look/ (vendored copy
of the tree/grass module), test/dress.test.mjs. Allowed one-line hooks: settle() calls dress(plan) at its very end;
buildSettlement() calls buildDress(...) after the props. Also tools/pack/pack_townkit.sh (add your new files so games get
them). W-ROADS6 owns roads, squares' shapes and ground surfaces in parallel: do not touch those; it exposes
plan.squares[i].poly and plan.parvis {poly, y} (church forecourt) for you (fall back to the square nearest the church).

1. Vegetation. Reuse our game engine's tree module (read-only source ~/forge-build/forge-game-engine/module/look/:
   ez-tree.mjs, tree-forest.mjs (createForest, LOD + picture cards), tree-presets.mjs (oak, ash, aspen, pine, bush),
   tree-materials.mjs, tree-cards.mjs, tree-textures.mjs, grass-field.mjs / village-grass.mjs; MIT notice kept; copy into
   browse/vendor/fge-look/ and import from there). Place: trees in back gardens and yards, the churchyard (one big old
   lime/oak), along the river, outside the walls, orchards near villages, a few on squares; hedges and bushes along
   fences and garden walls; grass tufts / tall grass where walls, fences and houses meet the ground (wall feet), along
   verges; ivy or creepers on some walls (a few per street); flower boxes and potted plants on some window sills and
   doorsteps (simple instanced pots with leafy blobs is fine). Never inside a road, square paving, a door clearance
   (1.6 m), a pad or a building. Seeded, so the same seed = the same town.
2. Props, so fronts and yards look used: per house front 0-3 small things by trade and wealth (bench, barrels,
   crates, firewood, baskets, a cart, washing line between houses over an alley or in yards, lanterns, buckets,
   tools); market goods on stalls; a woodpile and a cart in barnyards; respect the door clearance law and the props law
   (level ground, no overlap with roads beyond the house front strip, no floating). Use existing atoms; grey box only
   if an atom is missing.
3. The church square / forecourt: a big old tree with a round stone bench, a well or a cross, benches, a few
   gravestones and a low churchyard wall with a gate (churchyard on the side), flower beds, a lantern post or two.
   Break the geometry: nothing aligned on a grid, slight rotations.
4. Speed: everything instanced; trees use the module's LOD and picture cards; grass only near the camera (or a cheap
   far version). Budget, town/hill/1 auto view (today 3.65 M tris, 341 calls; the page badge shows them, window.__fps):
   at most +1.2 M triangles and +40 draw calls; city aerial similar. Measure before/after.
Evidence: tests (determinism, nothing in roads/doors/pads/buildings, counts per kind in village/town/city), GPU shots
before/after that you LOOK at: a street at eye level, a yard, the church square, a village from above, a city aerial.
Tools: local server port 8987; GPU probe `FAL_PORT=8988 FAL_PROBE_FILE=<shots.json> tools/gpu/run.sh
tools/gpu/shots_probe.py <out>` (shots.json = [{name, page:"settlement.html", js:["await window.__show('town','hill',1,'walk','auto'); window.__walkStreet();"], wait:3000}],
hooks: __show(tier,site,seed,view,detail), __cam(x,y,z,tx,ty,tz), __walkTo(x,z,heading,pitch), __walkStreet(), __plan(), __built()).
settlement.test.mjs takes ~15 min: run it once at the end. Copy changed omg/kit/building/*.mjs to browse/building/.
Coordination: your worktree and ports are private. No coord claims. Commit after each numbered item.
Time box: stop by 01:50 CET with what works committed; write W-LIFE6-REPORT.md (what changed, numbers, shots, gaps).
