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ě
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á | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| newer_client_replaces_older_server_test | ci | gh 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 383309ae06c | c0e3585 |
| older_client_told_test | ci | gh 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 383309ae06c | c0e3585 |
Č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.