Co to znamená
Dvojí spuštění deriveru nad stejnou účetní knihou a stejným gitem vytvoří podruhé stejné bajty, ohlásí každý záznam jako beze změny a nezanechá nic, co by git status zobrazil. Koncová událost, událost zhutnění a majordomus knowledge derive ručně procházejí týmž zapisovačem, takže zhutnění následované uzavřením nebo člověk, který po hooku příkaz spustí znovu, nikdy nevytvoří druhou kopii záznamu.
Princip
Id záznamu je id epizody následované otiskem kanonického řetězce důkazů — názvu události, úlohy a textu rozhodnutí, otázky nebo výsledku — takže tentýž fakt vždy skončí ve stejném souboru a dva worktree nikdy nezapíší jeden název pro různý obsah. date záznamu je den řádku důkazů, nikdy hodiny, a do souboru nevstupuje žádná náhodná hodnota. Deriver složí záznam do dočasného souboru ve stejném adresáři, porovná jej bajt po bajtu se souborem, který id pojmenovává, dočasný soubor odstraní, když jsou shodné, a přejmenuje jej přes starý, když se liší. Řádek ledgeru knowledge.derived nese oba počty, zapsané i beze změny. --dry-run hlásí, co by se zapsalo, a nedotkne se ani stromu, ani ledgeru.
Jak to vidět
majordomus knowledge derive # written .ai/repo/knowledge/candidates/<id>.md
git add .ai/repo/knowledge && git commit -q -m "candidates"
majordomus knowledge derive # unchanged .ai/repo/knowledge/candidates/<id>.md
git status --porcelain # empty
majordomus knowledge derive --dry-run # says what it would do; the ledger gains no line
majordomus history --event knowledge.derived # written 0, unchanged 1 on the second lineCo nepokrývá
Idempotence se týká důkazů, ne času: nové rozhodnutí ve stejné epizodě je nový záznam. Kandidát, který byl povýšen nebo odmítnut, se přeskočí, ne přepíše, takže tyto akty přežijí opakovaný běh; kandidát, kterého člověk upravil ručně, se při další derivaci přepíše, protože kanonické jsou důkazy, a ne soubor, dokud je to ještě kandidát.
Proč existuje
Atomický zapisovač, který používá každý lokální záznam, přidává náhodnou příponu a nikdy nepřepisuje, což je správné pro checkpoint a špatné pro záznam, který musí být při každém běhu týž soubor. Deriver, který by při každé hranici zapsal nový soubor, by zaplnil frontu review kopiemi a po každé kompakci by udělal strom špinavým a ledger by tvrdil, že něco zapsal, přestože se nic nezměnilo. .ai/repo/adrs/0091-knowledge-is-derived-at-the-episode-boundary-and-a-person-promotes-it.md fixuje soubor pojmenovaný podle id a zápis přes dočasný soubor a přejmenování.