Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Znalosti se odvozují na hranici epizody, z ledgeru a gitu, a povyšuje je člověk

Znalosti se odvozují na hranici epizody, z ledgeru a gitu, a povyšuje je člověk

majordomus://adr/adr-0091navrženo knowledgerelacecontinuitygovernance

odkazuje na

odkazuje na něj

58. Znalosti se odvozují na hranici epizody z ledgeru a gitu a povyšuje je člověk

Kontext

Epizoda zaznamenává rozhodnutí, řeší otázky a dokončuje úlohy a každá z těchto věcí zanechá v ledgeru typovaný řádek. Když epizoda skončí, checkpoint zaznamená, jak práce vypadala, a handover zaznamená, co dělat dál (ADR 0052). Nic nezaznamenává, co repozitář nyní ví. Rozhodnutí zaznamenané u úlohy je vidět v majordomus history, na jednom stroji, dokud ho nesmaže limit uchování ledgeru; vyřešená otázka je odpověď v lokálním úložišti; úloha, která skončila blocked, zanechává svůj důvod v poznámce pod .ai/local/state/completed/. Každé z toho je důkaz něčeho, co o repozitáři platí, a každé je nedostupné ze sledovaného stromu, ze všech ostatních checkoutů i ze všech povrchů, které registr napájí.

Vrstva už má objekt, pro který je to určeno. ADR 0010 stanovilo, že kurátorované znalosti jsou jeden druh, knowledge/v1, s třídou (fact | convention | constraint | memory | lesson), stavem (candidate | verified | superseded), epistemickým postojem (observed | inferred | decided) a původem, jehož derived_from jmenuje objekty knihy s typovanými odkazy. Chybí zapisovač: share/schemas/majordomus/knowledge/knowledge.v1.proto říká, že extracted znamená, že to odvodil nástroj, a žádný příkaz to nedělá. Úložiště drží jednu napsanou poznámku.

Předchozí pokus, origin/feature/repository-knowledge, šel opačným směrem: sken manifestů a prózy checkoutu do typovaných znalostí, základní hodnota tolerovaného dluhu znalostí, žebříček mode: observe|warn|protect|strict a přepínač politiky semantic, který poskytovateli dovolí číst text. Jeho podstatné moduly nebyly sledovány, když byl checkpoint vynucen, a jsou ztraceny; zbylo zapojení návrhu, ne návrh. Tento záznam říká, co se z něj přebírá a co ne.

ADR 0014 dodává argument, kam záznamy patří: záznam, který může číst jen jeden stroj, je záznam, který nečte nikdo. ADR 0017 dodává okamžik, kdy se dalšímu pracovníkovi řekne: úvodní briefing. ADR 0052 dodává invariant, který tento záznam rozšiřuje: úložiště, které lze číst, není úložiště, do kterého se zapisuje, a zastaveného zapisovatele musí hlásit kontrola, která porovnává dva fakty, uzavírání epizod a postup záznamů.

Rozhodnutí

Znalostní báze je druh knowledge pod .ai/repo/knowledge/ a nic jiného. Žádný nový druh, žádné nové úložiště, žádná paměťová služba, žádný agent, žádný registr. Záznam je jedno tvrzení o repozitáři, na jednom řádku, s třídou, stavem, epistemickým postojem a provenance, která se vyřeší. Záznam nikdy není shrnutím konverzace a nikdy necituje prompt ani tah; kontrola přepisu, kterou project.never-store-transcripts drží, se vztahuje na jeho název, popis i tělo.

