I2702 — Checkout si drží jednu adresu napříč restarty, protože jeho server se váže na port odvozený z checkoutu
Navázat port odvozený z identity repozitáře a worktree dříve, než se přejde na volný port, aby konfigurace klienta Streamable HTTP nebo záložka v UI uváděla adresu, která přežije restart.
HOTOVO vlna 1 · p1 · profil implementation · běží samostatně
Cíl
Navázat port odvozený z identity repozitáře a worktree dříve, než se přejde na volný port, aby konfigurace klienta Streamable HTTP nebo záložka v UI uváděla adresu, která přežije restart.
Proč
Odděleno od I2131 dne 2026-10-14. I2131 způsobil, že se k časovému limitu nečinnosti počítá použití každé plochy, a jeho desired_state říkal „Zde neprovedeno“ o portu odvozeném z identity repozitáře a worktree, zatímco jeho kritéria přijetí jej stále vyžadovala, takže se nikdy nemohl uzavřít. Dne 2026-10-09 živý server žádal o 8741 a sloužil na 61068, adrese, která se mění při každém restartu. Druhá odložená otázka I2131, zda je potřeba vstup nad serve ensure, je rozhodnuta ADR 0135 a plánována jako I2484 a zde se nenese. Audit základní linie ze dne 2026-10-09 na masteru 1fb8d6be44, mezera životního cyklu 9 a drift 10.
Aktuální stav
DEFAULT_PORT je 8741 (apps/majordomus-cli/src/cli.rs); první checkout, který se spustí, ho obsadí, a každý další dostane volný port, když http::server::bind (apps/majordomus-cli/src/http/server.rs) nemůže získat požadovaný, při každém restartu jiný. docs/MCP.md říká, že obsazený port se nahradí volným, a v příkladech ukazuje :8741.
Cílový stav
Server nejdřív žádá o port odvozený z identity repozitáře a worktree, který obsluhuje, takže jeden checkout žádá při každém startu o stejný port a dva checkouty jednoho repozitáře o různé; obsazený port se vrací na volný a obojí se loguje, jako dnes. docs/MCP.md popisuje odvozený port a záložní řešení.
Rozsah
- apps/majordomus-cli/src/cli.rs
- apps/majordomus-cli/src/http/server.rs
- apps/majordomus-cli/src/commands/serve.rs
- apps/majordomus-cli/src/commands/env.rs
- apps/majordomus-cli/tests/serve_lifecycle.rs
- docs/MCP.md
Mimo rozsah
- Časovač nečinnosti a to, co se počítá jako použití, což dodal I2131
- Příkaz majordomus ui, o kterém rozhodlo ADR 0135 a který plánuje I2484
Závislosti
Kritéria přijetí
- Dvě po sobě jdoucí spuštění serveru jednoho checkoutu se navážou na stejný port, pokud je volný
- Dva checkouty jednoho repozitáře odvodí různé porty
- docs/MCP.md popisuje odvozený port a záložní řešení
Validace
- bin/majordomus plan validate
- cargo test --test serve_lifecycle
- MJ_TEST_JOBS=4 bash test/run.sh 190_entry_is_automatic
Požadované důkazy
- stable_port_per_checkout_test
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| stable_port_per_checkout_test | test | cargo test --test serve_lifecycle; bash test/run.sh --no-skips 190_entry_is_automatic | serve_lifecycle 17 passed incl. stable_port_per_checkout_test; case 190 ok, 0 skipped (code on master since b3f35a34a5f; re-run at master 01227a0) | 01227a0 |
Časová osa
- zahájeno
- 2026-10-17T12:02:17Z
- ověřeno
- 2026-10-17T12:02:47Z
- dokončeno
- 2026-10-17T12:02:56Z
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/I2702.yaml. Přečtěte jej zpět pomocí majordomus plan show I2702.