148 lines
10 KiB
Markdown
148 lines
10 KiB
Markdown
# PROCITY — Round 26 lane instructions (from Fable, integrator)
|
||
|
||
Date: 2026-07-17 · **R25 verdict: one commit and one harness verdict from done.** A cleared all
|
||
8 reds with the round's best self-accounting ("healthy towns my gate called broken — it fired
|
||
54/72 on a good town"; keyed asserts now per-layer, the six goldens pinned, selfcheck
|
||
**156,211/156,211**). C's contract line and G's sku re-emit landed (index-only, as designed —
|
||
id-equality gates are discriminating forever). F's permanent crate smoke earned its keep on day
|
||
one by catching **two of F's own bugs** — the sharper one being the round's theme biting its
|
||
author: **plan ids and godverse ids share a numeric space**, so `enterShop(31)` silently entered
|
||
Wholefood Cafe (plan id 31) instead of Silky Oak Furnature (godverse id 31), and the soft-fall
|
||
assertion passed vacuously on the wrong shop. F fixed the selector to disambiguate and made the
|
||
smoke prove its target is keyed. *Recorded as a standing note: the two id spaces are disjoint
|
||
namespaces — no code or gate may compare a bare number across them.*
|
||
|
||
**Open (why there is still no tag):** E's ledger #2 — the licence-line fix, and it's good work
|
||
(runtime-authority glob, loud SKIP, licence evidence as a required line) — sits **uncommitted**
|
||
in the tree; and F is mid-harness on its re-run. Round 26 opens by closing both, then the beta.
|
||
|
||
## WAVE 0 — close the alpha (before anything else starts)
|
||
|
||
*Status update (Fable): **WAVE 0 IS COMPLETE.** F's half DONE — verdict GREEN, committed
|
||
(`2994200`), tag held a third time, correctly (a tag whose tree lacks the code that produced
|
||
its green would be a lie). E's half DONE — the owner committed its own rebuild (`9b1df5c`) with
|
||
the true root cause: the `or` fallback WAS the bug (permissive check, strict print — one path
|
||
couldn't feel the other break). F adversarially verified the work pre-commit (broke it both
|
||
ways, watched it bite); Fable re-ran the validator and pushed. **F: step 2 is GO — confirm and
|
||
tag `v5.0-alpha` on resume, then the beta waves below.***
|
||
|
||
1. **E: commit your own work.** `pipeline/validate_atlas.py` carries your R25 rebuild, unstaged.
|
||
If your session died before the commit: a fresh Lane E session verifies the diff against
|
||
ledger #2 (it should recognize its own writing), runs the validator against G's two sku
|
||
re-emitted atlases (the licence line must PRINT — that's the point), and commits E-pathspec.
|
||
Nobody else touches this file — it's yours.
|
||
2. **F: tag on E's commit.** Your verdict is in and green; the moment E's commit lands, run the
|
||
short confirm (`qa.sh --strict`), tag **`v5.0-alpha`**, push, README teaser with it.
|
||
|
||
## Then: v5.0-beta — EVERY CRATE DIFFERENT (the honest version)
|
||
|
||
The R25 preview said "every hero shop stocked." The honest constraint: **only Monster Robot
|
||
Party has a POS** — the census's other shops are real businesses with unknowable inventory.
|
||
The beta makes every keyed crate *distinct and plausible* without pretending to data we don't
|
||
hold, on three rungs:
|
||
|
||
- **Real depth where the data is real:** Monster Robot's other crates (the G3 §4 crate-rotation
|
||
menu, baked statically).
|
||
- **Minted plausibility where it isn't:** the G3 doc's own note, promoted — seeded `mint()`
|
||
(`random.Random(shop_id)`, ordered sample; deterministic) bakes per-shop atlases for keyed
|
||
shops without POS inventory, **provenance-marked `tier: "mint"`** so no gate, doc, or human
|
||
ever mistakes plausible for real.
|
||
- **Parody below that:** the texture layer and everything unkeyed stays exactly as it is.
|
||
|
||
## The ledger
|
||
|
||
1. **The mint contract line (C, first — half-day rule).** §7 grows the `tier` field:
|
||
`"real"` (POS snapshot) vs `"mint"` (seeded sample) — required in provenance, and the dig's
|
||
price card may show it subtly or not at all (your call, it's a vibe question), but gates
|
||
must see it.
|
||
2. **The mint baker + Monster Robot depth (G).** Seeded mint atlases for the keyed non-POS
|
||
hero shops in both godverse towns (deterministic: same shop_id → byte-identical bake);
|
||
Monster Robot's full crate menu baked as the real tier. Licence zone per atlas as ever —
|
||
mint items sample real dealgod listings, so the photo provenance is the same in-house-green
|
||
zone, flagged the same way.
|
||
3. **The validator grows the tier arm (E).** `tier` required on every atlas; `mint` atlases
|
||
must NOT carry `pos_snapshot` fields and vice versa (the separation is the honesty); the
|
||
licence line prints for both. Vacuous-gate law applies: an atlas with no tier FAILS.
|
||
4. **The dig UX for real items (C).** The price card gets the real fields the atlas index
|
||
already carries (artist / title / price / condition) — the card should read like a record
|
||
shop price sticker, not a database row. Budget ceilings unchanged.
|
||
5. **B returns — dig-adjacent street polish (your pick, at last).** First pick of the polish
|
||
list as promised, weighted toward the beta: shopfront signage/window treatment for stocked
|
||
godverse shops (a crate-diggers' shop should read as one from the footpath), or the awning
|
||
ripple, or the tram-stop tri diet — your choice, one item, measured as ever.
|
||
6. **The atlas manifest (F's R24 finding #4, made structural — C line, G emits, F consumes,
|
||
E validates).** Fail-soft-by-404 collides with the zero-console-errors law: the runtime
|
||
probes per-shop atlases blind and eats 404 noise (8 in F's gate run — tolerated by
|
||
attribution, which is a workaround, not a design). Fix at the root: G emits
|
||
`web/assets/stock_godverse/index.json` — the manifest of which `godverseShopId`s carry
|
||
atlases (types + tier per entry; mint atlases included). C: the §7 contract line. F: the
|
||
wire consults the manifest before fetching — no entry, no probe, zero 404s, the
|
||
zero-console-errors law holds without exceptions. E: manifest↔files consistency in the
|
||
validator (an atlas on disk absent from the manifest FAILS, and vice versa — vacuous-gate
|
||
law shape).
|
||
7. **The beta gate (F).** *(Status, Fable: waves 1–2 are COMPLETE — C/B/E/G all landed. NOTE:
|
||
C RULED the brief's `tier` field wrong and is right — `tier` is the charter's ladder rung and
|
||
a mint atlas is also rung 1; the field is **`sourcing: "real"|"mint"`**, and E built to C's
|
||
contract not my brief ("the contract's author is the authority for the contract's shape").
|
||
Your gate asserts `sourcing`, not `tier`. G measured 15/15 keyed crates distinct, 0 shared
|
||
titles, manifest derived from disk; B's street mark reads from the manifest, not the key.)*
|
||
Per-shop distinctness (independently verify G's 15/15 — assert on title sets, the R24
|
||
pattern), `sourcing` provenance visible in gate output (a mint crate never reports as real),
|
||
zero console errors WITHOUT 404-attribution exceptions (the manifest makes this honest —
|
||
including the 13 keyed unfetchable-type shops that now stay silent), the ladder re-proof,
|
||
`qa.sh --strict --matrix`, tag **`v5.0-beta`**, push.
|
||
7. **A / D — on-call.** A: nothing pending (your R25 close was clean). D: nothing — unless F's
|
||
distinctness gate wants a crowd check at a stocked shop (patronage at Monster Robot on a
|
||
Saturday feels like a D flourish, not a requirement).
|
||
|
||
## WAVE 4 — the mint-id ruling (added post-hold; the beta's last inch)
|
||
|
||
*F held the tag a FOURTH time (`528829e`): E's `SLOT_ID_PREFIX = "sku_"` is sourcing-blind, so
|
||
all 14 mint crates fail a rule written before mint existed — the same shape as R24's sweep
|
||
demanding a cafe carry a godverseShopId. The rule's INTENT holds (F measured: mint ids are
|
||
`mint_<dealgod listing id>`, non-positional, seeded, 0 reused across all 15 crates); only the
|
||
literal prefix fails. And G's refusal to go green the easy way is RATIFIED — a POS sku and a
|
||
dealgod listing id are different id spaces, and filing one under `sku_` would recreate the R24
|
||
collision inside the economy layer, where tier-2's sold-means-gone looks up POS skus. The
|
||
prefixes ARE the namespace fence.*
|
||
|
||
1. **C — one contract line (§7):** slot-id form is sourcing-scoped: real → `sku_<POS id>`,
|
||
mint → `mint_<dealgod listing id>`; both non-positional, both unique across packs; the
|
||
prefix encodes the id-space so the two can never collide — bless that as the design, not an
|
||
accident.
|
||
2. **E — the one-line landing:** the slot-id check reads `sourcing` (you already read it at
|
||
:178) and asserts the matching prefix per C's line. Real crate: `sku_`. Mint crate: `mint_`.
|
||
Anything else, or a cross-wearing crate: FAIL.
|
||
3. **F — re-run atlas-QA, then the tag:** `qa.sh --strict --matrix` (should flip 6/1/0 →
|
||
7/0/0), tag **`v5.0-beta`**, push. Your four holds are the epoch's spine — this one cost one
|
||
line and would have cost a mis-sold record.
|
||
|
||
## Laws
|
||
|
||
Charter v5 + vacuous-gate + the id-namespace note above (now with its economy-layer corollary:
|
||
**id prefixes are namespace fences** — `sku_` is the POS space, `mint_` is the dealgod-listing
|
||
space, and no gate or lookup may treat them as one). Golden discipline: no town-cache changes
|
||
this round → no golden moves (mint atlases are `stock_godverse/**` files, outside every
|
||
golden). No server code — tier 2 stays design until the beta ships and the v5.0 round charters
|
||
it against the ratified G3.
|
||
|
||
## THE EXACT RUN ORDER
|
||
|
||
0. **WAVE 0: E commits; F lands the verdict and (on green) tags `v5.0-alpha`.** Hard stop until
|
||
the tag verdict is known.
|
||
1. **Start together: C (#1 contract line + #4 dig card) + B (#5 pick).**
|
||
2. **When C's line lands: G (#2 mint baker + depth) and E (#3 tier arm) in parallel.**
|
||
3. **When G + E are in: F (#6)** — distinctness gate, ladder, tag **`v5.0-beta`**, push.
|
||
|
||
Waves: **[E-commit, F-verdict] → [C, B] → [G, E] → [F]**. A/D on-call.
|
||
|
||
## Standing
|
||
|
||
- **John — nothing needs you.** The A-then-B ruling is binding and recorded; the beta stays
|
||
static-tier (no server); mint is the G3 doc's own blessed note, promoted with provenance
|
||
honesty.
|
||
- **v5.0 preview (do not start):** tier-2 read-live per the ratified G3 (Option A semantics —
|
||
read-live, sell-sandboxed, `/reserve`+`/buy` stay absent) · the kill-the-server-mid-session
|
||
gate · the v5 tour (the crate walk as a money shot) · docs freeze · the `v5.0` tag · the
|
||
epoch retro.
|