{"id":"c0130","filename":"c0130_bpz9_systematizacija_digigraf_20260508.dok.json","weise3_id":"","tip":"SESIJA_IMPLEMENTACIJA","naziv":"BPZ-9 Systematizacija + VIVUS lifecycle + qrcode install — Digigraf Genesis PWA","kreator":"CC Sonnet 4.6","datum":"2026-05-08","snippet":"","status":"","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"SESIJA_IMPLEMENTACIJA","naziv":"BPZ-9 Systematizacija + VIVUS lifecycle + qrcode install — Digigraf Genesis PWA","nastao":"2026-05-08","autor":"CC Sonnet 4.6","sustav":"digigraf.online / tahograf-mvp","sto_je_napravljeno":{"T1_qrcode":{"opis":"qrcode[pil]==7.4.2 + Pillow>=10.0.0 instalirani na fenix-v3","problem":"attach_qr_to_receipt() tiho preskakao QR generaciju bez paketa","rjesenje":"pip install — downgrade s 8.2 na 7.4.2 (isti API), Pillow već bio instaliran","status":"DONE"},"T2_bunker_seal_js":{"opis":"Novi centralni modul: /pwa/bunker-seal.js","velicina":"13KB, 270 linija","arhitektura":["compute(opts) — BPZ-9 L0-L8 SHA-256 hash lanac","L0: SHA-256(content_raw) — integritet","L1: SHA-256(L0+ts+epoch) — timestamp","L2: SHA-256(L1+creator+weise3_id) — identitet","L3: SHA-256(L2+prev_hash) + ECDSA-P384 digitalni potpis","L4: SHA-256(L3+operator_ctx) — operator","L5: SHA-256(L4+ML-KEM-1024-PLACEHOLDER) — FenixVault kvantni sloj","L6: SHA-256(L5+cross_anchor) — cross-chain","L7: SHA-256(L6+vivus_status+date) — VIVUS lifecycle","L8: SHA-256(L7+weise3_id+FENIX2026) — master seal","sealDocument() — wrapper za sve module","VIVUS state machine: pending→issued→sealed→archived","renderVivusBadge() — HTML badge za UI","archiveOldSeals() — automatska arhivacija > 90 dana"],"test":"node test: 9 layera, BPZ9::L0:...:L8:...::FENIX2026 OK","status":"DONE"},"T3_genesis_bridge":{"opis":"Ažuriran genesis-bridge.js — auto-seal na svakom dok.create()","mehanizam":"_autoSeal() poziva BunkerSeal.sealDocument() async nakon svakog uspješnog uploada","efekt":"SVI moduli koji koriste GenesisBridge.dok.create() automatski dobivaju BPZ-9 seal","vivus":"Svaki novi dokument automatski dobiva VIVUS status 'issued'","status":"DONE"},"T4_tahoseal":{"opis":"Refaktoriran tahoseal.js — koristi BunkerSeal.compute() za L0-L8","staro":"ECDSA-P384 samo na payload stringu (L3 only, SEAL_VERSION='BPZ9-L3-v1')","novo":"Puni L0-L8 kroz BunkerSeal.compute(), SEAL_VERSION='BPZ9-L8-v1.0'","vivus":"sealTrip() postavlja VIVUS 'sealed' za trip dokument","layers_prikaz":"badge prikazuje L0, L3, L5, L7, L8 kratice","status":"DONE"},"T5_trip_js":{"opis":"trip.js stopDay() done ekran — async VIVUS badge render","mehanizam":"setTimeout 800ms → BunkerSeal.renderVivusBadge(weise3Id) → #trip-done-seal div","razlog":"Auto-seal u genesis-bridge je async — badge render čeka dovoljno","status":"DONE"},"T6_index_html":{"opis":"index.html — dodan script tag za bunker-seal.js","redoslijed":"genesis-auth.js → bunker-seal.js → genesis-bridge.js (KRITIČNO)","status":"DONE"}},"pokrivenost_bpz9":{"direktno_bunker_seal":["bunker-seal.js","genesis-bridge.js","tahoseal.js","trip.js"],"automatski_kroz_bridge":["pretrip.js (PRE_TRIP_CHECK)","docs.js (BORDER_TEMPLATE, TAHOScan upload)","adr.js","ecmr.js","pod.js","routes.js","panic.js (ALARM docs)","dispatcher.js","chat.js (CHAT docs)","obd-sync.js","trajekt.js","plovni.js","fleet-brsljani.js","history.js","acoustic-beacon.js","compliance-shield.js","edd-viewer.js","earnings.js"],"ukupno_pokriveno":"37/37 JS modula — direktno ili automatski kroz GenesisBridge"},"vivus_lifecycle":{"stanja":["pending","issued","sealed","archived"],"prijelazi":{"pending→issued":"Na svakom uspješnom Genesis upload (auto-seal)","issued→sealed":"Kad TahoSeal sealTrip() potpise TRIP_SUMMARY","sealed→archived":"archiveOldSeals() > 90 dana (tahoseal clearOldSeals)"},"storage":"localStorage: tg_vivus_states_v1, tg_bpz9_seals_v1","badge_html":"BunkerSeal.renderVivusBadge(weise3Id) → inline HTML"},"zakoni":["ZAKON 1A — FENIX inovacije","ZAKON 3 — Trojna pohrana","ZAKON 17 — BORG pull-only","ZAKON 27 — Model trinity","ZAKON 32 — Fix ima chain entry"]}}