tractor/ai/prompt-io/opencode/20260818T021729Z_d9a6e2e9_p...

2.0 KiB

Raw output - tunnelled-address handoff completion

Recovered Claude Code session 7b9c97c4-fff7-4ac4-97fb-35720453308e and continued its interrupted wkts/addr_unpacking changes.

Generated code

git diff HEAD~1..HEAD -- tractor/discovery/_tunnel.py

Added frozen WGTunnelSpec and TunnelledAddress structs. The wrapper delegates transport identity, validity, bindspace, and wire serialization to its overlay while retaining tunnel metadata locally. Added pure helpers to peel nested wrappers and enumerate their tunnel specs. The module documents why wrappers must be peeled before Endpoint selects the overlay transport backend.

git diff HEAD~1..HEAD -- tractor/discovery/_addr.py

Extended is_wrapped_addr() to recognize TunnelledAddress without registering tunnels as message transports, and widened the namespace identifier type to cover named network namespaces.

git diff HEAD~1..HEAD -- tractor/discovery/__init__.py

Exported the tunnel address API from tractor.discovery and updated the eager-import documentation.

git diff HEAD~1..HEAD -- tests/discovery/test_tunnelled_addr.py

Added focused coverage for delegation, serialization, rewrapping, namespace fallback, nested peeling order, and frozen structs.

git diff HEAD~1..HEAD -- ai/tpt-backends/03_wg_tunnel_bindspace.md

Clarified that tractor owns the eventual bindspace lifecycle and may provision the WireGuard iface, routes, and kernel UDP listener through netlink/pyroute2. Kernel socket ownership does not make the bearer an application MsgTransport endpoint.

Verification

Focused tests:

9 passed in 0.03s

Discovery and IPC suites:

67 passed, 2 xpassed

The audit removed premature module-level listener hooks. Runtime integration must peel the wrapper explicitly at bind and dial boundaries rather than make ._tunnel impersonate a transport backend.