8.9 KiB
PROCITY v8 — SOMEONE LIVES HERE (epoch charter — DRAFT, John's rulings recorded)
Fable (m3), 2026-07-26. Built on 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" andbuildings.jsalready 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(roadWidth0 → zero-area road quad + coincident kerbs) andlane(vergeBand= [2,2]). - The gate ships with a falsifiability control: run the poster-clearance leg against
?verge=0and assert it FAILS there — the pre-change failure is already known and counted at exactly 14. Keep?verge=0permanently 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.pycurrently 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— andplan_osm.jsemits more than one district and more than one lotuse. - 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.pyrewrites 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
- The market plaza amendment —
ground.jspaints 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. - 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.
- 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.
- The animal ruling, once the spike reports.