I1502 — Server obsluhující kód, který už neexistuje, přestane o sobě tvrdit, že je připraven
Nechat kořenový dokument a dokument zdraví běžícího serveru nést identitu kódu, který obsluhuje, aby zastaralý server odhalil klient, který ho čte, a ne jen vnější čtenář držící novější spustitelný soubor.
HOTOVO vlna 0 · p0 · profil implementation · bezpečné souběžně
Součást development-runtime — The runtime has a development surface.
Cíl
Nechat kořenový dokument a dokument zdraví běžícího serveru nést identitu kódu, který obsluhuje, aby zastaralý server odhalil klient, který ho čte, a ne jen vnější čtenář držící novější spustitelný soubor.
Proč
F1 z tabulky selhání auditu a audit jej jmenuje nejnebezpečnější třídou, kterou našel, protože každé měření, které kdokoli přes takový server provede, je tiše špatně — včetně měření toho, co vývojové ploše chybí. Bylo změřeno z obou stran při jednom sezení: `serve status` v čerstvém programu hlásil server primárního checkoutu jako zastaralý, s důvodem, že program, z něhož byl spuštěn, byl od té doby nahrazen, zatímco týž server dotazovaný přímo na /api/v1/server vrátil HTTP 200 a stav `ready`, s peery po celou dobu připojenými. Asymetrie je strukturální: čtečka lease v čerstvém programu to rozpozná, ale kořenový dokument běžícího serveru nenese žádnou identitu, proti které by se dalo kontrolovat.
Aktuální stav
Čtyři z pěti serverů běžících během auditu byly zastaralé. Server hlásí `ready` ze svého vlastního endpointu bez ohledu na to, zda jeho spustitelný soubor na disku ještě existuje, a jeho kořenový dokument nenese žádný HEAD, žádnou identitu sestavení ani otisk spustitelného souboru, které by čtenář mohl porovnat. To je třída ghost-serveru: server, který odpovídá, není server, který je aktuální.
Cílový stav
Klient, který čte dokumenty vlastního serveru, může rozhodnout, zda je tento server aktuální, aniž by držel druhý executable. Zastaralý server to řekne tam, kde se ho ptají, na témže místě, kde říká, že je připraven.
Rozsah
- apps/majordomus-cli/src/server
- apps/majordomus-cli/src/capability/builtin/server.rs
- apps/majordomus-cli/src/capability/builtin/health.rs
- docs/COCKPIT.md
- test/cases
Mimo rozsah
- Úklid registru serverů. Výpis flotily vyjmenovává každý checkout, který kdy viděl, včetně dávno zaniklých odkládacích stromů pod /private/tmp, a nic ho neuklízí; to je samostatné zjištění a ne tento úkol.
- Zabíjení nebo restart serveru jiného checkoutu. Tento stroj sdílí několik živých relací.
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- Server, jehož spustitelný soubor byl nahrazen, tuto skutečnost hlásí na endpointu, na který se klient ptá na jeho stav
- Na kontrolu lze odpovědět klientem, který nedrží druhý spustitelný soubor
- Aktuální server se nehlásí jako zastaralý, což dokazuje čerstvý start
Validace
- bin/majordomus-cli serve status
- bash test/run.sh
Požadované důkazy
- stale_server_says_so
- current_server_is_not_flagged
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| stale_server_says_so | test | bash test/run.sh 885_a_replaced_server_stops_calling_itself_ready | ok na 4090b2b8ae: server, jehož spustitelný soubor byl nahrazen, odpovídá ready false a stale pojmenuje náhradu, na /api/v1/ready i v kořenovém dokumentu; změna je 8c29f1f3a6 (PR #747, přistálo v #815) | 4090b2b |
| current_server_is_not_flagged | test | bash test/run.sh 885_a_replaced_server_stops_calling_itself_ready | ok na 4090b2b8ae: týž případ restartuje server a čte ready true bez zastaralého pole | 4090b2b |
Riziko
Nízké na mechanismu, vysoké na hodnotě. Riziko, které stojí za pojmenování, je opačné: kontrola, která označí aktuální server za zastaralý, by způsobila, že by každý pracovník signál ignoroval, což je horší než ho nemít.
Časová osa
- zahájeno
- 2026-10-08T10:33:49Z
- ověřeno
- 2026-10-08T10:34:14Z
- dokončeno
- 2026-10-08T10:34:20Z
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/I1502.yaml. Zpětně ho přečtete pomocí majordomus plan show I1502.