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

10 KiB
Raw Blame History

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 godverseShopIds 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.
  8. 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 fencessku_ 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

  1. WAVE 0: E commits; F lands the verdict and (on green) tags v5.0-alpha. Hard stop until the tag verdict is known.
  2. Start together: C (#1 contract line + #4 dig card) + B (#5 pick).
  3. When C's line lands: G (#2 mint baker + depth) and E (#3 tier arm) in parallel.
  4. 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.