tipimplementacija
nadovezuje_se_na[
"c1135_time_witness_implementacija",
"c1136_dvorac_witness_integracija"
]
sto_trebaKrunica chain blokovi (ChainBlockORM) sada nose witness_hash + konsenzus + 3 timestamps u svom meta JSONB polju. Backward kompatibilno — pozivi bez witness_extension rade kao prije.
zastoC1135 implementirao TimeWitness (3 izvora). C1136 dodao .witness.json fajl uz svaku ciglu. Ali Krunica chain (DB-side append-only lanac) još nije nosio witness — kratki spoj između proof-on-disk i proof-in-chain. C1137 zatvara ovaj krug: svaki novi Krunica blok može imati witness u meta polju, nepro
implementacija{
"patch_lokacija": "/var/www/genesis/services/krunica_dvorac_sync.py",
"dodana_helper_funkcija": "_witness_meta(witness_extension) -> dict",
"izmijenjene_funkcije": [
"upisi_u_krunicu(...) → dodaje param witness_extension=None i upisuje meta u ChainBlockORM + podaci.witness u EntityORM",
"TrojnaPohrana.pohrani_async(...) → dodaje param witness_extension=None i forwardira u upisi_u_krunicu"
],
"meta_polja_u_chain_bloku": [
"witness_hash",
"witness_consensus (POUZDANO|SU
tehnicke_odluke{
"zasto_meta_a_ne_novi_table": "ChainBlockORM.meta je vec dizajniran kao opcijski indexable kontejner — dodavanje novog tablice (chain_witness) bi razdvojilo proof od bloka i dvostruko vise upita za read",
"zasto_samo_3_polja_a_ne_cijeli_extension": "Pun .witness.json (s DER bytes, RSA potpisima) ostaje na disku kao primarni dokaz. ChainBlockORM nosi samo izvuceno za brzu SQL pretragu (npr. WHERE meta->>'witness_consensus' = 'KRITICNO')",
"zasto_backward_kompatibilno": "Postojeci pozivi u
testovi{
"fajl": "/var/www/genesis/tests/test_krunica_witness_hook.py",
"rezultat": "17/17 PASSED",
"pokrivenost": [
"1.1-1.7: _witness_meta() ekstrakcija (cista funkcija, bez DB)",
"2.1-2.3: skip neuspjesnih NTP/TSA izvora",
"3.1-3.5: end-to-end Krunica chain entry s witness — stvarna baza",
"4.1-4.2: backward kompatibilnost — pozivi bez witness_extension rade i meta ostaje prazan"
]
}
sljedeci_koraci{
"korak_4_wire_up_genesis_login": {
"fajl": "/var/www/genesis/api/genesis_login.py",
"opis": "Genesis login endpoint trenutno zove pohrani_async bez witness_extension — treba dodati enrich_cigla_with_witness poziv prije i forwardirati ext",
"rizik": "Mijenja produkcijski auth flow — treba kontrolirani staged rollout (najprije za novi /v2 endpoint, pa migracija)",
"ulagac_odluke": "Ivan (kada zelimo aktivirati witness za login — sad infrastruktura spremna)"
},
"korak_5_key_
kratki_kod_primjer{
"stari_poziv": "block_hash = await upisi_u_krunicu(db, w3id, sadrzaj, kreator, tip, prev_hash, kljuc)",
"novi_poziv_s_witness": "ext = enrich_cigla_with_witness(cigla, sender_priv=..., sender_pub=...)\nblock_hash = await upisi_u_krunicu(db, w3id, sadrzaj, kreator, tip, prev_hash, kljuc, witness_extension=ext)",
"sql_provjera_chain_bloka": "SELECT meta->>'witness_consensus' AS konsenzus, meta->>'witness_hash' AS hash, meta->>'witness_t_tsa' AS tsa_ts FROM chain_blocks WHERE weise3_id = '.
zakonZAKON 17 (Bršljan PULL only) + ZAKON 26 (schema contract — meta polja imenovana eksplicitno) + ZAKON 32 (svaki fix ima chain entry)
promatraci[
"Ivan Brtan (vlasnik, dao naredbu 'ne mozemo graditi digitalnu arhivu na lazima')",
"Opus (analiza propusta — krunica chain nije nosio witness)",
"CC Sonnet (implementacija c1135 -> c1136 -> c1137 lanac)"
]
citacijaTrojna pohrana sad je zaista trojna: Krunica zna kad i tko, Dvorac zna sto i kako, Brsljani znaju gdje. Witness je sad u svakom od tri sloja, kao Krunica koja je svugdje (ZAKON 43).