7.7 KiB
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)
- 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).
- 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
- The contract fix (C — the root cause is yours to close). Your published atlas contract
and your own
stockpack.js:25loader 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-shopbase(stock_godverse/<godverseShopId>/), index named as the loader expects, fields named as the loader reads them (thelicence/licenseand 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 bytype+baseso 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). - The identity field (A, with G). The town-cache schema grows an optional
godverseShopIdon shop entries (schema stays v2 — optional field, absent everywhere except godverse caches;validateTownCacherequires it onsource: "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-emitnewtown_godversewith ids. - 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. - The validator, made honest (E). Fix
validate_atlas.pyper the vacuous-gate law: an empty match set printsSKIP: 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). - 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'sredhill_realdonor →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. - The wire + the honest gate + the tag (F, last).
a. Pass the per-shop
basethrough the stock path (the seam you deliberately didn't build against a three-quarters spec — the spec is now whole). b. #7a, honestly: bootredhill_godverse+?stock=real, enter Monster Robot Party via your selector, and assert on falsifiables: network log shows fetches understock_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 --matrixgreen (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), tagv5.0-alpha, push. - 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
- **Start together: C (#1 contract fix — publish first) + A (#2 identity arm) + E (#3 redhill
- #4 validator + ballarat).**
- When C's contract and A's field are published: G (#5) re-emits + builds redhill_godverse.
- 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.