Co to znamená
handover --resolve, checkpoint --show a context všechny odpovídají na stejnou otázku: který ze záznamů na disku je o práci, která se děje tady? Odpověď je deterministická, je vysvětlena, a když neexistuje bezpečná odpověď, řekne to, místo aby nabídla nejbližší věc.
Princip
mj_resolve_latest v lib/common.sh přečte front matter každého záznamu, ponechá jen kandidáty ve stejném repozitáři a poté je seřadí:
- stejná worktree a stejná větev
- stejná větev, pokud větev není detached
- nic
Neexistuje žádná úroveň pro celý repozitář. Záznam z jiného worktree nebo jiné větve není nikdy záložní, protože pracovník nepozná, že vypůjčený kontext je špatný, dokud podle něj nezačne jednat.
V rámci jedné úrovně vyhrává nejnovější. created_at má přesnost na sekundy, takže dva záznamy zapsané v jedné sekundě by jinak řadily náhodné přípony jmen souborů; ledger je jen k připojování a zapisuje se v pořadí příkazů, takže mj_record_rank používá pozici v ledgeru jako rozhodčí — jediné přenositelné monotónní řazení dostupné bez časových značek pod sekundu.
Výsledek nese své zdůvodnění: třídu shody, štítek gitu porovnávající zaznamenaný head se současným, stáří záznamu a jeho úlohu. Poškozený záznam se přeskočí s varováním na stderr, nikdy tiše, a doctor selže, když byl jakýkoli záznam přeskočen.
Jak to vidět
majordomus handover --resolve
# Handover: .ai/local/state/handovers/20260903T201455Z--main--9b1e2d4--c0ffee12.md
# Match: same_worktree_same_branch
# Git state: advanced
# Created: 2026-09-03T20:14:55Z (37m ago)
# Task: t-20260903193012-a4f1
git checkout -b unrelated
majordomus handover --resolve
# No relevant handover.Co nepokrývá
Obsah nesoudí. Záznam, který se vyřeší, může být přesto chybný; štítek gitu říká, jak daleko se repozitář posunul, a zbytek je váš úsudek.
Nesleduje záznam přes přepsanou historii. Štítek diverged znamená, že zaznamenaný commit není předkem aktuálního, a záznam je hlášen, ne reinterpretován.
Záznamy neslučuje. Nejnovější kompatibilní se nabídne celý.
Proč existuje
Selhání, kterému to brání, je konkrétní a tiché: repozitář hromadí záznamy, relace na nesouvisející větvi vyřeší globálně nejnovější z nich a worker pokračuje sebejistě proti stavu jiné úlohy. Absence je lepší než nesprávná paměť, takže resolver se zastaví, místo aby sahal dál.