openspec/changes/archive/2026-09-10-add-sim-box-mix/reviews/2026-09-10-advise.md

advise: add-sim-box-mix (2026-09-10)

ADVISE: accept READER: agt-fable-5-1-arch-review SPAWN: .spawns/aicam-sim-box-mix-1789064442-97603-42ec7bd9

Blind take (written before design.md / tasks.md)

Sources: Why, openspec/specs/hardware-kit/spec.md, change delta, docs/3090-SIM.md, HARDWARE.md, MODELS.md, VIDEO-PERCEPTION.md:100-160.

  1. PIN: 3090 is an emulator, never a 30 fps host. Swap one slot, unload, log the ×0.13 / ×0.30 derates. Correct and already earned by 3090-SIM Measured.
  2. PIN: residency (resident / swap) and pack (SMALL / LARGE) must be two independent axes in the software, with envelope id only setting the default. The delta welds 6000 → resident+LARGE, but 3090-SIM’s own reason to rent the PRO 6000 is the 64 GB co-resident question, which is resident+SMALL. That combination has no home in the delta.
  3. REFUSE: any T4000 fps claim derived from a PRO 6000 run. 1792 vs 273 GB/s; 3090-SIM already says the 6000 “will lie high” on TOPS. The delta says both T4000 and 6000 are “the 30 fps path” in one scenario; the 6000 stream is a lab result, not a body result. Needs a derate line (or an explicit “no derate exists; capacity only”) for the 6000 envelope the way 3090-SIM has one for the 3090.
  4. GAP: the four-box list has no slot for the bring-up brick. Living spec says bring-up SHALL use the AGX Thor Dev Kit (T5000: 128 GB, 2× NVENC, 2560 CUDA). If the dev kit reports as t4000 its numbers lie high on TPC and NVENC; the envelope id list should say what id the dev kit runs under and whether its fps counts as T4000 FACT.
  5. PIN: swap-mode logs must split load/unload time from per-frame time before the derate is applied. 3090-SIM’s klein row already conflates (“load + warmup in that”); applying ×0.30 to a number that includes a weight load is noise.
  6. NOTE: HARDWARE.md is in web3d-space (Family repo), not this repo. Kit table still says T5000 production and 128 GB; living spec says T4000 default. The change must name the cross-repo edit explicitly or the “three boxes” banner stays stale. MODELS.md:7 needs SMALL / LARGE columns, same repo.
  7. NOTE: “SAM 3.1 + VDA-L SHALL NOT be packed on T4000 with the AD 9B” is weaker than the source (VIDEO-PERCEPTION: bandwidth, not VRAM, so not together on the body at all). The SMALL pack definition covers it implicitly; make the SHALL NOT unconditional.
  8. NOTE: RunPod 6000 Server (600 W passive) and a truck 6000 (likely Max-Q 300 W) share the 6000 cost column “until measured apart”. Fine for now; the column header should say which one was measured.
  9. TRADEOFF (accepted, must be stated): swap emulation keeps one code path and tests each slot’s correctness, but by construction never exercises inter-slot contention on shared bandwidth, which is exactly the T4000 problem. The 6000 tests capacity and lies on bandwidth. No box in the four-box list validates resident-set fps at 273 GB/s except Thor silicon. The change should say so in one line so nobody reads a 6000 30 fps as a body pass.
  10. VERDICT-SHAPE: accept if design/tasks answer 2, 3, 4 (independent axes, 6000 derate/no-derate line, dev-kit id). Send-back if the 6000 resident+SMALL run has no home, because that is the stated reason for renting it.

Compare (after design.md, tasks.md, proposal.md, steer.md)

Steelman first. The design answers most of the take:

  • Take 1 (3090 emulator, never 30 fps host). Answered. Design envelope row says “Swap one SMALL slot at a time. Slow on purpose.” Steer has it as a user decision.
  • Take 2 (residency and pack as independent axes). Half answered. Design: “Residency is config (resident | swap). Pack is the envelope id.” That is already two axes, and the envelope→pack map is a lookup (t4000→SMALL, 3090→SMALL, 6000→LARGE), so an override is one row, not a redesign. The delta text disagrees with the design: it says the software selects both residency and pack “by envelope id”. Steelman: the 64 GB co-resident question in 3090-SIM is 9B + klein + SAM2 (AD and snap profiles), and the design says 9B is NEAR, not a live slot, so that test is outside this change’s live mix. Accepted as out of scope. Remaining ask: hardware id (what the log attributes derates to) and pack id (which weights) must not be the same field, or a 6000 running SMALL logs as a T4000 FACT. Task added.
  • Take 3 (6000 fps is not a T4000 claim). Not answered anywhere in design, proposal, or steer. Steelman: MODELS.md already has “Thor numbers are SPEC unless marked FACT”, and the 6000 runs LARGE weights so no derate could apply. But the delta scenario puts “rented PRO 6000 or local T4000 → the 30 fps path” in one THEN clause, and the proposal says “the same software streams realtime” on both. A reader will take a 6000 30 fps stream as the body target met. One line closes it. Task added.
  • Take 4 (bring-up brick has no envelope id). Not answered. The living spec’s Lab brick requirement mandates the AGX Thor Dev Kit (T5000: 128 GB, 2× NVENC, 2560 CUDA, same 273 GB/s). The four-box SHALL enumerates without it, so the first Thor-silicon run has no id to select residency and pack by, and HARDWARE.md’s four-box rewrite would drop the T5000 row while the living spec still requires that brick. The delta already has the fix pattern for the two 6000s: “share the column until measured apart.” Same sentence for the dev kit, plus the partial derate (bandwidth-bound ~1×, TPC-bound ×0.6, NVENC 2 not 1). Task added. This was the send-back candidate; it does not send back because the delta task in tasks.md is still unchecked, so the delta is finalized during act and can carry the line.
  • Take 5 (swap log splits load from per-frame). Not answered. 3090-SIM Measured already conflates it on the klein row. Task added; small.
  • Take 6 (cross-repo edits). Answered. Tasks name web3d-space files explicitly.
  • Take 7 (SAM 3.1 + VDA-L SHALL NOT be conditional on 9B). Design is stronger than the delta (“Do not squeeze SAM 3.1 + VDA-L + 9B onto the SOM” and the SMALL pack excludes them outright). Delta wording should match design. Folded into the delta task; note only.
  • Take 8 (Server vs Max-Q 6000 sharing a column). Design says so explicitly. Accepted.
  • Take 9 (no box validates T4000 resident fps at 273 GB/s). Not stated, but it is the same fact as take 3 from the other side. One line in the delta or 3090-SIM covers both.

Delta-vs-design drift to fix in the delta task: delta says residency is selected by envelope id; design says residency is config. Design is right (a 6000 can run swap to reproduce a 3090 result; a 3090 must not run resident). Say “default by envelope id, overridable” in the delta.

Verdict reasoning

The architecture is sound: one code path, named slots, residency and pack as configuration, 3090 as a swap emulator with the derates kept where they already live, cartridge ids that match. Nothing in the take is a competing design. The unanswered items (3, 4, 5, and the hardware-id vs pack-id split from 2) are each one line in the delta or the log format, and the delta is still an open task, so act can carry them. Four tasks appended to tasks.md, tagged advise. Fold should not proceed with those unchecked.