I0808 — Extrahovat uzly s identitami, které přežijí přestavbu
Implementovat fáze extract a normalise v lib/knowledge.awk: jeden uzel na kanonický objekt, s identitou odvozenou z jeho kanonického id nebo cesty v repozitáři, druhem, který se tvrdí jen tehdy, když ho ustaví strukturální fakt, a titulkem převzatým ze záznamu nebo z prvního nadpisu dokumentu.
HOTOVO vlna 2 · p1 · profil deep-work · běží samostatně
Součást M003 — Relace je trvalá obálka a znalost se kompiluje z toho, co už je kanonické.
Cíl
Implementovat fáze extract a normalise v lib/knowledge.awk: jeden uzel na kanonický objekt, s identitou odvozenou z jeho kanonického id nebo cesty v repozitáři, druhem, který se tvrdí jen tehdy, když ho ustaví strukturální fakt, a titulkem převzatým ze záznamu nebo z prvního nadpisu dokumentu.
Proč
Identita je to, co dělá z indexu ukazatel, nikoli kopii. Id odvozené z pořadí výčtu nebo z názvu se změní, když se změní něco nesouvisejícího, a každý odkaz na ně se tiše stane chybným. Klasifikace hádající z prózy je totéž selhání v jiné dimenzi: sebejistě chybný druh je horší než poctivě neznámý.
Aktuální stav
Kanonické objekty už mají identity — tvrzení, milníky, úkoly, profily, prompty a doktríny jsou všechny klíčované — a lib/project.awk je precedens pro odvozování modelu v awk ze zploštělých záznamů.
Cílový stav
Uzly se vydávají ve stabilním pořadí s id ve tvaru druh a kanonický klíč, kde klíč je vlastní id objektu u strukturovaných záznamů a jeho cesta v repozitáři u dokumentů. Druh se tvrdí ze třídy zdroje nebo z explicitního pole, nikdy z klíčového slova nalezeného v próze, a nerozpoznaný zdroj dává druh unknown místo odhadu.
Rozsah
- lib/knowledge.sh
- lib/knowledge.awk
- test/cases/73_knowledge_nodes.sh
Mimo rozsah
- Hrany
- Manifest
- Jakýkoli plný parser Markdownu
Závislosti
Co na tom čeká
Kritéria přijetí
- Dvě synchronizace nezměněného repozitáře vytvoří bajtově shodný výstup uzlů
- Přejmenování dokumentu změní id uzlu tohoto dokumentu a žádného jiného
- Druh uzlu pochází z jeho třídy zdroje nebo explicitního pole a případ dokazuje, že ho próza obsahující slovo druhu nemění
- Nerozpoznatelný zdroj vytvoří uzel druhu unknown místo toho, aby byl zahozen nebo hádán
- Extrakce z obecného dokumentu Markdown bere jen cestu, první nadpis a explicitní odkazy
Validace
- bash test/run.sh 73_knowledge_nodes
Požadované důkazy
- node_identity_stable
- unknown_stays_unknown
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| node_identity_stable | test | test/run.sh 73_knowledge_nodes | 1 prošel. Dva běhy dávají shodné bajty; úprava dokumentu zachovává id jeho uzlu a mění jen jeho vlastní hash; přejmenování je smazání a přidání, které neruší žádné jiné id; zodpovězení otázky nechává její identitu beze změny. Poslední z toho byla skutečná vada: klíčování otázky celým jejím řádkem měnilo identitu v okamžiku, kdy ji někdo zodpověděl, a mutace, která toto chování obnoví, případ shodí | 2e96215 |
| unknown_stays_unknown | test | test/run.sh 73_knowledge_nodes | 1 passed. A document whose body discusses roadmaps, milestones and policies is a document; a source class declaring a kind the extractor has no rule for yields a node of kind unknown plus one WARN naming the class, rather than being dropped or guessed at; a document with no heading gets an empty title rather than its filename. Two further defects surfaced while proving it: the extractor keyed sources by path, so two classes discovering one file overwrote each other's kind, and the reader handed a Markdown file to the YAML flattener and complained that it was not YAML | 2e96215 |
Riziko
Odvození id dokumentu z jeho cesty znamená, že přejmenování je smazání a přidání, což je správné a bude vypadat jako šum. Alternativa, identita podle hashe obsahu, činí z úpravy smazání a přidání, což je horší.
Časová osa
- zahájeno
- 2026-09-04T17:46:56Z
- ověřeno
- —
- dokončeno
- 2026-09-04T17:59:30Z
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/I0808.yaml. Zpětně ho přečtete pomocí majordomus plan show I0808.