---
model: claude-fable-5
service: claude
session: b6b42e23-0454-4d9b-be1c-0a89d65aed1b
timestamp: 2026-07-02T15:56:26Z
git_ref: 65bf9df5
scope: code
substantive: true
raw_file: 20260702T155626Z_65bf9df5_prompt_io.raw.md
---

## Prompt

From `ai/prompt-io/prompts/issue_470.md`:

> attempt to resolve
> https://github.com/goodboy/tractor/issues/470
> do it with /open-wkt, ensure you /run-tests on all
> changes

(plus a hard pause-for-human-review deadline of
12:50PM EST.)

Issue #470 asks to trim the ~0.42s `import tractor`
cost — which dominates per-actor spawn latency on the
`trio` backend — by lazy-importing heavy/optional deps
(`pdbp`, `stackscope`, `multiaddr`, + audit of
`colorlog`/`bidict`/`wrapt`/`setproctitle`).

## Response summary

Profiling showed the issue's dep-list only accounted
for ~20ms; the dominant cost (~244ms) was
`log.get_logger()`'s `get_caller_mod()` calling
`inspect.stack()` at module level in ~39 modules —
each call walks every stack frame (deep during nested
imports) and scans `sys.modules` per frame via
`inspect.getmodule()`.

Changes, in impact order:

1. `get_caller_mod()` -> `sys._getframe()` +
   `f_globals['__name__']` `sys.modules` lookup
   (~240ms saved).
2. Issue's lazy-import checklist: `bidict`,
   `multiaddr`, `colorlog`, `wrapt` moved to
   `TYPE_CHECKING`/function-local imports;
   `platformdirs` function-local; `asyncio` +
   `.to_asyncio` deferred out of the `devx.debug` +
   `spawn._entry` eager paths (~15ms saved).
3. PEP 562 `__getattr__` on `tractor/__init__.py`
   preserving public `tractor.to_asyncio` attr access.

Results: `import tractor` 0.42s -> ~0.145s (~65%);
sequential `start_actor` latency 0.40-0.44s ->
~0.179s/actor. `pdbp` (needs `_repl.py` class-base
restructure) + `platformdirs` (needs
`UDSAddress.def_bindspace` protocol rework) documented
as follow-ups.

## Files changed

- `tractor/log.py` — `get_caller_mod()` perf fix +
  lazy `colorlog`
- `tractor/__init__.py` — PEP 562 lazy `to_asyncio`
- `tractor/discovery/_addr.py` — `bidict` ->
  `TYPE_CHECKING`
- `tractor/discovery/_multiaddr.py` — lazy `multiaddr`
- `tractor/ipc/_tcp.py`, `tractor/ipc/_uds.py` —
  `Multiaddr` -> `TYPE_CHECKING`
- `tractor/runtime/_state.py` — lazy `platformdirs`
- `tractor/devx/_frame_stack.py` — lazy `pdbp` +
  `wrapt`
- `tractor/devx/debug/_trace.py`,
  `tractor/devx/debug/_tty_lock.py` — lazy `asyncio` +
  `.to_asyncio`
- `tractor/spawn/_entry.py` — lazy
  `run_as_asyncio_guest`

## Human edits

None yet — pending user review at the 12:50PM EST
pause gate (test-suite results reported in-session).
