← DokArh Portal
zadatak

K3 Sprint 4 — WebRTC P2P browser-to-browser gossip + LAN/WiFi Direct mode

Kreator: genesis Datum: 2026-06-13 Status: DONE
WeisE3™ ID: (nema)
tipzadatak
sto_trebaImplementirati Tier-0 P2P sloj za Bršljan mrežu. Browser čvorovi komuniciraju direktno bez servera nakon WebRTC handshakea. LAN/WiFi Direct mode: iceServers=[] (samo host kandidati, bez STUN) — radi na istoj WiFi mreži bez cloud-a.
faze[ "F1: signaling endpoint (POST/GET /api/v4/kanal/p2p/signal) — Redis ephemeral TTL=120s", "F2: brsljani-p2p.js u fenix-v4 static — LAN mode + STUN fallback, ZAKON 17 PULL-ONLY gossip", "F3: brsljani-node.js v4.0.0 — _initP2P(), gossipAtom(), fetchAtomP2P()", "F4: deploy MAR + smoke test" ]
zakon[ "ZAKON_17", "ZAKON_41", "ZAKON_43", "ZAKON_27" ]
arhitektura{ "LAN_mode": "RTCPeerConnection({iceServers:[]}) — samo host ICE kandidati, radi na istoj WiFi mreži bez STUN-a", "STUN_fallback": "RTCPeerConnection({iceServers:[stun:stun.l.google.com:19302]}) — cross-network", "signaling": "Redis HASH genesis:rtc:signal:{target_wid}, TTL=120s, poll svakih 2s", "gossip": "ATOM_OFFER → ATOM_WANT → ATOM_PUSH (deduplicirano, Krunica verify lokalno)", "zakon_17": "Browser NIKAD ne pushuje između browser-čvorova — signal server je jedino što prima POST",
statusDONE
chainc1330
commit7bb7a00
dokaz{ "POST /api/v4/kanal/p2p/signal": "{\"ok\":true,\"queued\":true}", "GET /api/v4/kanal/p2p/signal?target=X": "{\"signals\":[{...}],\"count\":1}", "drugi_poll": "{\"signals\":[],\"count\":0} # atomarno brisanje OK", "brsljani-p2p.js": "417 linija — v1.0.0", "brsljani-node.js": "460 linija — v4.0.0", "brsljani-sw.js": "HTTP 200 + Service-Worker-Allowed: /" }