tractor/ai/prompt-io/opencode/20260821T040803Z_3c1bbe73_p...

2.3 KiB
Raw Blame History

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 experiments 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.