Lane F R15 (v3.0): docs assembly — README v3, LANE_F_NOTES §14/§15, F-progress, freezes confirmed
- README: a v3.0 'venues & gigs, THE DISTRICT' section — what shipped, the flags table, the release tour
- LANE_F_NOTES §14 (R14: F never ran, brief carried) + §15 (the R15 release-close runbook, numbers, gotcha ledger)
- F-progress: R15 release-close summary at the top
- confirmed all five freezes committed (A a3911a4/35da83c, B eee60e0/a0b5784, C 62e38c5/2446ae3, D 9a65f51/66aec0f, E 55f6698)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6a35b29352
commit
0490bdd07e
@ -4,6 +4,26 @@
|
||||
|
||||
---
|
||||
|
||||
## Round 15 (v3.0 RELEASE CLOSE, `?gigs=1`) — F ran last; the release is closed
|
||||
|
||||
R14 landed A–E's hardening but **F never ran**, so v3.0 stayed untagged. R15 = the close. All deps were in
|
||||
before F ran (A's poster flip + new golden `0x4f4a549d`, D's amp + R14 continuity seam, B/C verifies). The
|
||||
six-item brief, each committed atomically:
|
||||
|
||||
- **Continuity wiring + smoke** (`687d23f`) — the ped you followed is in the crowd: `crew.spawn({roster})` +
|
||||
the queue `onAdmit → recordVenueEntry` relay; `smoke_continuity` asserts the seam on identities + settled tris.
|
||||
- **Alias deletion** (`146b5f3`) — the R12 scalar alias retired; every read keyed by `venueShopId`; tools + spec migrated.
|
||||
- **Full-week soak** (`edc0c47`, `tools/qa/week_soak.py`) — 7 nights × all venues: cover/roster per night, leak-free (plateau), 28 cycles.
|
||||
- **Money-shot tour** (`6a35b29`, `tools/qa/tour_shots.py`) — `docs/shots/release_v3/` + contact.html; hero `queue_night` shows A's now-visible poster; settled measurements.
|
||||
- **Docs** — README v3 section, LANE_F_NOTES §14/§15, this note, five freezes confirmed.
|
||||
- **Acceptance + tag** — `qa.sh --strict` 6/6 + continuity smoke + week soak green → tag **`v3.0`**.
|
||||
|
||||
**Ledger #5 vindicated C:** the gig interior settles to **~182k tris** after the 5 instrument GLBs load (not
|
||||
the ~34k measured pre-load); the interior gate is **draws** (≤56), so no budget violation — the tour + smoke
|
||||
now measure settled. Full runbook: [`LANE_F_NOTES.md §15`](docs/LANES/LANE_F_NOTES.md).
|
||||
|
||||
---
|
||||
|
||||
## Round 13 (v3.0-beta — THE DISTRICT, `?gigs=1`) — WIRED + VERIFIED + TAGGED
|
||||
|
||||
A–E landed, then D (4-piece + instruments + queue + RY fix). F wired the district together and it fires.
|
||||
|
||||
28
README.md
28
README.md
@ -47,3 +47,31 @@ standalone test pages); F integrates after they land.
|
||||
Seeded everything, `Math.random` banned in gen code · the game must run with zero assets ·
|
||||
instancing from day one · canvas text, no font files · characters = shared base rigs + one
|
||||
clip bank, canonical sources live outside this repo · 🟢 web-ok licensing only.
|
||||
|
||||
## v3.0 — venues & gigs, THE DISTRICT (`?gigs=1`)
|
||||
|
||||
The Friday-night layer, shipped behind a flag so the default boot stays byte-identical to v2 (the
|
||||
synthetic golden `0x3fa36874` never moves). Turn it on and each town seeds **2–4 venues** — a pub, a
|
||||
band room, an RSL — with a **full seeded week of gigs** (`plan.gigs`), town-wide **posters**, and a
|
||||
Friday night that reads: a **4-piece band** (front-line trio + drummer) with real instruments on the
|
||||
stage, a mixed standing/dancing **crowd**, an outdoor **queue** at the door, a **cover charge** per
|
||||
venue (paid & free nights), muffled **gig spill** through the wall + **walla and applause** inside,
|
||||
**streetlamp pools** and lit frontages for the night walk, and **identity continuity** — the ped you
|
||||
followed in off the street turns up in the crowd. Deterministic from the seed; asset-free
|
||||
(`?noassets=1`) it all still happens with placeholders and zero fetches.
|
||||
|
||||
**Flags** (all default-off unless noted; compose freely):
|
||||
|
||||
| flag | what |
|
||||
|---|---|
|
||||
| `?seed=N` | town seed (default `20261990`) |
|
||||
| `?gigs=1` | the v3.0 gig layer — venues, week schedule, band/crowd/queue, cover, posters, night pass |
|
||||
| `?weather=rain` · `?tram=1` · `?winmap=1` | wet strip · tram loop · parallax interior-window shader |
|
||||
| `?roster=stream` | chunk-streamed citizen density (**on by default**) · `?pop=N` tunes it |
|
||||
| `?dig=1` · `?stock=real` | crate-riffle on record bins · real GODVERSE sleeves in the stock |
|
||||
| `?noassets=1` | asset-free — zero network, 100% placeholders, still legible |
|
||||
| `?plansrc=osm` · `?mute=1` · `?dbg=1` | OSM plan source · silence · the `window.DBG` capture/soak harness |
|
||||
|
||||
**Release tour:** [`docs/shots/release_v3/contact.html`](docs/shots/release_v3/) — the six money shots
|
||||
(`queue_night` is the hero) with settled measurements. **QA:** `tools/qa.sh --strict` (6 gates) +
|
||||
`tools/qa/week_soak.py` (the full-week soak) + the continuity/gig smokes in `tools/flags_check.py`.
|
||||
|
||||
@ -523,3 +523,74 @@ line in `smoke_gigs §2b`.)
|
||||
(`queueInfo`) so the queue smoke goes live, and (b) the band polish (E's instrument GLBs in hand, drummer
|
||||
facing/RY_FLIP) — the band already lands at 4, human-sized, 0 errors, so this is polish not a blocker. Once D
|
||||
commits: re-run the gates, flip the queue assert, capture the district money shots, tag **v3.0-beta**.
|
||||
|
||||
*(R13 epilogue: D landed mid-session; F wired the queue (D shipped `VenueQueue`, left the street-side
|
||||
lifecycle to F), the queue smoke went live, both money shots shipped, and **`v3.0-beta`** was tagged +
|
||||
pushed. The `queueInfo` proposal above was superseded by D's `VenueQueue.count()` + F's shell `queueCountOf`.)*
|
||||
|
||||
---
|
||||
|
||||
## 14. Round 14 — F never ran; the brief carried in full to R15.
|
||||
|
||||
R14 was the "v3.0 release round." A–E landed excellent hardening (D's identity-continuity seam, B's
|
||||
alias-reader retirement + `queue_night` hero + 19-bookmark tour audit, A's 400-seed invariant sweep + §v3
|
||||
freeze, C's adversarial venue audit, E's provenance freeze) **but Lane F never ran** — so v3.0 was not
|
||||
tagged and F's whole release brief (continuity wiring, alias deletion, week soak, the tour, the tag) was
|
||||
untouched. Fable carried it verbatim into R15. Nothing F-authored landed in R14.
|
||||
|
||||
## 15. Round 15 — THE v3.0 RELEASE CLOSE (`?gigs=1`). F ran last; the six-item brief, all green.
|
||||
|
||||
A first (poster flip + golden re-pin) → B/C verify → D one-line amp move → **F closes**. All deps were in
|
||||
before F ran (verified against origin). The six F items (ROUND15 §Lane F), each committed atomically by
|
||||
pathspec:
|
||||
|
||||
1. **Continuity wiring + smoke** (ledger #3) — D published the seam in R14; F wired its three touches:
|
||||
`crew.spawn(…, { roster: rosterOf(shop.id) })` in `interior_mode.js` (front crowd slots become tonight's
|
||||
roster), `rosterOf:(id)=>citizens.tonightRoster(id)` + `onAdmit:(e)=>citizens.recordVenueEntry(id,e)` on
|
||||
the queue in the shell (the clear is automatic on `setGig(id,false)`). New `smoke_continuity` asserts the
|
||||
seam on **identities** (crowd ⊇ roster ∩ cap · every `member.pedIndex ∈ tonightRoster` · `crewInfo.fromRoster`),
|
||||
the empty-roster path injects nobody (shell side of D's byte-identical law), and **settled tris**
|
||||
(ledger #5). Commit `687d23f`.
|
||||
2. **Alias deletion** (ledger #2) — the R12 single-venue scalar alias is **gone**; every read is keyed by
|
||||
`venueShopId`. Deleted the alias block + `primaryId`/`P` in `gig_state.js`; migrated `flags_check.py` +
|
||||
`gig_shot.py` (`.venueShopId→venueShopIds[0]` · `.state→stateOf(id)` · `.cover→coverOf(id)` ·
|
||||
`.bandName→bandNameOf(id)`); deleted the two CITY_SPEC §v3 alias sentences + added the omitted
|
||||
`nightOf(id)`. B's R14 sweep left the cross-lane readers clean; only F's tools remained. One atomic
|
||||
commit `146b5f3`.
|
||||
3. **Full-week soak** (`tools/qa/week_soak.py`, opt-in `qa.sh --soak`, non-strict) — 7 nights × every playing
|
||||
venue in one context: latch state per `plan.gigs` (dark venues quiet), cover **stamped per venue per
|
||||
night** (debited once, re-entry free, due again next night), roster **clears per night** (no
|
||||
accumulation), and geo/tex return to a **warmed baseline** across ≥20 cycles — a leak is unbounded
|
||||
per-cycle growth; warm-up cache residue **plateaus** (the memTrail proves it). Commit `edc0c47`.
|
||||
4. **The money-shot tour** (`tools/qa/tour_shots.py`, ledger #4/#5) — one deterministic run → `docs/shots/
|
||||
release_v3/` + `contact.html`: `venue_night`, `district_posters`, **`queue_night` (John's hero — A's
|
||||
flipped frontage poster now reads from the street)**, `gig_interior` (4-piece + real instruments + a
|
||||
roster crowd), `rain_verandah`, `tram_stop`. **Settled discipline**: measured after the async instrument
|
||||
GLBs / posters / chunks land (shoot-twice), clean per-group loads; queue driven **live** (explicit admits,
|
||||
not throttled rAF auto-drain). Commit `6a35b29`.
|
||||
5. **Docs assembly** — README v3 section (what shipped · flags table · the tour), this §14/§15 runbook,
|
||||
F-progress current, the five freezes confirmed committed (A `a3911a4`/`35da83c`, B `eee60e0`/`a0b5784`,
|
||||
C `62e38c5`/`2446ae3`, D `9a65f51`/`66aec0f`, E `55f6698`).
|
||||
6. **Acceptance + tag** — `qa.sh --strict` 6/6 + `smoke_continuity` + `week_soak.py` green → tag **`v3.0`**.
|
||||
|
||||
### Numbers (measured, seed 20261990 → "Boolarra Heads", 3 venues)
|
||||
| thing | number |
|
||||
|---|---|
|
||||
| district | 3 venues — 2 playing (The Exchange Hotel `gig-pubrock` + an RSL `gig-covers`), 1 dark |
|
||||
| gig interior, settled | 4-piece · crowd 8 (2 from the roster) · **56 draws** · **35k→182k tris** (pre-load→settled; gate is draws ≤350) |
|
||||
| street @ venue block, night | `queue_night` 121 draws / 62k tris · `district_posters` 186 / 134k (busiest) — all ≤300/200k |
|
||||
| week soak | 28 enter/exit cycles · $60 covers · geo/tex flat across the back half (115/86→115/84) · 0 errors |
|
||||
| continuity seam | 2 queue admits carried into the crowd · empty roster 0-injected · `member.pedIndex ∈ tonightRoster` |
|
||||
| **settled-tris honesty** (ledger #5) | C was right: the interior settles to **~182k** tris after the 5 instrument GLBs load, not the ~34k measured pre-load |
|
||||
|
||||
### The gotcha ledger closed this round
|
||||
- **Alias retirement is a three-party move**: B swept cross-lane readers (R14), A left the spec sentences
|
||||
for F (avoiding a doc-ahead-of-code race), F deleted the code + migrated its own tools + the spec in ONE
|
||||
commit. No half-renamed state ever existed.
|
||||
- **Settled measurement** (ledger #5): a headless smoke that reads `renderer.info` right after `enterShop`
|
||||
sees the room BEFORE its async instrument GLBs decode — ~34k, not the ~182k settled truth. The tour + the
|
||||
continuity smoke both wait/shoot-twice now; the interior gate stays on **draws** (which is load-order
|
||||
stable), so there was never a budget violation, only a dishonest number.
|
||||
- **Drive live-spawned things explicitly**: automation throttles rAF, so the queue's seeded auto-drain may
|
||||
not fire on schedule — `smoke_continuity`/`week_soak`/`tour_shots` all call `admitOne()` / step the loop
|
||||
explicitly rather than trust the timer.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user