---
model: claude-fable-5[1m]
service: claude
timestamp: 2026-06-10T17:11:05Z
git_ref: datad_service
diff_cmd: git log -1 -p --follow -- ai/prompt-io/claude/20260610T171105Z_bc6e18d7_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/data/validate.py`

Generated: `get_eps(mod, kind) -> dict[str, Callable]`
returning the daemon-kind's ep funcs defined by a
backend mod, keyed by ep name, missing eps excluded;
sourced from the existing `_eps` grouping table
(`'middleware' | 'datad' | 'brokerd'`).

> `git log -1 -p --follow -- piker/brokers/kraken/__init__.py`
> `git log -1 -p --follow -- piker/brokers/binance/__init__.py`
> `git log -1 -p --follow -- piker/brokers/deribit/__init__.py`
> `git log -1 -p --follow -- piker/brokers/ib/__init__.py`
> `git log -1 -p --follow -- piker/brokers/kraken/broker.py`

Key exploration findings driving the design (from the
planning phase, 3 parallel explore agents + 1 architect
agent):

- the codebase already anticipated this split:
  `validate._eps` groups eps into 'datad' vs 'brokerd'
  kinds and `ib/__init__.py` already declared
  `_brokerd_mods`/`_datad_mods`; `brokers/_daemon.py`
  carried the literal TODO "rename the daemon to datad
  prolly once we split up broker vs. data tasks into
  separate actors?".
- the feared kraken feed<->broker "shared ws state"
  hazard is mild: `NoBsWs`/`open_autorecon_ws`
  originate in `piker.data._web_bs` (re-exported via
  `.kraken.feed`); only `stream_messages` is feed-local
  and it's a pure parser — in-process imports only,
  each actor opens its own ws conn.
- `enable_modules` gates RPC entry, NOT python imports,
  so backend trading mods may keep importing feed-side
  helpers in-process post-split.
