3.2 KiB
Prompt
Continuing the Phase B work from the design sessions logged in 20260417T034918Z_9703210_prompt_io.md and the Phase A impl in 20260417T035800Z_61a73ba_....
User direction at this step: - “ok now let’s continue with the subints part of the plan ya?” → kick off Phase B. - After I proposed a 4-sub-phase breakdown (B.1 scaffolding, B.2 min-viable spawn, B.3 lifecycle, B.4 test enablement), user: “ok can we continue with B” → approving the phasing and design defaults (thread-per-subint, UDS default, code-string bootstrap via interp.exec()). - User switched the worktree to subint_spawner_backend (instead of opening a fresh worktree as I’d proposed): “i already switched branches in the wkt, you should work off subint_spawner_backend now”.
Scope of this turn: B.1 scaffolding only — wire the 'subint' name through the spawn-method registry + harness, add a feature-detected stub module, bump pyproject. No actual spawn flow.
Response summary
Produced the Phase B.1 scaffolding patch, landed as commit 5cd6df58 (subject: Add‘subint’spawn backend scaffold (#379)). Four files changed, +124 / -2 lines.
Key pieces (all generated by claude, reviewed by human before commit): - tractor/spawn/_subint.py — new; feature- detects concurrent.interpreters; subint_proc() stub raises RuntimeError on py<3.14 or NotImplementedError with issue-#379 URL on py≥3.14. Signature mirrors trio_proc/mp_proc so B.2 can drop the impl in without touching _methods. - tractor/spawn/_spawn.py — adds 'subint' to SpawnMethodKey, grows a case 'subint' arm in try_set_start_method() with feature-gate, re- imports sys for the gate-error msg, adds late from ._subint import subint_proc import and _methods entry. - tractor/_testing/pytest.py — converts the gate-error into pytest.UsageError via a try/except around try_set_start_method() so --spawn-backend=subint on py<3.14 prints a clean banner instead of a traceback. - pyproject.toml — pin requires-python <3.14 → <3.15, add 3.14 trove classifier.
Files changed
See git diff 5cd6df5~1..5cd6df5 --stat:
pyproject.toml | 3 +-
tractor/_testing/pytest.py | 8 +++-
tractor/spawn/_spawn.py | 15 ++++++
tractor/spawn/_subint.py | 100 +++++++++++++++++++++++++
4 files changed, 124 insertions(+), 2 deletions(-)
Validation on py3.13: - registry/gate probe — OK; _has_subints = False, subint_proc() raises RuntimeError as expected. - try_set_start_method('subint') — raises cleanly. - pytest --spawn-backend=subint — exits with pytest.UsageError banner. - Spawn-relevant test subset — 69 passed, 1 skipped. - Full suite on py3.13 deferred (scaffolding is no-op on <3.14). - Full-suite on py3.14 pending user setting up the venv.
Human edits
None — committed as generated by claude. uv.lock was intentionally left unstaged by the user (pin- bump regenerated cp314 wheel entries but they were deferred to a follow-up).