From 013c2519dca18adde98d2cf14df7410498a01205 Mon Sep 17 00:00:00 2001 From: Florian Egger Date: Mon, 7 Sep 2026 14:09:30 +0200 Subject: [PATCH] docs: record real two-machine validation of Phase 6 on the Pi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The full chain — mDNS discovery, signaling negotiation, RTP over Wi-Fi, software H.264 decode, and fullscreen KMSDRM letterboxed rendering — is confirmed working on a real two-machine setup (desktop -> Raspberry Pi Zero 2 W headless receiver). The probe gradient appeared on the Pi's display. --- .agents/MEMORY.md | 8 ++++++++ docs/PHASES.md | 9 ++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.agents/MEMORY.md b/.agents/MEMORY.md index 9eb7ac9..db7a1b4 100644 --- a/.agents/MEMORY.md +++ b/.agents/MEMORY.md @@ -65,6 +65,14 @@ loopback; current phase is Phase 7. before the fix). Cross-compiling on the dev machine was considered and dropped — the on-Pi build works and the toolchain/container effort was not needed. +- **REAL-HARDWARE VALIDATION (desktop → Pi Zero 2 W over Wi-Fi)**: the full + chain works on two machines: mDNS discovery → signaling negotiation → + RTP over Wi-Fi → software H.264 decode → fullscreen KMSDRM letterboxed + rendering on the Pi's display. Two transport lessons from that network: + the LAN's 6to4 (2002::) addresses are unreachable between peers — + senders now try all discovered addresses in reachability order (private + IPv4 first; build/pi_probe.cpp in the build dir is the probe that + validated this end-to-end against the real Pi). - **Phase 5 (local UDP sender→receiver loopback) is implemented**: - `UdpRtpTransport` (src/network/udp_transport.cpp): raw POSIX sockets, diff --git a/docs/PHASES.md b/docs/PHASES.md index 893250b..9fbc8d8 100644 --- a/docs/PHASES.md +++ b/docs/PHASES.md @@ -73,9 +73,12 @@ session. - [x] Extend CLI with `--peer` and `--discover`. **Validation**: two peers connect without hard-coded IP addresses. -Validated end-to-end over loopback: discovery finds the announced receiver, -the sender negotiates a session over the signaling channel, and streams to -the negotiated endpoint over both IPv4 and IPv6. +Validated over loopback AND on real two-machine hardware: a Raspberry +Pi Zero 2 W (Wi-Fi, headless KMSDRM, systemd autostart) was discovered, +negotiated with, and streamed to from the desktop; the receiver rendered +a synthetic feed fullscreen on its display. On that network the LAN's +6to4 addresses are unreachable between peers, so senders try all +discovered addresses in reachability order (private IPv4 first). ## Phase 7 — Resilience and Polish