Iterates on the docker-based repro infrastructure while diagnosing the
portal@unsandbox.com 'peer closed after 0/4 bytes' failure:
- _write_ssl_config_portal_match() emits an ssl_dist.config with the
exact options portal runs: permissive verify_fun (accepts bad_cert),
versions [tlsv1.3, tlsv1.2], secure_renegotiate, server_name_indication
disabled. Same shape as /opt/unsandbox/certs/inet_tls.conf.
- Elixir docker peer now boots with --name (long FQDN, like prod)
instead of --sname (short). Production portal is portal@unsandbox.com
so the dist driver's routing path is different from short-name peers.
- Elixir GenTarget now logs init + handle_call + handle_info. Fixture
redirects container stdout to a file; test prints it on
pass-or-fail so we can see whether the peer received our gen_call.
- elixir image bumped to 1.16-otp-25 (portal runs OTP 25.3.2.5 / erts
13.2.2.5, NOT OTP 26 — discovered via the portal release's bundled
erts version).
Despite matching every dimension I can find (OTP version, TLS dist
config, Elixir GenServer wrapping, long node names), the test still
passes locally — so the production failure is something specific to
the live portal beam state, not a general protocol or version issue.