---
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.<broker>` 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.
