roadmap: mark phase 7 done (unfeed ErlangDistTransport)

ErlangDistTransport itself lives in unfeed/unfeed/wallet.py to keep
erldistpy app-agnostic. Tests + docs there. Pending the Elixir-side
wallet_rpc gen_server, then staging soak, then prod switch.
This commit is contained in:
russell@unturf.com 2026-06-16 12:25:55 -04:00
parent 531c26fcfb
commit c870bdb2ac
No known key found for this signature in database

View file

@ -94,9 +94,21 @@ if we hit a peer that requires it.
the tunnel. Negative tests confirm: plaintext connection fails,
wrong-CA client cert fails.
## Phase 7 — unfeed integration
## Phase 7 — unfeed integration
- `ErlangDistTransport` implementing unfeed's `WalletTransport` Protocol
- Maps `/v1/health`, `/v1/address`, ... to gen_call requests
- `unfeed` deploys with a config switch: `wallet_transport = http | erldist`
- Cutover after a soak period on staging
- `ErlangDistTransport` lives in `unfeed/wallet.py` (not erldistpy
itself — keeps erldistpy app-agnostic)
- Implements `WalletTransport` Protocol via `erldistpy.Node.call`
- Wraps each HTTP-shape `(method, path, json, params)` into a single
`{:unfeed_rpc, Method, Path, JsonBody, Params}` gen_server request
- Reply translation: atoms/binaries → str, nested maps/lists recurse
- Error mapping: `{:error, code, msg, retryable}``WalletBridgeError`;
`CallTimeout``bridge_timeout`; `NodeError``bridge_unreachable`
- Selected per-deploy via `unfeed.wallet_transport = http | erldist`
- Optional TLS dist by setting `wallet_node_tls_*` config keys
- 11 tests in unfeed/tests/test_wallet_erldist.py mock `Node.call`
and verify the full request/reply contract
The Elixir-side gen_server (`wallet_rpc`) doesn't exist yet — it's
the next ticket on the Elixir wallet bridge side. Once it lands and a
staging deploy stays healthy, flip the production switch.