{"id":"c1221","filename":"c1221_genesis_mesh_zatvoreni_krug.dok.json","weise3_id":"d5c7b66e621c67a894213f2e879217ebbbd2df294e78a00cb51b9d315d5a1e53","tip":"implementacija","naziv":"Genesis Mesh — Zatvoreni Krug: Deploy Kapija + Health Check + Alert","kreator":"CC + Ivan Seki","datum":"2026-06-01","snippet":"","status":"DONE","prev_weise3":"","bunker_l":"#7db3e1","full":{"tip":"implementacija","naziv":"Genesis Mesh — Zatvoreni Krug: Deploy Kapija + Health Check + Alert","sto_treba":"Temelj koji se čuva sam: import check kao kapija, hourly health check, WAHA+email alert kad zatreba.","datum":"2026-06-01","autor":"CC + Ivan Seki","status":"DONE","kontekst":"Sesija 2026-06-01. Dovršena sinkronizacija genesis mesh mreže (EU/MAR/NEW) i fenix-v4 (MAR produkcija). Prethodne sesije: c1210 FenixDSA ML-DSA-65, c1211 ThresholdPotpis Shamir-521, c1218 kriptografski arsenal. Ovaj entry zatvara petlju: ne samo da je temelj izgrađen — temelj se sada sam čuva i javlja kad nešto zapne.","napravljeno":{"1_deploy_sync":{"fajl":"/var/www/genesis/deploy_sync.sh","opis":"NEW → MAR rsync za genesis services/ i api/","kapija_pre":"import main provjera na MAR PRIJE rsync-a — ako pada, rsync se ne radi","kapija_post":"import main provjera na MAR NAKON rsync-a, PRIJE restarta — ako pada, restart se ne radi","princip":"set -euo pipefail + || exit 1 na svakoj kapiji. Restart je zadnja linija, ne prva."},"2_health_check":{"fajl":"/var/www/genesis/health_check.sh","opis":"Provjera svih čvorova: EU / MAR / NEW + fenix-v4 MAR","po_cvoru":["import main — ZELENA/CRVENA kapija (prva provjera)","genesis.service active","FenixDSA /api/v1/fenix-dsa/health → status:ok","ThresholdPotpis /api/v1/threshold/health → status:ok","fenix_dsa.py prisutan (>10kB)","threshold_potpis.py prisutan (>10kB)"],"fenix_v4":"gunicorn-fenix-v4 active + /genesis/auth/zdravlje → ok:true","log":"/var/log/genesis_health.log","rezultat":"20/20 checks zeleno na prvom pokretanju"},"3_cron":{"server":"EU 217.160.71.124 (root crontab)","linija":"5 * * * * /var/www/genesis/health_check.sh >> /var/log/genesis_health.log 2>&1","frekvencija":"svaki sat, u X:05"},"4_alert":{"fajl":"/var/www/genesis/genesis_alert.py","kanal_1":"WAHA WhatsApp → SSH na NEW → curl localhost:3000 → +4915771998747 (DE) ili +385991908089 (HR)","kanal_2":"Gmail SMTP → smtp.gmail.com:587 → ivan@limit-connect.com + fina.connect.online@gmail.com","logika":"WAHA prvi, email fallback. Alert se šalje SAMO kad FAIL > 0.","waha_status":"Session FAILED (treba QR rescan) — email je aktivan kanal. Kad WAHA oživi, automatski preuzima.","test":"Email poslan OK na 2026-06-01 12:02 UTC"},"5_fenix_v4_sync":{"sto":"genesis_auth (Ed25519 FastAPI modul, 5 fajlova) + dio3 (FrameEconomy pilot) — NEW → MAR","commit":"379b010 feat(auth): genesis_auth Ed25519 + dio3 — sync od NEW, c1210","main_py":"genesis_auth_router uključen u MAR fenix-v4 main.py (linija 202-203)","test":"curl http://127.0.0.1:8005/genesis/auth/zdravlje → ok:true, trust:80"}},"arhitektura_kapije":{"princip":"Import check nije korak — import check je kapija. Ako Python ne može učitati main.py, servis nije zdrav i ne smije se restartati.","deploy_flow":"rsync → KAPIJA POST → restart (NIKAD: rsync → restart bez kapije)","health_flow":"import kapija → service check → endpoint check → fajl check (NIKAD: samo endpoint check)","zasto":"Kompilacija != rad. Modul može biti kopiran ali ne importabilan (broken dependency, syntax error, migration conflict). Kapija hvata ovo PRIJE nego restart obori živi servis."},"zatvoreni_krug":{"opis":"Temelj se sada čuva sam — CC je u petlji kad zatreba.","petlja":"cron (svaki sat) → health_check.sh → 20 provjera → OK: tišina | FAIL: alert (WAHA/email) → CC ili Ivan reagira","filozofija":"Nema potrebe stalno gledati servere. Ako je tiho — zdravo je. Ako zvoni — problem je konkretan, s porukom i logom."},"fajlovi":["/var/www/genesis/deploy_sync.sh","/var/www/genesis/health_check.sh","/var/www/genesis/genesis_alert.py","/var/log/genesis_health.log","/var/log/genesis_deploy.log"],"zakon":["ZAKON 32 — svaki fix ima chain entry","ZAKON 17 — BORG pull only"],"prev":"c1220_konjik_kampanja_iznajmljivaci_arhiva.dok.json","weise3_id":"d5c7b66e621c67a894213f2e879217ebbbd2df294e78a00cb51b9d315d5a1e53","krunica_hash":"db161f93734c275ab58c373e20f0d626e50e99e5081050627362df0dcda9deb5"}}