tipplan
sto_treba1. Pokrenuti vetra.live u produkciju (BILLING_ENABLED, email, Stripe). 2. Spojiti KrunicaChain: jedna istina za vetra.live i evalidator.eu — svaki VetraDocument kreira DokArh entry.
prioritetP0 paralelno s c0160
ne_dira[
"sati.ink worktime",
"fina-connect",
"arhiva PWA"
]
kontekst{
"vetra_stanje": "LIVE (upravo startana 2026-05-08, bila inactive 2 dana). 3 tenanta, 57 dok, 5 KrunicaChain blokova.",
"billing": "BILLING_ENABLED=False u .env — naplata isključena, plan upgrades ne rade",
"email": "smtp.gmail.com:587 konfiguriran s fina.connect.online@gmail.com, ali EMAIL_HOST_PASSWORD nije u .env — nedostaje",
"evalidator_dokarh": "DokArh model postoji u fenix-v3/evalidator/models.py (1 zapis). Ima payload_hash, envelope_hash, chain integrity, Polygon fields.",
"kr
faze[
{
"id": "V0",
"naziv": "Vetra EMAIL aktivacija (blocker za sve ostalo)",
"opis": "Bez emaila ne rade: registracija, invite, billing obavijesti.",
"koraci": [
"Gmail App Password: Ivan otvori myaccount.google.com → Security → 2-Step Verification → App Passwords → kreirati za 'vetra-live-smtp'",
"Upisati u /var/www/vetra/.env: EMAIL_HOST_PASSWORD=<app_password>",
"Test: cd /var/www/vetra && venv/bin/python3 manage.py shell -c \"from django.core.mail import sen
commit_plan[
"fix(vetra): V0 aktivirati Gmail SMTP email",
"feat(vetra): V1 BILLING_ENABLED=True + commitment doc test",
"feat(evalidator): V4 novi /api/v1/archive/ingest/ endpoint + DokArh ZAKON 27 migracija",
"feat(vetra): V5+V6 sync_to_evalidator Celery task + nova polja na VetraDocument",
"feat(vetra): V7 retroaktivna sinkronizacija 57 dokumenata",
"feat(evalidator): V8 Public Explorer unified view",
"docs(chain): c0161 vetra-evalidator bridge DONE"
]
ivan_akcije[
"Gmail App Password za fina.connect.online@gmail.com → staviti u /var/www/vetra/.env EMAIL_HOST_PASSWORD",
"DNS A zapis status.vetra.live → 37.27.248.86",
"Stripe API key (kad bude — za budući payment flow, nije bloker za sad)"
]
vetra_online_odmah{
"sto_radi_sad": [
"POST /api/v1/scan/ — prima fajl, pečati, vraća seal ✅",
"GET /verify/{seal}/ — javna stranica verifikacije ✅",
"Widget.js — embed gumb na bilo koji web ✅",
"Dashboard — 3 tenanta, 57 dokumenata, KrunicaChain ✅",
"Trial 14 dana za nove registracije ✅",
"Python SDK v1.0.0 u sdk/ direktoriju ✅"
],
"blokeri_za_klijente": [
"Email (registracija ne šalje verification email) — V0",
"Billing (plan upgrade UI radi, ali SEPA flow ne šalje email) —
zakonZAKON 0 (fizicka izolacija), ZAKON 2 (sve kroz Brsljani), ZAKON 3 (TROJNA POHRANA — svaki objects.create MORA imati get_trojna()!), ZAKON 17 (PULL only), ZAKON 27 (Model Trinity)
KRITICNO_ZA_CC{
"poruka": "ZAKON 3 — TROJNA POHRANA NIJE OPCIJA. Svaki model.objects.create() koji pohranjuje poslovne podatke MORA odmah pozvati get_trojna(). PostgreSQL = brzi upiti = SJENA. Krunica = jedina istina.",
"greska_koju_cc_pravi": "CC pise objects.create() i smatra da je pohrana gotova. NIJE. Bez get_trojna() dokument postoji samo u bazi, nije u Krunicu ni Brsljanu.",
"provjera": "grep -n 'objects.create' views.py — svaki redak mora imati odgovarajuci get_trojna() call ispod"
}
ispravak{
"datum": "2026-05-08",
"sto": "ZAKON 3 dodan u zakon polje — originalno izostavljen. V4 koraci vec imaju ZAKON_3_OBAVEZNO sekciju s primjerom koda."
}
statusZAVRSENO
zavrseno_datum2026-05-08
faze_status{
"V0": "DONE - Gmail SMTP aktivan",
"V1": "DONE - BILLING_ENABLED=True, load_dotenv(override=True) fix",
"V2": "PENDING - Let's Encrypt maintenance (retry loop aktivan, nije nas bloker)",
"V3": "DONE - arhitektura dokumentirana",
"V4": "DONE - POST /api/v1/archive/ingest/ + ZAKON 3 Trojka (Genesis N1 + Brsljani N3)",
"V5": "DONE - sync_to_evalidator Celery task, 3x retry, httpx",
"V6": "DONE - VetraDocument: evalidator_dok_id + evalidator_verify_url + evalidator_weise3_id, migrati
kljucni_commitovi[
"88fc600 (V7 retroaktivni sync)",
"migration 0007 (V6 polja)"
]