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:
parent
57973e0540
commit
0740b4697d
108
docs/LANES/ROUND24_INSTRUCTIONS.md
Normal file
108
docs/LANES/ROUND24_INSTRUCTIONS.md
Normal 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.
|
||||||
Loading…
Reference in New Issue
Block a user