136 lines
9.1 KiB
Markdown
136 lines
9.1 KiB
Markdown
# 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.
|