102 lines
3.7 KiB
Markdown
102 lines
3.7 KiB
Markdown
|
|
---
|
||
|
|
model: claude-opus-4-7[1m]
|
||
|
|
service: claude
|
||
|
|
session: subints-spawner-design-kickoff
|
||
|
|
timestamp: 2026-04-17T03:49:18Z
|
||
|
|
git_ref: 9703210
|
||
|
|
scope: docs
|
||
|
|
substantive: true
|
||
|
|
raw_file: 20260417T034918Z_9703210_prompt_io.raw.md
|
||
|
|
---
|
||
|
|
|
||
|
|
## Prompt
|
||
|
|
|
||
|
|
Drive the "first big boi, from GH issue" task seeded by
|
||
|
|
`ai/prompt-io/prompts/subints_spawner.md`: design, plan
|
||
|
|
and implement sub-interpreter (subint) spawn-backend
|
||
|
|
support per issue #379, including (1) modularizing
|
||
|
|
`tractor.spawn._spawn` into per-backend submods, (2) a new
|
||
|
|
`._subint` backend, and (3) harness parametrization via the
|
||
|
|
existing `--spawn-backend` / `start_method` pytest fixture
|
||
|
|
in `tractor._testing.pytest`.
|
||
|
|
|
||
|
|
Follow-up clarifications from the user (this turn):
|
||
|
|
1. Pin `<3.15` on this dev branch and feature-gate subint
|
||
|
|
tests — chose option (a).
|
||
|
|
2. Split Phase A (modularization) into its own PR first.
|
||
|
|
3. Defer the `fork()`-via-subint hack to a follow-up.
|
||
|
|
4. Harness flag is `pytest --spawn-backend <key>` CLI →
|
||
|
|
`start_method` fixture (prompt file updated to match).
|
||
|
|
|
||
|
|
## Response summary
|
||
|
|
|
||
|
|
Produced a three-phase plan and a concrete Phase A (pure
|
||
|
|
modularization) file-split plan for user review; no code
|
||
|
|
written yet — the green-light to start Phase A was given
|
||
|
|
in this same turn conditional on logging this prompt-io
|
||
|
|
entry first.
|
||
|
|
|
||
|
|
Phases:
|
||
|
|
- **A — modularize** `tractor/spawn/_spawn.py` (847 LOC):
|
||
|
|
keep generic machinery in `_spawn.py`, extract
|
||
|
|
`trio_proc` → `spawn/_trio.py`, `mp_proc` →
|
||
|
|
`spawn/_mp.py`. No pin bump.
|
||
|
|
- **B — `_subint` backend**: bump `pyproject.toml`
|
||
|
|
`requires-python` upper to `<3.15`; add `'subint'` to
|
||
|
|
`SpawnMethodKey`; reuse existing UDS transport; shm
|
||
|
|
escape-hatch deferred.
|
||
|
|
- **C — harness**: drive the valid-backend tuple in
|
||
|
|
`tractor/_testing/pytest.py:345-349` from
|
||
|
|
`typing.get_args(SpawnMethodKey)`; skip subint tests on
|
||
|
|
Python < 3.14.
|
||
|
|
|
||
|
|
Key findings surfaced to the user:
|
||
|
|
- `pyproject.toml:12` currently pins `<3.14`; PEP 734
|
||
|
|
`concurrent.interpreters` only ships in 3.14 — the
|
||
|
|
load-bearing constraint.
|
||
|
|
- `_testing/pytest.py:345-349` hardcodes valid backends
|
||
|
|
as a string tuple (`'mp_spawn'`, `'mp_forkserver'`,
|
||
|
|
`'trio'`) — should be `get_args(SpawnMethodKey)`.
|
||
|
|
- `_testing/pytest.py:228` already imports
|
||
|
|
`try_set_start_method` from `tractor.spawn._spawn` —
|
||
|
|
keeping the `_spawn.py` path as the "core" module
|
||
|
|
avoids breaking external refs during Phase A.
|
||
|
|
|
||
|
|
Phase A commit breakdown (each green via `/run-tests`):
|
||
|
|
1. Drive `_testing/pytest.py` backend-tuple from
|
||
|
|
`get_args(SpawnMethodKey)` — prep.
|
||
|
|
2. Extract `trio_proc` → `spawn/_trio.py`; `_methods`
|
||
|
|
registry imports it.
|
||
|
|
3. Extract `mp_proc` → `spawn/_mp.py`; `_methods` imports
|
||
|
|
it.
|
||
|
|
4. Tidy `spawn/__init__.py` docstring for the new layout.
|
||
|
|
|
||
|
|
Workflow: Phase A runs in a new worktree via `/open-wkt
|
||
|
|
spawn_modularize` (branch `wkt/spawn_modularize`) and
|
||
|
|
lands as its own PR before Phase B/C returns to the
|
||
|
|
current `claude_bun_opus4.7_subint_spawner_backend`
|
||
|
|
branch.
|
||
|
|
|
||
|
|
## Files changed
|
||
|
|
|
||
|
|
None this turn — design/planning only. The user updated
|
||
|
|
`ai/prompt-io/prompts/subints_spawner.md` themselves to
|
||
|
|
complete the truncated sentence on line 32 (harness-flag
|
||
|
|
reference).
|
||
|
|
|
||
|
|
Upcoming (Phase A, next turn):
|
||
|
|
- `tractor/spawn/_spawn.py` — trimmed to "core"
|
||
|
|
- `tractor/spawn/_trio.py` — new; holds `trio_proc()`
|
||
|
|
- `tractor/spawn/_mp.py` — new; holds `mp_proc()`
|
||
|
|
- `tractor/spawn/__init__.py` — docstring refresh
|
||
|
|
- `tractor/_testing/pytest.py` — backend tuple from
|
||
|
|
`get_args(SpawnMethodKey)`
|
||
|
|
|
||
|
|
## Human edits
|
||
|
|
|
||
|
|
None — committed as generated. User completed the
|
||
|
|
truncated sentence on line 32 of
|
||
|
|
`ai/prompt-io/prompts/subints_spawner.md` themselves
|
||
|
|
*before* this prompt-io log was written; that edit was
|
||
|
|
the user's authoring, not an edit to AI output.
|