I0805 — Číst relace zpět se štítkem divergence
Implementovat `session list`, `session show <id>` a `session latest`, každý s určením podle zavedeného pravidla — stejný repozitář, stejný worktree, stejná větev, pak stejná větev — a každý s vypsáním stávajícího označení odchylky záznamu od aktuálního gitu.
HOTOVO vlna 3 · p1 · profil implementation · běží samostatně
Součást M003 — Relace je trvalá obálka a znalost se kompiluje z toho, co už je kanonické.
Cíl
Implementovat `session list`, `session show <id>` a `session latest`, každý s určením podle zavedeného pravidla — stejný repozitář, stejný worktree, stejná větev, pak stejná větev — a každý s vypsáním stávajícího označení odchylky záznamu od aktuálního gitu.
Proč
Uzavřená relace z přepsané větve předkládaná jako aktuální znalost je přesně selhání, kterému slovník divergence existuje, aby zabránil. Znovupoužití tohoto slovníku místo vymýšlení druhého je celý smysl jeho existence.
Aktuální stav
mj_resolve_latest implementuje dvoustupňové pravidlo pro kontrolní body a předávky a mj_git_label vytváří exact, advanced, diverged a different_context. Žádný příkaz nečte relaci.
Cílový stav
list vypíše relace od nejnovější s jejich popisky; show vypíše jeden záznam celý; latest vypíše nejnovější relaci, která se rozliší pro tento worktree a větev, a nepřítomnost hlásí jako nepřítomnost. Záznam diverged nebo different_context je tak označen na každém z nich.
Rozsah
- lib/session.sh
- bin/majordomus
- test/cases/62_session_divergence.sh
Mimo rozsah
- Znalosti
- Jakékoli rozlišení napříč worktrees pro celý repozitář
Závislosti
Co na tom čeká
Kritéria přijetí
- Relace se uvádějí v chronologickém pořadí a pořadí se neodvozuje z času úpravy souboru
- Dvě relace zapsané ve stejné sekundě se řadí deterministicky
- Záznam, jehož zaznamenaný head není předkem HEAD, je všude, kde se vypisuje, označen jako diverged
- Relace z jiné větve se nikdy nenabídne jako latest
- Každý z těchto příkazů zanechává git status bajt po bajtu totožný
Validace
- bash test/run.sh 62_session_divergence
Požadované důkazy
- divergence_labelled
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| divergence_labelled | test | test/run.sh 62_session_divergence | jeden případ prošel a mutace, která odstraní ledger tiebreak, ho shodí. Případ dokazuje, že absence je zodpovězena na všech třech pohledech; že záznam se čte jako exact a pak advanced, jak historie postupuje; že přepsaná historie způsobí, že list, show i latest řeknou diverged a vypíší varování; že relace z jiné větve se nikdy nenabídne jako latest této větve, zatímco --all ji ukáže s označením different_context; že poškozený záznam je přeskočen s varováním a ne fatálně; a že každý pohled nechá pracovní strom bajtově identický. Řazení vychází ze záznamu a knihy, ne ze souborového systému: dotek starého záznamu seznam nepřeřadí a dvě události uzavření jsou v knize prohozeny, takže pořadí názvů souborů a pořadí knihy se liší | 4fd8083 |
Riziko
Znovupoužití mj_resolve_latest vyžaduje, aby záznam relace měl stejný tvar front matter jako checkpoint. Je-li záznam čisté YAML, objeví se druhý resolver, a dvě pravidla řešení jsou přesně to, co sekce o řešení v dokumentaci odmítá.
Časová osa
- zahájeno
- 2026-09-04T18:01:49Z
- ověřeno
- —
- dokončeno
- 2026-09-04T18:10:47Z
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/I0805.yaml. Přečtěte jej zpět pomocí majordomus plan show I0805.