PROCITY/docs/LANES/ROUND26_INSTRUCTIONS.md
2026-07-17 11:49:38 +10:00

148 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 12 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.