PROCITY/web/js/interiors
m3ultra ba901d4a75 Lane C R24: the contract fix — the runtime is the authority (ledger #1, the root cause)
F held the tag because my published atlas contract and my own loader were mutually
incompatible. That was mine. Closed, and published FIRST so G and E re-emit against it.

WHAT WAS WRONG: my R22 §7 invented `stock_shop_<godverseShopId>_index.json`; the loader
(stockpack.js:25) fetches `${base}stock_${type}_index.json`. An index named per the contract
can never be fetched by the code meant to load it. G built runtime-compatible (correct), E
built contract-compatible (also correct — the contract said so), and E's validator globbed
stock_shop_*_index.json -> zero files -> vacuous pass. Nobody was wrong; the contract was.

§7 REWRITTEN AGAINST THE CODE (LANE_C_PUB):
- Authority rule: stockpack.js IS the contract; doc vs loader disagreement = doc bug.
- Layout ratified as G shipped it: assets/stock_godverse/<godverseShopId>/stock_<type>_index.json
  (`type` is load-bearing — SLOT_FOR picks the slot). stock_shop_* RETIRED.
  -> E: the glob becomes stock_godverse/**/stock_*_index.json (the vacuous gate's actual cause).
- Runtime-read vs ignored stated exactly: reads atlases[] + items[{atlas,uv}] (uv top-left, the
  loader flips V); ignores version/atlas_px/cell*/count/kind/tier/shop/crate/provenance.
- Provenance drift dies: runtime reads none of it, so the authority is E's validator + the 23
  shipped town caches -> TOP-LEVEL `license` (US), attribution, generator, snapshot. British
  `licence` retired; G lifts+renames those four, keeps its rich nested provenance{} as colour.
  atlas_px stays REQUIRED (checked against real dims). cell* informational — C reads uv, never
  cell; do NOT shrink the cell for VRAM (the dig renders covers close-up).

CODE (F's filed item): stockpack cache identity is now `${base}|${type}`;
getStockPack(type, base = DEFAULT_STOCK_BASE); new opts.stockBase on buildInterior = the seam F
wires. Omitted => town-wide packs, byte-identical to today. Pre-v5 callers untouched.

VERIFIED FRESH — and I fixed my own metric first: R23's "8/8 atlas-backed" only checked that a
map exists, but a parody canvas has a map too (same species as the vacuous gate). Re-asserted
falsifiably: every sleeve's texture source IS stock_godverse/3962749/stock_record_atlas_00/01.webp,
pack items == index items by id; negative control — the parody room's textures are (canvas, no src)
and touch the atlas zero times, so the metric discriminates. Collision FIXED (shop 120 + town 350
coexist). Fail-soft FIXED with a populated cache (missing base -> null -> parody). 98 draws with
real covers, pathOK, 0 carves, 0 console errors.

SCOPED NOT SLID: the LRU+dispose (§7.6) lands at v5.0-beta — one stocked shop can't accrete, and
safe eviction needs a room-exit hook (a live room holds the pack's shared material) that arrives
with F's per-shop preload. Written into the contract so it can't slide silently.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 00:43:50 +10:00
..
batch.js Lane C R6 C1: interior draw batching (<=350 draws/room law) 2026-07-14 23:01:04 +10:00
context.js Lane C: on-demand seeded shop interiors (library + test page) 2026-07-14 12:08:12 +10:00
dig.js Lane C R7 C1: ?stock=real — real GODVERSE sleeves in the crates 2026-07-15 01:23:23 +10:00
fittings.js Lane C: round-12 pub venue — archetype + watchPoints + audio.gigKey (?gigs=1) 2026-07-15 18:59:48 +10:00
glb.js Lane C R6 C2: map the 3 orphaned fittings (glass_case/magazine_rack/crate_stack) 2026-07-14 23:19:48 +10:00
interiors.js Lane C R24: the contract fix — the runtime is the authority (ledger #1, the root cause) 2026-07-17 00:43:50 +10:00
layout.js Lane C R16 (v3.1): stage.backline[] amp unification, drop primitive ampStacks (ledger #5, C half) 2026-07-16 12:16:38 +10:00
shell.js Lane C: on-demand seeded shop interiors (library + test page) 2026-07-14 12:08:12 +10:00
stock.js Lane C round-9 C2: buy-anywhere — pull-and-buy on book spines + toy boxes 2026-07-15 09:56:21 +10:00
stockpack.js Lane C R24: the contract fix — the runtime is the authority (ledger #1, the root cause) 2026-07-17 00:43:50 +10:00
theme.js Lane C R13 (v3.0-beta, the district): band_room + rsl archetypes, 4-piece band, RY audit (?gigs=1) 2026-07-15 23:05:03 +10:00
wallet.js Lane C round-8: buy loop v0 + book/toy real stock (?stock=real) 2026-07-15 04:33:00 +10:00