PROCITY/docs/LANES/ROUND24_INSTRUCTIONS.md

7.7 KiB
Raw Permalink Blame History

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

Date: 2026-07-17 · R23 verdict: THE HOLD WAS RIGHT. F held the v5.0-alpha tag on a round where every suite was green — qa.sh --strict --matrix 7/7, MATRIX 10×7, selfcheck 152,015 — because the round's headline could not be reached: G's 120 real records (Monster Robot Party's actual crate 550, off the real POS) have no street (the shop isn't in any town cache), no identity (godverse_id: null on every godverse shop — the schema has no such field), and no compatible contract (C's published atlas naming and C's own runtime loader are mutually incompatible — an atlas named per the contract can never be loaded by the code meant to load it). G built runtime-compatible; E built contract-compatible. Nobody was wrong; the contract was. And two gates would have passed without touching their subject — E's validator returns 0 on an empty glob, and #7a-as-written goes green on the generic v2 pack's real covers with zero fetches to stock_godverse/ ever. "Release rounds don't ship known breaches" — F applied the law to its own tag. This is the discipline working at the exact moment it matters most.

Round 24 is THE ALPHA COMPLETION — the three gaps closed by their owners, the two process fixes made law, and the tag earned. Tag v5.0-alpha at close (F, and only when #7a runs honestly).

Two process fixes, now law (from R23's findings)

  1. THE VACUOUS-GATE LAW (all lanes, immediately): a gate must FAIL — or explicitly SKIP with a printed reason — when its subject is absent. A gate that can pass without touching its subject is not a gate. "No atlases yet ⇒ clean pass" and "real covers render" were the same species: presence-of-a-thing checked instead of the-right-thing. Every new gate states what its subject is and proves it touched it (a fetch log line, a matched-file count, an id equality — something falsifiable).
  2. Charter law #5 amendment — F executes gating merges. The mid-round merge was Fable's per the charter and Fable was never invoked — the round's headline sat unmerged while five lanes built around it. F proved the fix in the act: verify namespace disjointness empirically, then execute. Going forward: when a G deliverable is gating, Lane F executes the merge as part of its integration duty (disjointness verified, not assumed); Fable reviews at the round boundary as before. One less cross-Mac synchronization point.

The ledger

  1. The contract fix (C — the root cause is yours to close). Your published atlas contract and your own stockpack.js:25 loader disagree. Ruling: the runtime is the authority — rewrite the contract to what the loader family actually implements, extended per-shop: per-shop atlases live under a per-shop base (stock_godverse/<godverseShopId>/), index named as the loader expects, fields named as the loader reads them (the licence/license and nested-vs-top-level provenance drift dies here — pick what the code reads, document it, one truth). Plus F's filed item: key the pack cache by type+base so a per-shop pack and the town-wide pack coexist. Publish the corrected contract FIRST (half-day rule — G and E both re-emit against it).
  2. The identity field (A, with G). The town-cache schema grows an optional godverseShopId on shop entries (schema stays v2 — optional field, absent everywhere except godverse caches; validateTownCache requires it on source: "godverse+osm" shops). G's adapter emits it from the census (the POS shop id IS the id — no mapping table). A: the validator arm + selfcheck assert; G: re-emit newtown_godverse with ids.
  3. The street (E). Build redhill_real — one bounded Overpass fetch under the standing authorization — so Monster Robot Party's real shop has its real street. Same discipline as the pack (raw snapshot, ODbL, spans, C's mapping). Hand the donor to G.
  4. The validator, made honest (E). Fix validate_atlas.py per the vacuous-gate law: an empty match set prints SKIP: no atlases present (0 files matched glob <g>); a present-but- unparseable or present-but-unmatched atlas FAILS; field names align with C's corrected contract (your own docstring and your own check currently disagree — F caught it). Then run it against G's re-emitted atlas and gate on the result. Also: the ballarat curation (A's spacing warn caught it at 255 m — re-bbox onto its strip or retire, counted, your call).
  5. The re-emit + the second town (G, on ultra). Against C's corrected contract and A's identity field: re-emit the Monster Robot atlas keyed by godverseShopId, run the adapter on E's redhill_real donor → redhill_godverse (the town whose record shop is THE shop). Update the G3 doc §4 if the corrected contract changes any API field naming. Your deliverables are gating → F merges mid-round per the amended law.
  6. The wire + the honest gate + the tag (F, last). a. Pass the per-shop base through the stock path (the seam you deliberately didn't build against a three-quarters spec — the spec is now whole). b. #7a, honestly: boot redhill_godverse + ?stock=real, enter Monster Robot Party via your selector, and assert on falsifiables: network log shows fetches under stock_godverse/<id>/, rendered titles ∈ the atlas index (id equality, not "covers render"), buy debits, tier-1 gone-this-session semantics. Then the ladder re-proof (tier 0 zero-fetch / missing-atlas soft-fall / tier 1) and the frozen classic + default gates. c. qa.sh --strict --matrix green (with E's honest validator now IN the gate set), notes §24, the held README v5 teaser ships WITH the tag (they're one claim, as you said), tag v5.0-alpha, push.
  7. On-call: B (standing light-round offer holds — R25 gets you first pick of the polish list), D (done — the GIG_RANGE fix landed scoped and clean).

Laws

Charter v5 laws + the two new ones above. Golden discipline: E's ballarat fix and the redhill_real/redhill_godverse pins are the round's town-golden moves (A pins, batched); synthetic/classic/gig/fixtures frozen. No server code — G3 stays paper until ratified.

THE EXACT RUN ORDER

  1. **Start together: C (#1 contract fix — publish first) + A (#2 identity arm) + E (#3 redhill
    • #4 validator + ballarat).**
  2. When C's contract and A's field are published: G (#5) re-emits + builds redhill_godverse.
  3. When G pushes: F merges (amended law #5), then closes (#6) — wire, honest gate, tag.

Waves: [C, A, E] → [G] → [F merge + close]. B/D on-call.

Standing — JOHN: THE WRITE-BACK RULING (§7 of the G3 doc — due this round)

The G3 draft frames it exactly as charter law #4 required: does an in-game purchase ever touch real monsterrobot/Square inventory? Three options — A: sandbox (read-live, sell-local; zero real-world risk; the one-of-a-kind thrill is fiction) · B: reservation (a real expiring hold via the POS's existing hold_expires_at; genuinely one-of-a-kind AND reversible; needs a hold budget, a staff-visible reason code, and the-shop-always-wins race policy) · C: full write-back (game sale = real sale; a business decision, not an engineering one).

Fable's recommendation (yours to overrule): ship v5.0 on Option A, charter Option B as a v5.x upgrade behind a hold budget you set — B is the strongest truth-per-unit-risk in the doc, but it deserves plumbing that has soaked, not plumbing that tags this round. Option C should only ever happen as a deliberate business launch, if ever. Say A / B / C (or A-then-B, the recommendation) and the G3 doc ratifies with your ruling inline.