Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Mesh je pro tento repozitář zapnutý a drží ho každý start relace

Mesh je pro tento repozitář zapnutý a drží ho každý start relace

majordomus://adr/adr-0059navrženo meshkoordinaceoperace

odkazuje na

  • put_in_force apps/majordomus-cli/src/mesh/doctor.rs (soubor)
  • put_in_force adr-0044
  • put_in_force adr-0050
  • put_in_force adr-0067
  • put_in_force mesh-declared-is-held
  • put_in_force docs/MESH.md (dokument)
  • put_in_force lib/capture.sh (implementace)
  • put_in_force majordomus (mesh-declaration)
  • put_in_force test/cases/491_the_mesh_is_on_here.sh (test)
  • put_in_force test/cases/494_the_mesh_is_declared_and_held.sh (test)

odkazuje na něj

59. Mesh je pro tento repozitář zapnut a každý start relace jej drží

Kontext

ADR 0050 postavilo mesh a vypnulo ho: žádný socket se neotevře, dokud repozitář nezapíše enabled: true, protože „nic neopouští stroj“ je postoj, který čerstvý repozitář dědí, a flotila operátora je rozhodnutím operátora. ADR 0044 shromáždilo nástěnku peerů napříč všemi checkouty jednoho stroje a tam skončilo; ADR 0067 propojilo runtimy jednoho repozitáře napříč stroji.

Změřeno 2026-09-12 na flotile, na které se tento repozitář vyvíjí — notebook, stolní počítač x86_64 a vývojová deska aarch64 na jedné soukromé síti a jednom tailnetu:

  • Každý stroj provozoval svůj sdílený server s enabled: true a každý z nich to nesl jako necommitnutou úpravu .ai/repo/mesh/majordomus.yaml. Master říkal false. Primární checkout notebooku byl resetován na master; jeho server startoval z commitnuté deklarace, hlásil not active: the mesh declaration is disabled a dva další stroje dál viděly notebook, který tam nebyl, inzerovaný osiřelým serverem starší relace.
  • Desktop měl ručně psanou unit pro svůj server, která se restartovala každé dvě sekundy, dva tisíce sedmdesátšestkrát, protože ručně spuštěný server držel port.
  • Nic z toho nikdo neřekl. mesh status odpovědělo pravdivě, když se na ně zeptalo; briefing, s nímž relace začíná, jmenoval server a ne mesh; mesh doctor dokázalo, že stroj mohl provozovat mesh, a neřeklo nic o tom, zda to server dělal. Worker musel vědět, že se má zeptat, a ten, kdo se zeptal, se dozvěděl, že mesh je zakázán, a musel si domyslet, že to byl drift, ne rozhodnutí.

Deklarace byla mezitím commitnuta jako zapnutá, s deny_unknown, klíči tří strojů a dvěma huby a test/cases/491_the_mesh_is_on_here.sh drží svůj tvar nejmenších oprávnění; mesh doctor získalo kontrolu trust, která selže na stroji, jehož klíč není uveden. Stále chybí druhá polovina: server, který nedělá to, co říká commitnutá deklarace, mlčí, dokud se ho někdo nezeptá správnou otázkou.

Rozhodnutí

Mesh je zapnutý, jako commitnutý fakt tohoto repozitáře. .ai/repo/mesh/majordomus.yaml nese enabled: true, deny_unknown s allowlistem veřejných klíčů flotily, multicast na lokálním segmentu a rendezvous endpointy jmenující huby v obou sítích. Změna flotily je změna toho souboru a tabulky flotily v docs/MESH.md, v jednom commitu. Kostra, ze které čerstvý repozitář startuje, žádnou deklaraci nedodává: toto rozhodnutí je rozhodnutím tohoto repozitáře, ne nástroje.

Doctor posuzuje rozhodnutí serveru, nejen schopnost stroje. mesh doctor končí kontrolou runtime, která čte, co sdílený server rozhodl: active as <node> since … s providery a součty; off, as declared; nebo selhání, kvůli kterému toto ADR existuje, deklarace je zapnutá a mesh tohoto serveru není aktivní, s vlastním důvodem serveru, jeho dopadem a restartem, který následuje po opravě. Runtime meshe nese jeden bit, decided, nastavený, když ho server aktivuje nebo odmítne s důvodem; runtime, o kterém nikdo nerozhodl, patří příkazové řádce a kontrola tuto absenci hlásí, místo aby ji posuzovala. Verdikt je serverův, takže majordomus mesh doctor žádá běžící server o report (GET /api/v1/mesh/doctor), když obsluhuje checkout, a v procesu běží jen tehdy, když žádný. Neúspěšná kontrola končí exit 10 — mesh deklarovaný jako zapnutý a nebežící je nesplněný kontrakt, stejný exit jako každý jiný nesplněný kontrakt. Mesh, který je aktivní, ale se všemi deklarovanými transporty selhalými, je druhý selhaný verdikt runtime: nic neslyší a nikdo neslyší jeho.

