PROCITY/web/js/interiors
m3ultra 35981ade5f Lane C R6 C1: interior draw batching (<=350 draws/room law)
Review debt: book room was 1,245 draws GLB-on. Diagnosed two drivers —
multi-material stock boxes (one draw per face, 6x) and one mesh per stock
item — then batched:

- stock.js: stock boxes are single-material now; every stock mesh tagged
  userData.isStock.
- batch.js (new): batchRoom() two-tier merge, called from interiors.js before
  the GLB upgrade. Room-level merge of all isStock across every fitting
  (grouped by material, world transforms baked) + per-fitting merge of fixture
  frames (kept in-group so record bins stay raycast targets for ?dig=1 and the
  GLB upgrade can hide the fixture). Uses vendored BufferGeometryUtils
  mergeGeometries.
- glb.js: frame-hide is now by isStock tag (not frame-count), so batched
  fixtures hide while the room-level stock rides on the GLB.
- interior_test.html: drawSweep() asserts <=350 draws across all type x
  archetype (GLB off and on), folded into the soak; exposed as
  window.PROCITY_C.drawSweep for F's harness (hook in LANE_C_NOTES).

Result (drawSweep, seed 1990): GLB-off worst 152, GLB-on worst 313
(opshop/hall) — book 1,245 -> 189. Determinism 0 fails / 810, leak-free, dig
still riffles batched bins, worst warm build 38ms (<50), visually identical.
qa.sh --strict GREEN (5 gates).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 23:01:04 +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 R5 C2: crate-riffle dig behind ?dig=1 (v2) 2026-07-14 21:11:31 +10:00
fittings.js Lane C R4: hero props into rooms (arcade/booth/fridge/mixer/register) 2026-07-14 18:44:09 +10:00
glb.js Lane C R6 C1: interior draw batching (<=350 draws/room law) 2026-07-14 23:01:04 +10:00
interiors.js Lane C R6 C1: interior draw batching (<=350 draws/room law) 2026-07-14 23:01:04 +10:00
layout.js Lane C: keeper stand pose on the counter contract (re-land on main) 2026-07-14 14:27:58 +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 R6 C1: interior draw batching (<=350 draws/room law) 2026-07-14 23:01:04 +10:00
theme.js Lane C R4: hero props into rooms (arcade/booth/fridge/mixer/register) 2026-07-14 18:44:09 +10:00