{"id":"c0863","filename":"c0863_sesija_20260515_digigraf_popravci.dok.json","weise3_id":"WEISE3::c0863_digigraf_popravci_20260515::cc::sesija::FENIX2026","tip":"sesija_log","naziv":"Digigraf.online — P0+P1 popravci (2026-05-15)","kreator":"cc@genesis","datum":"2026-05-15","snippet":"","status":"","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"sesija_log","naziv":"Digigraf.online — P0+P1 popravci (2026-05-15)","datum":"2026-05-15","autor":"cc@genesis","sustav":"digigraf.online","weise3_id":"WEISE3::c0863_digigraf_popravci_20260515::cc::sesija::FENIX2026","commiti":[{"hash":"a72ca29","opis":"fix(digigraf): P0 transpilacija pwa/*.js na Chrome60+ (esbuild)"},{"hash":"41ffa69","opis":"fix(nav-bridge): zamijeni Leaflet CDN s lokalnim /lib/ fajlovima"},{"hash":"7b88d76","opis":"chore(digigraf): .gitignore += *.bak, briši dispatcher/index .bak_csp"},{"hash":"9993c01","opis":"refactor(digigraf): arhiviraj mrtve Flask module u _legacy_flask/"},{"hash":"1800e5c","opis":"feat(tahograf): dodaj /api/v1/tahograf/health endpoint"}],"analiza":{"ocjena_prije":"6.5/10","kategorije":{"infrastruktura":"8/10","js_kompatibilnost":"2/10 (P0 bug)","backend_kod":"7/10","frontend_kod":"6/10","sigurnost":"8/10","arhitektura":"7/10","trzisni_potencijal":"9/10"}},"popravci":{"P0_babel_transpilacija":{"problem":"49 JS fajlova koristili ES2020+ sintaksu (optional chaining ?., nullish coalescing ??) koja puca na starim Android WebView-ovima. Debug beacon bilježio 15+ JS gresaka po svakom posjetu s Huawei P30 Pro (Chrome 89/Android 10) i Vivo (Chrome 91/Android 11). Cijela aplikacija bila neupotrebljiva.","uzrok":"Nema Babel transpilacije ni browserlist targeta. Cisti ES2020+ kod serviran direktno.","fix":"esbuild --target=chrome60 na svih 49 pwa/*.js fajlova. Bonus: fixed i18n.js syntax error (en: blok imao prevremen }; — trip/docs/panic prijevodi bili izvan bloka). Fixed docs.js broken onclick string escaping. Cache bust: sve verzije na ?v=50.","fajlovi":["tahograf-mvp/build.js","tahograf-mvp/package.json","tahograf-mvp/pwa/*.js (49)","tahograf-mvp/pwa/index.html"],"commit":"a72ca29"},"P1_leaflet_cdn":{"problem":"nav-bridge.js dinamicki ucitavao Leaflet 1.9.4 s https://unpkg.com CDN. CSP script-src 'self' blokira CDN — CSP violation pri svakom ucitavanju karte. Offline mode: karta puca kad CDN nedostupan.","uzrok":"Dinamicki <script> i <link> elementi u _initMap() funkciji koristili CDN URL.","fix":"Zamjena CDN URL-ova s lokalnim putanjama /lib/leaflet.min.js i /lib/leaflet.min.css. Lokalni fajlovi vec postojali (dispatcher.html ih koristio ispravno).","fajlovi":["tahograf-mvp/pwa/nav-bridge.js"],"commit":"41ffa69"},"P1_backup_fajlovi":{"problem":"dispatcher.html.bak_csp (45KB), dispatcher.js.bak_csp (57KB) i index.html.bak lezali u produkcijskom PWA direktoriju.","fix":"Brisanje sva 3 fajla. .gitignore dopunjen: *.bak, *.bak_*, *.orig.","fajlovi":["tahograf-mvp/.gitignore"],"commit":"7b88d76"},"P1_flask_app":{"problem":"app.py (Flask) nikad nije bio pokrenut u produkciji. Pravi backend je Genesis FastAPI router (api/tahograf.py). Flask app.py ostavljao lazni dojam da postoji drugi server. Arhitekturalna zbunjenost.","uzrok":"Refaktoring nije bio cist — stari Flask server ostao kao mrtvi kod.","fix":"Obrisani app.py, app.py.bak, models.py.bak. Premjesteni auth.py, *_endpoints.py, dok_writer.py, genesis_sign_client.py, photo_upload.py u _legacy_flask/ sa README.md. models.py ostaje aktivan (dispo.py ga importira za DispoJob).","fajlovi":["tahograf-mvp/api/_legacy_flask/* (9 fajlova)","tahograf-mvp/api/models.py"],"commit":"9993c01"},"P1_health_endpoint":{"problem":"/api/v1/tahograf/health vracao 404. Nema nacina provjeriti status tahograf modula bez ulaska na server.","fix":"Dodan @router.get('/health') na kraj api/tahograf.py. Vraca: ok, sqlite status (size_kb, dispo_jobs, drivers), redis latency_ms, fleet_dir provjeru. Javno dostupno, bez auth.","response_primjer":{"ok":true,"sqlite":{"ok":true,"size_kb":148.0,"dispo_jobs":7},"redis":{"ok":true,"latency_ms":7.3}},"fajlovi":["api/tahograf.py"],"commit":"1800e5c"}},"otvoreno":{"P2_postgresql":"SQLite tahograf.db migracija na PostgreSQL kad baza poraste iznad razumne velicine","P2_dispo_sys_path":"dispo.py koristi sys.path.insert hack za import models.py — treba cistiji import","P1_docs_onclick":"docs.js onclick: 'ef-toast' ID u HTML stringu — ako korisnik ima stari WebView onclick moze pucati pri kliku na zatvori dugme (nizak prioritet)"},"zakoni":["ZAKON 32 — svaki fix ima chain entry","ZAKON 30 — www-data permissions","ZAKON 29 — CSP immutable baseline"],"server":"EU (217.160.71.124)","git_repo":"/var/www/genesis"}}