Lane F R23 (v5.0-alpha): the alpha gate — HELD. The crate is real; it has no street.
v5.0-alpha is NOT tagged. #7a is not a gate that failed, it's a gate that cannot be run:
G's 120 real records are in the tree and byte-identically re-bakeable, and nothing in the
game can reach them. R18's law — release rounds don't ship known breaches.
GREEN (everything except the crate): qa.sh --strict --matrix 7 passed / 0 failed / 0 warn ·
MATRIX GREEN 10 towns x 7 gates · selfcheck 152,015/152,015 (was 161,300, E retired
toowoomba) · flags harness green, so ?classic=1 still holds through the merge · tier 0
?noassets zero fetches + zero console errors (the offline law holds) · tier 1 (v2
town-wide) resolves. Tier 1 (v5, per-shop) is NEVER FETCHED.
FINDING 1 — the atlas contract contradicts itself. LANE_C_PUB:271 publishes
stock_shop_<id>_index.json; C's own loader (stockpack.js:25) fetches
${base}stock_${type}_index.json. Incompatible. G built runtime-compatible (which is why
C's base-override check passed); E built contract-compatible (which is why E's validator
can't see it). Nobody was wrong — the contract was. F recommends amending to G's shape:
it's the only one the runtime can load, and it costs G nothing.
FINDING 2 — the gate built to catch that was blind and green. validate_atlas.py globs a
filename that can't exist at runtime, finds nothing, and returns 0 ("No atlases yet =>
clean pass"), which validate_manifest.py:158 propagates. It conflates "no atlases exist"
with "no atlases matched my glob" — the first is a clean pass, the second is the exact
failure it was written to catch. Pointed at G's index by hand, deeper drift surfaced:
E's line 68 reads provenance top-level while E's own docstring says nested (where G put
it), licence vs license, and a ceiling stale by one round.
FINDING 3 — #7a would have passed vacuously. Walked into The Vintage Record (real shop,
real road) via DBG.enterShop: the crates filled with real covers — from E's 350-item
town-wide v2 pack, not the crate. Zero requests to stock_godverse/, ever. Eyeballed as
written, the gate goes green and proves nothing. Two vacuous gates in one round, same
species: both test the presence of a thing rather than the identity of it.
R24 — three gaps, none F-only: A+G land a godverse_id (verified live: every godverse shop
reports null; the schema has no such field) -> E builds redhill_real (one Overpass fetch,
E's file, outward-facing — not F's to invent) -> C keys the pack cache by type+base
(today a hit returns before base is read, so two stocked shops collide and fail-soft
breaks) -> F passes the per-shop base and re-gates. F deliberately did not build its half:
untestable with no street and no identity field. Filed, not guessed.
Also: A's spacing warn earned on day one — ballarat now warns at 255 m, so the thin tail
has a second member. The README v5 teaser is held with the tag; they're one claim.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
43b035aa2e
commit
57973e0540
@ -4,6 +4,53 @@
|
||||
|
||||
---
|
||||
|
||||
## Round 23 (v5.0-alpha — THE FIRST REAL CRATE) — **F HELD the tag**
|
||||
|
||||
**`v5.0-alpha` is NOT tagged. The crate is real; it has no street.** G's 120 real records off a real
|
||||
shop's POS are in the tree and byte-identically re-bakeable — genuinely the artifact the charter asked
|
||||
for. Nothing in the game can reach them. `#7a` isn't a gate that failed, it's a gate that **cannot be
|
||||
run**. R18's law: *release rounds don't ship known breaches.* Full record: `LANE_F_NOTES` §23.
|
||||
|
||||
**F executed the merge that never happened** (charter law #5) — `main` had no `stock_godverse/**` at all,
|
||||
so the branch F was asked to tag lacked the round's headline. Review had happened, C had verified
|
||||
pre-merge and passed; only the `git merge` was missing. Disjointness verified before merging, not
|
||||
assumed. Zero conflicts → `43b035a`.
|
||||
|
||||
**What passed — everything except the crate.** `qa.sh --strict --matrix` **7 passed · 0 failed · 0 warn**;
|
||||
**MATRIX GREEN — 10 towns × 7 gates**; selfcheck **ALL GREEN 152,015/152,015** (was 161,300 — E retired
|
||||
toowoomba); flags harness green, so the `?classic=1` covenant still holds through the merge. Tier 0
|
||||
`?noassets` → **zero fetches, zero console errors** (the offline law holds); tier 0 default boot on the
|
||||
godverse town; tier 1 (v2 town-wide) `?stock=real`. **Tier 1 (v5, per-shop) — the round's whole
|
||||
deliverable — is never fetched.** A, D, E and C's work is sound; only the rung this round was built to
|
||||
add is unattached.
|
||||
|
||||
**Three findings, in order of how much they cost:**
|
||||
1. **The atlas contract contradicts itself.** `LANE_C_PUB:271` publishes `stock_shop_<id>_index.json`;
|
||||
C's own loader at `stockpack.js:25` fetches `${base}stock_${type}_index.json`. **Incompatible.** G
|
||||
built runtime-compatible (so C's base-override check passed); E built contract-compatible (so E's
|
||||
validator can't see it). **Nobody was wrong — the contract was.** F recommends amending to G's shape;
|
||||
it's the only one the runtime can load.
|
||||
2. **The gate built to catch that was blind and green.** `validate_atlas.py` globs a filename that can't
|
||||
exist at runtime, finds nothing, and `return 0` — so it passes whether the atlas is absent, misnamed,
|
||||
or perfect. It had never seen one until F pointed it at G's by hand, which then surfaced *deeper* drift
|
||||
(E's code reads provenance top-level, E's own docstring says nested, G nested it; `licence` vs
|
||||
`license`; a ceiling stale by one round). *A gate that returns 0 on an empty set is not a gate.*
|
||||
3. **`#7a` would have passed vacuously.** F walked into The Vintage Record (real shop, real road) and the
|
||||
crates filled with **real covers — from E's 350-item town-wide v2 pack**, not the crate. Zero requests
|
||||
to `stock_godverse/`, ever. Eyeballed as written, the gate goes green and proves nothing.
|
||||
|
||||
**R24 order — three gaps, none F-only:** **A+G** land a `godverse_id` (verified: *every* godverse shop
|
||||
reports `godverse_id: null`; the schema has no such field, and C's rule is "C does not invent it") →
|
||||
**E** builds `redhill_real` (one Overpass fetch — E's file, outward-facing; **not F's to invent**) →
|
||||
**C** keys the pack cache by `type+base` (today a cache hit returns before `base` is read, so two stocked
|
||||
shops collide *and fail-soft breaks*) → **F** passes the per-shop base and re-gates. F deliberately did
|
||||
**not** build its half: untestable with no street and no identity field. Filed, not guessed.
|
||||
|
||||
**Also:** A's spacing warn earned on day one — with toowoomba retired, **ballarat now warns at 255 m**.
|
||||
The thin tail has a second member.
|
||||
|
||||
---
|
||||
|
||||
## Round 22 (v4.0 — THE EPOCH CLOSE) — F closed it
|
||||
|
||||
- **The blocking gate CLOSED.** F's R21 re-measure made the tri diet blocking; B diagnosed, the driver
|
||||
|
||||
@ -840,3 +840,123 @@ Toowoomba is a real city whose *secondhand* cache is 12 shops, spread across its
|
||||
isn't "≥N shops" — it's **shops-per-street-metre**. v4.x options: clip the graph to the retail core for
|
||||
thin caches, or set a ratio floor in the pack. The frame ships **labelled honestly** rather than swapped for
|
||||
a flattering town — same discipline as the R21 re-measure that got worse and said so.
|
||||
|
||||
---
|
||||
|
||||
## 23. Round 23 — v5.0-alpha THE FIRST REAL CRATE. **F HELD the tag — the crate has no street.**
|
||||
|
||||
**Verdict: `v5.0-alpha` NOT tagged.** The round's headline artifact is real and good — G's 120 real
|
||||
records off a real shop's POS are in the tree, byte-identically re-bakeable. It cannot be reached from
|
||||
the game. `#7a` (riffle the real crate, buy it) is not a gate that failed; it is a gate that **cannot be
|
||||
run**. R18's law: *release rounds don't ship known breaches.*
|
||||
|
||||
### What F did run
|
||||
|
||||
| gate | result |
|
||||
|---|---|
|
||||
| **`qa.sh --strict --matrix`** | **7 passed · 0 failed · 0 warn** — QA GREEN |
|
||||
| **town-matrix** | **MATRIX GREEN — 10 towns × 7 gates**, all green |
|
||||
| citygen selfcheck | **ALL GREEN 152,015/152,015** (was 161,300 — E retired toowoomba) |
|
||||
| flags harness (classic regression · default boot · STRICT) | **GREEN, 0 warnings** — the covenant holds through the merge |
|
||||
| manifest validator · scaffold · consistency · no-giants | GREEN |
|
||||
| tier 0 — `?noassets=1` | **zero fetches, zero console errors** — the offline law holds |
|
||||
| tier 0 — default boot, godverse town | town loads (18 real Newtown shops), stock → parody |
|
||||
| tier 1 (v2, town-wide) — `?stock=real` | 350-item pack resolves, real cover art |
|
||||
| **tier 1 (v5, per-shop) — the round's deliverable** | **NEVER FETCHED** |
|
||||
| tier 2 | N/A by law (no server code this round) |
|
||||
|
||||
### The merge that never executed (F did it — charter law #5)
|
||||
Fable's mid-round merge never ran: `main` had **no `web/assets/stock_godverse/**` at all**, so the branch
|
||||
F was asked to gate and tag did not contain the round's headline. The review had happened (the shared
|
||||
checkout was parked on `lane-G-godverse` for it) and C verified the atlas from a temp worktree —
|
||||
deliberately pre-merge — and passed. Only the `git merge` was missing. F executed it as the integration
|
||||
lane, disjointness **verified before merging, not assumed** (G: `G-progress`, `G3 doc`,
|
||||
`pipeline/godverse_*`, `stock_godverse/**` · main-since-fork: `C-progress`, `LANE_C_PUB` · overlap: none).
|
||||
Zero conflicts, exactly as law #5 predicted. → `43b035a`.
|
||||
|
||||
### ⚠ FINDING 1 — the atlas contract contradicts itself. Nobody was wrong; the contract was.
|
||||
|
||||
| | says the index is |
|
||||
|---|---|
|
||||
| **C's published contract** — `LANE_C_PUB:271` | `stock_shop_<godverseShopId>_index.json` |
|
||||
| **C's own runtime loader** — `stockpack.js:25` | `` fetch(`${base}stock_${type}_index.json`) `` |
|
||||
|
||||
**These are mutually incompatible.** An atlas named per the published contract can *never* be loaded by
|
||||
the code that is supposed to load it. G shipped `3962749/stock_record_index.json` — **runtime-compatible**,
|
||||
which is exactly why C's base-override verification passed. E globbed `stock_shop_*_index.json` —
|
||||
**contract-compatible**, which is why E's validator never saw the atlas. Two lanes implemented opposite
|
||||
halves of a self-contradicting spec and both were correct.
|
||||
|
||||
**F's recommendation (measured, not preferred):** amend the contract to G's shape —
|
||||
`stock_godverse/<godverseShopId>/stock_<type>_index.json`. It is the only shape the runtime can load,
|
||||
it keys per-shop by directory, and it costs G nothing (already emitted). E's glob follows. C owns the
|
||||
wording (LANE_C_PUB); this is the amendment ledger #3 anticipated.
|
||||
|
||||
### ⚠ FINDING 2 — the gate built to catch this was blind, and green
|
||||
|
||||
`validate_atlas.py` globs for a filename that cannot exist at runtime, finds nothing, prints *"no
|
||||
per-shop atlases yet — nothing to validate"* and **`return 0`**. `validate_manifest.py:158` propagates
|
||||
that green (its comment states the intent: *"No atlases yet ⇒ clean pass"*). So the round's QA gate passes
|
||||
whether the atlas is **absent, misnamed, or perfect** — it has never once looked at one. E built it in
|
||||
wave 1 with no atlas to test against; on first contact (F, at close) it was blind.
|
||||
|
||||
The flaw is precise and the fix is a one-liner: the validator **conflates "no atlases exist" with "no
|
||||
atlases matched my glob."** The first is a legitimate clean pass; the second is exactly the failure it
|
||||
was written to catch. Cross-check the directory — if `stock_godverse/*/` is non-empty but no index
|
||||
matched, that is an **ERR**, not a pass. *A gate that returns 0 on an empty set had better be certain the
|
||||
set is empty.*
|
||||
|
||||
Pointing it at G's index by hand (filename drift removed) shows the drift is **deeper than the name**:
|
||||
- **`ERR missing/empty provenance ['license','attribution','generator','snapshot']`** — but G *carries*
|
||||
`generator` and `snapshot`. E's line 68 reads `idx.get(f)` — **top-level** — while E's own docstring
|
||||
(line 14) specifies them **nested under `provenance`**, which is where G put them. **E's code
|
||||
contradicts E's doc**; G's atlas would fail even with E's exact field names.
|
||||
- **`licence` vs `license`** — G used the British spelling; E's `REQUIRED_PROV` wants American.
|
||||
- **`attribution`** — G folds the substance into `licence.covers`; E wants the field.
|
||||
- **`WARN 2 atlases — C's rule is 1/shop`** — E built to C's *pre-correction* ceiling; C amended §7.2 to
|
||||
`≤2 atlases @≤2048²` in the same wave. Stale by one round.
|
||||
|
||||
### ⚠ FINDING 3 — `#7a` would have passed vacuously
|
||||
The brief says: *"boot `newtown_godverse` with `?stock=real` … riffle — **real covers render**."* They do.
|
||||
F walked into **The Vintage Record** (a real Newtown shop, on its real road) via `DBG.enterShop`, and the
|
||||
crates filled with **real cover art** — from E's **350-item town-wide v2 pack** (`Sunburnt Milk Bar Vol. 2`,
|
||||
`Midnight Departure`), the same pack every record shop in every town has had since v2. **Not** Monster
|
||||
Robot Party's 120. Network confirms: every stock fetch goes to `assets/models/`; **zero requests to
|
||||
`assets/stock_godverse/`, ever.** Had F eyeballed the gate as written, it would have gone green and proven
|
||||
nothing. *Two vacuous gates in one round — same species: both test the presence of a thing rather than
|
||||
the identity of it.*
|
||||
|
||||
### The exact failure list for R24 — three gaps, none of them F-only
|
||||
|
||||
1. **The crate has no street.** [E + G] No town cache contains shop `3962749`; `redhill_real` does not
|
||||
exist. Needs a `build_towns.py` TOWNS entry (~`center (-27.4553, 153.0064), span_km 2.4`) + one
|
||||
outward-facing Overpass fetch → `redhill_real`, then `godverse_town.py redhill_real redhill_godverse`
|
||||
with monsterrobot injected into `shops[]`. **F did not do this: E's file, G's generator, and an
|
||||
outward-facing fetch — inventing town data is not F's to invent.**
|
||||
2. **No identity field exists to key an atlas by.** [A + G] Verified in the live runtime: *every* shop in
|
||||
`newtown_godverse` reports `godverse_id: null` — the cache schema carries no such field at all. C's
|
||||
rule is *"C consumes whatever identity field lands, C does not invent it"* — so nobody has landed it.
|
||||
A owns the CityPlan/cache contract; G emits it.
|
||||
3. **The runtime wire.** [C + F] `stockpack.js` keys `_packs`/`_resolved` by **type alone** and returns a
|
||||
cache hit before `base` is ever read (`stockpack.js:24`), so two stocked shops collide **and fail-soft
|
||||
breaks** — an unstocked shop of a cached type inherits another shop's crate. C specced the seam (key by
|
||||
`type+base`, per-shop preload on entry, LRU=1 + dispose) and owns the file; F then passes the per-shop
|
||||
base at `interior_mode.js:192` and drops the town-wide preload at `index.html:199`.
|
||||
|
||||
**F deliberately did not build its half of #3 this round.** It is untestable while #1 and #2 are open
|
||||
(no street to walk to, no identity field to pass), and F would be writing against three-quarters of a
|
||||
spec that does not exist yet. Filed, not guessed. R24 order: **A+G (identity) → E (the town) → C (the
|
||||
keying) → F (the wire + re-gate)**, and the crate walks.
|
||||
|
||||
### Also found
|
||||
- **The godverse town is in no gate.** `newtown_godverse` is a shipping town cache that boots fine (F
|
||||
verified: 18 real shops, real roads) but the town-matrix covers `newtown_real`, not it — so the one
|
||||
town the whole epoch is built on is ungated. F's matrix, F's gap; it lands with the R24 re-gate rather
|
||||
than a held round.
|
||||
- **A's spacing warn earns immediately:** with toowoomba retired, **`ballarat_real` now warns at median
|
||||
255 m > 150 m**. The thin tail has a second member — A's warn is doing exactly its job (warn, not error;
|
||||
E curates). Filed for E's next curation pass.
|
||||
- **`?noassets=1` + `&town=<key>` silently boots a *different town*** (the fixture, not the cache) — F's
|
||||
own R17 wiring gates the cache fetch on `!NOASSETS`, correctly (noassets = zero network), but the tier
|
||||
ladder's *"same shop under `?noassets`"* can't mean the same shop for a real town. Tier 0 for **stock**
|
||||
is provable on the default boot; tier 0 for the **town** is a fixture fallback by design. Wording, not a bug.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user