58 lines
2.3 KiB
Markdown
58 lines
2.3 KiB
Markdown
|
|
---
|
||
|
|
model: openai/gpt-5.6-sol
|
||
|
|
service: opencode
|
||
|
|
session: 76c5d31c-5a2f-4503-9b16-410ee7f4fab3
|
||
|
|
timestamp: 2026-08-21T04:08:03Z
|
||
|
|
git_ref: 3c1bbe73
|
||
|
|
scope: code
|
||
|
|
substantive: true
|
||
|
|
raw_file: 20260821T040803Z_3c1bbe73_prompt_io.raw.md
|
||
|
|
---
|
||
|
|
|
||
|
|
## Prompt
|
||
|
|
|
||
|
|
Continue PR #481 review cleanup one item at a time. Compare the
|
||
|
|
remaining child-registration/reaping experiment against PR #484,
|
||
|
|
identify the next valid behavior, and generate an exact commit plan for
|
||
|
|
that boundary without committing automatically.
|
||
|
|
|
||
|
|
## Response summary
|
||
|
|
|
||
|
|
Separated late-child admission from the broader bounded-reap rewrite.
|
||
|
|
Added one synchronous `ActorNursery._register_child()` publication step
|
||
|
|
that stores the child and its reap events before sampling nursery
|
||
|
|
cancellation. This closes both scheduler orderings around
|
||
|
|
`ActorNursery.cancel()`'s child snapshot.
|
||
|
|
|
||
|
|
The MP backend registers immediately before synchronous process startup
|
||
|
|
and refuses to start when cancellation already owns the child. The Trio
|
||
|
|
backend registers immediately after `open_process()` and kills that
|
||
|
|
already-created process when registration observes cancellation. An
|
||
|
|
early `start_actor()` guard rejects calls begun after cancellation is
|
||
|
|
already visible.
|
||
|
|
|
||
|
|
Deterministic tests cover the nursery registration ordering and the MP
|
||
|
|
no-start invariant. Comparison with PR #484 confirmed that its retained
|
||
|
|
generic nursery/backends do not close this race.
|
||
|
|
|
||
|
|
## Files changed
|
||
|
|
|
||
|
|
- `tractor/runtime/_supervise.py` - atomically publish child ownership
|
||
|
|
and reject actor starts after nursery cancellation.
|
||
|
|
- `tractor/spawn/_mp.py` - register before synchronous process startup
|
||
|
|
and abort a cancellation-owned child.
|
||
|
|
- `tractor/spawn/_trio.py` - register immediately after process creation,
|
||
|
|
kill a cancellation-owned child, and remove its stale unused import.
|
||
|
|
- `tests/test_to_actor.py` - cover late registration and MP startup
|
||
|
|
suppression.
|
||
|
|
|
||
|
|
## Human edits
|
||
|
|
|
||
|
|
The human required review extras to be handled one item and one
|
||
|
|
behavioral commit at a time, with each item compared against PR #484
|
||
|
|
before acceptance. That direction split this late-registration fix from
|
||
|
|
the original broad experiment's bounded post-ack reaping,
|
||
|
|
`ActorNursery.cancel()` hard-reap rewrite, and debugger/error behavior.
|
||
|
|
The human accepted the narrower late-registration boundary by requesting
|
||
|
|
its commit plan. No direct source-line edits were made by the human.
|