/relay?r=1 inside the tap, then the
reconnect knock below.
"Forget this computer" removes the record AND untrusts that card in TreeKin (add an
additive TreeKin.forget(fp) if none exists). One tap, no confirm(;
the row says "Forgotten." and an Undo button lives 10 seconds.
- Reconnect knock (relay message type 'fl-reconnect', v:1): the phone asks the relay for a
fresh challenge (GET /challenge, same origin from the relay page, 32 hex, 60 s, single
use), signs the string
'fl-reconnect|v1|' + challenge + '|' + deskFp + '|' + phoneFp
with its own kin key (add an additive TreeKin.signReconnect(str) that signs with the same
non-exportable key; never export it), and sends { offer, card, challenge, sig } to the
relay by postMessage to that exact origin, same as 033c. Same answer path after that:
TreePool.readReply, finish, iceServers [].
- If the address no longer answers (DHCP gave the Mac a new address, other Wi-Fi), the row
says plainly: "That computer did not answer at its last address. Ask it for a new join
link." and the 033c link flow updates the record when it is used. Never scan, never guess
addresses, never sweep the LAN.
- Pause wins: the phone never changes its own pool door. A paused phone still only connects.
Desktop (FreeLattice desktop/, additive only):
- lattice-discover.js gets createDiscover034, wrapping createDiscover033c:
Stable port: remember the last good port in port.json (storeDir). on() tries it first
on the private address; if busy, falls back to the 033 listen(0) path and saves the new
one. Same safeBindAddress checks; never 0.0.0.0, never public, never IPv6, never VPN.
GET /challenge: Host header exact, from the relay origin only, rate 4/min. Returns
{ v:1, c:<32 hex> }, single use, 60 s, memory only, at most 4 live, all gone on Off.
POST /knock with r:1 from the relay origin: no one-time link token needed. Instead:
the card must verify (verifyKinCard) AND its fp must already be in kin.json AND the
keyHash must match the saved one AND the challenge must be live (used up at once) AND
the signature over 'fl-reconnect|v1|