|
1 | 1 | # Handoff: Phase B — invert execnet onto an async-native Trio core |
2 | 2 |
|
3 | | -For a fresh session on branch `feat/trio-host-thread-io`. B.1–B.5 are done; |
4 | | -work continues at **B.6**. Plan context lives in session memory |
5 | | -(`trio-port-plan`), but everything needed is restated here. |
| 3 | +For a fresh session on branch `feat/trio-host-thread-io`. **Phase B is |
| 4 | +complete (B.1–B.6)**; work continues at **Phase C**. Plan context lives in |
| 5 | +session memory (`trio-port-plan`), but everything needed is restated here. |
6 | 6 |
|
7 | 7 | Run checks with `uv run pytest testing/` and `uv run pre-commit run -a` |
8 | 8 | (never grep-filter pre-commit output). ssh paths have a real local harness |
@@ -130,12 +130,28 @@ unchanged (508 passed). What landed, and the decisions taken: |
130 | 130 | `testing/test_threadpool.py`, conftest's `pool` fixture). Do this at |
131 | 131 | the end of the phase (B.6 or later) if the tests pinning them move. |
132 | 132 |
|
133 | | -### B.6 Namespace split |
134 | | - |
135 | | -Introduce `execnet.sync` / `execnet.trio` / `execnet.portal`; top-level |
136 | | -`execnet.*` aliases into `execnet.sync`. Existing suite pinned to the |
137 | | -facade; add trio-native tests (memory_stream_pair + FrameDecoder for |
138 | | -protocol-level, real popen gateways inside `trio.run` for integration). |
| 133 | +### B.6 Namespace split — DONE (commit `4f84335`) |
| 134 | + |
| 135 | +`execnet.sync` (blocking facade re-exports; top-level `execnet.*` aliases |
| 136 | +into it), `execnet.trio` (AsyncGroup/AsyncGateway/AsyncChannel, raw |
| 137 | +channels, stream helpers, shared serialization + errors), and |
| 138 | +`execnet.portal` (LoopPortal/SyncReceiver). `trio`/`portal` load lazily |
| 139 | +via module `__getattr__`, so `import execnet` still does not import the |
| 140 | +trio event loop (pinned by `testing/test_namespaces.py`). Trio-native |
| 141 | +protocol/integration tests already live in `testing/test_trio_gateway.py` |
| 142 | +(memory_stream_pair + real popen gateways inside `trio.run`). |
| 143 | + |
| 144 | +### End-of-phase leftovers (deferred into C/D) |
| 145 | + |
| 146 | +- Retire `ExecModel` internals and `WorkerPool`: still pinned by |
| 147 | + `multi.safe_terminate`, `testing/test_threadpool.py`, and conftest's |
| 148 | + `pool` fixture, and `get_execmodel`/backend names feed Phase C's |
| 149 | + `execmodel=` compat mapping — retire once C lands the new worker |
| 150 | + config axes. |
| 151 | +- ChannelFile / makefile over RawChannel (async makefile) — untouched; |
| 152 | + the sync str-based wrappers stay for backward compat. |
| 153 | +- rsync data plane / wheel shipping over raw channels — later. |
| 154 | +- Async remote_exec on the worker (`exec=task`) — Phase C. |
139 | 155 |
|
140 | 156 | ## Invariants (do not regress) |
141 | 157 |
|
|
0 commit comments