From 2ce1b9a64072095d09cdc1857eccbaca5d70c9c7 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Thu, 16 Jul 2026 14:01:37 +1000 Subject: [PATCH] =?UTF-8?q?Fable=20(integrator):=20round-17=20instructions?= =?UTF-8?q?=20=E2=80=94=20v3.2=20the=20tail=20+=20the=20real-map=20scout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/LANES/ROUND17_INSTRUCTIONS.md | 137 +++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 docs/LANES/ROUND17_INSTRUCTIONS.md diff --git a/docs/LANES/ROUND17_INSTRUCTIONS.md b/docs/LANES/ROUND17_INSTRUCTIONS.md new file mode 100644 index 0000000..86e6937 --- /dev/null +++ b/docs/LANES/ROUND17_INSTRUCTIONS.md @@ -0,0 +1,137 @@ +# 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 — one decision + one authorization:** + 1. **v4 headline** (decide by R18, not needed for this round): Fable recommends **THE REAL MAP** + (real AU towns through the existing plan contract). Alternatives: the in-game editor + + override layer, or multiplayer presence. R17's scout gives you a real town booted in the + engine to judge by — say the word at R18 kickoff. + 2. **Overpass fetch OK** (this round, blocks E's ledger #6): the scout hits the public Overpass + API a handful of times (once per town, cached raw thereafter) — outward-facing network, so + flag it now: silence = OK, veto before E starts if not. +- **v3.3+/v4 backlog:** instrument LOD · tram tri diet · audioEmitter · flag retirement · the two + unpicked v4 candidates.