--- model: claude-fable-5[1m] service: claude session: 32d15f9a-b2d3-4c26-bdc9-190219141a25 timestamp: 2026-06-10T17:12:26Z git_ref: datad_service diff_cmd: git log -1 -p --follow -- ai/prompt-io/claude/20260610T171226Z_64181219_prompt_io.md scope: code substantive: true raw_file: 20260610T171226Z_64181219_prompt_io.raw.md --- ## Prompt Same session-initiating `brokerd`-split instruction (see `20260610T170859Z_75cefe10_prompt_io.md`); this is the approved plan's "stage 2": decouple the clearing layer from `feed.portals` BEFORE the feed cutover so live trading works at every stage boundary. User-decided constraint applied: post-split `brokerd` is trading-only and spawned LAZILY only by `emsd`'s `open_brokerd_dialog()` path. ## Response summary Kill the single coupling forcing feed + trading eps into one actor (`Router.open_trade_relays()` pulling its trades portal from `feed.portals[brokermod]`): `open_brokerd_dialog()` now (maybe) spawns/finds `brokerd.` itself and ONLY when a live trades-ep will actually open; paper mode never touches it. Pre-cutover this is a pure refactor (registry lookup finds the same feed-spawned daemon). ## Files changed - `piker/clearing/_ems.py` — `open_brokerd_dialog()` re-sig + inner `acquire_live_portal()`; `Router.maybe_open_brokerd_dialog()` drops `portal` param; `open_trade_relays()` drops the `feed.portals` lookup - `piker/accounting/cli.py` — keyword-form `portal=` override kept for the `piker ledger` ad-hoc actor ## Human edits None — committed as generated.