PROCITY/docs/V8_SOMEONE_LIVES_HERE.md

137 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 99124k 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.