--- model: gpt-5.6-sol service: opencode timestamp: 2026-08-21T23:32:04Z git_ref: 5d92595f diff_cmd: git diff HEAD~1..HEAD --- # Raw output - read WireGuard state through pyroute2 The human authorized the first incremental WireGuard Layer B change as a stacked branch from tractor PR #505, with one atomic change and a commit plan at the end of the turn. > `git diff HEAD~1..HEAD -- pyproject.toml uv.lock tractor/discovery/__init__.py tractor/discovery/_tunnel.py tests/discovery/test_wg_inspection.py` Added a Linux-only `wg` extra using pyroute2 0.9.6, plus asynchronous public helpers for reading one interface's public key and peer keys. The complete synchronous open/read/parse/close sequence runs in a Trio worker thread because pyroute2 owns a private asyncio loop internally. Named namespace reads pass `flags=0` to override pyroute2's `O_CREAT` default, ensuring inspection cannot create a missing namespace. Fake netlink messages cover multipart dumps, key validation, stable peer deduplication, worker-thread execution, netns selection and cleanup on success/error. Ruff and lock checks passed. Focused tunnel/multiaddr coverage passed 47 tests; the complete discovery suite passed 88 tests with 2 xpasses.