tractor/examples
Gud Boi 13588d0216 Peel `wg` maddrs w/ `py-multiaddr`'s own tunnel API
`py-multiaddr` already ships the entire tunnel compose/peel
surface and this module was reimplementing it — a raw
`maddr.split('/')` plus index arithmetic, sitting directly under
a comment congratulating itself for not hand-rolling a parser.
Same NIH trap gh #429 existed to close, just one layer up. The
API was linked from gh #443's own 2nd bullet the whole time.

So every cut now goes through the real thing,

| need | API |
| --- | --- |
| isolate the bearer | `.decapsulate_code(P_WG)` |
| per-seg maddrs | `.split()` |
| rejoin a seg tail | `Multiaddr.join()` |
| read the key | `.value_for_protocol('wg')` |
| recompose | `.encapsulate()` |

`.decapsulate_code()` turns out to handle the infix `/wg/` seg
cleanly *because* it cuts on proto-code and never tries to match
an addr value — the key seg has no addr of its own, which was
the exact thing I'd assumed would need bespoke handling.

Deats,
- rename the role fields `inner`/`inner_proto` ->
  `overlay`/`overlay_proto`, matching `py-multiaddr`'s
  encapsulation model (earlier segs wrap later ones) and #443's
  owner table. `inner` collided head-on w/ call-stack `inner`,
  where it reads as higher-up + later-called, while here the
  encapsulated addr is bound *first* and sits deeper.
- drop `_segments()` and its degraded hand-split path entirely.
  W/o the codec there's now one actionable `RuntimeError`
  instead of a silent downgrade, superseding the swallow fix in
  7d6e7955.
- add `.as_multiaddr()` so callers can stay in `Multiaddr` land;
  `.maddr` is now just `str()` of it.
- accept `str|Multiaddr` on the way in.
- carry `bearer_ip`/`overlay_ip` so a v6 stack re-renders as v6
  — the old `.maddr` hardcoded `/ip4/` and would silently
  mangle it.
- both host scripts follow the rename to `.overlay`.

⚠️ `value_for_protocol('ip4')` on a *full* tunnelled maddr
silently returns the **first** match, i.e. the bearer's host, so
it's only ever called here on an already-peeled sub-maddr.

(this patch was generated in some part by `claude-code` using `claude-opus-5` (`anthropic`))
2026-08-17 17:25:07 -04:00
..
advanced_faults Include `TransportClosed` in tpt-layer err handling 2026-02-19 13:55:02 -05:00
debugging Fix review nits from PR #460 self-review 2026-06-28 13:29:01 -04:00
integration mpi integration test 2026-04-10 20:58:54 -04:00
multihost/wg_lan Peel `wg` maddrs w/ `py-multiaddr`'s own tunnel API 2026-08-17 17:25:07 -04:00
parallelism Rework landing example onto the `Context` API 2026-06-28 13:29:02 -04:00
trio Reduce "ignore cases" script to `trio`-only 2025-09-07 18:49:21 -04:00
__init__.py Make example a subpkg for `python -m <mod>` testing 2022-07-27 11:40:02 -04:00
__main__.py Use trio.run() in windows tests 2021-05-07 11:21:40 -04:00
a_trynamic_first_scene.py Use `.wait_for_result()` in dated examples 2026-06-28 13:29:01 -04:00
actor_spawning_and_causality.py Use `.wait_for_result()` in dated examples 2026-06-28 13:29:01 -04:00
actor_spawning_and_causality_with_daemon.py Drop lingering rpc_module_paths refs 2021-05-07 11:21:40 -04:00
asynchronous_generators.py Terminate async gen example caller to avoid (benign) errors in console output 2021-08-02 21:49:15 -04:00
full_fledged_streaming_service.py Final try, drop logging level in streaming example to see if macos can cope.. 2026-03-09 19:46:42 -04:00
infected_asyncio_echo_server.py Swap `open_channel_from()` to yield `(chan, first)` 2026-03-13 19:28:57 -04:00
multiple_streams_one_portal.py Update all examples to new streaming API 2021-04-28 12:23:08 -04:00
nested_actor_tree.py Add 5 examples filling doc-tutorial gaps 2026-06-28 13:29:01 -04:00
quick_cluster.py Remove lingering seg=False-flags from examples 2025-08-18 12:03:10 -04:00
remote_error_propagation.py Drop lingering rpc_module_paths refs 2021-05-07 11:21:40 -04:00
rpc_bidir_streaming.py Drop now-deprecated deps on modern `trio`/Python 2025-03-16 16:06:24 -04:00
service_daemon_discovery.py Add 5 examples filling doc-tutorial gaps 2026-06-28 13:29:01 -04:00
service_discovery.py Rename `Arbiter` -> `Registrar`, mv to `discovery._registry` 2026-04-02 17:59:13 -04:00
streaming_broadcast_fanout.py Add 5 examples filling doc-tutorial gaps 2026-06-28 13:29:01 -04:00
typed_payloads.py Add 5 examples filling doc-tutorial gaps 2026-06-28 13:29:01 -04:00
uds_transport_actor_tree.py Fix review nits from PR #460 self-review 2026-06-28 13:29:01 -04:00