Řekne to začátek relace. Briefing, který vloží startovní událost poskytovatele, nese jeden řádek Mesh: přímo pod řádkem Shared server:, kdykoli repozitář sleduje deklaraci a server je připraven: active — … s tím, co server vidí, off, as declared, nebo DECLARED ENABLED BUT NOT ACTIVE — … s důvodem serveru. Sledovaná deklarace, kterou index nemůže přečíst, je DECLARATION NOT READ — …, protože mlčení o commitnuté deklaraci je selhání, kterému se má zabránit. Řádek je mesh doctor spustitelného souboru vykreslené knihovnou hooků; knihovna sama neposílá žádný požadavek, takže jediný deklarovaný požadavek ze SECURITY.md zůstává jediný.

Test drží deklaraci i odpovědi. test/cases/494_the_mesh_is_declared_and_held.sh odmítne strom, jehož commitnutá deklarace je nesledovaná, zakázaná, není deny_unknown, uvádí méně klíčů, než docs/MESH.md jmenuje strojů, nebo nejmenuje žádný rendezvous hub; pak provede jednorázový repozitář přes startovní událost, aby dokázal žádný řádek bez deklarace, tři odpovědi a exit 10 z mesh doctor, když je deklarace povolena a server ji nedokázal aktivovat. apps/majordomus-cli/tests/mesh.rs dokazuje neúspěšný verdikt nad skutečným serverem. Tvrzení je mesh-declared-is-held, zaručeno.

Zamítnuté alternativy

Napájet nástěnku peerů uzly meshe. ADR 0050 to odmítlo a odmítnutí platí: peer relace a runtime stroje jsou různé věci s různou životností a otázka, kterou worker nástěnce klade — kdo drží mé cesty — nemá na záznamu uzlu odpověď.

Přepínač politiky místo commitnuté deklarace. session.mesh_required: true v politice by bylo druhé místo, kde říct, že mesh je zapnutý, schopné se s deklarací rozcházet. Deklarace je jediné místo a doctor i briefing ji čtou.

Řádek briefingu z vlastního požadavku hooku. Knihovna hooků se mohla serveru zeptat na /api/v1/mesh sama. Byl by to druhý síťový klient v lib/, což SECURITY.md a test/cases/08_no_forbidden_constructs.sh odmítají, a druhé vykreslení verdiktu, který doctor už dělá. Program vykresluje; hook cituje.

Odmítnout spustit server, jehož mesh se nemohl aktivovat. Mesh, který nemůže nastartovat, je důvod, nikdy selhaný server (ADR 0050); checkout se musí obsluhovat, ať už se jeho stroj dostane k flotile, nebo ne. Důvod se místo toho dělá hlasitým, na dvou místech, kam se worker už dívá.

Posuzování nerozhodnutého runtime. Vlastní runtime příkazové řádky se nikdy neaktivuje, takže při zapnuté deklaraci je vždy neaktivní. Hlásit to jako selhání by způsobilo, že každé mesh doctor bez serveru skončí s 10 a všechny by naučilo to ignorovat.

Důsledky

  • mesh doctor může skončit kódem 10 tam, kde končilo 0: kdykoli kontrola selže, a zejména když je deklarace povolena a mesh serveru není aktivní. Skripty, které čtou report, si ponechávají --format json; odpověď se vytiskne v obou případech.
  • Sebekontrola o volajícím procesu — jeho vlastním stavovém adresáři, jeho vlastní identitě — je majordomus run mesh.doctor, která se nikdy neptá serveru; případ 491 ji čte právě tak.
  • Stroj, který se připojuje k flotile, je klíč na seznamu povolených a řádek v tabulce flotily v docs/MESH.md a u hubu adresa v koncových bodech; ztracená identita jsou tytéž úpravy. Každá je commit a případ 494 selže, když se tabulka a seznam povolených liší velikostí.
  • Huby jsou servery spuštěné ručně za loopbackem (docs/MESH.md). Skript, který by je instaloval jako systemd uživatelské jednotky, byl s tímto rozhodnutím navržen a není jeho součástí: nová shellová automatizace je odmítána (ADR 0069, docs/SHELL.md) a instalátor hubu se dluží jako typovaná schopnost nebo workflow v Rhai. Do té doby se zastavení hubu pozná podle počtu present strojů, které se u něj zaregistrovaly, ne kontrolou.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0059-the-mesh-is-on-for-this-repository-and-every-session-start-h.md
identity
adr-0059
dostupné také jako
Zdroj MCP majordomus://adr/adr-0059 · majordomus entity show adr/adr-0059 · GET /api/v1/entity?uri=majordomus://adr/adr-0059
v Cockpitu
/cockpit/objects/adr/adr-0059

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.