Zdůvodnění
Objevování říká, že někde v síti existuje klíč; neumí říct, že klíč právě odpovídá, obsluhuje stejný repozitář, mluví kompatibilním protokolem nebo patří někomu, komu tento repozitář důvěřuje. Mesh, který bere slyšení jako příslušnost k nám, nechá kteréhokoli hosta na segmentu vkládat nároky a předávky; mesh, jehož transporty, povrchy a testy mají každý vlastní představu, kdo je propojen, skončí tak, že Cockpit ukazuje zelenou tečku u runtime, o kterém CLI ví, že zmizel. ADR 0067 uzavírá obojí: přijetí je jeden handshake s typovanými odmítnutími, replikace je jeden podepsaný žurnál skládaný jednou čistou funkcí a každý povrch je jejich projekcí.
Pravidlo exkluzivity je slib produktu lidem, kteří provozují několik relací a několik strojů na jednom repozitáři: exkluzivní nárok vylučuje všude, nebo nikde. Dvě implementace — jedna pro lokální nástěnku, jedna pro vzdálené peery — by činily tento slib závislým na tom, kde zrovna běží druhý worker.
Požadované chování
- Linka se naváže jen přes
Cooperation::dialaCooperation::accept_hello, které v pořadí ověřují: velikost a tvar zprávy, podpis Ed25519 pod doménou hello (nebo welcome), časové razítko proti oknu skew, nonce proti replay, vyjednaný rozsah protokolu, že peer není tento runtime, že id mesh repozitáře peera se rovná id tohoto runtime a že klíč peera je důvěryhodný podle deklarované politiky. Každé selhání jeRefusalCode, započítané a vypsané se svým detailem. - Id repozitáře v mesh se odvozuje z kořenových commitů repozitáře nebo se deklaruje jako
cooperation.repository; nikdy se neodvozuje z cesty v souborovém systému, adresy ani názvu hostitele. Runtimy s různými id repozitáře se nikdy nepropojí. - Relace, tvrzení, předávky a review překračují runtimy jen jako
MeshEvent, podepsané klíčem uzlu svého původu. Relay ukládá a přeposílá bajty; událost, jejíž podpis, vazba klíče na stream, repozitář nebo meze neplatí, je odmítnuta u každého konzumenta. Události se identifikují pomocí(stream, seq), aplikují se v pořadí sekvence na stream a duplikát nezmění nic. - Tvrzení rozhodují
mesh::state::foldaadmission_conflictsnad cestami, které se setkávají vpeers::claims_meet. Tvrzení žije, dokud není uvolněno, jeho relace je otevřená a tep jeho proudu stoupl v rámci vypršení; souběžná výhradní tvrzení se všude rozhodnou pro nejnižší(lamport, stream, seq)a ostatní jsou pojmenované konflikty. - CLI, HTTP, OpenAPI, MCP i Cockpit čtou a zapisují kooperaci jen přes schopnosti
capability::builtin::mesh. Žádný povrch nedrží vlastní seznam peerů, stav spojení, nárok ani verdikt o životnosti; Cockpit vykreslujemesh.peers,mesh.stateamesh.cooperation. - Nic, co propojený peer pošle, nic nespouští: žurnál nese metadata o práci; jediný soubor, jehož zapsání může vzdálená událost způsobit, je spotřebovaná předávka do adresáře předávek tohoto checkoutu, výslovným lokálním příkazem.
Chování při selhání
scripts/ci/mesh-check skončí s kódem 10 a pojmenuje TCP klienta linku nebo handler linku mimo src/mesh/ a modul schopnosti mesh, Journal vytvořený mimo src/mesh/ nebo stránku Cockpitu, která vykresluje stav mesh, aniž by se zeptala schopnosti mesh. Co statická kontrola nevidí, drží apps/majordomus-cli/tests/mesh_cooperation.rs (oddělené procesy přes TCP: linky, izolace, odmítnutí důvěry, vypršení po pádu a restart, konvergence tří uzlů, nepřátelské zprávy, dva worktree) a test/mesh-lab/run (oddělené linuxové uzly na skutečném bridge: multicastové objevování, oddělení a obnova po pádu); obojí běží v CI.
Ověření
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib mesh (deduplikace a řazení žurnálu, konvergence a exkluzivita foldu jako vlastnosti, odmítnutí handshaku, relay tří runtime, usmíření po rozdělení sítě přes in-process transport), cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mesh_cooperation a test/mesh-lab/run.