PROCITY/web/js/interiors
m3ultra 4f0adf12d8 Lane C R26 (v5.0-beta): three contract lines + the dig price sticker (ledgers #1, #4, #6)
Wave 1 — contract lines published first; G and E build to them.

#1 THE BRIEF SAID `tier`. IT CAN'T BE (§7.2b). G's atlases already emit tier: 1 = the CHARTER'S
LADDER RUNG (0 parody / 1 static-real / 2 live), and `kind` is already the stock type. A mint atlas
is ALSO rung 1 — same mechanism (a statically baked per-shop atlas); only the data's origin differs.
Real-vs-mint is an orthogonal axis, not a rung — overloading `tier` puts two meanings in one name,
the same species as the plan-id/godverse-id collision just standing-noted, and as R25's positional
ids. RULING: top-level `sourcing: "real"|"mint"`, REQUIRED; `tier` stays the numeric rung. A mint
index MUST NOT carry POS-snapshot fields (the separation is the honesty). Gates read `sourcing`;
absent => FAIL.

#4 `condition` ISN'T IN THE INDEX (§7.2c) — the ledger assumed it was. The index carries
artist/title/price/price_band; G's SNAPSHOT has condition + sleeve_cond and drops them at emit, so
pickRealOffers mapped cond:'' and the card rendered dangling separators around a hole. That WAS the
"database row". Ruled optional index fields, emitted when the source has them; no invented grades on
mint items (a plausible-but-fictional grade is what `sourcing` exists to prevent).

#6 THE ATLAS MANIFEST (§7.2d): stock_godverse/index.json is the authority for which shops carry
atlases — no entry => no fetch => zero 404s, so the zero-console-errors law holds with no
attribution exception. Shape + both-ways consistency specified. No manifest + no atlases = a
legitimate silent zero-shop state, not an error.

THE PRICE STICKER (code): the pull panel is now the shop's price sticker — manila card, rotation +
shadow, typewriter caps, italic title, a stamped condition grade, and the round yellow $ sticker the
sleeve art already uses (the panel echoes dig.js's own canvas language instead of fighting it).
Fields compose only when present: a missing field never leaves a stray separator.

VERIFIED (fresh context, 5 card shapes, both star branches): real grail VG+/VG + ★GRAIL; real
standard VG+ + STANDARD; real ungraded COLLECTOR (grade omitted cleanly); parody NM + 1973 PUNK;
parody rare (seed 4) VG + 1973 POP + ★RARE. No dangling separators anywhere.

The verification caught a defect in MY OWN card: a real grail read "GRAIL ★ GRAIL" — `s` carried the
price_band AND `rare` derived from that same band (parody is immune: its `s` is a genre). Fixed at
the mapping. And I didn't leave the parody-rare branch on assumption — scanned seeds until a rare
pull appeared and asserted it says RARE, not GRAIL. An unexercised branch is an unproven one.

Budgets: the card is DOM — zero draws, zero tris, no 3D change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:38:42 +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 R26 (v5.0-beta): three contract lines + the dig price sticker (ledgers #1, #4, #6) 2026-07-17 09:38:42 +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