PROCITY/docs/LANES/ROUND27_INSTRUCTIONS.md

6.2 KiB

PROCITY — Round 27 lane instructions (from Fable, integrator)

Date: 2026-07-17 · R26 wave-4 verdict: C and E landed the mint-id fence, and both wrote the same honest headline — "the rule was the stale thing, not E's check." C owned its stale §7.2a squarely (second time a C contract line met a case written after it and another lane took the red); E proved the fix is stronger than the rule it replaces (the easy green was dropping the prefix check; instead the prefix is now a sourcing-scoped namespace fence). The epoch's four holds now all trace to the same species — a rule meeting a case written before the case existed — and all four were caught before they could lie. The system is working exactly as designed.

Open: F's wave-4 step 3. The beta tag is one re-run away. Round 27 opens there, then closes the epoch: v5.0 — THE LIVE CRATE.

WAVE 0 — F tags the beta

qa.sh --strict --matrix (the 6/1/0 should flip to 7/0/0 — E's fence is in, C's line is law), tag v5.0-beta, push. Nothing below starts until this lands.

Then: v5.0 — THE LIVE CRATE (tier 2, per the ratified G3)

The charter's last rung, under John's binding A-then-B ruling: read-live, sell-sandboxed/reserve and /buy stay ABSENT (not stubbed; a sandbox a config typo can flip isn't a sandbox). The server enriches, never gates: every boot path, gate, and tag works with the server dead. Scope honesty up front: if tier 2 proves bigger than one round, F holds and we split — four holds have proven the pattern; nobody forces an epoch close.

The ledger

  1. The read endpoints (G, on ultra — server-side). G3 §4 as ratified: GET /godverse/v1/shop/<godverse_id>/stock (items + gone:[sku] + etag) and /crates (the rotation menu), read-only over the live POS, serving metadata only (covers stay static tier-1 files — the API never serves the atlas). Monster Robot is the only real shop; that's the point — one shop, live, true. Deterministic-where-possible discipline: same POS state → same response (etag'd).
  2. The tier-2 reader (F, with C's seam). Async enrichment at room build: on entering a keyed real-sourced shop, the shell fires the stock read (timeout-guarded, etag-cached) and the crate applies the gone list + live prices when the response lands — the dig NEVER blocks on the network (charter risk #1). C: if the crate needs a post-build content-adjust hook, that's your seam to publish (half-day rule); if the existing adapter re-read covers it, say so and F wires direct. Server dead / unreachable / slow → tier 1 exactly, silently.
  3. The kill-the-server gate (F — the epoch's defining gate). Three arms, all falsifiable: boot server-up → live fields present (assert etag/gone consumed); kill the server mid-session → next read degrades to tier 1 with ZERO console errors and no stutter (frame-time measured across the failure); boot server-down → pure tier 1, byte-identical to the beta behaviour. This is charter law #1 made a gate. It runs as its own smoke class — server lifecycle is controlled by the gate itself, so the assertion is deterministic even though live stock isn't.
  4. Sold-means-gone, sandboxed (F + G). The server's gone list removes items from the live crate read (a record sold IN THE REAL SHOP disappears from the game crate — that's the GODVERSE magic, direction: real→game). In-game buys stay session-local per Option A. Assert both directions of the sandbox: a real gone item never renders; a game buy never appears in any server state (there's no verb to carry it — prove the absence).
  5. The v5 tour + money shot (F). docs/shots/release_v5/: the crate walk — Musgrave Road → Monster Robot Party's frontage (B's mark visible) → the riffle with real covers → the price sticker → the buy. Plus one mint-shop frame (the honest caption: plausible, not real) and the ?classic=1 control. The R21 cluster-pose primitive poses the street frames.
  6. Docs freeze (all lanes, light). A: CITY_SPEC v5 section (the tier ladder, sourcing, the id-space fences, the manifest) + charter risk-list retired-or-carried, v4-style. E: provenance v5-final (mint atlases + the licence line's story). C: LANE_C_PUB v5-frozen marker. G: the G3 doc updated design→as-built. B/D: notes current; nothing else owed.
  7. The tag + the retro. F: qa.sh --strict --matrix + the kill-the-server gate green → tag v5.0 → push. Then Fable writes the epoch retro (not a lane deliverable), and the v6 conversation opens with John (the editor and multiplayer are still chartered; the GODVERSE has more rungs — Option B's reservation upgrade is already chartered as v5.x).

Laws

Charter v5 laws, all now with case law behind them · the vacuous-gate law · the id-namespace fences (sku_/mint_, plan-id/godverse-id) · no golden moves expected this round (tier 2 touches no plan, no cache, no atlas bytes) · the offline law is THE gate this round, not a footnote.

THE EXACT RUN ORDER

  1. WAVE 0: F re-runs and tags v5.0-beta. Hard stop until it lands.
  2. Start together: G (#1 endpoints, on ultra) + C (#2 seam ruling: publish the hook or bless the direct wire) + A/E (#6 docs prep — can run the whole round).
  3. When G's endpoints are live on the tailnet and C's seam is ruled: F (#2 reader).
  4. F (#3 kill-the-server gate + #4 sandbox proofs + #5 tour), then #7: tag v5.0, push.
  5. Fable: the epoch retro.

Waves: [F-beta-tag] → [G, C, A+E] → [F reader] → [F gate/tour/tag] → [retro]. B/D on-call.

Standing

  • John — one infra FYI, nothing to decide: the kill-the-server gate needs the thriftgod server reachable from m3 over the tailnet AND stop/start control from the gate (G owns the mechanism — a lifecycle endpoint or an ssh'd systemd unit, G's call; it's in-house infra under existing access). Your A-then-B ruling continues to hold the write verbs absent.
  • v5.x / v6 preview (the retro decides, do not start): Option B's reservation upgrade (behind your hold budget) · more POS shops if monsterrobot ever gets siblings · the editor · multiplayer presence · the v4.x/v5.x polish tails.