openspec/changes/add-cartridge-pack/proposal.md

add-cartridge-pack

PENDING

Rigor: instrument

Why

The catalog says what a legal pack is. Nothing yet takes a desired set and returns resident / refused / evict. Without that function the 3090 loader and /bay slot bounce have nothing to call.

What

  • Pure packer over sim/3090/catalog.json (no GPU)
  • Input: desired cartridge ids + envelope id (default 3090)
  • Output: {resident, refused, evict}
  • Living rules: always-on reserved; exclusive tags; swap = Σ(always-on)+max(slottable); resident = sum; watts is sag not bounce
  • Property tests including 4K-pair refusal and 3090 swap-set
  • Capability: cartridge-runtime

Impact

  • Capabilities: MODIFIED cartridge-runtime (packer function)
  • ADRs: none

User journey & surfaces

No new UI because /bay bounce is add-cartridge-glass. This change is the function glass and the harness will call. CLI: python3 sim/3090/pack.py --envelope 3090 klein-4b sam2-tiny.

Out of scope

  • GPU load/unload (add-3090-cartridge-load)
  • Slot-board glass (add-cartridge-glass)
  • Treating watts as a seat/bounce axis (living spec: sag)