Fable (integrator): round-24 instructions — the alpha completion (contract fix, identity field, redhill, honest gates) + two new laws

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
m3ultra 2026-07-17 00:21:51 +10:00
parent 57973e0540
commit 0740b4697d

View File

@ -0,0 +1,108 @@
# 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.