Fable (integrator): round-17 instructions — v3.2 the tail + the real-map scout

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
m3ultra 2026-07-16 14:01:37 +10:00
parent 9277238462
commit 2ce1b9a640

View File

@ -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 **35 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 35 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.