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.

I2163 — Klient se nikdy nepřipojí k serveru jiné verze, aniž by to řekl, a novější klient nahradí starší server

Zařídit, aby volba porovnávala verze skrze jediný platný verdikt: novější klient převezme řízení v uspořádaném předání, starší klient se připojí a řekne, že je starší.

HOTOVO vlna 1 · p1 · profil implementation · běží samostatně

Součást safe-self-update — Každý uzel mesh sleduje publikovaný release sám, verze se potkávají bezpečně a původ release lze ověřit.

Cíl

Zařídit, aby volba porovnávala verze skrze jediný platný verdikt: novější klient převezme řízení v uspořádaném předání, starší klient se připojí a řekne, že je starší.

Proč

lease::elect a ask porovnávají name, repository_id a leaseholder, nikdy verzi (apps/majordomus-cli/src/lease.rs:896-920). Kontrola nahrazení pokrývá jen binárku vyměněnou na téže cestě (apps/majordomus-cli/src/lease.rs:695-709); instalátor ukládá každou verzi do vlastního adresáře pod ~/.local/share/majordomus/versions/<v>/, takže upgrade mění cestu a nic není nahrazeno. Nový klient se pak připojí ke staršímu serveru a nesoulad hlásí jen varování Outdated z server::standing_at (apps/majordomus-cli/src/capability/builtin/server.rs:410-424, apps/majordomus-cli/src/capability/builtin/health.rs:606), které klienti MCP nikdy neuvidí. docs/MCP.md:49 prezentuje nahrazení jako pokrytí včerejšího kódu. Výchozí audit z 2026-10-09 na masteru 1fb8d6be44, mezera selhání 3, předpoklad 3 a drift 7.

Aktuální stav

Po upgradu přes instalátor obsluhuje nové klienty stará verze, dokud nezmlkne.

Cílový stav

ask zachází s lease, jehož verze se liší od crate::VERSION, podle verdiktu, který už dává server::standing_at: novější klient převezme v uspořádaném předání, přičemž relace starého serveru přecházejí tak, jak je I2127 nechává; starší klient se připojí a rozdíl ohlásí ve své odpovědi initialize; docs/MCP.md říká, co každý případ dělá.

Rozsah

  • apps/majordomus-cli/src/lease.rs
  • apps/majordomus-cli/src/capability/builtin/server.rs
  • apps/majordomus-cli/src/mcp/protocol.rs
  • apps/majordomus-cli/src/commands/serve.rs
  • apps/majordomus-cli/tests/serve_lifecycle.rs
  • test/cases
  • docs/MCP.md

Závislosti

Kritéria přijetí

  • Klient verze N+1 spuštěný vedle serveru verze N nainstalovaného na jiné cestě skončí s jedním serverem N+1 a znovu připojenými relacemi starého serveru
  • Klient verze N-1 připojený k serveru verze N hlásí rozdíl ve své odpovědi initialize
  • Jedna funkce rozhoduje verdikt verze pro elect, serve ensure a server.status

Validace

  • bin/majordomus plan validate
  • cargo test --test serve_lifecycle --test server_status
  • MJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>

Požadované důkazy

  • newer_client_replaces_older_server_test
  • older_client_told_test

Důkazy

pokrývátypcommandvýsledeku commitu
newer_client_replaces_older_server_testcigh run view 38626102499 --log --job 116065669794 (validate na masteru e8505a431d, rust (3): cargo test --test serve_lifecycle)tests/serve_lifecycle.rs newer_client_replaces_older_server_test ... ok and an_older_client_leaves_a_newer_server_alone_and_says_so ... ok in validate run 38626102499 (success) at e8505a431d; delivered by 383309ae06cc0e3585
older_client_told_testcigh run view 38626102499 --log --job 116065669775 (validate na master e8505a431d, rust (2): cargo test --lib)commands::mcp::tests::older_client_told_test ... ok v běhu validate 38626102499 (success) na e8505a431d; dodáno 383309ae06cc0e3585

Časová osa

zahájeno
2026-10-14T22:14:26Z
ověřeno
2026-10-14T22:14:44Z
dokončeno
2026-10-14T22:15:01Z

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I2163.yaml. Načtěte ho zpět pomocí majordomus plan show I2163.

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