Odvozený záznam je kandidát pod .ai/repo/knowledge/candidates/, sledovaný, objevovaný zdrojovou třídou existujícího druhu. Deriver zapisuje status: candidate, provenance.origin: extracted a derived_from jmenující objekty knihy, z nichž záznam vznikl. Adresář je sourozencem curated/, deklarovaný jako třída candidates v .ai/repo/knowledge/sources.yaml s pathspecem :(glob).ai/repo/knowledge/candidates/*.md a nese vlastní smlouvu README.md (ADR 0011). Smlouva nikdy nechybí: init zasadí adresář a jeho README z kostry a deriver, který adresář vytvoří v repozitáři inicializovaném před tímto rozhodnutím, zasadí README vedle prvního kandidáta. Je sledovaný z důvodu ADR 0014: kandidát pod .ai/local/state/ by byl čitelný stroji, který ho odvodil, a žádnému jinému, a review, na které čeká, by se nekonalo nikde. Název souboru je id záznamu a id se odvozuje z důkazů: id epizody následované digestem zdrojového objektu, takže dva worktree nikdy nezapíší jedno jméno pro různý obsah a opakovaný běh nad týmiž důkazy přepíše tentýž soubor bajt po bajtu.

verified zapisuje akt, nikdy deriver. majordomus knowledge promote <id> s důkazy na standardním vstupu přesune záznam do curated/, nastaví status: verified, ponechá jeho derived_from a přidá do něj povyšující epizodu a připojí důkazy pod # Evidence; prázdný stdin se odmítne, protože akt bez důkazů je tvrzení, a stdin nesoucí značku přepisu se odmítne ze stejného důvodu, z jakého ji záznam nesmí nést. Třídu určuje člověk: --class <c> při povýšení je místo, kde se convention stává constraint nebo lesson, protože zda rozhodnutí zavazuje, je úsudek, který deriver nečiní. majordomus knowledge reject <id> --reason "<why>" přepíše kandidáta na místě jako superseded, jmenuje superseded_by, když --by <id> uvádí záznam, který ho nahrazuje, a jinak zaznamená důvod pod # Rejected. Druhým aktem je úprava souboru člověkem. Deriver přeskočí id, které bylo povýšeno nebo nahrazeno, takže žádný z aktů další hranice epizody nezruší.

Bez modelu lze odvodit přesně tento seznam a deriver implementuje přesně tento seznam. Důkazem jsou řádky knihy, které epizoda opatřila razítkem, a commity, které udělala; nic nečte konverzaci, předávku ani prompt.

evidencerecordtřídaepistemikaderived_from
decision.recordedtext rozhodnutíconventiondecidedsession:<episode>, decision:<task-id>; samotná relace, když řádek nenese žádnou úlohu
question.resolvedodpověď, která uvádí otázku, na niž odpovídáfactobservedsession:<episode>, task:<task-id>
task.finished s výsledkem blocked, failed nebo no_matchvýsledek a první řádek # Reason poznámky k úlozelessoninferredsession:<episode>, task:<task-id>
task.finished s výsledkem completed a příkazem verifyověření, které prošlofactobservedsession:<episode>, task:<task-id>
commity epizody dotýkající se .ai/repo/rules/ nebo .ai/repo/adrs/žádný záznam; každý záznam epizody získá commit:<sha> v derived_from a relates_to file:<path> v relations———

Každé odvozené rozhodnutí je convention. Dřívější koncept klasifikoval rozhodnutí jako constraint, když jeho znění neslo slovo jako never nebo must; to je čtení prózy, které docs/CLI.md odmítá pro každý druh, a je to přesně úsudek, který povýšení existuje, aby zaznamenalo. Next Action předávky je stav pokračování, ne znalost. ADR, pravidlo a dokument jsou samostatné zdroje; záznam se k nim vztahuje a nikdy je neopakuje. Stejný ledger, stejný git, stejné bajty: date záznamu je den řádku důkazu, ne hodiny, a do souboru nevstupuje žádná náhodná hodnota. Volný text řádku ledgeru se při čtení jednou odescapuje a při skládání záznamu jednou escapuje, takže digest je nad textem, který člověk napsal, a uvozovka uvnitř rozhodnutí záznam ani neusekne, ani nezmění jeho identitu. Řádek, jehož text nese značku přepisu, nedá žádný záznam; deriver jej hlásí jako přeskočený místo zápisu záznamu, který by kontrola integrity odmítla. Žádná síť, žádný model, žádné eval.

Slovník odkazů získává task:<id>; question:<id> se odmítá. Vzor derived_from v protu připouští decision, session, commit, issue, file a test. Rozhodnutí nemá v ledgeru vlastní identitu — decision.recorded nese úlohu a text — takže odkazem je decision:<task-id>, jak ho už používá komentář samotného protu a provenience ADR 0010. Ani otázka nemá identitu a řeší ji její úloha, takže vzor získává task a nic jiného. Rozhodnutí zaznamenané mimo úlohu se odvozuje jen z relace; decision:none a task:none se jako odkazy odmítají, protože odkaz na nic není odkaz. Soubor proto se mění; schéma a allow-list se regenerují, nikdy neupravují.

Běží, když se epizoda uzavře a když je konverzace zhuštěna, z důvodu checkpointu. To jsou okamžiky, kdy to, co epizoda ví, přestává být dosažitelné. Cesta uzavření je jedna: mj_session_close v lib/session.sh spustí derivera poté, co je záznam relace publikován a než se připojí session.closed, kdykoli session.knowledge_on_end není vypnuto, takže po každém uzavření — adaptéru konce poskytovatele, majordomus session close, jakémkoli budoucím volajícím — následuje jeho řádek knowledge.derived a nikdy uzavření bez něj. Adaptér konce čte výsledek uzavření a hlásí selhání odvození přes mj_capture_session_failed; neodvozuje podruhé. Adaptér compaction nemá uzavření, na které by se mohl zavěsit, takže volá derivera sám, přepínaného session.knowledge_on_compact a nezávislého na checkpoint_on_compact: compaction, která přeskočí svůj checkpoint, stále odvozuje. Běží bez ohledu na to, zda je úloha aktivní: životní cyklus patří epizodě. Na vyžádání majordomus knowledge derive [--episode <id>] dělá totéž pro otevřenou epizodu nebo tu pojmenovanou. Druhý běh nad stejnými důkazy nic nezapíše a řekne to, na příkazové řádce i v knize.

Důkazem, že proběhla, je řádek v knize záznamů, zaregistrovaný před zápisem. knowledge.derived nese epizodu, počet zapsaných, počet nezměněných, zapsané cesty a, když byl řádek odmítnut, počet přeskočených; knowledge.promoted a knowledge.rejected nesou id a co bylo provedeno. Odvození, které selže uvnitř hooku poskytovatele, se zaznamená jako provider.event.failed přes mj_capture_session_failed a hook skončí s 0: poskytovatel není nikdy blokován a selhání není nikdy tiché.

Další pracovník se to dozví. Úvodní briefing (ADR 0017) získává jednu omezenou sekci, po otevřených otázkách a před předávkou: kandidáti čekající na posouzení na této větvi, počet na jednom řádku a id pod ním, omezené tak, jak je blok otevřených otázek, uvnitř session.briefing_budget_lines. Větev kandidáta je větev epizody, kterou jmenuje v derived_from, čtená ze sledovaného záznamu relace, nebo dokud není tento záznam zapsán, z knihy. Kandidát, jehož epizodu tento checkout nedokáže rozlišit, je jmenován na vlastním řádku jako nepřiřazený, ne skryt, protože záznam, který briefing nedokáže zařadit, je stále záznam, který někdo musí posoudit. Nepřítomnost se vypíše, ne vynechá.

Vynucování tvoří tři pravidla standardního balíčku, rozeslaná z registru doktríny, a nejsou to projektová pravidla. Zadání žádalo projektová pravidla. lib/doctor.sh v každém repozitáři odmítne validační funkci, kterou nedeklaruje žádné pravidlo z efektivní sady toho repozitáře, a majordomus init osazuje repozitář pouze vendorovaným standardním balíčkem. Validátor deklarovaný pravidlem pod .ai/repo/rules/project/ by tedy zčervenal doctor v každém jednorázovém testovacím repozitáři i u každého adoptéra, s čímž se potkalo ADR 0052 a vyřešilo to dodáním majordomus.lifecycle-observed v share/standard/majordomus/rules/. Stejná odpověď platí ze stejného důvodu: deriver se dodává s nástrojem a běží v hookách každého adoptéra, takže pravidlo, že stále zapisuje, patří dodavateli, ne jednomu repozitáři. Dodaný manifest zapisuje scripts/rules-package write, vendorovaná kopie pod .ai/repo/rules/vendor/ se obnovuje pomocí majordomus rules vendor update a ani jedno se needituje ručně.

  • majordomus.knowledge-observed, blokující, mj_validate_knowledge_lifecycle, dispečovaná z doctor a watch, kategorie knowledge, exit 10. Nález: nejnovější řádek session.closed jmenuje epizodu, kterou nejmenuje žádný řádek knowledge.derived, a je starší než session.freshness.stale_minutes; nebo je session.knowledge_on_end zapnuto a zdroj životního cyklu nikdy nevolá deriver, čteno ze zdroje tak, jak ho čte mj_validate_doctrine_wiring. Posouzení je podmíněno tak, jak podmínilo vlastní ADR 0052: checkout, jehož ledger neobsahuje žádný řádek knowledge.derived, se neposuzuje a hlásí to jako přeskočení, protože v den, kdy toto rozhodnutí přistane, má každý checkout uzavřené epizody a žádný neodvozoval, a nález, který je najednou všude červený, je nález, který nikdo nečte. To, co gate nechává neposouzené, je přesně jeden případ, checkout, na kterém deriver nikdy neběžel, a první derivace ho ukončí. Reprodukce nálezu je jen pro čtení, majordomus history filtrované na dvě události; náprava, majordomus knowledge derive --episode <id>, následuje fix: ve zprávě. Čtečka v Rustu, knowledge_base.status, činí z téhož ledgeru a týchž čísel politiky polovinu posouzení týkající se čerstvosti; polovina zapojení patří jen shell validátoru, protože jen shell nástroj umí číst svůj vlastní zdroj.
  • majordomus.knowledge-integrity, blokující, mj_validate_knowledge_integrity, spouštěno z check a doctor. Každý záznam pod candidates/ a curated/ je platný vůči knowledge/v1 bez neznámého klíče, id jsou jedinečná napříč oběma adresáři a rovna názvu souboru, verified nese původ, každý cíl derived_from a relations se rozpozná, superseded jmenuje superseded_by nebo zaznamenává své zamítnutí, žádný záznam pod candidates/ netvrdí verified a žádný název, popis ani tělo nenese konverzaci. Validátor čte oba adresáře jednou a rozpoznává každý odkaz jedním průchodem knihou a jedním dávkovým dotazem na git, takže jeho cena roste s úložištěm, ne se součinem záznamů a odkazů. majordomus knowledge check je tatáž kontrola jako příkaz.
  • majordomus.candidates-reviewed, poradní, mj_validate_knowledge_accumulation, dispatchovaná z doctor. Politika deklaruje knowledge.candidates_max_files a knowledge.candidate_max_age_minutes jednou; více kandidátů než strop, kandidát, jehož stáří revize překročí limit, nebo kandidát, který strom nesleduje, je WARN, který je jmenuje. Stáří revize je stáří položky fronty, ne důkazu: měří se od nejstaršího řádku knowledge.derived, jehož cesty soubor jmenují, pak od commitu, který soubor přidal, a teprve potom od date záznamu, a nález říká, který zdroj použil, protože date je den důkazu a kandidát odvozený dnes z minuloměsíčního rozhodnutí čekal jeden den, ne měsíc. Nesledovaný kandidát se jmenuje, protože záznam, který git nedrží, nenajde nic a nikdo ho neposoudí. Je poradní, protože zda si kandidát zaslouží revizi, je úsudek člověka; dispatchuje se jen z doctor, protože pod watch je poradní nález drift a končí kódem 11, a plná fronta revizí nesmí shodit watch. Politika, která nedeklaruje ani jeden klíč, se hlásí ve třídě samotného pravidla, jako mj_validate_retention hlásí své klíče.

Čtečka v Rustu je jeden modul, deklarovaný jednou, a čte, co zapsal shell. Modul knowledge_base pod apps/majordomus-cli/src/capability/builtin/ deklaruje knowledge_base.candidates, knowledge_base.record a knowledge_base.status a majordomus generate je promítá do HTTP, OpenAPI, MCP, příkazové řádky, katalogu modulů cockpitu a inventáře měření výkonu. Id modulu není knowledge, protože registr odmítá vestavěný modul pojmenovaný jako deklarativní druh. Čtečka bere kandidáty z indexu (sledované soubory, jako každý druh), ledger z crate::session::Ledger a prahy z čtení politiky v continuity.rs; žádné z nich neopakuje a netvrdí, že čte lib/capture.sh. Cockpit nedostává ručně psanou stránku: projekcí je položka katalogu modulu a vygenerovaná stránka každé schopnosti (ADR 0012).

Zamítnuté alternativy

Sken checkoutu do typovaných znalostí, s extraktory, kanoničností a baseline tolerovaného dluhu. To je to, co postavilo origin/feature/repository-knowledge. Odvozuje znalosti z manifestů a prózy, což docs/CLI.md odmítá pro každý druh — druh pochází ze struktury, nikdy z prózy — a své podpříkazy deklarovalo v cli.rs místo v blocích capability!, což project.rust-canonical-declaration zakazuje. Jeho soubory baseline a výjimek jsou druhé úložiště klíčované podle id, inventář, který ADR 0053 zamítlo, protože zastará v okamžiku, kdy se branch opustí, a jeho žebříček mode je třetí slovník vynucování vedle blocking | advisory. Jeho přepínač semantic.enabled existuje, aby poskytovatel mohl číst text, což docs/CONTINUITY.md a project.no-network-no-eval odmítají. Jeho pole visibility na záznam dává hranici publikace na každého výrobce, kde ji třída zdroje už kreslí jednou. Přebírá se z něj tvar odpovědi o stavu, nyní knowledge_base.status, a zásada, že klíč politiky znalostí se deklaruje jednou v politice, kostře, schématu a regenerovaném allowlistu. Jméno knowledge derive se zde znovu používá s opačným významem: deterministické, bez modelu, bez sítě.

Kandidáti pod .ai/local/state/, povyšovaní ručně do sledovaného stromu. Deriver by zapisoval tam, kam zapisuje checkpoint, a na žádném jiném stroji by se nic nezměnilo, dokud by si někdo nevzpomněl na příkaz. To je tvar, který pojmenovalo ADR 0014: záznam, který umí číst jen jeden stroj. Review, na které kandidát čeká, by proběhlo na jediném checkoutu, který nelze sdílet, a zjištění zastaveného zapisovače by na každém klonu nic neznamenalo.

Nový druh, knowledge-candidate, s vlastním schématem. Kandidát a ověřený záznam se liší v jednom poli, status, které stávající schéma už nese. Druhý druh by potřeboval druhé schéma, druhý seznam povolených, druhou třídu a druhou sadu čtenářů kvůli rozlišení, které udělá jeden enumerátor. ADR 0010 i project.no-new-nouns to zamítají.

Odvozovat z Next Action předávky nebo z těla checkpointu. Obojí jsou odvozené projekce téhož ledgeru a Next Action říká, co dělat, ne co je pravda. Odvozovat znalosti z odvozeného záznamu by dostalo do sledovaného stromu projekci projekce, s původem ukazujícím na soubor pod .ai/local/.

Klasifikovat rozhodnutí podle jeho formulace. Seznam slov, který mění never na constraint, čte prózu, aby určil druh, což kompilátor znalostí z principu odmítá, a mýlí se dost často na to, aby byl horší než žádná odpověď: rozhodnutí, které říká „starou podobu už nepotřebujeme“, nese no a nikoho nezavazuje. Deriver zapisuje convention; třídu zapisuje člověk, který záznam povyšuje, s důkazem vedle ní.

Odvozovat z koncového adaptéru místo z uzavření. První návrh dal volání do mj_capture_session_end, po checkpointu a před předávku. Pak by majordomus session close zadané člověkem a každý budoucí volající uzavření uzavřel epizodu bez odvození a nález zastaveného zapisovatele by byl červený pro uzavření, které adaptér nikdy neviděl. Uzavření je jediná cesta, kterou jde každé uzavření, takže tam deriver běží; adaptér si ponechává hlášení o selhání, což je jeho úloha.

Jedinečné názvy souborů přes mj_publish_record. Atomický zapisovač, který používá každý lokální záznam, připojuje náhodnou příponu a nikdy nepřepisuje, takže opakovaný běh by zapsal druhý soubor se stejným obsahem. Idempotence potřebuje soubor pojmenovaný id, zapsaný přes dočasné jméno ve stejném adresáři a přejmenovaný přes starý. Prefix .tmp. ho drží pod stávajícím pravidlem ignorování a stávajícím úklidem.

question:<id> v derived_from. Otázka nenese v účetní knize žádnou identitu; vymýšlet digest, který by na ni odkazoval, by byl odkaz, který nic jiného ve vrstvě nedokáže vyřešit. Otázku řeší úloha, která ji vlastní.

Měření stáří kandidáta z jeho date. Datum je den důkazu, uchovaný kvůli determinismu. Validátor, který by ho četl jako stáří ve frontě, by označil kandidáta odvozeného dnes ráno za čtrnáct dní po termínu, protože rozhodnutí, které zaznamenává, padlo před dvěma týdny. Záznam ve frontě má vlastní stáří, v ledgeru i v gitu, a to se měří.

Pravidla projektu deklarující validátory. Výše zamítnuto z mechanického důvodu: doctor by v každém adoptujícím a každém testovacím repozitáři hlásilo validátor, který žádné pravidlo nedeklaruje, a naplnění pravidel projektu ze skeletu by vložilo pravidla cizího repozitáře do jmenného prostoru projektu.

Vyhrazená stránka cockpitu. Stránka je ručně psaná route (cockpit/mod.rs), oblast navigace a položka v průchodu stránek; deklarace už dává položku katalogu a stránku na každou schopnost. Stránku lze přidat, když ji člověk potřebuje; nic v tomto rozhodnutí na ní nezávisí.

Důsledky

Každá hranice epizody, která zaznamená rozhodnutí, vyřeší otázku nebo dokončí úlohu, zanechá kandidáta ve sledovaném stromu a řádka účetní knihy knowledge.derived to říká, i když nic nezapsala. Strom je po takové epizodě nečistý, dokud člověk nepřidá kandidáty vedle záznamu relace, což stávající zjištění session už žádá a doporučující pravidlo nyní jmenuje; kandidát je commitovaný obsah a changed_files dalšího checkpointu jej uvádí, jako uvádí záznam relace.

Zastavený zapisovatel znalostí je hlášen doctor a watch v tomto repozitáři i u každého adoptujícího, se stejnými prahy, jaké používá předávka; repozitář, v němž se žádná epizoda neuzavřela nebo v němž nikdy neběžel žádný derive, se neposuzuje a říká to. Nález porovnává epizody, ne časová razítka, protože uzavření derivuje dřív, než připojí session.closed, takže řádek knowledge.derived epizody předchází jejímu řádku session.closed v pořadí ledgeru.

majordomus knowledge už není pouze pro čtení. share/commands.yaml to říká, docs/CLI.md to říká a jeho návratové kódy pokrývají každou konstantu, kterou lib/knowledge.sh používá. Kompilátor grafu čte front matter záznamu znalostí, takže jeho id uzlu je na obou stranách knowledge:<id> a knowledge edges --type derived_from uvádí, z čeho záznam vznikl; cíl, který může vyřešit jen ledger nebo git, je pro graf externí a řeší jej místo toho validátor integrity, nikdy jej kompilátor nehlásí jako visící.

Cena se měří tam, kde se platí: MJ_TIMING=1 majordomus knowledge derive --dry-run vypisuje vlastní čas deriveru, MJ_TIMING=1 majordomus knowledge check vypisuje čítače validátoru a majordomus doctor hlásí svůj rozpočet jako u každé doktríny. Politika získává čtyři klíče, deklarované jednou a čtené shellem i čtečkou v Rustu ze stejného souboru.

Co toto rozhodnuje, nerozhoduje, kteří kandidáti si zaslouží povýšení. To zůstává aktem člověka a informativní pravidlo existuje proto, aby byla fronta vidět, ne aby ji stroj vyprázdnil.

Dodatek, 2026-10-15: epizoda trunku stageuje své záznamy a nese je větev (I1984)

Kmen, který se mění jen přes pull requesty, nemůže commitnout to, co tam zapisuje hranice epizody. main v OSCILLA drželo nesledované .ai/repo/knowledge/candidates/, které nikdy nemohlo commitnout: každý další kontrolní bod zaznamenal strom jako špinavý, kontroly release s čistým stromem odmítaly a candidates-reviewed žádalo přesně ten commit, který proces zakazuje. Záznam relace z ADR 0014 pod .ai/repo/sessions/ má stejnou vadu.

Na trunku hranice epizody zapíše záznam uzavřené relace a odvozené kandidáty do .ai/local/state/outbox/ místo do sledovaných sekcí. Trunk je výchozí větev remote, jak ji čte mj_git_trunk_ref; žádný název větve se zde nepíše. Příští hranice epizody na jakékoli jiné větvi téhož klonu přesune outbox do .ai/repo/sessions/ a .ai/repo/knowledge/candidates/ beze změny a pull request té větve je donese na trunk. Id záznamu se odvozuje z jeho důkazů, takže přesun je idempotentní a dva klony držící tentýž záznam zapíšou stejné bajty. context a doctor jmenují neprázdný outbox, takže klon, který už nikdy nevětví, stále říká, co drží.

ADR 0014 a tento záznam zůstávají pravdivé: každý záznam stále skončí sledovaný, sdílený a posuzovatelný a jen okamžik, kdy se stane sledovaným, se přesouvá z trunku na větev, která bude sloučena. Zamítnuto: přeskočit odvození na trunku (ztratí rozhodnutí a poučení, která epizoda zaznamenala), zapisovat sledované soubory a smířit se se špinavým trunkem (nahlášená vada) a ignorovat sledované sekce na trunku (odporuje sledované smlouvě).

Práce se skládá ze tří řezů, každý jedním pull requestem:

  1. Epizody trunku zapisují do outboxu. lib/common.sh získá mj_on_trunk; lib/session.sh (close) a lib/knowledge.sh (derive) zapisují do .ai/local/state/outbox/{sessions,candidates}/, když platí. Případ trunk_stays_clean_case: ve fixture, jejíž výchozí větev remote je main, uzavření epizody na main nechá git status --porcelain prázdné a outbox drží záznam.
  2. Epizoda větve vyprazdňuje outbox. Na hranici epizody na větvi, která není trunk, se záznamy z outboxu přesunou do sledovaných sekcí; context a doctor hlásí neprázdný outbox. Případ: příští epizoda větve outbox přesune a kandidát je nabídnut příkazem knowledge candidates jako dnes.
  3. Slova následují. docs/KNOWLEDGE.md, text pravidla candidates-reviewed v share/standard/majordomus/rules/ a README relací říkají, kde záznamy epizody trunku čekají. Pouze dokumentace a text pravidel.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0091-knowledge-is-derived-at-the-episode-boundary-and-a-person-promotes-it.md
identity
adr-0091
dostupné také jako
Zdroj MCP majordomus://adr/adr-0091 · majordomus entity show adr/adr-0091 · GET /api/v1/entity?uri=majordomus://adr/adr-0091
v Cockpitu
/cockpit/objects/adr/adr-0091

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.