# PROCITY v8 — SOMEONE LIVES HERE (epoch charter — DRAFT, John's rulings recorded) *Fable (m3), 2026-07-26. Built on [REVIEW_CITY_PATTERNS.md](REVIEW_CITY_PATTERNS.md) — a 16-agent top-down audit (5 lane cartographers · asset-capability probe · design research · 4 design themes × adversarial verify · synthesis). That review is the evidence; this is the plan. Read it first — it corrects three numbers this project had been repeating for epochs.* ## The vision **v7 made the town a game. v8 makes it a place someone lives.** Not more systems — more *inhabitation*: the sound of a life happening off-screen, twenty-three towns that finally look like different towns, a magpie that won't let you walk past it in September, a back yard with washing on the Hills Hoist, and a bloke actually standing at the pie cart that has been sitting unmanned on the street for five epochs. ## JOHN'S RULINGS (2026-07-26, recorded verbatim in effect) ### RULING 1 — THE KERB: **FOOTPATH.** ✅ *"footpath for sure."* The 9 m band between kerb and shopfront is **footpath**, not road. Lane A's published corridor law (`roadWidth` / `vergeBand` / `poleOffset`, `registry.js`) is hereby the single source of truth, and Lane B's ground adopts it: extend the **existing merged `footGeos` class** inward from `e.width/2` to `roadWidth(e)/2`. **+0 draws** (same merged mesh), ~2k tris, fill-rate improves because 18 m of every main street stops being painted as road. Consequences, binding: - The 14 gig posters currently standing in the road land where A already thinks they are. - `registry.js`'s own comment calls that band "verandah'd footpath" and `buildings.js` already builds an awning over it on every shop lot — so this ruling makes the geometry agree with the code's own documentation. **Grass verges survive on residential edges only**, where they are period-correct. - Special cases that must be handled or the ruling breaks: `arcade` (`roadWidth` 0 → zero-area road quad + coincident kerbs) and `lane` (`vergeBand` = [2,2]). - **The gate ships with a falsifiability control**: run the poster-clearance leg against `?verge=0` and assert it **FAILS there** — the pre-change failure is already known and counted at exactly 14. Keep `?verge=0` permanently as a gate flag; it costs nothing and it is the best gate design in the review packet. ### RULING 2 — REAL TOWNS GET THE CONTENT: **FUND THE CIVIC FETCH.** ✅ *"real towns where possible spread it out."* The review's biggest strategic finding: **all 21 real towns are 100% `use:'shop'` lots with a single district (`mainstreet`)** — no houses, no yards, no stalls, no market block. Every residential/market/vendor idea was therefore synthetic-town-only. John has ruled that the content goes to the **real** towns wherever possible, which means the fix is funded and moves **into v8** rather than waiting for v9: - **Lane A + Lane E: the third fetch class.** `build_towns.py` currently asks Overpass for shops and roads. It gains a bounded third class — `landuse=residential`, `building=house`, `leisure=park/pitch`, `amenity=marketplace/memorial/fuel/school/bus_stop/telephone/post_box` — and `plan_osm.js` emits **more than one district** and **more than one lot `use`**. - **The data is already half here**: the caches in-repo already contain, unused, 30,959 footway ways · 12,351 service ways · 6,421 crossings · 2,714 sidewalk tags · 13,199 oneway tags. Some of the districting can be derived without any new fetch at all — A measures which before E re-fetches. - **Hazard, named now**: `build_towns.py` rewrites the *whole* cache and its own docstring records the Newcastle incident (shops refetched, old roads silently reused). **46 pinned goldens ride on byte-identity nobody has proven.** The re-fetch is therefore its own carefully-gated round with per-town before/after diffs — not a step folded into a content round. - Standing Overpass authorisation applies (one bounded query per town, 4 s courtesy, ODbL attribution into every cache and `SOURCES.md`). ### RULING 3 — ANIMALS: **open, spike running.** *"idk about rigged animal models... they have different rigging too right? diff skeleton?"* Correct — there is no `mixamorig` for quadrupeds; every animal asset ships a bespoke skeleton. A dedicated spike (foreign-skeleton loader proof + CC0 source vetting + species tiering + adversarial review) is running; its answer lands as an appendix to this charter. The working assumption until it reports: **tier 0/1 (static + scripted, generated locally for $0) ships regardless**, and tier 2 (genuinely skinned, downloaded) is admitted only if the spike proves both the mechanism and an affordable draw cost. ## The shape **WAVE 0 — THE FLOOR** *(one round, three lanes, all micro, must precede content)* 0.1 the kerb ruling landed as code + the `?verge=0` control · 0.2 repair `smoke_tram` (it asserts one thing, prints a SKIP when absent, and **passes on the fenced path** — a live vacuous-gate violation inside our own suite) · 0.3 re-pin the budget of record to the **walked** worst frame (280/300, not the 131 bookmark figure) and settle ONE shared instance cap · 0.4 wire `ctx.onChunkBuilt`/`onChunkDisposed` (producer and consumer both shipped since R3, never connected). **WAVE 1 — INHABITATION** *(four parallel one-round items; no clips, no rigs, no mocap footage — this epoch deliberately does not wait on John's camera)* 1.1 **the audio inhabitation layer** — the review's only unqualified SHIP: a dog going off behind a paling fence, a mower two streets over, a radio through a window, sprinklers, a roller door. Zero draws, zero tris, ~30 lines of numpy each. · 1.2 **the per-town character vector** — 23 towns get a ground palette, ambience mix and sky bias; `ground.js` merges each surface class into ONE town-wide mesh, so a palette swap is **+0 draws / +0 tris**. · 1.3 **the magpie** — one bird, six weeks, +1 draw. · 1.4 **backyard Australia** — Hills Hoists, paling fences, aerials, tanks, built inside `buildings.js`'s existing `boxMats` instanced mesh (+0 draws for the box props). *Per ruling 2, 1.4's reach now depends on the civic fetch — it ships on synthetic immediately and extends to real towns as districts land.* **WAVE 2 — THE STREET GETS A VERB** *(sequential, behind 2.0)* 2.0 the street interaction surface (a `KeyE` verb, an `interactRects` registry, hit priority, a click fence) · 2.1 **the manned cart** — consumes the flagship dead seam (44 cart sites on the golden seed, 511 across real towns; `furniture.js:252` already holds the shop record and throws it away). **Blocker, not cosmetic**: the cheap `doorRect` ride would make every milk bar and stall un-enterable from the front — the cart must raycast its own InstancedMesh. · 2.2 the fauna substrate + field guide · 2.3 dogs, tier B first. ## Laws (inherited, plus this epoch's) Everything standing. New for v8: **spend triangles, not draws** (the walked worst frame is 280/300; tris sit at 99–124k of 200k — every proposal states its draw cost against 280, and a town-wide `InstancedMesh` costing 1 draw beats a per-chunk type costing +1 × up to 31 live chunks) · **one instance cap per shared layer, settled once, before three implementations invent three** · **the depot is a read-only archive** (971 live assets, 53 recorded, known trademarked items inside) — generate fresh, never pool from it · every new gate copies the shape of 1.1's control: point one table entry at a non-existent key and assert the leg FAILS. ## The cut list stands Recorded in the review, killed with measurements, not re-opened without new evidence: the town-loop bus (its own gate refuted it — what survives is one file: let the *tram* run on main+side edges, retiring the same dead seam for +0 draws) · the ute that sells · the charity bin (its filter accepts nothing) · the dusk flush (the day is 240 seconds long) · the magpie hat (no street verb exists) · the OSM level crossing (the rescoped synthetic version survives) · the mail run · parked cars this epoch (deferred, not rejected — and when they land, 45° angle parking is a charter requirement). ## Standing — what still needs John 1. **The market plaza amendment** — `ground.js` paints a 46×46 m plaza at the origin, on top of the spine road, touching none of the 40 stall lots. Fixing it changes the covenanted town's visual output. *Recommend: fix under the amendment law (the R27 precedent — the covenant is anti-drift machinery, not a defect preservative), as its own small ruling.* 2. **hardyards provenance** — 39 GLBs that are exactly the vernacular kit's shopping list, with provenance documented for one file. Only John knows where they came from. 🟠 until cleared. 3. **Where is MOCAPGOD?** The fleet docs say lanes 0/A/B are done; on m3ultra the directory is 0 bytes and not a git repo (it lives on gitea and, presumably, ultra). Not blocking — v8 needs no clips — but the fleet docs are wrong somewhere. 4. **The animal ruling**, once the spike reports.