118. Relace zanechá, co pozorovala, a hranice drží jednoho směrovaného kandidáta na vadu
Kontext
ADR 0091 dalo repozitáři zapisovatele toho, co ví: na každé hranici epizody, bez modelu, deriver mění čtyři druhy řádků ledgeru na kandidáty znalostí a člověk je povyšuje nebo zamítá. Nedalo repozitáři způsob, jak se dozvědět, co je s nástrojem špatně. Dne 2026-10-08 čtyři souběžné relace narazily na tření s nástrojem — fast-forward, který spustil kontrolu rozsahu, zastaralý povrch rustdoc, kontrola, která prošla, aniž by cokoli podpírala, číslo převzaté ve worktree, který nikdo nepushnul — a zapsaly třicet šest takových pozorování, každé do soukromého paměťového souboru agenta nebo zprávy mezi relacemi, kde je repozitář nemohl přečíst.
V cestě stojí dvě vlastnosti pipeline ADR 0091. Její tabulka důkazů je uzavřená („deriver implementuje přesně tento seznam“) a žádný její řádek není pozorování. A kandidát říká, jaká třída výroku je, ne o čem je nebo kdo by se na něj měl podívat, takže kandidát o generovaném souboru a kandidát o vlastním README projektu čekají v jedné nerozlišené frontě a tatáž vada viděná ve třech relacích jsou tři nesouvisející soubory.
Vlastník požadoval, aby se to dělo bez výzvy: relace mají nástroj zlepšovat tím, že se používají, ne tím, že jim někdo říká, aby reflektovaly.
Rozhodnutí
Pozorování je typovaný řádek ledgeru, observation.recorded, zapsaný příkazem majordomus knowledge observe. Nese kind (friction, workaround, defect, drift, repetition), subject (cestu v repozitáři, nebo capability:, rule:, command:, gate: následované identifikátorem), jednořádkové statement a nula či více typovaných odkazů evidence (file:, test:, commit:, issue:, claim:). Je to akt, jako decision add: příkaz spustí kterýkoli poskytovatel, uvnitř úlohy i mimo ni. Prohlášení se odmítne, když zabírá více řádků nebo nese značku přepisu, z důvodu, pro který je ADR 0091 odmítá v záznamu. Odmítne se i s příkazem, který jednu otevře, když není otevřená žádná epizoda: deriver vybírá řádek podle razítka epizody a pozorování bez ní by se zapsalo a nikdy neodvodilo.
Tabulka deriveru získává jeden řádek: observation.recorded dává lesson, jehož epistemika je observed. Id, soubor a idempotence jsou z ADR 0091, beze změny: epizoda následovaná digestem druhu, subjektu a tvrzení. Jedna epizoda píše svůj vlastní soubor a žádný jiný, takže dvě epizody, dva worktree nebo dva stroje nikdy nepíší jedno jméno, nic se nečte, nesluje ani nepíše zpět, a merge dvou větví, které pozorovaly totéž, přidá dva soubory a nekoliduje na žádném. task.refused a task.gate nejsou řádky: odmítnutí později uspokojené a kontrola, která zčervenala, než zezelenala, jsou nástroj při práci, a odvození lekce z každého by pohřbilo pozorování pod nimi. Které z nich jsou tření — táž kontrola červená a zelená nad týmiž vstupy, odmítnutí, po kterém nikdy nenásleduje dokončení — je pozdější rozhodnutí s vlastním měřením.
Kandidát odvozený z pozorování nese informaci, čeho se týká a kdo by se na něj měl podívat. Do knowledge/v1 přibývají dvě pole, obě odvozená a pro všechny ostatní záznamy volitelná: about, předmět pozorování tak, jak byl zapsán, a route, jedna z hodnot platform, enforcement, generator, documentation, project, odvozená ze struktury předmětu a nikdy z jeho znění, v tomto pořadí: předmět command: nebo capability:, předmět rule:majordomus.*, nebo cesta pod adresářem vendorovaných pravidel či pod vlastním share/ nástroje, leží-li tento adresář uvnitř repozitáře, směruje na platform; jakýkoli jiný rule: nebo gate: směruje na enforcement; cesta, kterou rozsah deklaruje jako generovanou (out.generated) nebo kterou repozitář označuje merge=derived, směruje na generator; cesta pod docs/ směruje na documentation; cokoli jiného směruje na project. V repozitáři, který nástroj přijal, je share/ jeho vlastní a směruje na project a pouze vlastní identifikátory nástroje a jeho vendorovaná pravidla směrují na platform: vada projektu se nikdy nesměruje do governance nástroje.
Opakování se čte, nezapisuje. knowledge candidates seskupuje kandidáty podle about, každá skupina vypisuje své záznamy a epizody za nimi, v shellu i ve čtečce Rust stejně. Opakující se vada je skupina, která roste; zamítnutý kandidát zůstává zamítnutý a jeho skupina to říká, a pozdější pozorování téhož subjektu je nový kandidát ve stejné skupině, ukázaný vedle zamítnutí, aniž by ho znovu otevřel nebo byl jím umlčen.
Nic nového je záznam obyčejné relace. knowledge.derived s written: 0 se už připojuje na každé hranici, která vyhodnotila epizodu a nic nenašla (ADR 0091); je to NO_CHANGE, o které protokol žádá, a případ, který dokazuje derivaci, to uvádí.
Jednat podle trasy je čin. knowledge promote a knowledge reject se nemění. Trasa říká, který vlastník se má podívat první; neotevře žádný úkol, nezapíše žádné pravidlo a nikam nic neposílá.
Toto nahrazuje ADR 0091 jen ve dvou větách: tabulka důkazů získává řádek pozorování a kandidát může nést about a route. Všechno ostatní, co rozhodlo, platí dál, včetně jeho invariantu id.
Důsledky
- Tření se dostane do sledovaného stromu na další hranici epizody, která jej pozorovala.
- Vada, která se opakuje, je vidět jako jedna skupina s rostoucím seznamem epizod, zatímco každý soubor zůstává vlastní jedné epizody.
- Kandidáti na trunku, který přijímá jen pull requesty, jsou nesledovaní jako dřív; ať I1984 rozhodne o místě zápisu kandidátů jakkoli, seskupování při čtení platí nad tím.
- Přeměna směrovaného kandidáta na úkol, pravidlo nebo upstream návrh se zde nerozhoduje. Je to další milník a zůstává aktem. Stejně tak odvozování tření z
task.refusedatask.gate.
Zamítnuté alternativy
- Jeden soubor na (druh, subjekt), připisovaný každou epizodou: čtení-sloučení-zápis na sledovaný soubor ze souběžných epizod v jednom checkoutu ztrácí aktualizace a při každém merge napříč větvemi kolidují, jeho bajty závisejí na pořadí odvození a jeho odmítnutí by umlčelo každou pozdější vadu tohoto druhu na této cestě.
- Druhé úložiště pro pozorování (databáze evoluce, katalog JSON): ADR 0010 a
project.no-new-nouns. Kandidát je už posuzovatelná jednotka. - Klasifikace pomocí LLM nebo klíčových slov: ADR 0091 odmítlo čtení formulací; routa ze struktury je reprodukovatelná a testovatelná a model může stále použít ten, kdo na routě jedná.
- Odvozování z přepisu nebo těla předávky:
project.never-store-transcripts.