tipdnk_unifikacija
statusDONE
master_planMASTER_PLAN_dnk_cjelina (Korak 2 od 5)
dijagnoza_2_osi{
"os1_offline": "static/sucelje imaju offline (verifyEd25519Offline+vault), sdk/genesislogin/fenix nemaju",
"os2_webauthn_mod": "DIREKTNI (same-domain: static/sucelje/fenix) vs RELAY-popup (cross-domain: sdk/genesislogin) — biom-relay.html jer WebAuthn vezan za rpId",
"nijedan_fajl_nadskup": "static ima offline+direktni ali NE relay → 'kanon=static' bi slomio cross-domain biometriju"
}
ispravak_pretpostavki[
"Nalog rekao kanon=sdk → POGRESNO (sdk je podskup, fali 6 offline funkcija)",
"Faza A preporuka kanon=static → NEPOTPUNO (static nema relay)",
"Istina: kanon = UNIJA (static.offline + sdk.relay), prekidač bira mod"
]
odluka_ivanOpcija B — samootkrivajući rpId iz server options-odgovora. Sef (.env GENESIS_RP_ID) OSTAJE ZATVOREN. Server=izvor istine, ne hardcode.
izvedeno{
"kanon": "static/genesis-auth.js = UNIJA (full: prekidač + offline)",
"prekidac": "registerDevice + device.login: _rpId iz options-odgovora (register→opcije.rp.id, auth→opcije.rpId), location.hostname===rpId || endsWith('.'+rpId) ? direktni() : relay()",
"grane_bajt_iste": "direktni()=static verbatim, relay()=sdk verbatim — ekstrakcija slice-ova, ne pretipkavanje",
"offline": "build-flag @profile:offline (2 trailing IIFE), online profil = kanon bez njega",
"generator": "scripts/build
dokaz_faza_c{
"a_grane_bajt_iste": "4/4 (registerDevice+login × direktni+relay) == zivi static/sdk",
"b_prekidac_reproducira_mod": "genesis→direktni, fenix/limit-connect→direktni, genesislogin/tuda→relay (svaki = trenutni mod, 0 promjene ponasanja)",
"c_load_smoke": "full+online parse OK, core API 5/5, struktura exporta identicna zivom static",
"d_offline_kripto_netaknut": "verifyEd25519Offline+vault bajt-isti (150 linija) — kripto NE diran",
"rpId_data_level": "probe cita rpId tocno gdje server v
deploy{
"full_402e1979": [
"static",
"sucelje"
],
"online_967afa72": [
"sdk",
"genesislogin",
"fenix-v3"
],
"netaknuti_namjenski": [
"tahograf (vlastiti Ed25519 device-flow)",
"memio (bezkriptni thin client)"
],
"konvergencija": "7 razlicitih md5 → 2 profila iz 1 kanona + 2 namjenski lite",
"backup": "*.bak_20260612 (svih 5)",
"dozvole": "www-data:www-data"
}
rezidual_postenZivi browser login test po proizvodu = preostala ljudska provjera (Chrome MCP nije spojen). Staticki dokaz (grane bajt-iste + prekidac reproducira mod) zamjenjuje ga po dogovoru Ivan. Rollback: *.bak_20260612.
sljedeceKORAK 3 — Mesh ozivljavanje (genesis-mesh.js P2P, telefon↔telefon bez sidra)
zakonZAKON 32 | ZAKON 40 (GenesisLogin jedini IdP) | crvena linija: zivi login nigdje slomljen