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.

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átypcommandvýsledeku commitu
stale_server_says_sotestbash test/run.sh 885_a_replaced_server_stops_calling_itself_readyok 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_flaggedtestbash test/run.sh 885_a_replaced_server_stops_calling_itself_readyok na 4090b2b8ae: týž případ restartuje server a čte ready true bez zastaralého pole4090b2b

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.

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