--- model: claude-fable-5[1m] service: claude timestamp: 2026-06-10T17:33:09Z git_ref: datad_service diff_cmd: git log -1 -p --follow -- ai/prompt-io/claude/20260610T173309Z_f15f8178_prompt_io.md --- NOTE: diff-ref mode entry; the AI output here is the committed doc itself (a design plan, not code) so no verbatim copy is duplicated: > `git log -1 -p --follow -- ai/claude-code/plans/datad_service.md` ## Implementation deviation log Where the landed 7-commit series differs from the plan as written (recorded for reviewer transparency; the plan doc is committed unmodified): 1. Commit ordering: the `pytest` config-dir isolation fix lands BEFORE the `tractor`-API drift port. The plan's stage gates assumed a runnable+isolated test baseline; per-commit gating exposed that without isolation the paper-EMS test reads the user's real (polluted) `account.kraken.paper.toml` and reddens. 2. The plan's "stage 0: full pytest green" gate required first repairing pre-existing branch breakage vs `tractor` git `main` (boot `AttributeError`, stale discovery/exc/position APIs) — that repair became its own commit ("Port service+tests to latest `tractor` APIs") rather than plan-stage work. 3. Stage-4 fail-fast placement: the plan said `broker_init()` raises on brokerd-ep-less backends; implementation moved the raise to `spawn_brokerd()` since `piker ledger` calls `broker_init()` directly even for paper accounts on datad-only backends. 4. `brokers/_daemon.py` change grouping: the import-cleanup hunks (`exceptiongroup`, `_FeedsBus` type-only import) landed with the caps-sec slim commit instead of the fixture-slim commit, keeping each intermediate tree import-clean without sub-hunk surgery. Also of record: the plan's "Verification" matrix was executed as written (per-suite gates each stage, the headless datad-feed smoke, the kucoin fail-fast unit check); the known pre-existing ~50% second-runtime-boot test wedge was characterized and excluded as a regression via revert-testing.