F2: p2p_peers polje u BrowserNodeHealthRequest + active_peers u BrowserNodeHealthResponse (schemas.py) · F3: /api/v4/brsljani/network-map endpoint — javni, bez auth, NetworkMapNode+NetworkMapResponse
tipsprint_done
sto_je_napravljeno[
"F2: p2p_peers polje u BrowserNodeHealthRequest + active_peers u BrowserNodeHealthResponse (schemas.py)",
"F3: /api/v4/brsljani/network-map endpoint — javni, bez auth, NetworkMapNode+NetworkMapResponse",
"F4: /brsljani/mapa HTML stranica — SVG force-layout (Fruchterman-Reingold, 120 iter), W3C only (ZAKON 41)",
"F5: browser_health sprema p2p_peers u extra JSONB, vraca active_peers brsljani-node.js za P2P connect",
"BaseModel import dodan u browser_node_router.py",
"brsijan/html_rou
dokaz{
"GET /api/v4/brsljani/network-map": "HTTP 200, JSON {nodes:[], edges:[], timestamp, total_active:0}",
"GET /brsljani/mapa": "HTTP 200, HTML s SVG canvas + sidebar + auto-refresh 15s",
"commit": "93b5f35",
"servis": "gunicorn-fenix-v4 active"
}
zakon[
"ZAKON 17 (PULL-ONLY)",
"ZAKON 41 (W3C only SVG)",
"ZAKON 43 (X-Krunica-Hash u API)",
"ZAKON NAD ZAKONIMA"
]
statusDONE
krunica_hash8d3bf9537e4a6dbc7334635aadfae4d0c0d0a7a313a91a81778a60c4b0430737