--- model: claude-fable-5[1m] service: claude 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 --- NOTE: diff-ref mode entry (code committed in the same commit as this log); backfilled from the live dev session transcript per the `/prompt-io` skill rules. > `git log -1 -p --follow -- piker/clearing/_ems.py` Generated: new `open_brokerd_dialog()` signature `(brokermod, exec_mode, fqme=None, portal=None, loglevel=None)` with an inner `@acm acquire_live_portal()` that yields the caller-provided `portal` override (the `piker ledger` path) else `maybe_spawn_brokerd(brokermod.name)` — designated THE one place a live, credentialed `brokerd.` gets booted post-split. The eager `portal.open_context(trades_endpoint, ...)` construction moved inside that block so the paper short-circuit never acquires a live portal. > `git log -1 -p --follow -- piker/accounting/cli.py` Key analysis (verbatim from session): - `feed.portals` had exactly ONE trading consumer: `piker/clearing/_ems.py:671` (`portal = feed.portals[brokermod]`) — the single coupling forcing feed + trading into one actor. - `piker ledger` (`accounting/cli.py:100-157`) is a hidden consumer: it calls `broker_init()` directly, spawns its own ad-hoc actor and passes the portal positionally — the new signature must keep an explicit `portal:` override param for this path. - stage sequencing: clearing decouple lands BEFORE the feed cutover, otherwise `feed.portals` would hand emsd a `datad` portal and live `open_trade_dialog` RPC would fail.