{"id":"c1398","filename":"c1398_brsljani_sprint17_bloom_health_diff.dok.json","weise3_id":"","tip":"sprint","naziv":"K3 Sprint 17 — Bloom Health Diff (server→client targeted sync)","kreator":"genesis","datum":"","snippet":"schemas.py: bloom_b64 Optional[str] u BrowserNodeHealthRequest (max 4096 base64 chars) · schemas.py: missing_ids list[str] u BrowserNodeHealthResponse (max 50 ID-ova) · browser_node_router.py: _BrsljanBloomPy klasa (FNV-1a+DJB2, m=2048, k=3 — identičan JS algoritmu)","status":"ZATVOREN","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"sprint","naziv":"K3 Sprint 17 — Bloom Health Diff (server→client targeted sync)","chain_id":"c1398","timestamp":"2026-06-15T08:10:00Z","sustav":"fenix-v4/brsljani","status":"ZATVOREN","commit":"0f641f8","sto_je_napravljeno":["schemas.py: bloom_b64 Optional[str] u BrowserNodeHealthRequest (max 4096 base64 chars)","schemas.py: missing_ids list[str] u BrowserNodeHealthResponse (max 50 ID-ova)","browser_node_router.py: _BrsljanBloomPy klasa (FNV-1a+DJB2, m=2048, k=3 — identičan JS algoritmu)","browser_node_router.py: u browser_health() — bloom_b64 → query 200 ArchiveDoc → filter → missing_ids","brsljani-node.js: _sendHealth() šalje bloom_b64 (async IDB scan → BrsljanBloom.toBase64())","brsljani-node.js: na missing_ids → /browser-pull?ids=... → pohrana u IDB (N missing dok)","Zamjenjuje/poboljšava hourly full-diff (Sprint 13C) — sada per-health, targeted"],"zakon":["ZAKON 26 (Schema Contract — bloom_b64+missing_ids tipovi)","ZAKON 17 (PULL-ONLY)","ZAKON 41 (W3C Uint8Array)"],"krunica_hash":"c1398_sprint17_bloom_health_diff_2026_06_15"}}