I2127 — Server, který ztratil lease, předá své relace dál a skončí
Přimět server, který ztratil lease nebo byl v něm nahrazen, aby na své stávající relace MCP odpovídal session-not-found po omezené odkladné lhůtě pro rozpracované požadavky, takže jejich mosty se znovu připojí k aktuálnímu držiteli leasu a starý proces dojde ke svému konci.
HOTOVO vlna 0 · p1 · profil implementation · běží samostatně
Cíl
Přimět server, který ztratil lease nebo byl v něm nahrazen, aby na své stávající relace MCP odpovídal session-not-found po omezené odkladné lhůtě pro rozpracované požadavky, takže jejich mosty se znovu připojí k aktuálnímu držiteli leasu a starý proces dojde ke svému konci.
Proč
Ztracený nebo nahrazený server dál obsluhuje své stávající relace 'a končí s nimi' (apps/majordomus-cli/src/http/mcp.rs:113-118). Mosty pingují každých 20 s (apps/majordomus-cli/src/mcp/bridge.rs:19) a smyčka serve počítá přemostěné relace jako připojené (apps/majordomus-cli/src/commands/serve.rs:136-146), takže server běžící se nahrazeným kódem nikdy nezanikne nečinností, dokud žije jakýkoli most, a jeho klienti zůstávají na starém kódu, dokud neskončí. docs/MCP.md:48 (ping) a :50 (server končí, když odejde poslední peer) společně činí nahrazený server nesmrtelným; :118 říká jen, že 'proces s nimi končí'. Základní audit z 2026-10-09 na master 1fb8d6be44, mezera životního cyklu 4 a drift 7.
Aktuální stav
Po nahrazení dostane nový initialize 409 lease_lost (apps/majordomus-cli/src/http/mcp.rs:119-128, apps/majordomus-cli/tests/lease_lost.rs::a_server_that_lost_its_lease_says_so_and_takes_on_nobody_new), ale relace otevřené před ním se obsluhují bez omezení.
Cílový stav
lease::lost zaznamená kdy; po deklarovanou nečinnou toleranci zastaralý server odpovídá svým relacím, poté každou uzavře při jejím příštím požadavku odpovědí 404 session_not_found, na niž most odpoví otevřením relace, odmítnutím 409 lease_lost a zvolením aktuálního serveru; serve skončí, když nedrží žádnou relaci (superseded_and_alone). Probíhající požadavek se dokončí tam, kde začal. Neměřeno zde: celá klientská cesta přes skutečný most k novému držiteli lease (cesta 404, o niž se opírá, je stávající cestou mostu, testovanou v mcp_shared).
Rozsah
- apps/majordomus-cli/src/http/mcp.rs
- apps/majordomus-cli/src/shared.rs
- apps/majordomus-cli/src/commands/serve.rs
- apps/majordomus-cli/src/mcp/bridge.rs
- apps/majordomus-cli/tests/lease_lost.rs
- apps/majordomus-cli/tests/mcp_shared.rs
- docs/MCP.md
Závislosti
Žádné. Tento úkol je kořenem grafu.
Co na tom čeká
Kritéria přijetí
- Přemostěný klient připojený k serveru, jehož lease je poté převzat, dostane odpověď od nového držitele leasu v deklarované lhůtě, aniž by se ztratil požadavek
- Nahrazený proces sám skončí poté, co se jeho relace přesunuly, zatímco mosty ještě žijí
- Požadavek rozpracovaný v okamžiku nahrazení dostane vlastní odpověď, ne 404
- docs/MCP.md uvádí odklad a to, že ztracený server končí
Validace
- bin/majordomus plan validate
- cargo test --test lease_lost --test mcp_shared
Požadované důkazy
- lost_server_hands_sessions_on_test
- superseded_server_exits_test
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| lost_server_hands_sessions_on_test | ci | gh run view 38626102499 --log --job 116065669794 (validate na masteru e8505a431d, rust (3): cargo test --test lease_lost) | lost_server_hands_sessions_on_test jmenuje test, který pod tímto názvem nikdy nebyl napsán; dokázáno tests/lease_lost.rs a_server_that_lost_its_lease_says_so_and_takes_on_nobody_new ... ok v běhu validate 38626102499 (success) na e8505a431d; dodáno 5bb27f42145 | c0e3585 |
| superseded_server_exits_test | ci | gh run view 38626102499 --log --job 116065669794 (validate na master e8505a431d, rust (3): cargo test --test cov_runtime_a_server) | superseded_server_exits_test names a test never written under that name; proved by tests/cov_runtime_a_server.rs an_unbounded_server_whose_lease_is_taken_over_ends_by_itself ... ok in validate run 38626102499 (success) at e8505a431d; delivered by 5bb27f42145 | c0e3585 |
Časová osa
- zahájeno
- 2026-10-14T22:12:56Z
- ověřeno
- 2026-10-14T22:13:14Z
- dokončeno
- 2026-10-14T22:13:35Z
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/I2127.yaml. Přečtěte ho zpět pomocí majordomus plan show I2127.