From 53e83308a0cf9f0a37dcb9ac0e24dfd418ac7d89 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Fri, 17 Jul 2026 12:32:45 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20C=20R26=20w4:=20the=20mint-id=20fence=20?= =?UTF-8?q?=E2=80=94=20my=20rule=20was=20the=20stale=20thing=20(wave=204,?= =?UTF-8?q?=20C's=20one=20line)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit F's fourth hold traced to MY §7.2a. I wrote "sku_-prefixed for real-stock packs" in R25 — before mint existed — so it names one space where there are two. E implemented it faithfully and its validator did exactly what I told it to: demand sku_ on 14 mint crates. The check wasn't wrong; my rule was. (Second time a contract line of mine met a case written after it and another lane took the red.) AMENDED §7.2a — the id form is SOURCING-SCOPED and the prefix IS the fence: sourcing "real" -> sku_ the shop's POS inventory (a physical copy) sourcing "mint" -> mint_ a dealgod listing (a plausible stand-in) WHY G WAS RIGHT TO REFUSE THE EASY GREEN: filing dealgod listing ids under sku_ would have gone green in one line and recreated the R24 collision INSIDE THE ECONOMY LAYER — where tier-2's sold-means-gone looks up POS skus. R24's collision entered the wrong shop; the same collision in the money layer sells the wrong record — a real copy, out of a real shop, to satisfy a minted stand-in. A prefix that lies costs money, not a gate. Blessed as design: disjoint namespaces; no gate, lookup or economy path may treat them as one (same standing note as plan-ids vs godverse-ids). VERIFIED against every crate before handing E the line: 15 crates (1 real + 14 mint), 0 fails under the amended rule (prefix matches sourcing, ids unique within pack), and 0 ids appear in both spaces across 344 distinct ids. The fence already holds in the data; only my wording didn't. -> E: assert the form against `sourcing` (already read at line 178) — sku_ for real, mint_ for mint; a crate wearing the other's prefix FAILS. Stronger than the check it replaces, not looser. -> F: 6/1/0 should flip to 7/0/0. Doc-only: no code, no atlas bytes, no goldens. Co-Authored-By: Claude Opus 4.8 --- C-progress.md | 31 +++++++++++++++++++++++++++++++ docs/LANES/LANE_C_PUB.md | 32 ++++++++++++++++++++++++++------ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/C-progress.md b/C-progress.md index 34fb401..8955952 100644 --- a/C-progress.md +++ b/C-progress.md @@ -7,6 +7,37 @@ Last updated: 2026-07-17 (round 26) · owner: PROCITY-C · reviewer: Fable --- +## Update 2026-07-17 (round 26 wave 4) — the mint-id fence: my rule was the stale thing + +F's fourth hold traced to **my** §7.2a. I wrote "`sku_`-prefixed for real-stock packs" in R25 — **before mint +existed** — so it names one space where there are two. E implemented it faithfully and its validator did +exactly what I told it to: demand `sku_` on 14 mint crates. **The check wasn't wrong; my rule was.** Same +shape as R23, and I'll say it plainly: this is twice now that a contract line of mine met a case written +after it and the lane building to it took the red. + +**Amended (§7.2a): the id form is sourcing-scoped, and the prefix IS the fence.** +| `sourcing` | id form | the space it names | +|---|---|---| +| `real` | `sku_` | the shop's POS inventory — a physical copy on a shelf | +| `mint` | `mint_` | a dealgod listing — a plausible stand-in, not that shop's stock | + +**Why G was right to refuse the easy green.** Filing dealgod listing ids under `sku_` would have gone green +in one line and recreated the R24 collision **inside the economy layer** — where **tier-2's sold-means-gone +looks up POS skus**. R24's collision entered the *wrong shop*; the same collision in the money layer **sells +the wrong record** — a real copy, out of a real shop, to satisfy a minted stand-in. A prefix that lies costs +money, not a gate. Blessed as design: disjoint namespaces, and no gate, lookup or economy path may treat +them as one (same standing note as plan-ids vs godverse-ids). + +**Verified against every crate in the tree before handing E the line:** 15 crates (1 real + 14 mint) — +**0 fails** under the amended rule (prefix matches `sourcing`, ids unique within pack), and **0 ids appear in +both spaces** across 344 distinct ids. The fence already holds in the data; only my wording didn't. + +**→ E:** assert the form against `sourcing` (you already read it at line 178) — `sku_` for real, `mint_` for +mint; a crate wearing the other's prefix FAILS. That's **stronger** than the check it replaces, not looser. +**→ F:** 6/1/0 should flip to 7/0/0. Doc-only from C; no code, no atlas bytes, no goldens. + +--- + ## Update 2026-07-17 (round 26, v5.0-beta EVERY CRATE DIFFERENT) — three contract lines + the price sticker R26 §Lane C, wave 1 (ledgers #1, #4, #6). Contract lines published FIRST — G and E build to them. diff --git a/docs/LANES/LANE_C_PUB.md b/docs/LANES/LANE_C_PUB.md index f4b9a75..22dd77f 100644 --- a/docs/LANES/LANE_C_PUB.md +++ b/docs/LANES/LANE_C_PUB.md @@ -19,6 +19,9 @@ > which is already the ladder rung), §7.2c `condition` for the price card, §7.2d the atlas manifest** > (existence declared, never probed — kills the 404 attribution exception). All index/manifest-only: > no atlas bytes, no town caches, no goldens. §0–§6 unchanged. +> **v5.0-beta amendment (2026-07-17, R26 wave 4):** **§7.2a's id form is now SOURCING-SCOPED** — +> `sku_` for real, `mint_` for mint. **Prefixes are namespace fences**, not decoration: +> my R25 line was written before mint existed and read as one space where there are two. Doc-only. *The district ships **three** venue archetypes behind `?gigs=1` — `pub`, `band_room`, `rsl`. Lane A converts a chosen shop to a venue kind in place (`shop.type = kind`); C keys the interior recipe off @@ -266,10 +269,25 @@ The loader is `preloadStockPack(type, { base })` → it fetches **`stock_< ### 7.2a Slot ids — unique across packs, stable across re-emits (v5.0-alpha, R25 ledger #3) **Rule: `items[].id` MUST derive from the source's own stable key — never from position — and MUST be -unique across ALL packs.** For a real-stock (godverse) pack that key is the shop's POS sku: -**`id = "sku_" + `** (e.g. `sku_20260314070442`; G's snapshot already carries `sku` per item, it's -just dropped at emit). The shipped generic packs keep `rec_NNNN` as their namespace — **a real-stock pack -must not emit into it.** +unique across ALL packs.** The shipped generic packs keep `rec_NNNN` as their namespace — **a real-stock +pack must not emit into it.** + +> **AMENDED v5.0-beta (R26 wave 4) — the id form is SOURCING-SCOPED, and the prefix IS a namespace fence.** +> R25's line said "`sku_`-prefixed for real-stock packs". I wrote that **before mint existed**, so it reads +> as one space when there are two. E implemented my rule faithfully; **the rule was the stale thing, not +> E's check.** The form now follows §7.2b's `sourcing`: +> +> | `sourcing` | id form | the space it names | +> |---|---|---| +> | `"real"` | **`sku_`** (e.g. `sku_20260314070442`) | the shop's **POS** inventory — a physical copy on a shelf | +> | `"mint"` | **`mint_`** (e.g. `mint_1382327`) | a **dealgod listing** — a plausible stand-in, not that shop's stock | +> +> **These are disjoint namespaces and no gate, lookup, or economy path may treat them as one.** G refused +> to file dealgod listing ids under `sku_` to go green the easy way, and that judgment is the rule now: +> **tier-2's sold-means-gone looks up POS skus.** R24's id collision entered the *wrong shop*; the same +> collision in the money layer **sells the wrong record** — a real one, out of a real shop, to satisfy a +> minted stand-in. A prefix that lies costs money, not a gate. +> *(Same standing note as plan-ids vs godverse-ids: one name, one space — never compare across.)* **Why — two reasons, both measured:** 1. **Positional ids collide by construction.** Both packs number from zero, so **all 120 godverse ids are @@ -287,8 +305,10 @@ must not emit into it.** **Scope: index-only.** `id` is not read by the loader (§7.3) — the dig/buy consumers and the gates read it. **No atlas bytes, no town cache, no golden moves.** -**→ Lane E:** assert the form — `id` present, **unique within the pack**, and `sku_`-prefixed for -real-stock packs. +**→ Lane E (amended R26 w4):** assert the form **against `sourcing`** (you already read it at line 178) — +`id` present · **unique within the pack** · and the prefix matching its space: `sourcing:"real"` ⇒ `sku_`, +`sourcing:"mint"` ⇒ `mint_`. **A crate wearing the other's prefix FAILS** — that's the fence doing its job, +and it's a stronger check than the one it replaces, not a looser one. ### 7.2b `sourcing` — real vs mint, and why it is NOT `tier` (v5.0-beta, R26 ledger #1) The beta needs every keyed crate marked as **actual POS inventory** or **seeded plausibility**, so no gate,