2.2 KiB
Prompt
After committing generic pre-handshake child-death detection, the human approved the proposed next Layer C slice: transport a live bindspace capability through the Trio spawn backend.
Response summary
Plumb an optional process-local Bindspace through actor spawn APIs. Give a Trio exec child its own inherited namespace descriptor, preserve existing caller pass_fds, transport the FD/inode pair through the CLI, and close the temporary parent descriptor on every open-process outcome. Reject unsupported multiprocessing transport explicitly. Exercise the complete Trio path with a real actor that enters a distinct network namespace and reports its namespace and inherited-FD inodes over RPC.
Files changed
tractor/runtime/_supervise.py- accept and relay a child bindspace.tractor/to_actor/_api.py- expose bindspace spawn configuration.tractor/spawn/_spawn.py- relay the bindspace to spawn backends.tractor/spawn/_trio.py- duplicate, transfer, and close the FD.tractor/spawn/_mp.py- reject unsupported MP transport.tractor/_child.py- parse and forward the atomic CLI capability.tests/test_netns_spawn.py- cover transport and cleanup schedules.
Human edits
The human approved the Trio-first transport boundary after reviewing the proposed dependency order, then supplied staged-diff comments across multiple review passes. Human-directed revisions replaced abstract ownership wording with concrete FD and process terminology, clarified descriptor cleanup, preserved existing pass_fds explicitly, and replaced the mocked success-path test with a real child actor, real setns(), handshake, and RPC round trip inside unprivileged user/network namespaces. Follow-up review added direct parent FD-table verification that the temporary child-bound duplicate is closed after successful spawn.
Multiprocessing FD reduction and root-process namespace entry remain separate follow-up slices. No direct manual source edits were observed; the review-driven source revisions were applied by the agent.