48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
|
|
---
|
||
|
|
model: gpt-5.6-sol
|
||
|
|
service: opencode
|
||
|
|
session: trio-pre-handshake-child-death
|
||
|
|
timestamp: 2026-08-28T04:51:19Z
|
||
|
|
git_ref: fb6d81d3
|
||
|
|
scope: code
|
||
|
|
substantive: true
|
||
|
|
raw_file: 20260828T045119Z_fb6d81d3_prompt_io.raw.md
|
||
|
|
---
|
||
|
|
|
||
|
|
## Prompt
|
||
|
|
|
||
|
|
The human approved the next WireGuard Layer C implementation step after
|
||
|
|
committing child-side network namespace bootstrap.
|
||
|
|
|
||
|
|
## Response summary
|
||
|
|
|
||
|
|
Restore and harden the boot-race design originally implemented by
|
||
|
|
`3b0724eba85b4014170ed95773e1e41a60d5c513` before transferring
|
||
|
|
namespace FDs. Race the initial peer handshake against child-process
|
||
|
|
death so a pre-connection bootstrap failure surfaces instead of
|
||
|
|
parking `ActorNursery.start_actor()` forever.
|
||
|
|
|
||
|
|
## Files changed
|
||
|
|
|
||
|
|
- `tractor/spawn/_spawn.py` - provide the generic handshake/process
|
||
|
|
death race.
|
||
|
|
- `tractor/spawn/_trio.py` - use the race during Trio child startup.
|
||
|
|
- `tests/test_spawning.py` - cover handshake-first and death-first
|
||
|
|
schedules, simultaneous outcomes, waiter errors, and backend cleanup.
|
||
|
|
|
||
|
|
## Human edits
|
||
|
|
|
||
|
|
The human approved continued Layer C implementation. The agent narrowed
|
||
|
|
the next slice to failure detection after analysis showed FD transfer
|
||
|
|
would otherwise introduce a parent hang. The human then identified the
|
||
|
|
earlier `wait_for_peer_or_proc_death()` implementation and required
|
||
|
|
explicit credit; the source docstring and commit message now cite its
|
||
|
|
original commit rather than a later cherry-pick. The human directly
|
||
|
|
reflowed `_trio.py` to the project line limit and normalized nearby
|
||
|
|
quotes. The human also required naming the race helper in its lifecycle
|
||
|
|
comment, explicit `trio.Cancelled` handling in waiter tests, expected
|
||
|
|
cancellation diagnostics, and a `trio.Process`-constrained test double.
|
||
|
|
After mainline portability verification, the human chose to commit the
|
||
|
|
fix on the current WireGuard branch and require its cherry-pick onto
|
||
|
|
`main` as a blocker in the eventual WireGuard pull request.
|