{"id":"c1441","filename":"c1441_korak4_recovery_finish.dok.json","weise3_id":"03297d74e6069131cd379599bbc5565e2b5e3e6d868c6cba8647d2e646ca5e88","tip":"korak_dokaz","naziv":"Korak 4 recovery finish: ociscen bonus postgres UPDATE iz /recovery/vrati (crvena linija) + forgery-test (prag/token/smrt-starog/endpoint) + Marica-koherencija 4/4 — POKAZANO da radi na cistom kodu, E","kreator":"cc@genesis + ivan","datum":"","snippet":"","status":"GOTOVO — pokazano da radi (VRHOVNI). EU+ES, cisti kod, forgery 5/5 + Marica 4/4, errors=[].","prev_weise3":"","bunker_l":"#2954b4","full":{"tip":"korak_dokaz","broj":"c1441","naziv":"Korak 4 recovery finish: ociscen bonus postgres UPDATE iz /recovery/vrati (crvena linija) + forgery-test (prag/token/smrt-starog/endpoint) + Marica-koherencija 4/4 — POKAZANO da radi na cistom kodu, EU+ES","kreator":"cc@genesis + ivan","kontekst":"identitet/recovery/korak4 / atlas_organa / bice_vs_odijelo","created_at":"2026-06-21T14:01:04+00:00","veze":["c1432","c1435","c1437","c1438","c1440"],"jezgra":"Cisti kod (ukloni mrtvu granu) PA dokazi da recovery JOS stiti i da identitet ostaje isto bice kroz promjenu kljuca. 'Gotovo'=pokazano (VRHOVNI). recovery.py genesis_recovery.py konvergirani byte-identicno (sha f980ae5a) neovisnom istom transformacijom na oba cvora.","1_tech_clean":{"fajl":"api/genesis_recovery.py","baseline_sha":"3c361e73a336ef4b...","target_sha":"f980ae5a1ca5a4f6314c3a4c0c041fcf4e4617d44d58c6492db7d94aa6eee7dc","uklonjeno":"try-blok 'Bonus: UPDATE genesis_identitet' (psycopg2, mrtva NEW-only grana, nije Fix A auth) + 2 zastarjela docstring spomena","crvena_linija":"0 izvrsnih psycopg2/UPDATE genesis_identitet u fajlu; recovery NE pise u postgres identity store (.dokarh je istina, ZAKON 46)","disciplina":"ZAKON 47 brava + baseline-assert + .bak + rollback-dokaz PRIJE izmjene + py_compile + atomski write(.tmp,fsync,replace) + chown www-data","restart_health":"ES restart active health=200; EU restart active health=200"},"2_forgery_dokaz_oba_cvora":{"P1_prag":"podijeli(S,3,2): bilo koja 2 udjela obnove S, 1 udio NE obnovi (Shamir threshold stiti) — TRUE EU+ES","P2_token":"verificiraj_recovery_token: tocan->True, kriv/prazan->False (const-time, fail-closed) — TRUE EU+ES","P3_smrt_starog_service":"nakon persist_vrati_dokarh(w3,pk_new): stari_pk->dohvati=None(MRTAV), novi_pk->ZIV isti weise3 — TRUE EU+ES","P4_http_live":"LIVE /auth/verify: novi kljuc->200 (weise3==w3), STARI kljuc->401 (c1432 gate), bez Sudac-diverzije — TRUE EU+ES","P6_endpoint_odbija":"/recovery/vrati za identitet bez recovery-seta -> 422 (real handler, ne decoy, ne forgeano) — TRUE EU+ES"},"3_marica_koherencija_4od4":{"1_dokarh":"weise3_id NEPROMIJENJEN, public_key_hex PROMIJENJEN, stari u historiji — TRUE","2_authz_dokarh":"pristup_tenantima + marker prezivjeli recovery u dokarhu (keyed po weise3) — TRUE","3_sesija":"stara sesija invalidirana recoveryjem, novi login veze ISTI weise3 — TRUE","4_biom":"device record (store-level, db=1) prezivio recovery, keyed po weise3 ne po kljucu — TRUE (assertion-level blokiran c1421 Membrana)","verdikt":"4/4 organa slijede isti weise3 nakon recovery — identitet ostaje isto BICE, mijenja se samo ODIJELO (kljuc)"},"4_NALAZ_authz_osoba_pubkey_keyed":{"nalaz":"MJERENO: session tenant_scope (osoba-sloj) vadi se preko aliases['pubkey:{pk}'] u genesis_auth.py (verify) — PUBKEY-keyed, NE weise3-keyed.","posljedica":"Nakon recovery/rotacije kljuca, korisnik s osoba-tenant pristupom LOGINA (weise3 stabilan) ali tenant_scope bi bio prazan dok se alias 'pubkey:{novi_pk}' ne azurira. dokarh-atributi (keyed po weise3) prezive; osoba-alias sloj NE.","klasa":"ista obitelj kao rotacija 'dodaje-ne-mice' (vidi project_rotacija_opoziv_defekt). NIJE uveden ovim cleanom (pre-postojeci), NIJE u recovery.py crvenoj liniji.","preporuka":"follow-up u identitet-coherence epicu: persist_vrati_dokarh / rotacija MORA azurirati osoba alias 'pubkey:{stari}'->'pubkey:{novi}' (ili preusmjeriti tenant_scope na weise3-keyed lookup)."},"5_granica_reverzibilnost":{"fluid_auth_nedirano":"containment (c1439) netaknut; genesis_auth.py i FLUID nedirani ovim korakom","anchors":".bak.k4* zadrzani na oba cvora (rollback na 3c361e moguc)","blast_radius_testa":"1 test identitet po cvoru, potpuno ociscen (cleanup_verify: dokarh_obrisan=True, novi_pk->nista=True, errors=[])"},"status":"GOTOVO — pokazano da radi (VRHOVNI). EU+ES, cisti kod, forgery 5/5 + Marica 4/4, errors=[].","weise3_id":"03297d74e6069131cd379599bbc5565e2b5e3e6d868c6cba8647d2e646ca5e88"}}