zebra-report/web
Russell Ballestrini dcb1c8e5a1 chat.html: drop self-echo frames at onRxFrame entry
zebrad reads @DEFAULT_MONITOR@ which mixes every PA stream on
a machine, so each browser tab hears its own carrier echoed
back. without a filter, every outbound message would render
twice in the chat log (once as 'me' at send time, once as
'peer' on echo arrival).

filter: compare frame.sid (carried in DATA + HELLO) against
our own senderIdBytes(). if equal, drop frame before any UI
work. loopback mode unaffected since BroadcastChannel never
echoes to sender by spec.

senderIdBytes returns a stable per-tab id:
  * passphrase mode: random 4 bytes cached for tab lifetime
  * pubkey mode: first 4 of SHA-256(pubkey), stable across reloads
2026-05-27 16:00:28 -04:00
..
blog phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
fonts phase 2: gap analysis — cat>> append + binary asset recovery 2026-05-27 13:54:19 -04:00
chat.html chat.html: drop self-echo frames at onRxFrame entry 2026-05-27 16:00:28 -04:00
index.html phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
kernel.html phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00