I1031 — Servírovaný povrch říká, který checkout servíruje
Přimět každý povrch, který proces poskytuje, aby jmenoval repozitář, který obsluhuje — jeho kořen a identitu — aby čtenář na první pohled poznal, zda odpovědi před ním pocházejí ze stromu, ve kterém pracuje.
HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně
Cíl
Přimět každý povrch, který proces poskytuje, aby jmenoval repozitář, který obsluhuje — jeho kořen a identitu — aby čtenář na první pohled poznal, zda odpovědi před ním pocházejí ze stromu, ve kterém pracuje.
Proč
Stálo to skutečnou hodinu. Prohlížeč držel stránku Swagger ze serveru, který skončil, jeho požadavky selhávaly se zprávou obviňující CORS a živý server na jiném portu se ukázal být worktree scratchpadu úplně jiné relace — takže i čtený dokument byl z toho jiného stromu, včetně věty o trasách, kterou tento strom už opravil. Nic na stránce neříkalo, který checkout na ni odpověděl. Několik relací sdílí jeden stroj a každá může navázat vlastní server; povrch, který nejmenuje svůj strom, vybízí přesně k tomuto závěru, že nástroj je rozbitý, když nástroj je v pořádku a adresa je špatná.
Aktuální stav
Polovina z toho přistála 2026-09-10 mimo plán. ADR 0035 přidalo repository::git_identity a domovská stránka i indexová trasa na ni odpovídají vedle vlastních repository_id a linked_worktree checkoutu, takže čtenář pozná, který repozitář a který checkout odpověděl; identita pochází z modelu repozitáře a nejmenuje žádnou cestu hosta (PR #153, PR #164). Dvě kritéria jsou stále otevřená: interaktivní shell API (apps/majordomus-cli/src/http/swagger.rs) nejmenuje ani kořen, ani identitu a žádný test neservíruje dva kořeny a nedokazuje, že každý povrch jmenuje svůj vlastní. Změřeno na masteru 6042f4286, 2026-09-10.
Cílový stav
Každý obsluhovaný povrch nese kořen repozitáře a identitu, pro kterou odpovídá, dost blízko obsahu, aby to čtenář viděl, aniž by o to žádal.
Rozsah
- apps/majordomus-cli/src/http/router.rs
- apps/majordomus-cli/src/http/swagger.rs
- apps/majordomus-cli/src/web/home.rs
- test/cases/3110_a_served_surface_names_its_checkout.sh
Mimo rozsah
- Publikování absolutní vývojářské cesty na cokoli jiného než loopback povrch
- Druhá identita vedle té, kterou už model repozitáře drží
- Změna toho, co kterýkoli povrch servíruje; mění se jen to, co říká sám o sobě
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- Domovská stránka jmenuje kořen repozitáře a identitu, kterou proces obsluhuje, nejen povrchy, které vystavuje
- Interaktivní shell API pojmenovává týž kořen, takže stránku načtenou z jednoho serveru nelze zaměnit se stránkou jiného
- Identita pochází z modelu repozitáře, ne z druhé inspekce
- Žádný povrch neuvádí umístění repozitáře na hostiteli: identita říká, který checkout odpověděl, nikdy kde leží, a test dokazuje, že žádný poskytovaný ani publikovaný výstup neobsahuje absolutní cestu
- Chování je pokryto testem, který servíruje dva kořeny a dokazuje, že každý povrch jmenuje svůj vlastní
Validace
- cargo test --workspace --all-features
- bash test/run.sh
Požadované důkazy
- identity_on_surfaces
- published_carries_no_path
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| identity_on_surfaces | test | bash test/run.sh 3110_a_served_surface_names_its_checkout | ok 3110: dva kořeny (primární + propojený worktree) servírované naráz; / JSON, / HTML a /swagger každé jmenuje své vlastní repository_id, sdílené git_repository_id, větev a hlavu, nikdy cizí; FAIL na binárce masteru d116266 | d116266 |
| published_carries_no_path | test | bash test/run.sh 3110_a_served_surface_names_its_checkout | ok 3110 section 3: /, /swagger, /openapi.json, /api/v1/ of both roots carry no fixture root, $ROOT, $HOME or leak-patterns.tsv machine path; scripts/ci/no-machine-paths $ROOT exits 0 | d116266 |
| identity_on_surfaces | test | bash test/run.sh 3110_a_served_surface_names_its_checkout | ok, 1 prošel na masteru 707a04c7ce8 (2026-10-17); celá sada: ci check-run success na 4a4573690f8, běh 39049547899 job 117473773693; master 707a04c7ce8 přidává jen záznam release v0.29.0 | 707a04c |
| published_carries_no_path | test | bash test/run.sh 3110_a_served_surface_names_its_checkout | ok, 1 prošel na master 707a04c7ce8 (2026-10-17) | 707a04c |
Riziko
Zjevná oprava — vypsat kořen — je ta, kterou je třeba odmítnout: prozradila by rozvržení adresářů hostitele každému, kdo se dostane k socketu, a incident se řeší tím, že se řekne, který checkout odpověděl, ne kde sídlí.
Časová osa
- zahájeno
- 2026-10-16T11:59:02Z
- ověřeno
- 2026-10-16T13:51:16Z
- dokončeno
- 2026-10-17T21:35:04Z
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/I1031.yaml. Přečtěte jej zpět pomocí majordomus plan show I1031.