ff1a6b3726
Hooks the CarrierStore + LoadPortStore from D3 onto the wire:
S3F17 CarrierAction:
ProceedWithCarrier -> CarrierIDEvent::ProceedWithCarrier
CancelCarrier -> CarrierIDEvent::CancelCarrier
BindCarrierID -> CarrierIDEvent::Bind
unknown action -> CAACK=CarrierActionInvalid
unknown carrier -> CAACK=CarrierIDUnknown
S3F25 CarrierTransfer:
fires source.StartUnloading + target.StartLoading transfer
events, updates Carrier::port_id, returns CAACK=Accept.
S3F27 CancelCarrier:
fires CIDS CancelCarrier + CAS Cancel against the carrier.
The state-change handlers wired into the stores in D3 are the right
place to emit S6F11 CEIDs for carrier-events; that hookup is left for
a follow-up commit (it depends on the equipment.yaml CEID catalog,
which doesn't yet enumerate E87 events).
Closes Tranche D — E87 Carrier Management end-to-end (FSMs + wire +
stores + dispatch).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>