# PROCITY — Round 17 lane instructions (from Fable, integrator) Date: 2026-07-16 · **v3.1 SHIPPED** — THE FLIP is live on origin (`9277238`, tag `v3.1`). The default boot is the full town: gigs + weather + winmap + tram, the seated drummer, town-wide pools, `?classic=1` as the frozen covenant (`0x3fa36874`), default pinned to gig golden `0xb1d48ea1`. Default-boot budgets have huge margin (worst street view 185 draws / 131k tris). **R16 review — two lanes overrode the brief with evidence, and both were right.** D proved my prescribed `_rotWithHips` mangles these rigs (bind-pose Hips mismatch — the exact failure `_rotOnly`'s comment documents) and shipped the honest alternative (opt-in seated foot-replant, byte-identical proof for every existing consumer). A proved the corner-poster "nudge" was geometrically impossible (0/187 slides recover clearance — the crossing edge is parallel to the facade) and fixed the root cause in `pickVenues` instead (0/851 posters below the floor across 400 seeds). This is the standard: **the brief is a hypothesis; the measurement wins.** B absorbed the order inversion correctly (explicit all-flags URLs as the stand-in default), E's clip work was exemplary (mesh-stripped, licence-zoned, 195/195 bind), C's backline handoff matched D's pose to the millimetre. v3.1 was the cleanest epoch close yet. Round 17 is **v3.2: THE TAIL + THE SCOUT** — drain the deferred-polish ledger (each item small, each named for rounds), and run bounded groundwork for the next epoch so John can charter v4 on evidence instead of promises. Tag **`v3.2`** at close. ## Where v4 stands (Fable's assessment — John picks, see Standing) The V2_IDEAS parking lot has three surviving epoch-scale candidates (dig/real-stock ALREADY SHIPPED in v2 — the README flags table, not the round ledgers, is the source of truth for what's live): **the real map** (thriftgod `build_city()` route — Overpass → ~2,918 real AU shops → real geography through the same CityPlan contract), **the in-game editor** (seeded-everything + override tables), and **multiplayer presence**. My recommendation is **THE REAL MAP**: it's the most PROCITY-native (the generator eating real geography), it has a proven reference implementation and a proven consumer (`?plansrc=osm` + three fixtures incl. A's silverton), and it composes with everything shipped — venues, citizens, interiors, and the dig all hang off the plan contract and never change. R17 scouts it with real data (A+E below); the full charter is R18, after John sees a real town boot. ## The ledger 1. **Drummer pelvic-lean pass (D — the R16 honest limit).** The upright bent-leg sit reads stiff from side/overhead angles. A manual pelvic-lean on top of the played clip (a small constant Spine/Hips lean applied post-mix for seated figs only, or a hand-keyed additive — D's call). Same byte-identical discipline: seated-only path, standing untouched. 2. **Bench-sit loiter (D — the carried R16 stretch).** Same `sit.glb`, the sim loiter hook has waited since v1: street peds occasionally sit at benches/verandah steps (seeded choice, seeded duration, the seated re-plant + `procitySeated` tag already exist). Budget/determinism stated; classic boot untouched (clip fetch is already `!CLASSIC`-gated). 3. **Backline render confirmation (C — close the R16 pending line).** C's verify of D's wired GLB at `backline[0]` was "pending D's R16 commit"; D landed. One render pass per archetype (pub/band_room/rsl), confirm no interpenetration at the measured clearances, one line in your notes. The handshake closes. 4. **`publish.py --verify` false drift (E).** `sit.glb` (like `vintage-cash-register.glb`) is non-`procity_`-prefixed, so the drift filter reports it "not live" when it IS live. Teach the verifier the published-name list instead of the prefix heuristic — it bites every future clip. 5. **Wind sway (B — parked since R7; ship it or kill it).** The one missing weather element now that weather is default-on. Vertex-shader sway on trees/awnings, weather-driven (calm → rain gusts). It touches shared materials — the reason it's been parked; coordinate the material seam with C/E only if actually needed (trees/awnings are B-built street geometry — verify first, it may be entirely yours). `?classic=1` must stay byte-identical (weather is off there); `?weather=0` sways nothing. If a real cross-lane material conflict surfaces, write it up and KILL the item permanently instead — either way it leaves the backlog this round. 6. **The real-map scout (A + E — bounded, data-first, NO new game systems).** - **E**: port thriftgod's `build_city()` Overpass route into `pipeline/build_towns.py` → produce **3–5 real AU town caches** (`city_source.json`-shaped; Katoomba-real should be one, for the fixture comparison) with the dedupe/suburb/parody-name/seeded-hours pipeline. Committed as data under `web/assets/towns/` (or A's preferred home). **Provenance: OSM is ODbL — attribution ships with the data** (a `SOURCES.md` + an in-repo notice; you own the licence table). Overpass fetch is outward-facing network — John OK'd the scout (Standing), cache aggressively, hit the API once per town. - **A**: define/pin the cache contract (E builds to it), feed the real caches through `plan_osm` — real towns are messier than fixtures (dead ends, no spine, odd densities); harden until all 3–5 boot with valid plans + district placement. Pin a golden per real town; add them to the sweep. **Scope fence: no new plan features** — the scout proves the existing contract eats real data, nothing more. 7. **Town-matrix smoke (F).** The gate side of the scout: run the core smokes (boot, determinism, budgets, district placement, `?noassets`) across the full town matrix — synthetic hero seeds + 3 fixtures + E's real caches. One table in your notes: town × gate. This is the evidence John charters v4 on. Parked still (v3.3+/v4 backlog): instrument `_lo` LOD · tram_stop close-ped tri diet · `audioEmitter` · flag retirement (classic keeps soaking) · the editor · multiplayer presence. ## Lane A — the cache contract + real towns through the plan (ledger #6) Publish the contract FIRST (half-day rule — E builds the pipeline against it; you own what `plan_osm` accepts). Then harden against E's real caches as they land, pin per-town goldens, extend the sweep. Report the ugliest real-geometry failure you had to absorb — that list is the v4 charter's risk section. ## Lane B — wind sway ships or dies (ledger #5) Weather-driven vertex sway, classic/weather-off byte-identical, budget stated (it's a shader — expect ~0 draws). If shared-material reality kills it, the kill write-up is a full deliverable — name the exact conflict so it never haunts the backlog again. ## Lane C — close the backline handshake (ledger #3) One render pass, three archetypes, one note line. Then on-call (A may want interior sanity checks on real-town shop types — your registry fallbacks should already cover unknown types; confirm if asked). ## Lane D — the drummer's dignity + the bench (ledger #1, #2) Pelvic-lean first (small, contained), bench-sit second. Both ride existing seams (`sit.glb`, seated re-plant, loiter hook, `procitySeated`). Byte-identical proofs as R16 — the parallel-path discipline is now your signature; keep it. ## Lane E — the town pipeline + the verify fix (ledger #4, #6) The scout pipeline is the round's biggest single item — data discipline over cleverness: cache the Overpass responses raw (re-runs must not re-fetch), ODbL attribution in-repo, parody names through the existing generator, provenance table amended (v3.2 marker). The verify fix is a warm-up. ## Lane F — the matrix + the close (ledger #7) 1. Town-matrix smoke across synthetic + fixtures + real caches (after A/E land). 2. Round close: `qa.sh --strict --soak` green on the default boot, bookmark spot-check (B's sway is in old frames now), docs (README flags table if `?weather` semantics grew a sway note, LANE_F_NOTES §17), tag **`v3.2`**, push main + tag (standing authorization). ## Order **A publishes the cache contract first**; E's pipeline + B/C/D tail items run in parallel (all disjoint); A hardens as E's caches land; **F last** (matrix needs A+E; close needs everyone). Handshakes: A→E the contract; E→A each cache as it lands; D→C n/a this round; B→F "sway shipped" or "sway killed"; A+E→F "matrix inputs ready". ## Standing - **John — both items RESOLVED at kickoff (2026-07-16):** 1. **v4 headline — DECIDED: THE REAL MAP.** John chose it at kickoff. R17's scout is therefore not speculative — it's the v4.0 groundwork; the full charter lands with the R18 instructions. 2. **Overpass fetch — AUTHORIZED.** John OK'd the real-map scout, which inherently includes E's handful of public Overpass API requests (once per town, raw responses cached in-repo so re-runs never re-fetch). E: proceed; keep the ODbL attribution discipline. - **v3.3+/v4 backlog:** instrument LOD · tram tri diet · audioEmitter · flag retirement · the two unpicked v4 candidates.