docs(peer): document authenticated sharing architecture

Update user and developer documentation for the protocol-8 system: persistent
SPKI-derived identities, exact catalog ContentId authority, pinned responder
pulls, structured runtime ownership, direct-author Call to Play, and the global
local-network sharing switch.

Remove active descriptions of repository-wide certificates, pushed deltas,
relayed histories, and metadata consensus. Keep operational and UI boundaries
aligned with the implementation, including the fail-closed production catalog
gate.

Test Plan:
- `just fmt` (passed)
- `git diff --cached --check` (passed)
This commit is contained in:
2026-08-10 14:05:00 +02:00
parent 4a1b08db98
commit e0eafa6e33
4 changed files with 465 additions and 260 deletions
+21 -14
View File
@@ -1,5 +1,8 @@
# Handoff: SoftLAN Launcher redesign
<!-- Exact layout diagrams and CSS literals intentionally remain unwrapped. -->
<!-- rumdl-disable MD013 -->
A modern, gamer-friendly redesign of the SoftLAN local-network game launcher,
replacing the current basic UI with a Steam-inspired dark layout that keeps high
usability while adding cover art, state-coded actions, a game-detail overlay,
@@ -945,20 +948,24 @@ also seeds a few representative calls on mount (a live call with chat, a fresh
call you started, a scheduled call whose check-in window just opened, and one
scheduled for later collecting RSVPs).
The production launcher uses the peer's existing QUIC control channel. Each
create, response, RSVP, chat, leave, cancel, start, or deadline-extension action
is an immutable, uniquely identified event. Connected peers receive new events
immediately, while `Hello` / `HelloAck` exchange the bounded, deduplicated event
history so a late joiner reconstructs every event and chat message for active
calls. Running and Cancelled calls retain their complete history for 15 minutes
so late joiners can see the outcome, roster, and chat, then compact to a Start
or Cancel tombstone for the rest of the peer session. Unresolved calls are
removed after the five-minute post-deadline recovery period. The frontend
reducer turns that event history into the `Nomination` state above, derives
time-based phase changes locally, and prunes retired raw events. Stable peer IDs
identify actors and enforce creator controls; `settings.username` is only the
display name. These deadlines use event wall-clock timestamps, so LAN clocks are
assumed to be reasonably close; no clock-synchronization protocol is attempted.
The production launcher sends only local intents over the app boundary. The peer
core generates each immutable event's call/event nonces and timestamp, then
publishes a bounded revision-change hint to connected peers. A hint is only a
liveness optimization: receivers perform an authenticated, identity-pinned
`Hello` pull and replace that author's complete bounded slice. Peers do not
relay another author's history, so a late joiner must discover, pin, and pull
every live author before its wholesale view contains the union of creator,
participant, and chat events.
Running and Cancelled calls retain their complete author-owned events for 15
minutes so late joiners can see the outcome, roster, and chat, then expire from
the view. Unresolved calls are removed after the five-minute post-deadline
recovery period. The frontend reducer derives the `Nomination` state and
time-based phase changes from each full replacement. Stable peer IDs identify
authors and enforce creator controls; `settings.username` is a bounded display
name that can update an author's snapshot without creating an event. These
deadlines use event wall-clock timestamps, so LAN clocks are assumed to be
reasonably close; no clock-synchronization protocol is attempted.
---