Co to znamená
Klient, který spouští server MCP, čeká na handshake, a ten, který jej nedostane včas, ohlásí server jako selhavší a pokračuje bez něj, takže relace je tiše jediným pracovníkem repozitáře, který jich má mnoho. Když tento checkout nemá spustitelný soubor, který by spustil, nebo ho nedokáže sestavit, mcp místo toho obslouží nainstalovaný release a stderr jmenuje release a důvod. Nic jiného se nemění: každý jiný příkaz stále skončí s kódem 12 a zastaralý spustitelný soubor, který lze přestavět, se přestaví.
Princip
bin/majordomus-cli mcp rozhoduje dřív, než sestaví. Pokud spustitelný soubor crate chybí, spustí nainstalovaný release (MAJORDOMUS_INSTALLED_BIN, ve výchozím stavu majordomus v ~/.local/bin, kam jej umístí install.sh). Pokud je spustitelný soubor zastaralý, zkusí build jako dřív a vrátí se k release, když není cargo, je méně volného místa než MAJORDOMUS_MIN_FREE_MB (výchozí 5120) nebo build selže. Soubor uvnitř repozitáře se nikdy nepovažuje za nainstalovaný release, stejně jako soubor, který neodpovídá na --version. MAJORDOMUS_MCP_BUILD=1 způsobí, že mcp se staví jako každý jiný příkaz, pro přispěvatele pracujícího na samotném serveru.
Jak to vidět
MAJORDOMUS_NO_BUILD=1 bin/majordomus-mcp --inspect # with no built executable: serves from the installed release, stderr says why
bash test/run.sh 3177_a_client_always_gets_a_server # the cases, over stubs of cargo, the free-space floor and the installed releaseCo nepokrývá
Neinstaluje release: pokud žádný není nainstalován, launcher selže jako vždy, s exit 12 a příkazem ke spuštění. Nečiní nainstalovaný release buildem checkoutu, takže pracovníka může obsluhovat starší release než zdroje; řádek na stderr říká který. Nespouští tah: relace, která je jen otevřená, stále čeká na první zprávu (session-start-prompt).
Proč existuje
2026-10-16 se otevřela relace v checkoutu, jehož spustitelný soubor nebyl nikdy sestaven, na svazku s 4,5 GB volného místa proti podlaze 5120MB. Launcher sestavení odmítl, skončil 12 a klient hlásil CONNECTION_CLOSED, zatímco release mluvící stejným protokolem servíroval týž checkout na jeho portu. Relace pracovala bez majordomus_peers a majordomus_announce, což je selhání, které popisuje ADR 0156. ADR 0172 rozhodlo o záložní cestě; nese ji project.shared-server-resilience.