{"id":"c1331","filename":"c1331_dug_k3_p2p_test.dok.json","weise3_id":"c1331_p2p_smoke_zatvoren","tip":"dug_zatvoren","naziv":"c1331 DUG ZATVOREN — 2-browser P2P signaling smoke test","kreator":"genesis","datum":"2026-06-13","snippet":"","status":"DUG ZATVOREN","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"dug_zatvoren","naziv":"c1331 DUG ZATVOREN — 2-browser P2P signaling smoke test","dug_otvoren_u":"c1330 (Sprint 4)","sto_testirano":["T1: offer POST /api/v4/kanal/p2p/signal → 201 queued","T2: poll GET signal?target=B_WID → prima offer (count=1)","T3: atomic Redis delete — drugi poll prazan (count=0)","T4: answer POST → 201 queued","T5: A prima answer od B","T6: A-atomic-delete (count=0)","T7: ICE candidate A→B","T8: B prima ICE candidate","T9: Gossip ATOM_OFFER POST → 201","T10: B prima ATOM_OFFER, salje ATOM_WANT","T11: A prima ATOM_WANT, salje ATOM_PUSH","T12: B prima ATOM_PUSH, SHA3-256 verifikacija = match","T13: Queue cap — 21 signala → max 20 u redu (ltrim radi)","T14: /api/v4/brsljani/network-map → 200 ispravna schema","T15: /brsljani/mapa → 200 HTML (12074 bytes)"],"rezultat":"17/17 PASS, 0 FAIL","biljezke":["Signaling endpoint: /api/v4/kanal/p2p/signal (NE /api/v4/brsljani/p2p/signal)","Payload schema: P2PSignalPayload { sdp: Optional[dict], ice: Optional[dict] }","Gossip ide u sdp free-form dict (type=gossip, gossip_type=ATOM_OFFER/WANT/PUSH)","Redis TTL=120s, max 20 u redu (ltrim -20,-1), atomic read+delete (LRANGE+DEL)","Krunica hash: SHA3-256(atom_bytes) provjereno match na primatelju"],"zakon":["ZAKON NAD ZAKONIMA (pokazano da radi)","ZAKON 17 (PULL-ONLY)","ZAKON 43 (krunica_hash verifikacija)"],"weise3_id":"c1331_p2p_smoke_zatvoren","datum":"2026-06-13","status":"DUG ZATVOREN","krunica_hash":"7c1de8c0ccd011057f260d1f521f5ce72a7d7bca965222b5404574a768bb9df7"}}