tractor/ai/prompt-io/opencode/20260826T003430Z_6dd39da0_p...

1.2 KiB

Raw output - own WireGuard interface lifecycle

After committing explicit peer configuration, the human authorized the next incremental lifecycle change.

git diff HEAD~1..HEAD -- tractor/discovery/_tunnel.py tractor/discovery/__init__.py tests/discovery/test_wg_iface_lifecycle.py ai/tpt-backends/03_wg_tunnel_bindspace.md

Added owned async open_wg_iface() lifecycle with role-policy validation before side effects. Listen bearer ports configure the local listener; dial bearers fill omitted endpoints only for the selected maddr peer.

Pyroute2 worker code creates the WireGuard link, assigns local addresses, configures private key/listen port and every explicit peer, raises the link, and removes it on exit. Partial create failures clean up synchronously; async create/remove calls are cancellation-shielded.

Privileged operations are faked in tests. Ruff and lock checks passed; focused WG lifecycle/config/inspection coverage passed 22 tests. A broad unrelated registrar cancellation parameter timed out after 76 passes and 2 xpasses; its isolated rerun passed.