{"id":"c0018","filename":"c0018_plan_raspad_centra.dok.json","weise3_id":"9c816b4d61ec836d280363da7a4d4301ed3a219f5162e526f26f3bc25ca9f64a","tip":"mrezni_plan","naziv":"c0018 — RASPAD CENTRA (Bršljan postaje samostalan)","kreator":"CC","datum":"2026-05-03T06:27:46.558777+00:00","snippet":"","status":"","prev_weise3":"","bunker_l":"#6689a5","full":{"tip":"mrezni_plan","kreator":"CC","nastao":"2026-05-03T06:27:46.558777+00:00","naziv":"c0018 — RASPAD CENTRA (Bršljan postaje samostalan)","prev_chain":"c0017_rental_napredak.dok.json","filozofija":{"preimenovanje":"NIJE backup. JESTE mreža bez centra.","princip_1":"Domene su vrata. WeisE3 ID je permanentna adresa.","princip_2":"Baza je sjena. Bršljan je istina.","princip_3":"Niti jedan čvor nije nezamjenjiv. Ako padne — drugi preuzima u milisekundama.","princip_4":"Trojna pohrana: Krunica + Dvorac + Bršljan. Sva tri moraju imati svaku istinu.","cilj_konacni":"Tvorac sustava može nestati. Sustav nastavlja jer je weise3_id permanentan, a P2P gossip raznosi nove blokove."},"stanje_2026_05_03_06_21":{"node_1_genesis_hetzner":{"agent_id":"fac896532b14a4ea","url":"https://genesis.limit-connect.com","dok_count":2448,"rola":"supernode (FINA static IP, najbrže)"},"node_2_grosmarkt":{"agent_id":"c75159810bc65674","url":"https://grosmarkt-online.eu/brsljani","dok_count":100,"rola":"mirror, sync u tijeku (~21h do full)","prvi_announce":"2026-05-03T06:17:38.869741+00:00"},"sync_smjer":"⬅ samo (Node 2 pull od Genesisa, sync.php)","verify_url_pokriva":"samo Node 1 (Hetzner SPOF)","failover":"NIJEDAN — ako Hetzner padne, svjetla se gase"},"sto_radi_dobro":["/api/v1/brsljani/peers — registar susjeda (announce/discover)","/api/v1/brsljani/dok/{id} GET — dohvat sa fallback na peerove","/api/v1/brsljani/dok/{id} POST — push primljeni dokument","/api/v1/brsljani/gossip — broadcast protokol s hop_count","/api/v1/brsljani/index — popis svih weise3_id-ova čvora","dokarh_resolver — chain backend (disk → mreža → cloud)","OPP Prior Art Seal — auto-injekta u svaki put_json","Peer registracija — Node 2 je već u Genesis registru"],"sto_NE_radi":["P1 — verify URL pokazuje samo na Hetzner (Node 2 nije jednako vrijedan endpoint)","P2 — sync je jednosmjeran (Wallet/budžet upisi na Node 2 čekaju da Genesis povuče)","P3 — nema scheduler-a (sync.php je manualni, ne periodični delta poll)","P4 — nema DNS failovera (Hetzner = SPOF na razini imena)","P5 — nema push-on-write (novi blok ne odlazi automatski peerima)","P6 — sync.php pull rate ~5 dok/h → presporo (treba 100+/min)"],"faze":[{"faza":1,"naziv":"WeisE3 univerzalna adresa (verify URL svuda)","cilj":"Svaki čvor razrješava /v/{id} jednako, klijent automatski padne na sljedeći","koraci":{"1.1":"Node 2 PHP — dodaj rutu /brsljani/v/{id} → 302 → /brsljani/dok/{id}","1.2":"services/opp_seal.py — promijeni verify_url u verify_urls (lista oba čvora)","1.3":"Browser SDK — fallback chain: pokušaj #1, pa #2, pa #3 (3s timeout svaki)","1.4":"genesis-auth.js — isti fallback za /auth/popup"},"trajanje":"4 sata","acceptance":["curl https://grosmarkt-online.eu/brsljani/v/<id> → 302","novi .dokarh ima verify_urls listu s oba čvora","browser ne osjeti pad jednog čvora"]},{"faza":2,"naziv":"Dvosmjerni gossip (Node 2 PUSH-a Genesisu)","cilj":"Svaki novi blok bilo gdje stiže svuda u <60s","koraci":{"2.1":"Genesis: pull_from_peers() scheduler svakih 60s (asyncio task u services/brsljani.py)","2.2":"Node 2 PHP: cron */1 → POST nove dokumente Genesisu (push_to_peers.php)","2.3":"Push-on-write: dokarh_resolver.put_json() pokrene asyncio.create_task(cvor.push_to_peers(w3))","2.4":"Hash verifikacija pri svakom prijemu: sha3_256(podaci) == declared weise3_id","2.5":"Idempotency: ako weise3_id već postoji → odbaci (ne dupliciraj chain)"},"trajanje":"1 dan","acceptance":["upload na Node 2 → unutar 60s na Genesisu","upload na Genesis → unutar 60s na Node 2","race test: 100 dokumenata istovremeno → svaki zapisan točno jednom","maliciozni hash test: pokušaj poslati doc s krivim weise3_id → odbijen"]},{"faza":3,"naziv":"Failover bez DNS magije (browser-side)","cilj":"Klijent automatski koristi živi čvor, bez Cloudflare/anycast","koraci":{"3.1":"Browser SDK BRSLJANI_NODES = [genesis, grosmarkt, ...] konstanta","3.2":"Svaki fetch wrapped: pokušaj redom dok netko ne odgovori","3.3":"Health cache: zapamti tko je živ, periodični re-check svakih 30s","3.4":"Status banner: ako Node 1 down, prikaži 'Radimo s Node 2' (transparentnost)"},"trajanje":"4 sata","acceptance":["ugasi Genesis simulirano → klijent radi dalje s Node 2","palih čvor se vraća → klijent automatski preferira njega (manja latency)"]},{"faza":4,"naziv":"Treći čvor — browser kao Bršljan-Lite (PWA offline-first)","cilj":"Korisnikov browser drži vlastitu kopiju svojih dokumenata","koraci":{"4.1":"Service Worker — cache Bršljan SDK + ulaznica + landing","4.2":"IndexedDB schema: dokarh, lanac, peers, pending_sync","4.3":"WebCrypto SHA3-256 + Ed25519 (već postoji u genesis-auth.js)","4.4":"Sync queue: lokalno-prvo, push kad je net dostupan","4.5":"WebRTC peer discovery — kad dva uređaja na istoj WiFi, sync direktno"},"trajanje":"3 dana","acceptance":["instaliraj na Android, isključi WiFi → ulaznica i dalje radi","kreiraj trial offline → kad uključiš net, automatski sync","dva uređaja na istoj mreži → sync između njih bez Genesisa"]},{"faza":5,"naziv":"Treći serverski čvor — B2 Backblaze cold mirror","cilj":"Trojna pohrana zaista trojna","koraci":{"5.1":"B2 backend već postoji u dokarh_resolver — samo aktiviraj kredencijale","5.2":"Daily snapshot /var/www/genesis/dokarh/ → B2 bucket (rclone cron)","5.3":"Read-only put: B2 prima kopije, ne odgovara na write iz mreže","5.4":"Recovery procedura: rclone copy B2 → novi čvor (pokreni novi peer iz pepela)"},"trajanje":"4 sata","trosak":"~$1/mj (10GB)"},{"faza":6,"naziv":"D9 SVJEDOK među čvorovima (revizijski trag)","cilj":"Svaki sync događaj ima vlastiti chain blok — vidiš tko, kada, što","koraci":{"6.1":"Pri svakom uspješnom push/pull, kreiraj sync.event .dokarh","6.2":"Sadržaj: from_peer, to_peer, weise3_ids[], vrijeme, latency_ms","6.3":"Ovaj sync.event ide u svoj vlastiti chain (sync_lanac.json)","6.4":"Status dashboard čita iz tog lanca, prikazuje historiju"},"trajanje":"1 dan","acceptance":"Otvori dashboard, vidiš zadnjih 100 sync događaja s timestamp-ima"},{"faza":7,"naziv":"Status dashboard (javni)","cilj":"Bilo tko vidi zdravlje mreže — gradi povjerenje","url":"https://genesis.limit-connect.com/status (i grosmarkt-online.eu/brsljani/status)","koraci":{"7.1":"Page server-rendered, lista svih peera s last_seen, dok_count, latency","7.2":"Sync delta widget: |Node1.dok_count - Node2.dok_count|","7.3":"Last 24h chart: koliko dokumenata sync-ano svakih 5 min","7.4":"Test: klikni 'Verify random doc' → klijent pokuša sva tri čvora paralelno"},"trajanje":"1 dan"},{"faza":8,"naziv":"Mjesečni Chaos Test (automatiziran)","cilj":"Dokaz da raspad centra zaista funkcionira","koraci":{"8.1":"Cron 1× mjesečno: simuliraj outage Genesis čvora 1h","8.2":"Verificiraj: Node 2 nastavlja servirati sve dokumente","8.3":"Upload na Node 2 tijekom outagea → kad Genesis se vrati, sync prošao","8.4":"Generiraj report .dokarh: chaos.test događaj"},"trajanje":"4 sata setup"}],"redoslijed_tjedan_1":["PON: FAZA 1 (verify URL svuda)","UTO: FAZA 2 (dvosmjerni sync)","SRI: FAZA 3 (browser failover)","ČET: FAZA 5 (B2 treći mirror) + FAZA 7 (status dashboard)","PET: FAZA 6 (D9 svjedok sync) + smoke testovi","SUB-NED: monitoring, fixevi"],"redoslijed_tjedan_2":["FAZA 4 (PWA + IndexedDB) — pravi offline-first za korisnika","FAZA 8 (chaos test setup) — dokaz da to radi"],"definitivno_NE_treba":["Anycast IP — preskoči sad, $500+/mj nije opravdano","Vlastiti DNS server — Cloudflare je dovoljan kad budemo trebali","Bizantinski konsenzus (PoW/PoS) — append-only chain ne treba glasanje","Smart contracts — naš ChainBlock nije Turing-complete (i ne treba biti)","Cloudflare LB sad — koraci 3 i 5 daju 95% benefit besplatno"],"metrika_uspjeha":{"sync_delta":{"cilj":"<5 dok","alarm":">100 dok"},"sync_lag":{"cilj":"<60s","alarm":">5min"},"verify_uptime":{"cilj":"99.9%","mjeri":"oba čvora kombinirano"},"cross_node_latency":{"cilj":"<150ms","alarm":">500ms"},"mjesecni_chaos_pass":{"cilj":"12/12 godišnje"},"browser_offline_test":{"cilj":"PWA radi 7 dana bez interneta"}},"sto_je_genesis_nivo_o_ovome":["1. Plan SAM JE u Krunici (.dok.json), pod OPP Seal-om — prior art za našu mrežnu arhitekturu","2. Nije generic IT plan, nego ugrađuje naš zakon: WeisE3 je adresa, ne URL","3. Browser nije klijent nego ravnopravan čvor (Bršljan-Lite)","4. Failover nije engineering trik nego direktna posljedica naše filozofije","5. Mjesečni chaos test je javan dokaz da decentralizacija nije marketing"],"sljedeci_blok_lanca":"c0019 — implementacija FAZE 1 (verify URL svuda) DONE","weise3_id":"9c816b4d61ec836d280363da7a4d4301ed3a219f5162e526f26f3bc25ca9f64a","prev_hash":"8247c97b57c683b3844954dba3476fe164f04169105938321bf1cde40e8c1cfb","pecat_dna":"553a9ea36befe6321d849486bf72a8979ac12b00157be81448b86765702f7ec3","block_hash":"19d54c9c294d89427dad48d09bde895bacb8858ea63df4d2bd7cf0fcee3d6a85","svjedok":{"kreator":"CC","kontekst":"mrezni_plan.brsljani.raspad_centra","vrijeme":"2026-05-03T06:27:46.559042+00:00","promatrac":"genesis.cc.session"},"_opp_seal":{"version":"1.0","tip":"prior_art","javno":true,"hash_algo":"SHA3-256","chain":"genesis.limit-connect.com","verify_url":"https://genesis.limit-connect.com/v/9c816b4d61ec836d280363da7a4d4301ed3a219f5162e526f26f3bc25ca9f64a","licence":"CC0","prior_art_statement":"Ovaj dokument je javno objavljen i vremenski verificiran. Svaka ideja, tehnika ili inovacija opisana u njemu ne može biti patentirana naknadno jer predstavlja prior art prema čl. 54 EPC i kvalificirani elektronički upisnik prema eIDAS 2.0 čl. 45j-45m.","verify_urls":["https://genesis.limit-connect.com/v/9c816b4d61ec836d280363da7a4d4301ed3a219f5162e526f26f3bc25ca9f64a","https://grosmarkt-online.eu/brsljani/v/9c816b4d61ec836d280363da7a4d4301ed3a219f5162e526f26f3bc25ca9f64a"]}}}