Commit graph

3 commits

Author SHA1 Message Date
99feb57767
roadmap: mark phase 2 done 2026-06-16 11:00:14 -04:00
bbb0c316c5
phase 2: EPMD client
Synchronous TCP client for Erlang Port Mapper Daemon. One request type
(PORT_PLEASE2_REQ, tag 122), one response type (PORT2_RESP, tag 119).
Returns EpmdInfo dataclass or None if the node is not registered.

Tests run two layers:
  - Unit tests against recorded byte streams captured from a real EPMD
    answering for `erl -sname testnode` and for an unregistered name.
  - Integration tests spawn `erl -sname erldistpy_itest` in a fixture
    and verify lookup() returns the live port; skipped if erl or EPMD
    are absent.

10 new tests, 68 total green, lint clean.
2026-06-16 11:00:00 -04:00
b9fd28ca3b
phase 0 + 1: repo bones and ETF codec
Repo scaffolding (LICENSE, Makefile, pyproject.toml, README) matching
unfeed conventions. Flat package layout, ruff config, Unlicense.

ETF codec covers the subset needed for gen_call against an Elixir node:
small/int/big_int, atom_utf8 (legacy atom_ext on decode), binary, nil,
list, small/large tuple, new_pid, newer_reference. Booleans round-trip
as atoms true/false; Python None as atom nil; str encodes to utf-8
binary to match Elixir convention.

Golden vectors were generated from real Erlang term_to_binary/1 output
(generator script at docs/etf_vectors.erl). Decode tests verify wire
compatibility; round-trip tests verify encoder consistency.

make all green: 58 passed, lint clean.

Next phases tracked in docs/ROADMAP.md (EPMD, handshake, channel,
gen_call, TLS, unfeed integration).
2026-06-16 10:39:01 -04:00