openspec/changes/add-cartridge-pack/design.md
Design — packer
Steered 2026-09-10. Living rules in openspec/specs/cartridge-runtime/spec.md.
pack(desired, envelope_id) -> {resident, refused, evict, log}
- Envelope default
3090on fractal1.t4000is a second call (gauge). - Always-on with null cost on the target envelope:
absent, logged, pack legal. - Slottable with null cost: refused, name the cart.
- Exclusive tag collision: refuse, name both.
- never-on-thor on 3090/t4000: refuse.
- Swap (
3090): compare Σ(always-on seated) + max(slottable) to VRAM/host/NVENC ceilings. - Resident (
t4000,6000): sum unified + NVENC. - Sag:
evictis slottable AI in reverse-seat order; never encode/cuVSLAM.
Not a mode checker. DA-S + SAM2 + 9B is legal if it fits.
Reuse sim/3090/check_catalog.py as the kernel; pack.py is the CLI.
Extend main() with 4K-pair refusal and the 3090 swap-set scenario.