98 lines
3.2 KiB
Markdown
98 lines
3.2 KiB
Markdown
|
|
---
|
||
|
|
model: claude-opus-4-7[1m]
|
||
|
|
service: claude
|
||
|
|
session: subints-spawner-phase-b1-impl
|
||
|
|
timestamp: 2026-04-17T12:44:37Z
|
||
|
|
git_ref: 5cd6df5
|
||
|
|
scope: code
|
||
|
|
substantive: true
|
||
|
|
raw_file: 20260417T124437Z_5cd6df5_prompt_io.raw.md
|
||
|
|
---
|
||
|
|
|
||
|
|
## 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).
|