From 09673d2592894033baa1572db29469cb44245d54 Mon Sep 17 00:00:00 2001 From: Mollusk Date: Mon, 15 Jun 2026 05:28:27 -0400 Subject: [PATCH] docs: mark W7 P4 transport done (loopback-verified); endpoint fork next Co-Authored-By: Claude Opus 4.8 --- docs/contacts-plan.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/contacts-plan.md b/docs/contacts-plan.md index 86ab3f5..10df640 100644 --- a/docs/contacts-plan.md +++ b/docs/contacts-plan.md @@ -123,12 +123,21 @@ address book), though a lightweight mutual-add is optional polish. `PresenceMode` {Invisible, Normal(default), Discoverable} persisted in `AppConfig`; `interpret_pong` — defensive (sanitizes peer room name, only surfaces a joinable room if the ticket parses, never auto-joins). -- **Deferred to a 2-machine session (the I/O edges):** bind the live control - endpoint on its own ALPN (e.g. `peerspeak/friends/0`) **outside** the room - session lifecycle; its accept loop (gated by `should_answer`); the rate-limited - outbound ping scheduler (on app open + slow refresh); reporting our current - gathering as a member-issued ticket (reuse `restamp`); rendering friend status + - a **room-name tag + Join** entry in the friends list (overlaps P5). +- **Transport DONE 2026-06-15 (`501f76a`):** `src/presence_net.rs` — bind/`probe`/ + `serve` the ping→pong over ALPN `peerspeak/friends/0`; request/response per conn; + `serve` authenticates `remote_id` and asks an injected `Handler` (wraps + `should_answer` + builds the pong) what to reply, `None` = reveal nothing to a + stranger. **Loopback integration test PASSED over real iroh endpoints** (friend + gets Pong+room; stranger gets unusable reply); run with `cargo test -- --ignored + presence_net`. +- **STILL deferred (next session, needs care + 2 machines):** + - **The endpoint-lifecycle fork (decide first):** a second always-on endpoint + shares our node id with the per-join room endpoint (possible relay/identity + collision) vs. refactoring to ONE persistent endpoint that hosts friends + + room. Spike/decide before wiring `serve` live. + - Spawn `serve` outside the room session; the rate-limited outbound ping + scheduler (app open + slow refresh); report our current gathering via + `restamp`; render friend status + a **room-name tag + Join** entry (overlaps P5). ### P5 — Recents + UI — Medium Local recents list (cosmetic room tags). Friends-list UI with status dots