From 7b7227af73d1b62d5161ad718a5f8ce70de59cf6 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Sat, 18 Jul 2026 14:27:44 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20F=20R30=20close-out:=20=C2=A730.5=20resu?= =?UTF-8?q?lts=20(7=20verify=20legs,=20qa=206/6,=20the=20two=20harness=20b?= =?UTF-8?q?ugs=20recorded)=20+=20F-progress=20=E2=80=94=20ledger=20#5=20ga?= =?UTF-8?q?tes=20+=20sell=20routing=20held=20for=20the=20later=20F=20sessi?= =?UTF-8?q?on=20per=20the=20brief?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- F-progress.md | 40 ++++++++++++++++++++++++++++++++++++++ docs/LANES/LANE_F_NOTES.md | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/F-progress.md b/F-progress.md index 8c6399f..583a6d0 100644 --- a/F-progress.md +++ b/F-progress.md @@ -4,6 +4,46 @@ --- +## Round 30 (v7.0-alpha — THE SAVE AND THE CRATE) — F: the contract first, then the save core + tomorrow + +**The contract shipped before a line of implementation** (`53fcd3c`): `window.PROCITY.game = +{ day, cash, collection[], townKey, save(), load(), sleep(), export(), import(json), wallet, +recordFind(), removeFind() }` + the `procity-save/1` schema + the rotation law, published in +LANE_F_NOTES §30 — and it worked exactly as the order intended: **B picked up §30.4 within the +session** (venue.js "tonight" already reads `gigs.weekNight`; hud.js collection/SLEEP surface in +flight), and C's already-published §9 asks (`type` stamped at buy, `title`/`artist`, removal via the +game API, `wallet.sell` mirrored) are honoured in the entry shape. + +**Then the layer** (`207bcff`): `web/js/world/save.js` (F-owned, new) — versioned localStorage save, +THE DELTA LAW BY SHAPE (payload keys are exactly `[cash, collection, day, savedAt, schema, town]` — +no world field can even be expressed); corrupted/foreign → **loud reject, raw stashed, fresh start, +town boots**; save on sleep + beforeunload; export/import for moving machines. The wallet is a +game-backed facade of C's exact v0 interface, so every proven seam (dig onBuy, shelf buy, cover, +C's onSell) is unchanged — cash just became authoritative from the save. Buy seams record finds; +`?classic=1`/`?game=0` never construct the layer — **ZERO Storage calls, instrumented, not trusted**. + +**SLEEP=TOMORROW:** `sleep()` → day+1 → gig `weekNight` re-keys the EXISTING week schedule → wake at +DAWN → save. Stock rotation is a runtime day salt on the EXISTING `stk-*` streams (2 marked seam +lines in C's interiors/layout) + the dig's `binSeed` — **plan generation never sees `day`** (A's #6 +boundary). **Day 1 IS the pre-v7 town** (measured: `?game=0` stock fp == fresh-game day-1 fp), and +**REAL-sourced crates never rotate** (Monster Robot fp identical across sleeps; the mint crate rotates). + +**Two amendments filed loudly, with measurement, not slipped in:** gig night = **(day − 1) % 7**, not +the brief's literal `day % 7` (day starts at 1 — the literal form flips a fresh boot's gigs off night 0, +breaking the R13 cover/band gates before the player ever sleeps); and sleep saves AFTER incrementing +(disk always carries the morning you woke into). Fable ratifies or overrules at review. + +**Numbers:** 7 verify legs green in fresh no-store contexts — $12 dig buy == pricePaid recorded · sell +halves credit/remove correctly · parody fp `3396372961 → 1818111125` across a sleep, byte-identical +same-day AND across reboots · corrupt blob = 1 loud reject + stash + clean boot · `qa.sh --strict` +**6 passed · 0 failed · 0 warn** with the game layer default-ON. Two F-harness bugs caught and fixed +in the run (the post-sleep CLOSED door; a transform-based fingerprint that was vacuous over batched +parody stock — hash the VERTEX data). Full record: `LANE_F_NOTES` §30. + +**Held for the later F session (per the brief):** ledger #5 gates + the sell-card E-key routing. + +--- + ## Round 26 (v5.0-beta — EVERY CRATE DIFFERENT) — F: the manifest consumed, the tolerance retired **Every crate is different, and F measured it rather than taking G's word.** Not by entering one lucky diff --git a/docs/LANES/LANE_F_NOTES.md b/docs/LANES/LANE_F_NOTES.md index 18186b3..2285093 100644 --- a/docs/LANES/LANE_F_NOTES.md +++ b/docs/LANES/LANE_F_NOTES.md @@ -1573,3 +1573,43 @@ fewer window.) · else shelf-buy) is F's and lands with the sell wiring pass, not this one. - **→ A (ledger #6):** the day salt rides `buildInterior` opts / `binSeed` only — grep-provable that `generatePlan*`/plan_osm never receive `day`. + +### §30.5 RESULTS — implemented, measured, committed (`53fcd3c` contract · `207bcff` implementation) + +All measured in FRESH browser contexts on a port-isolated no-store server (:8791 — the module-cache lesson), +seed 20261990, plus `redhill_godverse?stock=real` for the crate legs. Seven legs, all green: + +| leg | measured | +|---|---| +| the contract | default boot: `game` live — day 1 · cash **$191 == wallet.cash()** · collection 0 · townKey `synthetic/default@20261990` · weekNight 0 · full API incl. `wallet.sell` · 0 errors | +| classic purity | `?classic=1` AND `?game=0`: `game === null`, **ZERO Storage-prototype calls** (instrumented before any page script, not trusted) · wallet $191 (C's v0) · 0 errors | +| buy → collection | dig pull: **$12 debited**, entry `{type:'record', slotId:'20_-317#0', pricePaid:12, dayFound:1, title:'Sunburnt'}` — debit == pricePaid, shape == §30.1 | +| sell seam halves | `wallet.sell` credited $3 (179→182) · `removeFind` true then **false on re-remove** · collection 0 | +| sleep | `sleep()` → day 2 · **woke at DAWN (seg 0)** · weekNight 1 · localStorage payload keys exactly `[cash, collection, day, savedAt, schema, town]` — the delta law by shape, no world field | +| rotation | parody shop vertex-data fp: day 1 `3396372961` → day 2 `1818111125` (**rotates**) · re-entry same day **byte-identical** · after reload **still identical** (cross-boot determinism) · `?game=0` fp **== day-1 fp** (the day-1 convention, measured) | +| persistence | reload: day 2 · cash · collection 1 · weekNight 1 all restored (beforeunload save) · `export()` valid · `import()` of garbage + foreign schema **rejected loudly, state untouched**; real payload adopted + weekNight re-keyed | +| corrupt save | pre-seeded bad blob → **1 loud reject**, raw stashed at `procity-save.rejected`, fresh start ($191, day 1), **town boots, 0 other errors** | +| the crates | **REAL** (Monster Robot Party g:3962749): base `stock_godverse/3962749/`, fp **identical** day 1 → day 2 — real never rotates · **MINT** (Presents of Mind g:767): fp **rotates** — mint does | + +`qa.sh --strict` **6 passed · 0 failed · 0 warn** over the landed layer — classic regression, default-boot +gate, buy-v0, cover (paid + free), the R26 crate gate, R27 live gate, glance, no-giants: all green with the +game layer default-ON. + +**Two of F's own harness bugs caught by the run (recorded per house habit):** +1. **The post-sleep CLOSED door.** First fp read after `sleep()` failed to enter the shop — because the + town woke at DAWN and the shop was **correctly closed** (the hours law doing its job). The harness now + sets midday before entering. A verify that forgets the world has rules will read the rules as bugs. +2. **The fingerprint was vacuous for parody rooms.** It hashed mesh transforms + first UVs — but + `batchRoom` merges parody stock into merged geometry at IDENTITY transform, so it hashed constants and + reported "no rotation" over stock that rotates. (Mint showed through only because atlas UV rects land + in the first 8 floats.) Fixed: hash the **vertex data** (position + uv arrays), where the day-salted + picks/jitters actually live. The vacuous-measurement species, caught in F's own tool, same round it + re-read the law to everyone else. + +**Live cross-lane note (seen mid-session, not F's commit):** B picked up §30.4 within the hour — +`venue.js` "tonight" is already a live getter off `PROCITY.gigs.weekNight`, and `hud.js` has the +collection/SLEEP surface in flight. The contract-first order did exactly what it exists to do. + +**Held / next session (per the brief):** ledger #5 gates (save/load determinism scripted session · +no-pump v0 · classic-purity localStorage gate · rotation determinism) — a LATER F session. The sell-card +E-key routing (dig → sell → shelf priority, §9.4) rides the sell wiring pass alongside it.