Záruky
Co Majordomus dělá dnes, řádek po řádku: se souborem, který to implementuje, testem, který to má prokázat, a tím, co říká zaznamenaný běh tohoto testu.
Dozorový nástroj, který sám sebe nadhodnocuje, je přesně to, čemu měl zabránit. Tato stránka je generována z docs/CLAIMS.yaml; build selže, pokud jakákoli cesta ke zdroji, implementaci nebo testu v ní neexistuje, nebo pokud zaručené tvrzení neuvádí žádný test. Stav je to, co soubor deklaruje; sloupec zaznamenaných důkazů je to, co majordomus evidence show odvozuje ze skutečně zaznamenaných běhů, a jako takový je barevně označen jen podpořený verdikt.
Tatáž data vykreslená jako graf, kterým jsou: každé tvrzení propojené s dokumentem, implementací a testem, které za ním stojí →
0 podpořeno zaznamenaným během
Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.
Promítnuto do instrukcí workera. Zda je worker dodržuje, zvenčí pozorovat nelze. Je to dokumentace, ne vynucování.
Specifikováno, ale neimplementováno. Uvedeno, aby bylo vidět, co chybí.
Zvažováno a záměrně odmítnuto, s uvedeným důvodem.
zaručeno
| claim | zdroj | implementace | test | zaznamenané důkazy |
|---|---|---|---|---|
| Každá platforma, název artefaktu a instalační URL se odvozuje z jednoho modelu a projekce, která s ním nesouhlasí, se odmítne share/distribution.yaml je model. Platformní tabulka instalátoru, sestavovací matice release, tabulka v dokumentaci, datová sada webu a veřejná metadata release se z něj generují a `majordomus generate --check` skončí s kódem 10 a pojmenuje každé, které zaostalo. |
docs/DISTRIBUTION.md | apps/majordomus-cli/src/distribution/mod.rs | test/cases/84_distribution_model.sh | zaznamenané důkazy: nespuštěno |
| Zdokumentovaný jednořádkový instalační příkaz se skládá z částí modelu a dokument, který uvádí jiný, shodí sadu testů Příkaz ke stažení, základní URL, název skriptu a shell jsou čtyři pole; příkaz je jejich složení. README.md a průvodce instalací se proti němu kontrolují, nevěří se jim. |
docs/INSTALL.md | apps/majordomus-cli/src/distribution/mod.rs | test/cases/84_distribution_model.sh | zaznamenané důkazy: nespuštěno |
| Instalátor ověří digest artefaktu a zkontroluje jeho archiv dříve, než se cokoli rozbalí, a jakékoli selhání ponechá předchozí instalaci funkční Špatný digest, useknuté stažení, archiv, který uniká ze svého adresáře nebo nese odkaz, a spustitelný soubor, který hlásí jinou verzi, se každé odmítnou pojmenovaně, ještě než se launcher nahradí. Neexistuje cesta varuj-a-pokračuj a sudo se nevyskytuje nikde. |
docs/INSTALL.md | share/install/install.sh.in | test/cases/85_installer.sh | zaznamenané důkazy: nespuštěno |
| Release publikuje artefakt pro každý podporovaný cíl, jinak se nepublikuje Matice buildů se zastaví při prvním selhání, publikace začíná, až když uspěje každý build, a recorder odmítne zapsat záznam, kterému chybí cíl, jejž model označuje jako podporovaný. |
docs/DISTRIBUTION.md | scripts/release-record | test/cases/87_release_pipeline.sh | zaznamenané důkazy: nespuštěno |
| Instalační příkaz, který tento projekt inzeruje, se každou noc a na požádání stáhne z publikovaného webu a spustí a běh, který o to požádal, je červený, dokud nenainstaluje funkční nástroj Řádek se spouští přesně tak, jak je napsán, včetně roury, na Linuxu i macOS, do vlastního domovského adresáře každého běhu. Dokazuje, že se metadata přeloží, nástroj hlásí přeloženou verzi, launcher MCP běží bez toolchainu a lze inicializovat repozitář. Release to dokazuje jednou při publikaci; tohle v dokazování pokračuje i potom. ADR 0037 jej plánuje na požádání, protože jeho úloha má větev pro macOS a tyto runnery čekaly ve frontě hodiny: žádají o něj noční plán, ruční spuštění a pull request označený ci:full, běžný push ne. |
docs/DISTRIBUTION.md | scripts/ci/install-check | test/cases/97_install_gate.sh | zaznamenané důkazy: nespuštěno |
| Archiv release nese každou cestu jednou a nenese nic než soubory a adresáře Balič čte zpět, co zapsal, a smaže archiv s opakovanou cestou nebo položkou, která není soubor ani adresář; ověřovač zkontroluje tytéž dvě vlastnosti znovu na runneru, který archiv sestavil. Žádný záložní balič neexistuje, protože archiv zabalený jinak není tím, který byl ověřen. |
docs/DISTRIBUTION.md | scripts/release-package | test/cases/87b_release_archive_shape.sh | zaznamenané důkazy: nespuštěno |
| Kanonická politika se parsuje a odmítne, pokud obsahuje neznámý klíč Omezená podmnožina YAML. Tabulátory, kotvy, flow mapy a víceřádkové skaláry se odmítají, ne hádají. |
docs/SCHEMAS.md | lib/common.sh | test/cases/00_yaml_flatten.sh | zaznamenané důkazy: nespuštěno |
| Každý profil se parsuje, jeho neznámé klíče se odmítnou a výchozí profil se prokáže jako existující | docs/SCHEMAS.md | lib/doctor.sh | test/cases/02_doctor_basic.sh | zaznamenané důkazy: nespuštěno |
| Každé vynucování, které politika deklaruje, je srovnáno s tím, co skutečně běží Cesta musí existovat, být spustitelná a být vyvolána jmenovaným dispatcherem. Hook, který ji vyvolá a zahodí návratový kód, se počítá jako nezapojený. |
docs/DESIGN.md | lib/doctor.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Návratové kódy jsou kontrakt a žádný kód neznamená "varuj a pokračuj" | docs/CLI.md | lib/common.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Instrukční soubory providerů se generují z jediné politiky, deterministicky Dvojí spuštění update zanechá bajtově shodný soubor. Test ověřuje hash. |
docs/DESIGN.md | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Každý generovaný instrukční soubor nese vlastní razítko a ruční úprava se odhalí | docs/SCHEMAS.md | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Projekce může vlastnit jen oblast mezi svými značkami a zbytek souboru ponechá nedotčený Jak Majordomus převezme repozitář, který už má ručně psaný CLAUDE.md. Úprava mimo značky není nikdy drift; úprava uvnitř nich se zachytí. Poškozené značky se odmítnou, nehádají se. |
docs/SCHEMAS.md | lib/update.sh | test/cases/13_region_projection.sh | zaznamenané důkazy: nespuštěno |
| Zapojení se najde v hooku nebo v kterémkoli subhooku adresáře, do kterého tento hook předává Zjištění jmenuje soubor, který vyvolání skutečně nese. Podhook, který není spustitelný, se hlásí jako nezapojený, protože ho dispatcher přeskočí. |
docs/CLI.md | lib/doctor.sh | test/cases/14_wiring_dispatcher.sh | zaznamenané důkazy: nespuštěno |
| Každé pravidlo, které nástroj vynucuje, je deklarováno jednou, jako objekt pravidla v efektivní množině repozitáře, a doctor dokazuje, že každé z nich je dosaženo příkazem, který tvrdí, že ho spouští Doktrína, jejíž validátor neexistuje, validátor, který žádná doktrína nedeklaruje, příkaz, který se nikdy nedispečuje, blokující pravidlo, jehož příkaz nemůže skončit nenulovým kódem, chybějící test a CI, které polyká sadu testů, jsou šest samostatných selhání se šesti samostatnými zprávami. Každé je mutačně testováno. |
docs/DOCTRINE.md | lib/doctrine.sh | test/cases/18_doctrine_wiring.sh | zaznamenané důkazy: nespuštěno |
| O tom, zda porušení zastaví příkaz, rozhoduje třída doktríny, ne štítek vedle ní Test změní aktuálnost checkpointu z poradní na blokující v kopii vendorovaného souboru s pravidlem a ověří, že návratový kód kontroly se změní z 0 na 10. Existují dvě třídy a žádná výjimka. |
docs/DOCTRINE.md | lib/doctrine.sh | test/cases/17_doctrine_enforcement.sh | zaznamenané důkazy: nespuštěno |
| Každý řádek knihy jen pro připojování je správně utvořená událost a poškozený řádek je selhání, ne přeskočený záznam Čtenář vadný řádek přeskočí, místo aby spadl, a check, doctor i watch jej hlásí. Kniha je jediný trvalý záznam, který nelze zrekonstruovat odjinud. |
docs/DOCTRINE.md | lib/check.sh | test/cases/22_history.sh | zaznamenané důkazy: nespuštěno |
| Položka v úložišti otázek, která se neparsuje, blokuje přijetí přesně jako nevyřešená otázka Kontrola, která nedokáže přečíst záznam, se dá obejít překlepem, takže nečitelná otázka není menší problém než otevřená. |
docs/DOCTRINE.md | lib/check.sh | test/cases/21_decision_question.sh | zaznamenané důkazy: nespuštěno |
| Deklarovaný provider hook zachycuje surové prompty uživatele pod úrovní modelu a doctor to dokazuje jeho spuštěním Pokrývá pět stavů, v nichž může být poskytovatel, idempotenci podle identity promptu poskytovatele, archiv, který je ignorován a nesledován, sadu záznamů, která nemůže nést výstup modelu, dvojici záznam–vykreslení, v níž se uchovává každý prompt, a identifikátor schématu, který se rozřeší na dva soubory popisující obě poloviny. |
docs/DOCTRINE.md | lib/capture.sh | test/cases/29_prompt_capture.sh | zaznamenané důkazy: nespuštěno |
| Zachycený prompt jmenuje epizodu, do které patří, nebo zaznamená, že žádnou nešlo určit; archiv je soukromý, omezený a bez přihlašovacích údajů Mapování relace poskytovatele na epizodu dříve existovalo jen po dobu, kdy byla epizoda otevřená, takže prompty uzavřené epizody se okamžitě staly nepřiřaditelnými — 713 z 974 záznamů tohoto repozitáře. Záznam nyní nese epizodu, relaci poskytovatele, repozitář a worktree s původem vazby; archiv má oprávnění 0600 a je omezen prompts.retention_max_days a prompts.retention_max_bytes, které odřezávají tělo a ponechávají záznam; a tvary přihlašovacích údajů se nahrazují dřív, než se cokoli uloží. Nepropojené starší záznamy zůstávají nepropojené: důkazy pro ně neexistují a toto tvrzení nepředstírá opak. |
docs/DOCTRINE.md | lib/capture.sh | test/cases/140_prompt_continuity.sh | zaznamenané důkazy: nespuštěno |
| Každý prompt asset lokální pro repozitář se vykreslí a neznámý token je selhání Pokrývá neshodu jména a názvu souboru, prázdný popis, neznámý klíč front matter, chybějící front matter a blokový token použitý inline. |
docs/DOCTRINE.md | lib/prompt.sh | test/cases/24_prompt_search.sh | zaznamenané důkazy: nespuštěno |
| Případ užití ani aplikace nemůže pojmenovat příkaz, doktrínu nebo tvrzení, které neexistuje, a oba katalogy se nemohou rozcházet v tom, co se na co vztahuje Próza popisující nástroj se kontroluje stejně, jako se kontroluje nástroj sám. Křížové odkazy se ověřují v obou směrech, takže případ užití jmenující aplikaci, která jej nejmenuje zpět, je selhání, ne tichá asymetrie. Aplikace, která nedeklaruje žádné does_not_fit_when, se odmítne, protože katalog, který uvádí jen to, kam se hodí, je marketing. |
docs/DOCTRINE.md | lib/usecase.sh | test/cases/28_catalogue.sh | zaznamenané důkazy: nespuštěno |
| Ručně upravený instrukční soubor se nikdy tiše nepřepíše update odmítne, nabídne diff a přepíše jen s výslovným příznakem. |
docs/CLI.md | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Archiv, který ztratil režimy souborů, selže, místo aby se distribuoval Mód každé položky se bere z indexu gitu, zapisuje se do manifestu archivu a před návratem příkazu se prokazuje skrz kontejner. |
docs/ARCHIVE.md | lib/archive.sh | test/cases/130_archive.sh | zaznamenané důkazy: zastaralé |
| Vždy načítaný instrukční soubor má rozpočet řádků s kontrolou, která selhává Nad rozpočet se nezapíše vůbec nic. |
share/skeleton/policy.yaml | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Každý odkaz relativní k repozitáři ve vždy načítaném souboru je prokázaně vyřešitelný | docs/DESIGN.md | lib/doctor.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Pevně zapsaný počet v vždy načítaném souboru je selhání | docs/DESIGN.md | lib/doctor.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Kniha jen pro připojování a úložiště předávek mají stropy uchovávání, které se kontrolují | share/skeleton/policy.yaml | lib/doctor.sh | test/cases/02_doctor_basic.sh | zaznamenané důkazy: nespuštěno |
| Instalace do repozitáře, který už instalaci má, je odmítnuta | docs/CLI.md | lib/init.sh | test/cases/01_init.sh | zaznamenané důkazy: nespuštěno |
| Každý nález nese příkaz, který jej reprodukuje | docs/DESIGN.md | lib/common.sh | test/cases/02_doctor_basic.sh | zaznamenané důkazy: nespuštěno |
| Shellový nástroj neprovádí žádné síťové volání, nevyhodnocuje žádný generovaný text a nic rekurzivně nemaže; jeho jediný deklarovaný požadavek je sonda peeru na loopbacku | docs/DESIGN.md | bin/majordomus | test/cases/08_no_forbidden_constructs.sh | zaznamenané důkazy: nespuštěno |
| Úloha se zahajuje s deklarovaným rozsahem souborů a profilem a na jeden checkout může být aktivní jen jedna úloha Cesta rozsahu, která uniká z kořene repozitáře, se odmítne. Spuštění druhé úlohy, zatímco jedna je aktivní, se odmítne. |
docs/CLI.md | lib/start.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| Pole identity v každém záznamu stavu se počítají z gitu a nikdy se neautorují Tělo předávky, které se pokusí jeden nastavit, se odmítne, místo aby se sloučilo. |
docs/SCHEMAS.md | lib/start.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| check hlásí, zda jsou stav, rozsah, blokátory a stáří checkpointu právě teď konzistentní | docs/CLI.md | lib/check.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| Dotčený soubor mimo nárokovaný rozsah je selhání, ne varování | docs/DESIGN.md | lib/check.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| Zpětně přečtený stav je vůči gitu označen jako exact, advanced, diverged nebo different_context | docs/SCHEMAS.md | lib/common.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| Překryv mezi paralelními pracovníky se počítá na nárokovaných cestách v obou směrech obsažení Hlásí se, nikdy neblokuje. Rozpracovaná práce se hlásí a nikdy neblokuje. |
docs/DESIGN.md | lib/check.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| watch hlásí drift politiky, projekce, stavu, rozsahu, předávky, ověření, zastarání a retence | docs/DESIGN.md | lib/watch.sh | test/cases/07_watch.sh | zaznamenané důkazy: nespuštěno |
| handover zapisuje záznam jen pro připojování s vypočtenou hlavičkou a povinnými sekcemi Tělo s chybějící nebo prázdnou povinnou sekcí se odmítne a sekce jmenuje. |
docs/SCHEMAS.md | lib/handover.sh | test/cases/05_handover.sh | zaznamenané důkazy: nespuštěno |
| Předávka je záznam stavu, ne přepis - její povinné sekce musí být přítomné a neprázdné, zástupné tělo se odmítne a její identita se vypočte a odmítne se, je-li zapsána do těla; přepis vložený do sekce se nezjistí | docs/DESIGN.md | lib/handover.sh | test/cases/05_handover.sh | zaznamenané důkazy: nespuštěno |
| finish vyhodnocuje kontrakt dokončení řádek po řádku a odmítne, pokud je kterýkoli řádek nesplněn | docs/CLI.md | lib/finish.sh | test/cases/06_finish.sh | zaznamenané důkazy: nespuštěno |
| každý odmítnutý finish připojí událost task.refused jmenující nárokovaný výsledek, počet nesplněných a doktríny, které odmítly, a finish --check nezapíše žádnou | share/events.yaml | lib/finish.sh | test/cases/06_finish.sh | zaznamenané důkazy: nespuštěno |
| Výsledek je hodnota z uzavřeného slovníku, ne volný text no_match znamená, že práce byla provedena a hledaná věc neexistuje. failed znamená, že práci nešlo provést. Jsou to různé skutečnosti. |
docs/SCHEMAS.md | lib/finish.sh | test/cases/06_finish.sh | zaznamenané důkazy: nespuštěno |
| Kontext, který pracovník dostane, se sestavuje z trvalého stavu v pořadí autority a co profil vylučuje, je vyloučeno Nejdřív git, pak úloha a profil, pak blokátory, pak psané záznamy, pak historie. Kontextový blok profilu rozhoduje, co se nabídne; je to jediný kód, který ta pole čte. |
docs/CONTINUITY.md | lib/context.sh | test/cases/23_context.sh | zaznamenané důkazy: nespuštěno |
| Sestavený kontext dodržuje rozpočet řádků a každá sekce, kterou vypustí, je pojmenována s důvodem Počítá se vytištěný dokument, ne jeho sekce. Git, úloha, profil a otevřené blokátory se nikdy nevypouštějí; těla záznamů degradují na odkaz dřív, než zmizí. |
share/skeleton/policy.yaml | lib/context.sh | test/cases/23_context.sh | zaznamenané důkazy: nespuštěno |
| Checkpoint je záznam průběhu s omezenou velikostí a vypočtenou identitou; tělo nad limit je odmítnuto, ne zkráceno Strop je to, co odlišuje checkpoint od předávky. Mód 0600, vytvořeno atomicky, nikdy se nestaguje. |
docs/SCHEMAS.md | lib/checkpoint.sh | test/cases/20_checkpoint.sh | zaznamenané důkazy: nespuštěno |
| Správný předchozí záznam se vyhledá podle worktree a branche a nesouvisející se nikdy nenabídne Stejný worktree a větev, jinak stejná větev, jinak nic. Shody v rámci jedné sekundy se rozhodují pořadím v ledgeru. Absence se hlásí jako absence. |
docs/CONTINUITY.md | lib/common.sh | test/cases/23_context.sh | zaznamenané důkazy: nespuštěno |
| Ledger lze číst zpět jako provozní historii, filtrovanou podle úlohy, události a času Co se stalo, kdy, pro kterou úlohu, na které hlavě a jaký výsledek byl přijat. Nikdy ne to, co kdo řekl. |
docs/CLI.md | lib/history.sh | test/cases/22_history.sh | zaznamenané důkazy: nespuštěno |
| Rotace knihy archivuje nejstarší řádky a nikdy je nesmaže Odmítne přepsat existující archiv a nedělá nic, když je kniha pod svým stropem. |
docs/SCHEMAS.md | lib/history.sh | test/cases/22_history.sh | zaznamenané důkazy: nespuštěno |
| Rozhodnutí se zaznamenává s důvodem a svou úlohou a je nahrazeno pozdějším záznamem, ne upraveno --why je povinné. --supersedes odmítne text, který neodpovídá žádnému zaznamenanému rozhodnutí. Úloha a head se vypočítají. |
docs/SCHEMAS.md | lib/decision.sh | test/cases/21_decision_question.sh | zaznamenané důkazy: nespuštěno |
| Nevyřešená otázka blokuje přijetí a položka, kterou kontrola neumí parsovat, je selhání, ne tiché propuštění Kontrola, která nedokáže přečíst položku, se dá obejít překlepem v ní, proto check, doctor i watch selžou na poškozené položce. |
docs/SCHEMAS.md | lib/question.sh | test/cases/21_decision_question.sh | zaznamenané důkazy: nespuštěno |
| Prompt lokální pro repozitář se vykresluje proti uzavřené množině stavových tokenů a neznámý token je chyba Žádné podmínky, smyčky, includy ani shell. Prompt, který tiše vykreslí překlepnutý token jako doslovný text, je horší než ten, který odmítne. |
docs/SCHEMAS.md | lib/prompt.sh | test/cases/24_prompt_search.sh | zaznamenané důkazy: nespuštěno |
| Trvalé záznamy lze doslovně prohledávat napříč druhy, bez indexu Grep na pevný řetězec v pořadí podle autority. Žádné řazení, žádné embeddingy, žádný index, který by se mohl rozejít se záznamy, které popisuje. |
docs/CLI.md | lib/search.sh | test/cases/24_prompt_search.sh | zaznamenané důkazy: nespuštěno |
| Každé úložiště kontinuity se prokazuje jako dosažitelné vlastním příkazem, ne jen jako přítomné na disku doctor spustí resolver, vykreslí každý prompt asset, zvaliduje oba naparsované sklady a sestaví kontext. Adresář záznamů, které nečte žádný příkaz, je přesně to selhání, které má tento nástroj zachytit. |
docs/CLI.md | lib/doctor.sh | test/cases/25_continuity_lifecycle.sh | zaznamenané důkazy: nespuštěno |
| Kontext, který se vztahuje na cestu, se skládá z dokumentů vrstvy vázaných na rozsah, od kořene k cíli, v jednom deterministickém pořadí s původem, a strom, který neprojde validací, nevyřeší nic Dokument je soubor Markdown pod .ai/, jehož front matter nese schéma context/v1; jméno souboru je konvence a identitou je id. Pořadí je hloubka, pak deklarované pořadí, pak cesta. Poskytovatelé a publikum filtrují; extend, replace a final skládají; duplicitní id, visící odkaz, nahrazený final dokument nebo cyklus se odmítne jménem. |
docs/CLI.md | lib/context_docs.sh | test/cases/69_context_documents.sh | zaznamenané důkazy: nespuštěno |
| Každý adresář vrstvy nese kontextový dokument, výjimku deklaruje kontrakt, který podstrom řídí, a potomek může tento požadavek zúžit, ale nikdy oslabit Adresář uvnitř stromu bez dokumentu je missing-contract, s uvedením adresáře a tam, kde požadavek explicitně učinil předek, i kontraktu, který ho učinil. Výjimka je children.require_contract v dokumentu podstromu; platí hodnota nejblíže adresáři, absence znamená, že je kontrakt dlužen, a snížení zděděného true je illegal-override. Strom je adresář manifestu bez poloviny, kterou manifest deklaruje jako nesledovanou; nic jiného se nepřeskakuje podle jména a podstrom, který vrstva nese, ale nevytváří, se uvolní pomocí children.exempt na kontraktu, který ho řídí a který smí jmenovat jen adresáře uvnitř svého rozsahu. |
docs/CONTEXT.md | lib/context_docs.sh | test/cases/69_context_documents.sh | zaznamenané důkazy: nespuštěno |
| Dopad sady změn na kontext v rozsahu se hlásí z gitu — dokumenty, rozsahy pod nimi, přesuny s jejich původem, sledované zdroje ke kontrole a zastaralé projekce — a nesouvisející změna nehlásí nic context affected čte pracovní strom, index nebo základní ref, s detekcí přejmenování; změna sledovaného zdroje je WARN k posouzení a nikdy exit kód, protože nástroj nemůže rozhodnout, zda próza stále popisuje kód. context check-sync je validate, pak každá projekce proti svému razítku, pak affected; test/cases/71_context_sync.sh dokazuje exit kódy. |
docs/CLI.md | lib/context_docs.sh | test/cases/70_context_impact.sh | zaznamenané důkazy: nespuštěno |
| Vrstva AI repozitáře je jeden adresář, jehož manifest jmenuje každou sekci a lze jej číst bez nástroje init zasévá .ai/ ze skeletonu a nic dalšího; žádný hook, žádný shellový soubor, žádná instalace nástrojů. doctor selže na sekci, kterou manifest jmenuje a která chybí, a na klíč manifestu, který nic nečte. |
docs/SCHEMAS.md | lib/init.sh | test/cases/01_init.sh | zaznamenané důkazy: nespuštěno |
| Vrstva nainstalovaná s --personal je vlastní jednomu člověku ve sdíleném repozitáři: nemění žádný sledovaný soubor, žádný řádek .gitignore ani nic, co ukazuje git status, a příkaz, který to tvrdí, to ověří Krytí je označený blok v info/exclude společného adresáře gitu. init --personal skončí s kódem 10, pokud git status po něm nevypadá stejně jako před ním, instalátor to sám znovu porovná, update a capture install pokryjí každou cestu před zápisem a sledovanou cestu odmítnou celou a doctor při každém běhu ověří znovu. Zda je vrstva osobní, se čte z bloku a nikde se neukládá. init --extend --shared krytí odstraní a nic necommituje. |
docs/INSTALL.md | lib/common.sh | test/cases/2979_a_personal_layer_changes_nothing_shared.sh | zaznamenané důkazy: nespuštěno |
| Stav lokální pro checkout žije pod .ai/local/, git jej ignoruje a na novém klonu nebo worktree chybí Záznam úlohy, ledger, rozhodnutí, otázky, checkpointy a předávky nikdy neputují přes git. Záznam, který do jiného checkoutu dorazí jinak, pojmenovává checkout, kterému patří, a jinde se nevynucuje, což dokazuje test/cases/27_foreign_task.sh. |
docs/SCHEMAS.md | lib/common.sh | test/cases/01_init.sh | zaznamenané důkazy: nespuštěno |
| Základ pravidel je vendorován do repozitáře s manifestem jmenujícím každý soubor a jeho hash a ruční úprava se odhalí a odmítne rules vendor status ohlásí upravený, chybějící nebo cizí soubor; rules vendor update nad ním odmítne pokračovat, dokud se nepoužije --force, a nikdy se nedotkne rules/project/. Novější spustitelný soubor ohlásí novější balíček a neaplikuje jej. |
docs/DOCTRINE.md | lib/rules.sh | test/cases/67_rule_dag.sh | zaznamenané důkazy: nespuštěno |
| Efektivní sada pravidel se řeší jako graf závislostí v deterministickém pořadí a sadu, která se nevyřeší, neaplikuje nic Chybějící nebo zastaralá závislost, cyklus, jedna identita zabraná dvakrát, projektové pravidlo ve vendorovaném jmenném prostoru, nevalidní front matter, neznámý klíč a blok x-majordomus bez vazby jsou odmítnuty každé zvlášť jménem. Každá závislost je uvedena před pravidlem, které na ní závisí, a dva běhy se shodují. |
docs/DOCTRINE.md | lib/rules.sh | test/cases/67_rule_dag.sh | zaznamenané důkazy: nespuštěno |
| Instrukční soubory providerů jsou tenké bootstrapy, které odkazují na vrstvu AI a nenesou žádné vlastní pravidlo Každá projekce jmenuje .ai/README.md, README.md jmenuje AGENTS.md a doctor selže na projekci, která si vypěstovala vlastní sekci pravidel nebo jmenuje id pravidla, které efektivní sada neposkytuje (případ 899). Člověk i worker se k téže vrstvě dostanou týmiž dvěma kroky. |
docs/DESIGN.md | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Repozitář s rozložením před .ai se migruje jednou, výslovně, s náhledem plánu a ověřenou zálohou svého lokálního stavu a příkaz je poté idempotentní Každý další příkaz odmítne starší rozvržení a jmenuje migrate. --dry-run vytiskne plán a nic nezapíše. Soubor, který verze nezná, se ohlásí, nikdy nesmaže; cíl, který už existuje, odmítne celý běh. |
docs/CLI.md | lib/migrate.sh | test/cases/66_migrate_legacy.sh | zaznamenané důkazy: nespuštěno |
| Nástroj běží pouze pro čtení z libovolného umístění a dvě umístění jedné verze se o jednom repozitáři shodují Kopie checkoutu, nesouvisející absolutní cesta a instalace na PATH čtou tytéž soubory repozitáře a nezapisují nic do distribuce, jejíž hash je po každém příkazu stejný. Kořen distribuce se odvozuje ze vstupního bodu, nikdy z prostředí. |
docs/DESIGN.md | lib/common.sh | test/cases/65_tool_root_independence.sh | zaznamenané důkazy: nespuštěno |
| To, co nástroj ví sám o sobě, se zapisuje jednou a všude jinde se odvozuje; druhá kopie je selhání testu Hodnoty politiky nemají výchozí hodnoty na straně čtenáře, stavy tvrzení se deklarují v matici, fixtures webu odvozují své vstupy z generátoru a každý příkaz, doktrína i tvrzení se kontroluje proti seznamu čtenému z dispatch tabulky nebo registru, a ne zapsanému do testu. |
docs/CONCEPTS.md | lib/doctor.sh | test/cases/28_no_hardcoded_values.sh | zaznamenané důkazy: nespuštěno |
| Veřejný povrch příkazů je deklarován a srovnáván s dispatcherem Registr je autorita pro to, co příkaz znamená; bin/majordomus zůstává autoritou pro to, co běží. Příkaz předaný bez záznamu i záznam, který nic nepředává, oba selhávají. Příkaz je veřejný právě tehdy, když ho uvádí text použití, kontrolováno oběma směry. |
docs/DYNAMICITY.md | share/commands.yaml | test/cases/30_command_registry.sh | zaznamenané důkazy: nespuštěno |
| Každý veřejný příkaz má behaviorální test a negativní test, vypočtené, ne zapamatované Požadavek se odvozuje z registru, takže příkaz přidaný zítra dluží pokrytí od té chvíle. Pokrytí se deklaruje v hlavičkách jednotlivých případů, ne odhaduje, protože negativní aserce využívající stdin a smyčka případu povrchu jsou pro každé skenování neviditelné. |
docs/DYNAMICITY.md | test/cases/31_command_coverage.sh | test/cases/31_command_coverage.sh | zaznamenané důkazy: nespuštěno |
| Slovník událostí ledgeru je uzavřený, na vstupu i na výstupu share/events.yaml deklaruje každý název, příkaz, který ho vysílá, a povinné klíče jeho obsahu. Neregistrovaný název je odmítnut při zápisu, odmítnut jako filtr historie a ohlášen příkazem history --validate, pokud je už uložen. |
docs/SCHEMAS.md | lib/common.sh | test/cases/33_event_registry.sh | zaznamenané důkazy: nespuštěno |
| Záznam úlohy jmenuje checkout, kterému patří, a jiný checkout se nikdy nepodřizuje jeho rozsahu Záznam je lokální pro checkout a nikdy se nesleduje, takže necestuje přes git; ten, který dorazí jinou cestou, se pozná podle worktree, které jmenuje. check, finish --check a watch cizí záznam hlásí a nic z něj nevynucují; finish jej odmítne zapsat. Záznam z doby před zavedením pole se bere jako lokální, takže upgrade neobarví instalaci načerveno. |
docs/SCHEMAS.md | lib/check.sh | test/cases/27_foreign_task.sh | zaznamenané důkazy: nespuštěno |
| Blokující otázka blokuje dál i poté, co se práce předá nové úloze Kontrola čte každou nevyřešenou položku v úložišti, a ne jen položky aktivní úlohy, takže předávka nemůže vyprat blokátor. Úložiště je lokální pro checkout, takže otázky, které kontrola vidí, jsou ty položené v této pracovní kopii. Odmítá se jen dokončený finish; blocked, partial, no_match a failed jsou poctivá nedokončení a odmítnuta nejsou. Libovolná úloha smí vyřešit libovolnou otázku. Alternativy - přenést otázku s předávkou nebo podmínit kontrolu překryvem rozsahu - byly v M001 zamítnuty s případem, který každá z nich řeší špatně. |
docs/CONTINUITY.md | lib/check.sh | test/cases/50_blocker_across_handover.sh | zaznamenané důkazy: nespuštěno |
| To, co kompilátor kontextu vybere z toho, co shledal relevantním, se počítá v tokenech pojmenovaného tokenizeru a zaznamenává se, nikdy neodhaduje Měří se výběr, ne úspory. Zaznamenává to `majordomus economics measure`; metrika nese vlastní vyjádření, čím není. |
docs/ECONOMICS.md | apps/majordomus-cli/src/economics/context.rs | test/cases/430_economics.sh | zaznamenané důkazy: nespuštěno |
| Veličina o tokenech, kontextu nebo nákladech zapsaná do ručně psané prózy je odmítnuta a tvrzení vázané na metriku nelze zaručit, dokud její důkazy neobstojí `majordomus economics check` skončí s kódem 10 a pojmenuje každé zjištění; čísla, která čtenáři vidí, se generují ze zaznamenaných běhů do docs/generated/economics.* a do dat webu. |
docs/ECONOMICS.md | apps/majordomus-cli/src/economics/claims.rs | test/cases/431_economics_claims_gated.sh | zaznamenané důkazy: nespuštěno |
| Milníky a úkoly jsou kanonické soubory repozitáře a klíč, který nikdo nečte, je chyba Stejné pravidlo allowlist, pod kterým žijí politika a profily. Název souboru je id; záznam, který si odporuje se svým vlastním názvem souboru, je odmítnut, ne uveden do souladu. |
docs/SCHEMAS.md | lib/project.sh | test/cases/40_project_model.sh | zaznamenané důkazy: nespuštěno |
| Stav úkolů a milníků se odvozuje ze zaznamenaných faktů a nikde se neukládá Úkol zaznamenává started_at, verified_at, completed_at, cancelled a své důkazy. BLOCKED, READY, ACTIVE, VERIFY, DONE a CANCELLED z toho a ze stavu jeho závislostí vyplývají. `status` není pole, takže jeho zápis je neznámý klíč. |
docs/PLANNING.md | lib/project.awk | test/cases/41_project_status.sh | zaznamenané důkazy: nespuštěno |
| Cyklus, závislost sama na sebe a závislost na neexistujícím úkolu jsou každé odmítnuty jmenovitě Kahnovo vrstvení; hlášené jsou úkoly, které z grafu nikdy nevystoupí. Poškozený graf způsobí selhání doctor a watch ho ohlásí jako drift. |
docs/PLANNING.md | lib/project.awk | test/cases/42_dag_waves.sh | zaznamenané důkazy: nespuštěno |
| Vlny provádění se počítají z grafu a úkoly v jedné vlně, které sahají na stejné cesty, se hlásí jako serializované Sdílení vlny je pro souběžnost nutné, ale nestačí. Překrývající se deklarovaný rozsah se serializuje konzervativně, protože falešná serializace stojí čas a falešná paralelnost stojí konflikt. |
docs/PLANNING.md | lib/project.awk | test/cases/42_dag_waves.sh | zaznamenané důkazy: nespuštěno |
| Úkol nelze dokončit, dokud chybí požadovaný důkaz Důkazem je příkaz a jeho výsledek, nebo artefakt. Vyprávění se odmítá. Úkol, jehož completed_at je nastaveno, ale jehož důkazy jsou neúplné, se odvozuje jako VERIFY, nikdy DONE. |
docs/PLANNING.md | lib/plan.sh | test/cases/41_project_status.sh | zaznamenané důkazy: nespuštěno |
| Plán rozvoje se odvozuje ze stavu milníků a žádný dokument nesmí být jeho druhou autoritou Pořadí je topologický rank grafu milníků, takže nikde neexistuje seznam verzí. Dokud přežívá ručně psaná tabulka plánu rozvoje, doktrína ji vůči modelu hlídá v obou směrech; jakmile zmizí, kontrola platí triviálně, což je právě regrese, kterou má odmítnout. |
docs/ROADMAP.md | lib/doctor.sh | test/cases/49_roadmap_doctrine.sh | zaznamenané důkazy: nespuštěno |
| Milníky a úkoly na GitHubu se generují z kanonického modelu a ručně upravená generovaná oblast se hlásí, ne přepisuje Adaptér leží ve scripts/, protože samotný nástroj nevolá žádnou síť, což dokazuje test/cases/08_no_forbidden_constructs.sh. Počáteční značka nese hash záznamu, z něhož byl vygenerován, což odlišuje přesunutý plán od ruční úpravy; druhá značka nese identitu záznamu, takže titulek, který člověk přepíše, ji nemůže osiřet. Toto tvrzení se týká toho, co adaptér vykresluje a odmítá. Zda remote skutečně přijal, je jiná otázka a odpovídá na ni tvrzení github-projection-gated. |
docs/PLANNING.md | scripts/github-sync | test/cases/45_github_projection.sh | zaznamenané důkazy: nespuštěno |
| Projekce, která přestane být aplikována, shodí build, a kontrola, která se nedokáže dostat ke GitHubu, to oznámí, místo aby prošla Adaptér končil kódem 11 při driftu od svého vzniku a nic ho nevolalo, takže projekce během pěti dnů zchátrala na desetinu modelu, zatímco každé sestavení bylo zelené. Kontrola rovnou odmítá behind, edited, conflict, unmanaged, state a milestone a hlídá nahromaděný dluh nepromítnutých záznamů proti .ai/repo/ci/github-drift-baseline.txt, který smí klesat a nikdy růst. Jediný drift, který hlásí bez odmítnutí, je drift, který způsobila hlava větve nebo mladé přistání samo, a ten pokrývá projected-record-edit-is-landable. |
docs/PLANNING.md | scripts/ci/github-check | test/cases/97_github_gate.sh | zaznamenané důkazy: nespuštěno |
| Pull request, který upravuje promítnutý záznam plánu, není odmítnut jen proto, že GitHub úpravu ještě nezobrazuje, a trunk je za to odmítnut, jakmile uplyne deklarované okno GitHub ukazuje plán trunku a nic jiného, takže záznam, který pull request upravuje, tam zaostává, dokud se pull request nesloučí a přistání jej neaplikuje (.github/workflows/github.yml). Kontrola hlásí behind, state, milestone a closed jako PENDING u záznamů, které hlava od své merge base změnila, a na trunku u záznamů, které se změnily v přistání mladším než apply.window v .ai/repo/ci/github.yaml. Záznam se změnil, když se liší jeho soubor nebo jeho vykreslení. Drift na jakémkoli jiném záznamu se odmítá jako dřív, stejně jako každý záznam, když změnu nelze změřit. |
docs/PLANNING.md | scripts/ci/github-check | test/cases/1038_a_head_is_judged_against_what_it_changes.sh | zaznamenané důkazy: nespuštěno |
| Fáze záměru se odvozuje z milníků, které jej realizují, a každé kritérium z knihy důkazů; záměr je naplněn, jen dokud má každé kritérium aktuální úspěšný běh O záměru se neukládá nic kromě jeho výroku. Úspěšný běh při otevřeném milníku kritérium splňuje, ale nic neuspokojuje; uzavření milníku je uspokojí; změna testu po jeho běhu zastará důkazy a záměr se vrací k ověřování, a selhávající běh také není důkaz, to vše bez doteku souboru záměru. `majordomus intent list`, `intent show`, HTTP API a nástroje MCP odpovídají ze stejného odvození. |
docs/PLANNING.md | apps/majordomus-cli/src/intent.rs | test/cases/367_an_intent_is_satisfied_only_by_evidence.sh | zaznamenané důkazy: zastaralé |
| Záměr, jehož kritérium jmenuje důkaz, který se nikam nevyřeší, se odmítne s uvedením jména `majordomus intent validate` skončí s kódem 10 a `unresolved_evidence_ref`, který jmenuje záměr, a spouští jej kontrola intent-check. Milník nebo položka správy, která se nerozřeší na nic, je odmítnuta stejně. Odkaz na nic by jinak navždy vypadal jako plánovaný záměr. |
docs/PLANNING.md | apps/majordomus-cli/src/intent.rs | test/cases/367_an_intent_is_satisfied_only_by_evidence.sh | zaznamenané důkazy: zastaralé |
| Jakmile pod záměrem existuje práce, odmítne se s uvedením jména kritérium, kterému neslouží žádný úkol, úkol pod jeho milníky, který neslouží ničemu, i odkaz na neexistující kritérium Úkol jmenuje kritérium, kterému slouží, v `serves`; pokrytí od kritéria k úkolu se odvozuje při každém čtení a vypisuje ho `majordomus intent coverage` spolu s důvodem, proč každý úkol existuje. Záměr zatím bez práce je `intent_not_planned`, varování, protože tak začíná každý záměr. |
docs/PLANNING.md | apps/majordomus-cli/src/intent_plan.rs | test/cases/386_a_plan_is_held_to_its_intent.sh | zaznamenané důkazy: zastaralé |
| Mezera, která nechává kritérium bez odpovědi, se odmítne a úkol sloužící záměru, který začal bez kritiky nebo při otevřeném blokujícím nálezu, neprojde validací záměru Odmítnutí je `majordomus intent validate` a kontrola intent-check po startu. Samotný `plan start` uspěje; odmítnutí startu je intent-refused-at-plan-start, které je plánováno. Majordomus nezapisuje ani jeden záznam. Worker pozoruje a kritizuje a repozitář odmítá to, co do sebe nezapadá. |
docs/PLANNING.md | apps/majordomus-cli/src/intent_review.rs | test/cases/386_a_plan_is_held_to_its_intent.sh | zaznamenané důkazy: zastaralé |
| Práce realizující záměr se spojuje napříč relacemi, poskytovateli a předávkami a záměr, jehož milníky jsou všechny uzavřené, zatímco důkaz kritéria selhává, se odmítne s uvedením tohoto kritéria `majordomus intent realization` skončí s kódem 10 a `closed_work_contradicted` a spouští jej kontrola intent-realization; `intent explain` říká, proč záměr stojí tam, kde stojí. Každý odkaz říká, jak je znám: deklarovaný, pozorovaný, odvozený nebo usuzovaný. Uzavřená práce, která je pouze neprokázaná, a úkol uzavřený, zatímco kritérium, kterému slouží, není splněno, jsou varování, nikoli odmítnutí. |
docs/PLANNING.md | apps/majordomus-cli/src/intent_realization.rs | test/cases/388_an_intent_is_realised_across_providers_and_held_to_reality.sh | zaznamenané důkazy: zastaralé |
| Zeptáte-li se před prací na úkolu, `intent preflight` jmenuje záměry, kterým úkol slouží, s platnou správou, nebo odmítne s uvedením příčiny `majordomus intent preflight --issue <id>` (nebo `--path`) sleduje kritéria, která úkol deklaruje v `serves`, nikdy jen jeho milník, a každý odkaz posuzuje podle pokrytí, z něhož vychází `intent validate`. Odpovídá `serves` (exit 0), když platí každý odkaz a každý sloužený záměr má kritiku bez otevřeného blokujícího nálezu, `maintenance` (exit 0) pro úkol, který neslouží ničemu pod milníkem, jejž nejmenuje žádný živý záměr, a `refused` (exit 10) se jmenovanou příčinou: unknown_issue, no_issue_covers_paths, issue_serves_nothing, serves_another_intent, serves_unknown_criterion, intent_not_critiqued nebo open_blocking_finding. Nástroj MCP odpovídá totéž. `majordomus start` a `plan start` se ptají téhož joinu přes `intents.binding` (intent-in-session-context, intent-refused-at-plan-start). |
docs/PLANNING.md | apps/majordomus-cli/src/intent.rs | apps/majordomus-cli/tests/intent.rs | zaznamenané důkazy: zastaralé |
| Cockpit zobrazuje každý záměr s odvozenou fází na /cockpit/intents a kritéria, důkazy, sloužící úkoly a realizující práci jednoho záměru na /cockpit/intents/<id> Obě stránky vykreslují schopnosti intent-realization a samy nic nerozhodují. Každé kritérium odkazuje na testovací objekt, který jmenuje, a na úkol, který mu slouží; realizující práce nese své poskytovatele a původ svého odkazu a záměr, který repozitář nedrží, je 404. |
docs/COCKPIT.md | apps/majordomus-cli/src/cockpit/intents.rs | apps/majordomus-cli/tests/intent_realization.rs | zaznamenané důkazy: zastaralé |
| Úloha, která jmenuje úkol nebo záměr, jemuž slouží, dostane briefing o tom, co ten záměr od práce žádá, a předávka sdělí dalšímu pracovníkovi, že se záměr změnil `majordomus start --issue <id>` (nebo `--intent <id>`) se zeptá `intents.binding`, čemu úloha slouží, a zaznamená, co bylo jmenováno, dvěma piny; `majordomus context` pak při každém volání nese sekci INTENT čtenou z vazby - výrok, invarianty, sloužená kritéria se stavem jejich důkazů, kritiku a mezeru - a uvede `unknown`, když vazbu nelze přečíst. Předávka vazbu připíná a `handover --resolve` odpovídá `unchanged`, `evidence_moved` nebo `plan_changed` (test/cases/961). Úloha, která nic nejmenuje, se briefuje bez záměru a při politice `intent.binding: off` se neptá nic. Záznam drží jen jména a hashe: neukládá se žádná fáze, verdikt ani kritérium (ADR 0111). |
docs/PLANNING.md | lib/intent_binding.sh | test/cases/960_a_task_starts_bound_to_what_it_serves.sh | zaznamenané důkazy: nespuštěno |
| Kde politika vyžaduje navázání, zahájení úkolu nebo úlohy, která slouží záměru bez kritiky nebo s otevřeným blokujícím nálezem, se odmítne už při zahájení, ne až dodatečným hlášením Pod politikou `intent.binding: required` se `majordomus plan start`, schopnost `plan.transition` i `majordomus start` ptají `intents.binding` a odmítnou odmítnutou vazbu, týmž slovním zněním v obou plánovacích enginech, a nic nezapíšou; odpověď, kterou nelze přečíst, také odmítne. Pod `advisory` se odmítnutá vazba úlohy hlásí a úloha startuje; při chybějícím klíči nebo `off` `plan start` uspěje jako dřív a `intent validate` poté jmenuje `executing_without_critique` nebo `executing_with_open_blocker` (intent-plan-reviewed). Politika tohoto repozitáře je `advisory`. |
docs/PLANNING.md | apps/majordomus-cli/src/intent_binding.rs | test/cases/962_plan_start_asks_the_binding_in_both_engines.sh | zaznamenané důkazy: nespuštěno |
| Spustitelný program v Rustu servíruje klientovi MCP vrstvu AI repozitáře přes stdio, přičemž na stdout jsou jen rámce protokolu Jeden proces na klienta, živý, dokud žije jeho roura; diagnostika jde na stderr; relace nechá repozitář byte po bytu totožný. Vlastní sada crate, tests/mcp_stdio.rs, podřizuje tytéž rámce týmž pravidlům. |
docs/MCP.md | apps/majordomus-cli/src/mcp/protocol.rs | test/cases/72_rust_mcp.sh | zaznamenané důkazy: nespuštěno |
| O tom, co server MCP servíruje, rozhoduje manifest, deklarované třídy zdrojů a front matter každého souboru, takže objekt přidaný do vrstvy se servíruje bez změny executable Sekvence přidat, odebrat a rozbít skrz sestavenou binárku je tests/external_extension.rs v crate; shellový případ dokazuje, že vrstva, kterou init zapíše, se servíruje a že pravidlo do ní přidané se objeví. |
docs/MCP.md | apps/majordomus-cli/src/index.rs | test/cases/72_rust_mcp.sh | zaznamenané důkazy: nespuštěno |
| Soubor vrstvy, který server MCP nedokáže přečíst, je vyloučen s diagnostikou uvádějící jeho cestu a index říká, že je degradovaný, nikdy ne potichu menší Dva soubory jednoho druhu, které si nárokují jednu identitu, jsou oba vyloučeny a oba pojmenovány. --strict odmítne obsluhovat degradovanou vrstvu; --inspect u ní skončí s kódem 10. |
docs/MCP.md | apps/majordomus-cli/src/index.rs | test/cases/72_rust_mcp.sh | zaznamenané důkazy: nespuštěno |
| Každá schopnost Rust executable je definována jednou a registr odmítne duplicitní id nebo kolidující název projekce, přičemž pojmenuje obě strany Dva zdroje, vestavěné spustitelné soubory a objekty vrstvy, se setkávají v jednom registru sestaveném na jednom místě; id, názvy a URI MCP, HTTP routes a cesty CLI jsou každé jedinečné, jinak se registr nesestaví. Testy crate v tests/registry.rs pokrývají každou kolizi. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/capability/registry.rs | apps/majordomus-cli/tests/registry.rs | zaznamenané důkazy: nespuštěno |
| MCP, HTTP, OpenAPI, Swagger UI, příkazy capabilities a generovaná reference se odvozují z registru a změna jedné definice se dostane ke všem z nich Žádná projekce nedeklaruje vlastní název, popis, schéma ani route; tests/projections.rs dokazuje, že každá deklarovaná projekce je přítomna a žádná není osiřelá a že změněný vstupní typ a popis dorazí do schématu MCP, operace OpenAPI i reference. MCP a HTTP odpovídají na tentýž handler shodně. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/http/openapi.rs | test/cases/76_capabilities_projections.sh | zaznamenané důkazy: nespuštěno |
| Jak se čte každý deklarativní druh a jaké klíče smí nést, jsou data čtená za běhu a repozitář přidá druh s jeho JSON Schema bez změny kódu share/kinds.yaml a share/schemas/*.schema.json patří distribuci; .ai/repo/knowledge/kinds.yaml a schemas/ patří repozitáři; název deklarovaný oběma je chyba jmenující oba soubory. Allow-listy shellového nástroje se generují z týchž schémat. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/metadata/mod.rs | test/cases/76_capabilities_projections.sh | zaznamenané důkazy: nespuštěno |
| Každý generovaný artefakt deklaruje dokument, který promítá, kódování, ve kterém je zapsán, schéma, které jeho obsah splňuje, a svůj zdroj, a strukturovaný dokument se zapisuje v každém kódování, ve kterém je commitnut, z jedné hodnoty JSON, YAML a Markdown dokumentu jsou vykreslení jedné hodnoty, takže se nemohou rozcházet; každé nese hlavičku původu ve formě, kterou jeho kódování dovoluje; index celé sady, docs/generated/artifacts.json, je sám generovaný a čte jej zpět artifacts.list. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/generate.rs | test/cases/52_generated_artifact_typing.sh | zaznamenané důkazy: nespuštěno |
| Odevzdané projekce, dokument OpenAPI, reference schopností a povolené seznamy se znovu generují z registru a schémat a generate --check zastaralou odmítne Při regeneraci bajtově shodné, bez časových značek, bez absolutních cest; --check nic nezapisuje a skončí s kódem 10, přičemž jmenuje každý soubor, který se liší nebo chybí. Spouští to CI. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/generate.rs | test/cases/76_capabilities_projections.sh | zaznamenané důkazy: nespuštěno |
| Jeden sdílený server obsluhuje checkout: první majordomus mcp naváže HTTP na loopbacku se Swagger UI a MCP přes HTTP vedle své relace stdio a zaloguje URL, každý další klient tohoto checkoutu se k němu připojí a skončí, když odejde poslední klient Volba je jeden soubor leasu pod .ai/local/state/mcp/, vytvořený atomicky a odstraněný při ukončení; zastaralý lease se převezme; přemostěný klient, jehož server zanikne, převezme nebo se znovu připojí, aniž by si toho klient všiml. Testy crate v tests/mcp_shared.rs pokrývají stranu socketu; --standalone drží jeden proces na klienta. Checkout, nikoli repozitář - propojený worktree je vlastní checkout a volí si vlastní server (ADR 0035), což znamenalo, že změřeno 2026-09-11 běželo sedm živých serverů nad jedním repozitářem git. Slovo bylo zde do ADR 0044 chybné; spolupráci napříč repozitářem činí sesbíraná nástěnka mcp-peers, ne sdílený proces. |
docs/MCP.md | apps/majordomus-cli/src/lease.rs | test/cases/90_mcp_shared_server.sh | zaznamenané důkazy: nespuštěno |
| Nic, co klient zanechá, nezamkne jiného klienta ze sdíleného serveru; poškozený, prázdný, zastaralý nebo opuštěný zámek se převezme a pojmenuje, klient, který nemůže sdílet, je obsloužen samostatně s důvodem v logu a signál odstraní zámek dřív, než server zanikne Volba klasifikuje lease při každém pokusu a je časově omezená; commands/mcp.rs degraduje na samostatnou relaci, když nelze použít lease nebo server; SIGTERM, SIGINT a SIGHUP odpojí lease v handleru. Testy crate v tests/mcp_shared.rs dokazují každou cestu nad skutečnými procesy a případ 90 podstrčí poškozený lease za launcher. Doktrína je project.shared-server-resilience. |
docs/MCP.md | apps/majordomus-cli/src/lease.rs | apps/majordomus-cli/tests/mcp_shared.rs | zaznamenané důkazy: nespuštěno |
| Server, jehož zámek byl převzat, to říká na koncovém bodu, který sondují všichni čtenáři, odmítá přijmout nového klienta a hlásí, že to, co popisuje jeho health, je jiný proces; relace, které už měl, pokračují a skončí s nimi Samotné převzetí je správné, hlídač zastaralého spustitelného souboru udělal svou práci; bez vlastníka zůstaly jeho důsledky. Vystřídaný proces si ponechal svůj socket, svou nástěnku peerů i svou generaci vrstvy a na GET / odpovídal stejným name a repository_id jako držitel leasu, takže na něm prošel každý test živosti v systému. Změřeno 2026-09-10 - dva servery jednoho checkoutu, jeden lease a relace, jejíž prostředí nesla starší adresu a četla nástěnku s jedním peerem, zatímco sdílená nástěnka měla dva. GET / nyní nese leaseholder (lease::LEASEHOLDER_KEY, čte ho lease::probe, takže zapisovatel a čtenář se nemohou rozejít), nový initialize je odmítnut s 409 lease_lost a jménem launcheru a kontrola serveru v health.report varuje, že tento proces není serverem, který popisuje. Server příliš starý na to, aby na otázku odpověděl, probe záměrně přijme - jeho odmítnutí by převzalo živý server, a tak se stane, že jeden checkout má servery dva. Doktrína je project.shared-server-resilience. |
docs/MCP.md | apps/majordomus-cli/src/lease.rs | apps/majordomus-cli/tests/lease_lost.rs | zaznamenané důkazy: nespuštěno |
| Každý klient připojený k serveru checkoutu je peer pojmenovaný vlastním initialize a majordomus_peers vypíše každého pracovníka repozitáře — jeho vlastní nástěnku i nástěnku každého dalšího checkoutu, každý peer označený worktree, ve kterém pracuje — zatímco majordomus_announce sděluje ostatním, na čem pracuje a kterých cest se chystá dotknout Dvě schopnosti registru, peers.list (dotaz) a peers.announce (jediný příkaz), promítnuté jako každá jiná; každá nástěnka je pamětí jednoho procesu a s ním zaniká. peers.list sbírá - vyjmenuje checkouty, které git eviduje, přečte vlastní nástěnku z paměti a zeptá se serveru každého dalšího checkoutu na jeho vlastní nástěnku (checkouts=this, což drží sběr jen na jeden skok) a v boards a complete ohlásí, které checkouty pokryl a zda je dokázal přečíst všechny. Před ADR 0044 odpovídal nástěnkou jednoho checkoutu, zatímco bootstrap řekl každému workeru, že viděl repozitář; změřeno 2026-09-11, devět agentů napříč šedesáti worktrees četlo každý nástěnku, na které byl jen on sám. ID peera je pozice na jedné nástěnce a při opětovném připojení se přidělí znovu; checkout, který peer nese, je jeho trvalá polovina. Oznámení jsou informativní a zanikají s připojením; rozsah vynucuje záznam úlohy shellového nástroje, ne zde. |
docs/MCP.md | apps/majordomus-cli/src/peers.rs | test/cases/250_the_board_is_repository_wide.sh | zaznamenané důkazy: nespuštěno |
| Klient MCP otevřený v repozitáři spustí server sám a podle potřeby sestaví spustitelný program, přes konfigurace klientů v kořeni a bin/majordomus-mcp .mcp.json (Claude Code), .gemini/settings.json (Gemini CLI) a .codex/config.toml (Codex) pojmenovávají tentýž launcher, který nic nezapisuje na stdout a předává všechny argumenty příkazu majordomus mcp; build řídí MAJORDOMUS_BIN, MAJORDOMUS_BUILD_PROFILE a MAJORDOMUS_NO_BUILD. |
docs/MCP.md | bin/majordomus-mcp | test/cases/90_mcp_shared_server.sh | zaznamenané důkazy: nespuštěno |
| Klient, který spustí server MCP z checkoutu bez spustitelného programu nebo bez takového, který lze sestavit, je obsloužen nainstalovaným release a je mu to řečeno, místo aby byl odmítnut Jen `mcp` má fallback; každý jiný příkaz stále končí kódem 12. Fallback běží po buildu, který mohl uspět, nebo bez něj, když chybí cargo nebo je volného místa méně než práh, a na stderr uvádí release i důvod. Soubor uvnitř repozitáře a soubor, který neodpovídá na --version, se nikdy nepovažuje za nainstalovaný release. MAJORDOMUS_MCP_BUILD=1 vrací build přispěvateli. Relace z 2026-10-16, která začala jako jediný worker repozitáře (ADR 0156), začala právě zde, s kódem 12 při 4,5 GB volných proti prahu 5120 MB. |
docs/MCP.md | bin/majordomus-cli | test/cases/3177_a_client_always_gets_a_server.sh | zaznamenané důkazy: nespuštěno |
| Holé claude v dozorovaném repozitáři začíná promptem zahájení relace repozitáře jako první zprávou a běh s argumentem, mimo takový repozitář, s vypnutím nebo s promptem, který nelze vykreslit, zůstane přesně tak, jak byl Ověřeno v bash a zsh proti atrapám claude a majordomus; skutečný claude přijímá prompt jako poziční argument (claude --help). Obaluje se pouze Claude Code; Codex a Gemini se netvrdí, dokud nejsou ověřeny proti skutečnému nástroji. Instalátor soubor nenačítá (source), protože se nedotýká ničeho mimo svůj prefix. |
docs/MCP.md | share/shell/session-start.sh | test/cases/3221_a_bare_session_start_joins_the_cluster.sh | zaznamenané důkazy: nespuštěno |
| Tag s předběžnou částí se publikuje jako prerelease, zaznamená se na kanálu prereleasů a nikdy se nevyhodnotí jako stabilní release, takže nepřipnutý instalátor a uzel sledující stabilní verzi si ponechají nejvyšší stabilní verzi Drží se na třech místech, která se musí shodovat. scripts/release-record odvodí kanál ze tagu a odmítne stable u tagu s příponou; release.yml pro něj předává --prerelease --latest=false; Release::is_stable_candidate odmítne jakoukoli verzi s pre-release částí bez ohledu na to, co říká její záznam, a Release::findings hlásí chybné označení. Rozlišení a precedenci semver (alpha.2 před alpha.10, build metadata se ignorují) dokazují distribuční testy crate, které případ nespouští. Nalezeno auditem před v1.0.0-alpha.1, kdy by pipeline zveřejnila alpha jako stabilní release. |
docs/DISTRIBUTION.md | scripts/release-record | test/cases/3179_a_prerelease_is_never_published_as_stable.sh | zaznamenané důkazy: nespuštěno |
| URI majordomus:// se rozlišuje stejně přes čtení zdroje MCP, nástroj majordomus_get i HTTP routu objektu a majordomus://repository odpovídá na repository.info jako JSON dokument označený builtin Jedna funkce, objects::resolve, je rozlišení pro každou projekci; soubor vrstvy je odpovězen označený declarative, dotaz s expozicí zdroje označený builtin s odpovědí jako daty a textem zdroje vedle; neznámé URI je všude not found; registr odmítne dotaz čtený jako zdroj, jehož vstup cokoli vyžaduje. Testy crate v tests/objects.rs pokrývají každou větev na úrovni knihovny. |
docs/MCP.md | apps/majordomus-cli/src/capability/builtin/objects.rs | apps/majordomus-cli/tests/http_serve.rs | zaznamenané důkazy: nespuštěno |
| Každá kontrola, kterou musí Rust executable projít, je jeden skript, scripts/rust-check, a CI tento skript spouští při každé změně, která může zasáhnout crate Formát, lint s varováními jako chybami (veřejná položka bez dokumentace je jedním z nich), sady testů s příklady v dokumentaci, rustdoc s odmítnutými varováními, sestavení měření výkonu, vlastní validace registru, potvrzené projekce v synchronizaci, úplné pokrytí měření výkonu a pokrytí řádků nad potvrzeným minimem; --ci přidá kontrolu měření výkonu proti základní hodnotě platformy a pokrytí ponechá vlastní úloze, --integration spustí samotné kontroly registru pro změnu mimo crate. Úloha rust ve workflow spouští samotný skript v režimu, který zvolil plán, takže neexistuje druhý seznam, který by se rozešel v pořadí; případ čte skript, workflow a justfile a selže, když se neshodují; je-li přítomen toolchain, spouští i příklady v dokumentaci a sestavuje měření výkonu. |
.ai/repo/rules/project/rust-cli-evidence.v1.md | scripts/rust-check | test/cases/77_rust_evidence.sh | zaznamenané důkazy: nespuštěno |
| Pokrytí Rust crate se měří bez testovacího kódu ve jmenovateli, při každé změně, která může crate zasáhnout, a při každém pushi do master, a build selže pod hranicí ve scripts/rust-coverage-threshold nebo pod vlastní hranicí domény relací a kontinuity ve scripts/session-coverage-threshold cargo-llvm-cov přes všechny cíle, exportovaný jako JSON a následně zpracovaný tak, že tests/, benches/, examples/ i každá inline položka `#[cfg(test)]` opustí zlomek na obou stranách. --ignore-filename-regex druhé nezvládne, proto je to skript a ne přepínač. Dvě minima, každé jedno celé číslo v samostatném souboru, každé čtené CI, scripts/rust-check i just coverage a každé západka — pokrytí změřené při jejím nastavení, které smí růst a nikdy klesat; mez minima crate je FLOOR_BOUND ve scripts/ci/rust-command-check (pravidlo project.rust-command-tested-in-file) a případ 77 ji tam čte. Doména, kterou druhé měří, je deklarována ve scripts/session-coverage-domain a skript odmítne doménu jmenující soubor, který export nenese, takže její zúžení kvůli zvýšení čísla je viditelná úprava. Pravé pokrytí větví vyžaduje nightly toolchain; nahrazuje je pokrytí regionů a hlásí se pod tímto jménem. Úloha coverage běží, když plán zvolí kontrolu rust-coverage, kterou volí třídy rust a share v .ai/repo/ci/gates.yaml a každý úplný plán. |
.ai/repo/rules/project/rust-cli-evidence.v1.md | scripts/rust-coverage | test/cases/77_rust_evidence.sh | zaznamenané důkazy: nespuštěno |
| Cesty Rust executable, které se škálují s repozitářem, mají criterion benchmarky, které se sestaví při každém pushi, a každá spustitelná schopnost deklaruje svou politiku měření výkonu, vyžadovanou nebo prominutou z typovaného důvodu YAML subset a front matter, porovnávání glob vzorů, index, registr, dokument OpenAPI, jeden výpis MCP a jedno volání schopnosti (benches/projections.rs); router, bridge a sdílený server (benches/shared.rs). Čísla se hlásí, netvrdí se; žádný limit latence se neslibuje, dokud se nezměří na CI. Makro capability! nepřeloží spustitelnou schopnost bez případů měření výkonu, registr počítá povinné i prominuté a případ čte politiku každé spustitelné schopnosti zpět přes capabilities list. |
.ai/repo/rules/project/rust-cli-evidence.v1.md | apps/majordomus-cli/benches/projections.rs | test/cases/77_rust_evidence.sh | zaznamenané důkazy: nespuštěno |
| Schopnost Rust executable se deklaruje jednou a skládá se do svého modulu, kořen skládá moduly a registr odmítne schopnost mimo jmenný prostor jejího modulu capability!, module! a compose_modules! vytvářejí prosté hodnoty předávané builderu registru; přidání schopnosti do existujícího modulu se dotkne jen souboru onoho modulu a MCP, HTTP, OpenAPI, Swagger UI, CLI, cíle měření výkonu, cache i generovaná reference ho následují. Testy crate v tests/registry.rs drží invarianty, tests/projections.rs propagaci. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/capability/module.rs | apps/majordomus-cli/tests/registry.rs | zaznamenané důkazy: nespuštěno |
| Každá externě volatelná operace Rust executable je cílem benchmarku se jmenovatelem generovaným z registru a chybějící případ shodí strukturní kontrolu Každý povinný spustitelný soubor je cílem přímo i na každém transportu, který jeho expozice deklaruje, s případy, které poskytuje jeho vstupní typ; vlastní operace transportů jsou cíle deklarované jednou; prominutí jsou typovaná a nikdy se nepočítají. Runnery měří executor, skutečný loopback socket a skutečného potomka majordomus mcp; výsledky jsou majordomus/benchmark-result/v1; baseline je pro každou platformu pod .ai/repo/benchmarks/rust/ a politika jsou data. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/bench/coverage.rs | apps/majordomus-cli/tests/bench_units.rs | zaznamenané důkazy: nespuštěno |
| Po spuštění žádný požadavek MCP ani HTTP na spustitelný program v Rustu neprohledává repozitář, nesestavuje index ani registr, neodvozuje schéma ani nesestavuje projekci, což dokazuje perf.counters Čítače platné pro celý proces, každý zvyšovaný na jednom pojmenovaném místě a poskytovaný jako perf.counters přes každý transport; tests/hot_path.rs pošle stovky požadavků skutečnými transporty a vyžaduje, aby startovací čítače zůstaly beze změny; výpisy MCP a dokument OpenAPI se připravují jednou. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/perf.rs | test/cases/91_canonical_architecture.sh | zaznamenané důkazy: nespuštěno |
| Cachovaná schopnost Rust executable vrací stejnou hodnotu necachovaně, za studena i za tepla, zásah cache nespouští žádný handler, chyby a příkazy se nikdy necachují a klíč nese otisk registru Jeden exekutor pro každý transport; CachePolicy na deskriptoru; omezeno na schopnost; klíčem je kanonické id, vstup v kanonické podobě a otisk sha-256 obsahu repozitáře a deskriptorů. tests/executor.rs a proptest harness v tests/properties.rs procházejí každou cachovanou schopnost každým případem a generovanými vstupy. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/capability/executor.rs | apps/majordomus-cli/tests/executor.rs | zaznamenané důkazy: nespuštěno |
| Provider bootstrapy, které politika deklaruje (AGENTS.md, CLAUDE.md, GEMINI.md, ...), jsou cílem majordomus generate, vykreslené z politiky a šablon providerů bajt po bajtu tak, jak je vykresluje nástroj shell, a generate --check odmítne ručně upravený či zastaralý v CI Jeden renderer, dva vstupní body, které se shodují na každém razítku; politika je jediným vstupem (její hash a hash profilů je první hash razítka). Cíl mimo repozitář, poskytovatel bez šablony, token, který politika neumí vyplnit, a cíl always_loaded přesahující rozpočet jsou odmítnuty s důvodem a nic se nezapíše. Režim regionu ponechává hostitelský dokument mimo značky. apps/majordomus-cli/tests/providers_projection.rs pokrývá stranu fixture; CI spouští generate --check při každém pushi. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/providers.rs | test/cases/93_rust_provider_projections.sh | zaznamenané důkazy: nespuštěno |
| Stránka Registr webu se vykresluje ze site/data/registry/registry.json, datové sady, kterou majordomus generate site odvozuje z registru a indexu s jejich otisky, a generate --check zastaralou odmítne v CI Každý vestavěný deskriptor celý se souborem, v němž byl složen, každý modul s jeho id, každý objekt vrstvy bez jeho obsahu, každý druh se schématem, deklarované projekce poskytovatelů, příkazový řádek tak, jak jej deklaruje clap, nástroje a zdroje MCP, cesty HTTP, cíle měření výkonu, pokrytí, politika a přijaté základní hodnoty a otisky registru a indexu (majordomus-site-registry/v2); žádné vlastní časové značky, žádné absolutní cesty, žádný stav gitu. Adresář patří výhradně spustitelnému souboru v Rustu, shellový generátor webu vlastní site/data/generated/ celý, takže žádný adresář nemá dva zapisovatele. Kanonický objekt přidaný do vrstvy změní otisk a datovou sadu a bootstrapy nechá být; expozice odebraná z deskriptoru posune cesty a pokrytí a nic jiného; test sleduje každou mutaci přesně k projekci, které se týká. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/site.rs | apps/majordomus-cli/tests/projections.rs | zaznamenané důkazy: nespuštěno |
| Změna spouští kontroly, které její cesty mohou ovlivnit, podle jednoho modelu toho, co co ovlivňuje, a změna samotné pipeline nebo cesty, kterou model nezná, spouští všechny kontroly Kontroly, které běží vždy, jsou v každém plánu; změněná cesta vybírá kontroly každé třídy, které odpovídá, jako sjednocení; třída může eskalovat; kontrola přináší, co implikuje a co vyžaduje; plán je deterministický a pro každou kontrolu říká, proč běžela či neběžela. Workflow čte výstupy plánu a nenese vlastní seznam cest; test/cases/26_ci_wiring.sh dokazuje, že úloha každé kontroly existuje, je podmíněna plánem a verdikt ji potřebuje. |
.ai/repo/ci/gates.yaml | scripts/ci-plan | test/cases/94_ci_plan.sh | zaznamenané důkazy: nespuštěno |
| Stav verdiktu je zelený, jen když plánování uspělo a každá kontrola vybraná plánem proběhla v úloze, která uspěla; selhaná nebo zrušená úloha, vybraná kontrola, jejíž úloha byla přeskočena, nebo plán, který nevybral nic, je červený Úloha verdict se spouští vždy, takže stav nikdy nezůstane viset kvůli úloze, kterou plán přeskočil, a zapisuje tabulku každé kontroly s výsledkem její úlohy a důvodem, proč byla či nebyla naplánována. Případ ji pouští s fixture plány a kontexty needs přes každou červenou podmínku. Toto tvrzení znělo do 2026-09-11 "jediný stav, který pravidlo větve vyžaduje", což předpokládalo pravidlo větve, které neexistuje - viz ci-verdict-is-required níže. To, co scripts/ci/verdict počítá, platilo vždy; to, co na něm podmiňovalo merge, ne. |
docs/CI.md | scripts/ci/verdict | test/cases/94_ci_plan.sh | zaznamenané důkazy: nespuštěno |
| Behaviorální sada spouští omezený počet případů najednou se sémantikou sériového běhu, případ zapisující do checkoutu se deklaruje jako exkluzivní a běží sám a paralelní fáze selže s uvedením cest, když se checkout pod ní změnil MJ_TEST_JOBS omezuje pool (xargs -P, nikdy holý ampersand); každý případ má vlastní log; verdikty se vykreslují v pořadí jmen a celý log selhávajícího případu předchází jeho řádku; filtr, který nic nezachytí, a prázdný adresář případů jsou chyby použití v obou režimech; MJ_TEST_REPORT zapisuje pro souhrn jeden řádek na případ; test/lib.sh odmítne případ, který nestojí ve fixture, jenž pro něj vytvořilo test/run.sh, takže ručně spuštěný případ nemůže zapsat svou fixture do checkoutu. test/cases/26_ci_wiring.sh dokazuje sémantiku selhání v obou režimech na soukromém harnessu. |
docs/CI.md | test/run.sh | test/cases/94_ci_plan.sh | zaznamenané důkazy: nespuštěno |
| Spustitelný program v Rustu, který sestavila kontrola rust, se publikuje jako artefakt se svým původem a každý případ v Rustu spouští program, který jmenuje MAJORDOMUS_BIN, místo aby si nějaký sestavoval scripts/rust-check --artifact DIR zkopíruje debug spustitelný soubor vedle majordomus-cli.json, který jmenuje commit, target triple, toolchain a digest Cargo.lock; workflow jej nahraje jako majordomus-cli-<target>. rust_bin v test/lib.sh předá případu MAJORDOMUS_BIN, je-li nastaveno, odmítne soubor, který není spustitelný, při nenastavení jednou sestaví cargem a požádá případ o přeskočení, není-li ani jedno; launcher bin/majordomus-mcp respektuje stejnou proměnnou. |
docs/CI.md | scripts/rust-check | test/cases/401_the_rust_artifact_carries_its_provenance.sh | zaznamenané důkazy: nespuštěno |
| Publikace je podmíněna vším, co může učinit publikovaný web chybným, a na nic jiného nečeká; kontroly, které rozhodují, zda se změna smí mergovat, běží vedle ní na stejném commitu, ne před ní Publikační cesta dokazuje, že commitnutá odvozená data jsou aktuální podle hashe vstupu, staví z nich web, spouští nad výstupem každou statickou kontrolu a pushuje gh-pages, v jedné úloze spouštěné přímo pushem na master na cestách odvozených z modelu kontrol; předběhnuté běhy se ruší; sada, kontroly crate, pokrytí, sada na macOS, kontrola měření výkonu a sonda prohlížeče běží ve validate.yml na stejném commitu a podmiňují merge. Případ dokazuje spouštěč, odvozené cesty, rušení, oprávnění, že na cestě není žádná těžká kontrola a žádná neopustila validate.yml, a že build, který přeskočí generování, je byte po bytu totožný s tím, který ho nepřeskočí. |
docs/GITHUB_PAGES_PERFORMANCE.md | .github/workflows/pages.yml | test/cases/97_pages_fast_path.sh | zaznamenané důkazy: nespuštěno |
| Dokument OpenAPI se odvozuje, tagy jsou moduly, příklady jsou případy benchmarku, odpovědi jsou stavy routeru podle druhu, próza je jeden text sdílený všemi projekcemi a API reference webu se vykresluje z commitnutého dokumentu Tagy z registry.modules(), příklady z BenchmarkCases schopností vůči indexu repozitáře, odpovědi z jedné stavové tabulky podle druhu, info z about.rs a manifestu crate; benches/routes.rs měří čas každé trasy týmiž případy; web promítá commitnutý dokument, vykresluje /docs/api/ a servíruje /openapi.json surový a site-check odmítne build bez nich. |
docs/CAPABILITIES.md | apps/majordomus-cli/src/http/openapi.rs | test/cases/92_openapi_reference.sh | zaznamenané důkazy: nespuštěno |
| To, co pracovník z repozitáře čte, je deklarováno jednou v .ai/repo/scope.yaml, vyloučení má přednost před zahrnutím a Rust executable nic mimo něj neobjevuje, neindexuje ani neservíruje Deklarace je typovaná a validovaná schématem (share/schemas/majordomus/scope/scope.v1.schema.json; z něj se pro shellový nástroj generuje share/allow/scope.txt); repozitář, který žádnou nedeklaruje, se čte pod výchozím nastavením distribuce a říká to; nalezený soubor mimo rozsah je diagnostika out_of_scope jmenující pravidlo; sledované tajemství je varování tracked_secret; repository.scope a repository.scope_classify se promítají do MCP, HTTP a `majordomus scope`. Testy crate v tests/scope.rs pokrývají každou větev na úrovni knihovny, socketu i procesu. Doktrína je project.scope-is-declared. |
docs/SCOPE.md | apps/majordomus-cli/src/scope.rs | test/cases/93_scope_policy.sh | zaznamenané důkazy: nespuštěno |
| Každý veřejný příkaz je pojmenován a spouštěn aktivním případem užití, zaručené tvrzení nebo nástroj MCP bez něj je pojmenovaná mezera a politika říká, které mezery shodí doctor, check a finish Souhrn se počítá z registru příkazů, docs/CLAIMS.yaml, registru spustitelného souboru a případů užití pod .ai/repo/use-cases/; koncept se nikdy nezapočítává. Doktrína je majordomus.use-case-coverage, řízená politikou use_cases.coverage a klíčem finish use_cases_covered. |
docs/USE_CASES.md | lib/usecase.sh | test/cases/94_use_cases.sh | zaznamenané důkazy: nespuštěno |
| Scénář případu užití se provede proti skutečnému nástroji v jednorázovém repozitáři, ověří se návratový kód a výstup každého kroku a web ukazuje normalizované důkazy majordomus usecase run zapíše .ai/local/evidence/use-cases/<id>.json; scripts/generate-site-data spouští stejné scénáře a vkládá důkazy do site/data/generated/catalogue.json, takže --check dokazuje, že stránky ukazují to, co nástroj udělal. Cesty, časové značky, id, hashe a doby trvání jsou normalizovány; nic z chování ne. |
docs/USE_CASES.md | lib/usecase.sh | test/cases/94_use_cases.sh | zaznamenané důkazy: nespuštěno |
| Ze souborů, kterých se změna dotkla, nástroj pojmenuje dotčené příkazy, pravidla, případy užití, scénáře a behaviorální případy a vygeneruje návrh pro schopnost, kterou žádný případ užití nepokrývá usecase impact mapuje cesty přes docs/RESPONSIBILITIES.yaml, dispatch tabulku, identity pravidel a fixtures scénářů; usecase scaffold zapisuje návrhy z registru, fixture příkazu a tvrzení, nikdy však záruku. |
docs/USE_CASES.md | lib/usecase.sh | test/cases/94_use_cases.sh | zaznamenané důkazy: nespuštěno |
| Živý scénář smí spouštět jen příkazy, které share/commands.yaml deklaruje jako read-only, nepojmenovává žádnou přípravu a závazek tvrdí jen tam, kde nějaký existuje; každý jiný tvar usecase validate odmítne s exit 10 Třída se čte ze share/commands.yaml, deklarace, ze které už pocházejí referenční sémantiky, takže bezpečnost je vlastností deklarace, ne pečlivosti autora (ADR 38). Krok se závazkem je ve scénáři s fixture odmítnut, protože jednorázový repozitář nic nedluží, a krok, který zároveň spouští příkaz a ověřuje závazek, je odmítnut jako ani jedno. |
docs/USE_CASES.md | lib/usecase.sh | test/cases/359_live_scenarios.sh | zaznamenané důkazy: nespuštěno |
| Živý scénář nevybere holé spuštění usecase, jeho důkazy se zapisují do ignorované lokální poloviny a nikdy nepovýší příkaz na pokrytý; nesplněný závazek se hlásí jako nenaplněný, nikdy jako selhání Živý výsledek popisuje jeden strom na jednom stroji v jedné minutě, proto se zapisuje do .ai/local/evidence/live/<id>.json, a ne vedle commitnutých fixture důkazů, a pokrytí jej počítá jako jmenování příkazu, nikdy jako jeho pokrytí. Běh odděluje dva verdikty, protože selhávající fixture scénář je vada nástroje, zatímco nesplněný závazek je neprovedená práce (ADR 38). |
docs/USE_CASES.md | lib/usecase.sh | test/cases/359_live_scenarios.sh | zaznamenané důkazy: nespuštěno |
| Web se nasazuje jedním skriptem, scripts/site-deploy, z terminálu nebo z publikačního workflow; odmítne špinavý strom, commit, který master neobsahuje, a build, který není z HEAD, pushne site/public do gh-pages s uvedením zdrojového commitu a nepushne nic, když je výstup beze změny Případ provede celou cestu proti lokálnímu bare remote, bez sítě; patička každé stránky jmenuje commit, takže nasazení lze ověřit pomocí curl. Workflow volá tentýž skript s --skip-build po své kontrole. Nasměrování GitHub Pages na větev je jednorázové --configure-pages. Ruční postup je .ai/repo/skills/deploy-site/SKILL.md. |
docs/GITHUB_PAGES_ARCHITECTURE.md | scripts/site-deploy | test/cases/96_site_deploy.sh | zaznamenané důkazy: nespuštěno |
| Commit, jehož odvozená data zaostávají za kanonickými vstupy, se odmítne dřív, než vznikne, a repozitář, který tuto kontrolu odpojí, je selháním doctor Generátor zaznamenává hash vstupu do site/data/generated/source.json, takže `pages current` odpoví na otázku "musí se to znovu vygenerovat?" za pětinu sekundy, aniž cokoli generuje, díky čemuž může běžet při každém commitu, ne jen v CI. V seznamu vynucování politiky je deklarována jako derived-current, zapojena přes git-hook:pre-commit a doctor toto zapojení ověřuje stejně jako ostatní – takže kontrola odmítne zastaralý commit a doktrína odmítne repozitář, který kontrolu odstraní. Dříve se zastaralost projevila až po merge a ten, koho zastavila, nikdy nebyl tím, kdo ji způsobil. |
docs/GITHUB_PAGES_ARCHITECTURE.md | scripts/pages | test/cases/56_derived_current_gate.sh | zaznamenané důkazy: nespuštěno |
| Stránky webu o spustitelném programu v Rustu (jedna na modul, jedna na schopnost, příkazový řádek, rozhraní MCP, měření výkonu, vlastní vyprávění programu) se odvozují z manifestu registru a datové sady registru, kterou program generuje, nic nejmenuje schopnost ručně a schopnost, která do registru přibude nebo z něj odejde, získá nebo ztratí svou stránku, položky indexu a odkazy samotnými generátory scripts/generate-site-data čte docs/generated/registry.json - projekci čistě z kódu, takže skrz index neběží žádný cyklus - kvůli id, která mění na routes, a zapisuje site/data/generated/executable.json (routes, odkazy na moduly a API, zdroj na GitHubu, tvrzení připojená ke každému povrchu podle cesty jejich implementace) a obsahové stuby pod site/content/registry/; šablony čtou všechny ostatní fakty ze site/data/registry/registry.json. Manifest jmenující modul, který registr nedrží, zdrojový soubor, který strom nemá, nebo jiné schéma, se odmítne a nic se nepublikuje. scripts/site-check dokazuje vykreslenou stranu: každý modul a schopnost má stránku a žádná stránka není bez své položky, stránky CLI, MCP a měření výkonu vykreslují každý příkaz, nástroj, cíl a baseline, každá stránka schopnosti odkazuje na svůj modul a svou operaci a žádná šablona, generátor ani navigační soubor nejmenuje schopnost. Manifest patří mezi vstupy webu, takže jeho hash se mění spolu s kódem spustitelného souboru. |
docs/GITHUB_PAGES_ARCHITECTURE.md | scripts/lib/executable-site.jq | test/cases/95_executable_reference.sh | zaznamenané důkazy: nespuštěno |
| Každý odevzdaný odvozený artefakt repozitáře se znovu generuje jedním příkazem v pořadí závislostí a kontroluje jedním příkazem jen pro čtení, který jmenuje každý zastaralý artefakt, druhá regenerace na čistém stromu nic nezmění a žádný odvozený soubor nezaznamenává commit, do kterého přistává scripts/derive spouští majordomus generate (projekce jen z kódu), scripts/generate-site-data (data a obsah webu a odvozené dokumenty, čtoucí manifest registru a dokument OpenAPI) a znovu majordomus generate (datovou sadu webu a matici měření výkonu nad indexem, k němuž se dokumenty připojily); žádná fáze nečte vlastní výstup. scripts/derive-check skládá generate --check a generate-site-data --check a skončí s kódem 10 s oběma zprávami. Commit, z něhož byla stránka sestavena, je fakt sestavení (site/data/build.json, servírovaný na /build.json, nikdy necommitovaný), takže source.json jej už nenese a generátor je na čistém stromu idempotentní. just derive, just derive-check a workflow Pages volají skripty; just test spouští kontrolu. |
docs/GITHUB_PAGES_ARCHITECTURE.md | scripts/derive | test/cases/400_derivation_is_one_graph.sh | zaznamenané důkazy: nespuštěno |
| Dovednost je jeden adresář pod sekcí dovedností vrstvy obsahující SKILL.md, objevený zdrojovou třídou `skill`, kterou čtou shellový nástroj i spustitelný program v Rustu, takže přidání souboru je celá registrace a katalog, příkaz, doctor, MCP i web se z něj odvozují share/kinds.yaml deklaruje druh, share/schemas/majordomus/skill/skill.v1.schema.json jeho kontrakt a zdrojové třídy skill a skill_example v .ai/repo/knowledge/sources.yaml určují, které soubory ho nesou. Nic jiného dovednost nejmenuje. lib/skills.sh z tohoto zjišťování odvozuje jediný katalog pro `skills list|show|check`, validátor doktríny a scripts/generate-site-data; index v Rustu servíruje tytéž soubory jako zdroje majordomus://skill/<id> přes majordomus_list a majordomus_get, bez jakéhokoli kódu, který by ten druh znal. Případ dovednost přidá, rozbije, přejmenuje a odstraní a sleduje, jak všechny povrchy následují. |
docs/SCHEMAS.md | lib/skills.sh | test/cases/95_skills.sh | zaznamenané důkazy: nespuštěno |
| Úloha, která deklaruje závazky, dosáhne výsledku completed, jen když má každý z nich proti sobě zaznamenané důkazy, a důkazy pořízené nad soubory, které se od té doby změnily, nebo na commitu, který branch od té doby opustila, už nic nesplňují Slovník závazků je share/obligations.yaml, takže token se přidává tam, ne v shellu. Důkazem je řádek ledgeru task.evidence nesoucí hash sledovaných souborů, které závazek pojmenovává; validátor hash přepočítá a při rozdílu uvede obě hodnoty, stejně jako to už dělá kontrola aktuálnosti webu. Závazek, jehož fakt je vzdálený, je místo toho vázán na commit, ve kterém byl převzat, a posuzuje se pomocí mj_git_label, ne pátého slovníku zastaralosti. Výsledek jiný než completed není nikdy odmítnut kvůli tomu, že něco dluží. |
docs/CLI.md | lib/evidence.sh | test/cases/103_obligations.sh | zaznamenané důkazy: nespuštěno |
| Závazek, jehož fakt nástroj dokáže zjistit, se ustavuje živě, ne zaznamenáním — čistý strom, vzdáleně sledovaná ref dosahující HEAD, trunk, který jej dosahuje, publikovaný web, který jej servíruje — a ručně zaznamenaný řádek jej ani nesplní, ani nezachrání share/obligations.yaml dává každému tokenu established_by a jedno z hodnoty `none` ho zavazuje říct v `unestablished`, proč to zde nic nemůže určit. commit, push a target se určují z gitu bez fetche, takže zastaralý tracking ref může říct jen "ještě ne" a nikdy "ano"; pages se určuje pomocí scripts/pages verify s --timeout 0, tedy jediným sondováním kontroly publikace, kterou workflow Pages už spouští a která nyní končí kódem 12 místo 10, když web nikdy neodpověděl - nedosažitelný a nepublikovaný jsou různé nálezy. Takto určený fakt se bere na HEAD, což je `exact` z mj_git_label; ostatní tři štítky si na záložní cestě zachovávají svůj význam a deploy a verify zůstávají zaznamenávány ručně, protože nasazení je fakt o stroji, s nímž tento repozitář nikdy nekomunikuje. |
docs/CLI.md | lib/evidence.sh | test/cases/103_obligations.sh | zaznamenané důkazy: nespuštěno |
| Každá dovednost se validuje proti povolenému seznamu generovanému z jejího schématu, jejího adresáře, jejích sekcí a jejích referencí, porušení jmenuje soubor a každý důvod a repozitář bez dovedností se hlásí, ne propouští `skills check` a doktrína majordomus.skill-integrity (spouštěná příkazy doctor a watch) provádějí jedno vyšetření – neznámé klíče, verze schématu, celočíselná verze, uzavřená množina stavů, id shodné s adresářem, neprázdné sekce Purpose, Procedure a Output, duplicitní id, popisy, které dvě dovednosti nerozliší, související id, která se dají vyřešit, příklady s nadpisem – a vypíšou počty toho, co prozkoumaly. Generátor webu odmítne sestavit web z dovednosti, která neprojde validací. |
docs/CLI.md | lib/skills.sh | test/cases/95_skills.sh | zaznamenané důkazy: nespuštěno |
| Sekce dovedností webu se vykresluje z katalogu dovedností, jedna stránka na dovednost nese její vlastní tělo a příklady a odstraněná nebo přejmenovaná dovednost nezanechá žádnou stránku, položku ani odkaz site/data/generated/skills.json a site/content/skills/ zapisuje generátor z katalogu lib/skills.sh, adresář s obsahem se při každém běhu nahradí celý; generate-site-data --check skončí s kódem 10, když se dovednost změnila nebo se projekce upravila ručně, a CI tuto kontrolu spouští dřív, než se web sestaví. |
docs/GITHUB_PAGES_ARCHITECTURE.md | scripts/generate-site-data | test/cases/95_skills.sh | zaznamenané důkazy: nespuštěno |
| Provozní okamžik je jeden soubor pod vrstvou, objevený, ne registrovaný, a odpovídá na něj příkazový řádek, HTTP API, dokument OpenAPI, MCP, odvozený graf i web, aniž by se cokoli jiného měnilo Odstranění souboru jej odstraní ze všech, což je přesně to, na čem by skrytý registr selhal. |
docs/WHY.md | apps/majordomus-cli/src/why.rs | apps/majordomus-cli/tests/why.rs | zaznamenané důkazy: nespuštěno |
| Každý odkaz, který moment činí, se rozliší proti věci, kterou pojmenovává, a ten, který se nerozliší, je chyba nesoucí nejbližšího kandidáta Publika, oblasti a související okamžiky proti katalogu; příkazy, schopnosti, tvrzení, pravidla a případy užití proti jejich vlastním registrům. |
docs/WHY.md | apps/majordomus-cli/src/why.rs | apps/majordomus-cli/tests/why.rs | zaznamenané důkazy: nespuštěno |
| Diagnóza vlastních příznaků čtenáře je deterministické počítání nad metadaty katalogu a každé doporučení jmenuje okamžiky, které k němu vedly Žádné vážení ani procenta; dotazník na webu a `majordomus why diagnose` provádějí stejnou aritmetiku nad stejnými daty. |
docs/WHY.md | apps/majordomus-cli/src/why.rs | apps/majordomus-cli/tests/why.rs | zaznamenané důkazy: nespuštěno |
| Uzavřená epizoda provádění je sdílený objekt vrstvy, zapsaný nástrojem z gitu a ledgeru, validní proti kontraktu, který nepřipouští konverzaci ani absolutní cestu, a objevovaný, nikoli registrovaný Záznam leží v sekci sessions manifestu. Každé pole je odvozené - časy z hodin, hlavy a commity z gitu, seznamy odkazů z událostí účetní knihy pro danou epizodu - a jedinou ručně psanou částí je tělo. Repozitář je pojmenován svým remote a pracovní kopie hashem, takže resolver rozliší záznamy jednoho checkoutu od druhého bez prozrazení cesty. Objevuje je jedna třída zdrojů; index, MCP, objektové cesty, graf i web ji následují. |
docs/SCHEMAS.md | lib/session.sh | test/cases/63_session_records.sh | zaznamenané důkazy: nespuštěno |
| Hák poskytovatele otevře epizodu pod modelem a předá pracovníkovi, co po sobě zanechal předchozí, zaznamená, co se kompakcí chystá zahodit, a uzavře epizodu záznamem pokračování vedle její obálky Vlastní události poskytovatele SessionStart, PreCompact a SessionEnd vymezují hranici a řídí životní cyklus; každá je idempotentní, protože jsou to i události, a doctor ověří zapojení tím, že prožene payload koncovým shimem s vypnutou mutací. Událost start zapíše briefing z politiky na stdout, čímž záznam o pokračování dorazí k pracovníkovi, který o něj nežádal; zbylé dvě nezapisují nic, protože se spouštějí uvnitř již probíhajícího tahu. Pracovní kontext, který každé otevření zmrazí, je lokální, jen se k němu připisuje, nepřepisuje se, a je odmítnut, pokud by obsahoval konverzaci. |
docs/DOCTRINE.md | lib/session_context.sh | test/cases/54_session_lifecycle_hooks.sh | zaznamenané důkazy: nespuštěno |
| Subsystém relací umí číst sám sebe: každou otevřenou epizodu úložiště, nejen tu, kterou sleduje ukazatel, epizody, které se už nedokážou samy uzavřít, commit, o kterém odpovídá obsluhující proces, i to, co deklaruje adaptér každého provideru continuity.state odpovídá na otázku pracovníka o jedné epizodě, což je správné pro briefing, ale slepé k ostatním oknům otevřeným na stejném worktree, protože state/session-current.yaml je symlink, který přesměruje nejnovější událost start. Pět schopností životního cyklu místo toho čte úložiště, ledger a index, každé postavení určí z toho, co repozitář dokáže pozorovat, a ke každému nálezu přiloží nápravu. Nikdy nezapisují, neposuzují žádné prahy – věk hlásí session.freshness a continuity.state – a nedeklarují žádný příkazový řádek, protože čtou .ai/local/ a jsou poskytovány, ne distribuovány. Stránka Continuity v Cockpitu je jejich projekcí a nemá vlastní model relace. |
docs/CONTINUITY.md | apps/majordomus-cli/src/capability/builtin/lifecycle.rs | test/cases/171_session_observability.sh | zaznamenané důkazy: nespuštěno |
| Klient bez provider hooků dostane epizodu provádění z připojení MCP, po pádu naváže na vlastní a nikdy se netvrdí, že byl zachycen jeho prompt Epizoda se otevírá na episodes.attach a nikdy na initialize, takže klient, který vrstvu jen čte, nezanechá záznam; je klíčována vnější identitou, kterou klient dodá, a nikdy id peera, které se přiděluje pro každé spojení; každá zpráva, kterou klient pošle, je jeho heartbeat; ztráta spojení epizodu odpojí, ne uzavře, a opětovné připojení pod toutéž identitou pokračuje ve stejné epizodě. Nic z toho nezapisuje záznam relace - nástěnka spouští `capture session --provider generic`, tentýž příkaz, který spouští shim hooku poskytovatele, a hlásí, co řekl. Zachycení promptu je pro spojení deklarováno jako nemožné a nepokouší se o ně: serveru MCP se předávají volání nástrojů, nikdy prompt, který je vyvolal. ADR 0103. |
docs/MCP.md | apps/majordomus-cli/src/episodes.rs | test/cases/200_generic_mcp_episode.sh | zaznamenané důkazy: nespuštěno |
| Co každý poskytovatel dokáže ohledně životního cyklu relace a zachytávání promptů, je jedna deklarace s citací u každé buňky, každé rozhraní ji promítá a žádný poskytovatel, kterého deklarace jmenuje, nezůstane bez hlášení share/providers.yaml nese u každého poskytovatele blok offers - episode (hooks, connection, none), prompts (hook, none) a citaci, ze které byl každý ověřen; slovo mimo kterýkoli slovník shodí čtení souboru, místo aby se degradovalo na none. share::ProviderDeclaration a product::ProductProvider jej nesou a každý povrch je projekce. `capture status` jej spojuje se stromem a hlásí dva fakty na aspekt, schopnost dodavatele a stav tohoto checkoutu, nad sjednocením deklarovaných poskytovatelů a tabulek adaptérů; `unsupported` je vyhrazeno poskytovateli, který věc neumí, a `unadapted` pojmenovává mezeru v této distribuci. scripts/provider-evidence-check je kontrola a případ ji drží u jejího vlastního negativu. ADR 0103, pravidlo project.a-provider-capability-cites-its-evidence. |
docs/CONCEPTS.md | share/providers.yaml | test/cases/200_generic_mcp_episode.sh | zaznamenané důkazy: nespuštěno |
| Architektonické rozhodnutí je jeden soubor v sekci adrs vrstvy, validovaný proti kontraktu rozhodnutí, s identitou, o kterou se nehlásí nic jiného, s reciprokým nahrazením a s rozřešením každého odkazu, který činí share/kinds.yaml deklaruje druh, share/schemas/majordomus/adr/adr.v1.schema.json jeho kontrakt (share/allow/adr.txt se z něj generuje) a třída zdrojů adr v .ai/repo/knowledge/sources.yaml říká, které soubory jej nesou; nic jiného rozhodnutí neregistruje. lib/adr.sh odvozuje z tohoto objevování jeden katalog pro `adr list|show|check` a pro mj_validate_adr, validátor majordomus.adr-integrity spouštěný z doctoru a watch. Případ procvičuje duplicitní identity, neznámý stav, verzi schématu, kterou nic nečte, jednostranné nahrazení, nahrazený záznam bez náhrady a chybějící sekci těla. |
docs/SCHEMAS.md | lib/adr.sh | test/cases/99_adr.sh | zaznamenané důkazy: nespuštěno |
| Rozhodnutí uvádí, co uvedlo v platnost, jako typované odkazy, z nichž každý je validován, a opačný směr — čím bylo pravidlo, dokument, implementace či případ rozhodnuto — se čte z grafu znalostí, místo aby se zapisoval podruhé Dopředná hrana je `related` v front matter rozhodnutí – rule:<id>, claim:<id>, file:<path>, test:<path>. Validace odmítne pravidlo, které efektivní sada nemá, tvrzení, které matice nemá, a cestu, kterou repozitář neobsahuje. Extraktor z každého udělá hranu grafu (declares, supports, references, tested_by), jejíž původ je klíč front matter, který ji vyslovil, takže `knowledge edges` odpovídá v obou směrech z jednoho autorského faktu. |
docs/SCHEMAS.md | lib/adr.sh | test/cases/99_adr.sh | zaznamenané důkazy: nespuštěno |
| majordomus adr propose zapíše rozhodnutí se stavem proposed a odmítne zapsat jakýkoli jiný stav, přidělí jeho identitu pod zámkem, aby se souběžní pracovníci nikdy nesrazili, a zaznamená, z čeho bylo rozhodnutí odvozeno Přijetí je úkon člověka - nástroj, který umí zapsat `accepted`, mění vlastní odvození v pravdu repozitáře a pozdější čtenář nepozná, které z toho je které, proto propose pro to nemá žádný příznak a extrahovaný záznam, který si je nárokuje, je nález. Extrahovaný záznam musí jmenovat své důkazy v provenance.derived_from, jehož reference jsou typované a reference na soubory a testy se musí přeložit; může být stále nahrazen, protože to je něco, co mu udělal pozdější záznam. Identita se přiděluje pod zámkem nad adresářem sekce a případ to dokazuje skutečnými souběžnými procesy, protože tento repozitář vydal dvě 0005 a dvě 0007, než to cokoli kontrolovalo. |
docs/SCHEMAS.md | lib/adr.sh | test/cases/99_adr.sh | zaznamenané důkazy: nespuštěno |
| Každý příkaz příkazové řádky Rust executable má shrnutí, nápovědu ke každému argumentu a tam, kde se spouští, alespoň jeden příklad; kořen má dlouhý popis a každý příklad ukázaný čtenáři se spouští proti sestavenému executable Dokumentace a příklady jsou deklarovány vedle deklarace clap jako typovaný Rust; příklad je vektor argumentů a příkazový řádek, který čtenář vidí, se z něj skládá. capabilities validate skončí s kódem 10 a pojmenuje každé porušení s příkazem, souborem a pravidlem; sada zparsuje každý zdokumentovaný vektor kanonickým parserem a spustí každý příklad proti zkompilovanému binárnímu souboru v jednorázovém repozitáři, dva dlouho běžící příkazy jako omezené sondy. Příklad, který sada záměrně nespouští, nese svůj důvod a ukazuje ho všude, kde se příklad zobrazuje. |
.ai/repo/rules/project/rust-cli-evidence.v1.md | apps/majordomus-cli/src/cli.rs | apps/majordomus-cli/tests/cli_examples.rs | zaznamenané důkazy: nespuštěno |
| Každý webový povrch je deklarován jednou u svého producenta a rozřešen do jediné topologie, z níž se promítá router, vstupní stránka i strojově čitelný index Povrch je mount, producent, druh, kategorie, viditelnost a původ každého z nich; cesty, na které spustitelný soubor odpovídá, pocházejí z již existujících deklarací schopností, generovaný adresář se deklaruje vedle svého výstupu a web aplikace se čte z konfigurace generátoru webu. Žádný centrální seznam neexistuje. Případ se stránky i indexu ptá nezávisle a vyžaduje stejnou množinu veřejných mountů, takže ručně do stránky zapsaný odkaz jím neprojde. |
.ai/repo/adrs/0013-every-web-surface-is-discovered-from-its-producer-resolved-o.md | apps/majordomus-cli/src/web/model.rs | test/cases/89_web_surface.sh | zaznamenané důkazy: nespuštěno |
| /docs servíruje dokumentaci tohoto repozitáře a /swagger servíruje Swagger UI a ani jedno nesmí zabrat mount druhého Swagger UI držel /docs, dokud nedorazila dokumentace, a ta chtěla jméno, které už jí bylo dáno. Případ ověřuje mounty jako data dřív než jako cesty, odmítne producenta Swaggeru na /docs a dokazuje, že mount dokumentace po svém sestavení nepohltí /swagger ani /openapi.json. Nesestavená dokumentace odpoví 503 a jmenuje příkaz, který ji sestaví, místo prohlížeče, který tam dříve odpovídal. |
.ai/repo/rules/project/web-surface-declared-once.v1.md | apps/majordomus-cli/src/web/discover.rs | test/cases/89_web_surface.sh | zaznamenané důkazy: nespuštěno |
| Rustdoc crate je webové rozhraní na /rustdoc deklarované objevením z crate, přítomné v topologii, jeho odevzdané projekci i na domovské stránce, ať už jeho producent běžel, nebo ne, a běžící server odpovídá na /rustdoc/ ze stromu, který producent zapsal Povrch je deklarován z crate tak, jak je poskytovaná dokumentace deklarována z konfigurace webu, takže nic na něm nezávisí na tom, zda ho některý checkout sestavil; built_from pochází ze surface.json producenta a v docs/generated/web.json chybí, protože ten se musí v každém klonu číst stejně. Stranu Rustu tvoří testy web::discover. ADR 0086 rozhoduje o mountu a o tom, proč není pod /docs. |
docs/RUSTDOC.md | apps/majordomus-cli/src/web/discover.rs | test/cases/488_rustdoc_discoverable.sh | zaznamenané důkazy: nespuštěno |
| Build webu složí každý publikovaný statický povrch do svého výstupu na jeho přípojném bodě, načtený z commitnuté topologie bez ručně pojmenovaného povrchu, a odmítne build s uvedením producenta, pokud artefakt publikovaného povrchu chybí Seznam je docs/generated/web.json, čtený přes mj_web_composed v lib/common.sh, na který se ptá i každá kontrola, která musí odlišit stránky webu od složeného povrchu. Přípojný bod, který web sám už vyplňuje, se odmítne jako druhý vlastník jedné cesty, místo aby se přepsal. Skládání běží po Zole a po přístupnostním průchodu webu, takže normalizace webu se stránek jiného producenta nikdy nedotkne. |
docs/RUSTDOC.md | scripts/site-build | test/cases/486_rustdoc_composition.sh | zaznamenané důkazy: nespuštěno |
| Rustdoc crate se publikuje na /rustdoc spolu s webem, sestavený z commitu, který web uvádí, a nikdy se necommituje Případ nasadí složený web do lokálního bare remote, bez sítě, a publikovanou větev přečte zpět. Soubor /build.json webu zaznamenává každý složený povrch s commitem, který deklaroval jeho producent, takže commit, ze kterého byla reference sestavena, je zvenčí čitelný vedle commitu, ze kterého byl sestaven web. Strom vytváří v CI úloha rustdoc workflow pro pages pomocí .github/actions/rustdoc, tedy akce, kterou používá i workflow pro validaci. |
docs/RUSTDOC.md | scripts/site-deploy | test/cases/489_rustdoc_deploy.sh | zaznamenané důkazy: nespuštěno |
| Každá položka, kterou crate exportuje, má svou stránku rustdoc na routě odvozené z její cesty a druhu, žádná stránka položky neexistuje bez své položky a modul přidaný do crate se stane povinnou stránkou bez úpravy jakéhokoli seznamu majordomus quality rustdoc spojuje vykreslený strom s quality::source::Inventory, vlastním měřením syntaktického stromu crate o tom, co exportuje, které měří i kontrola rust-quality. Pro referenci se neudržuje žádný soupis modulů ani položek. Kontrola skončí s kódem 10 a pojmenuje každou chybějící nebo osiřelou stránku, a s kódem 12, když strom neexistuje – nikdy neprojde nad prázdnem. Testy crate quality::rustdoc obsahují jednu fixture pro každý způsob selhání. |
docs/RUSTDOC.md | apps/majordomus-cli/src/quality/rustdoc.rs | test/cases/490_rustdoc_new_module.sh | zaznamenané důkazy: nespuštěno |
| Strom rustdoc sestavený z jiného commitu, než jako který se kontroluje nebo nasazuje, je odmítnut, a to kontrolou integrity před publikací i veřejným ověřením po ní Dva svědci, kteří nesdílejí zapisovatele, jmenují commit: built_from producenta a hodnota, kterou rustdoc vykresluje na stránce konstanty COMMIT samotného crate. scripts/pages verify-rustdoc je tvrdý krok workflow pages, jakmile web servíruje nasazený commit, takže nasazení, jehož veřejná reference chybí, je rozbitá nebo zastaralá, shodí svůj běh, a scripts/ci/pages-check se ptá znovu jako kontrola pages-live. |
docs/RUSTDOC.md | scripts/pages | test/cases/487_rustdoc_staleness.sh | zaznamenané důkazy: nespuštěno |
| Stránka každého builtin modulu na webu odkazuje na stránku, na které referenci crate tento modul dokumentuje, a to z jediného mapování modul-stránka, kterému je podřízena i kontrola rustdoc publikovaného stromu, a jen v buildu, který referenci sestavil Mapování je quality::rustdoc::module_routes: exportované moduly crate, každý se stránkou odvozenou z vlastního inventáře crate, kterou `majordomus quality rustdoc` od stromu vyžaduje jako zjištění o chybějící stránce. `majordomus generate` ji přenese do datové sady registru webu jako rustdoc u každého modulu a modul, pro který rustdoc stránku nevytvoří (pub(crate) nebo privátní), žádnou nenese. Šablona ji spojí s povrchy, které sestavení složilo, z data/build.json, kterou scripts/site-build zapisuje z docs/generated/web.json; žádnou cestu neodvozuje a sestavení bez reference nic neodkazuje. scripts/ci/link-check ověří každý takový odkaz proti složenému webu. |
docs/RUSTDOC.md | apps/majordomus-cli/src/site.rs | test/cases/492_rustdoc_module_links.sh | zaznamenané důkazy: nespuštěno |
| Cesta k worktree větve se odvozuje jen z identity gitu a názvu větve — sourozenec primárního checkoutu pojmenovaný s -wt, potom větev se zachovanou hierarchií — a z každého adresáře každého worktree je odpověď stejná, bez čehokoli registrovaného či konfigurovaného Identitou je společný adresář gitu a hlavní worktree, který git uvádí jako první, nikdy aktuální adresář, takže propojený worktree neodvozuje kontejner sám v sobě. Název větve se validuje referenčními pravidly gitu a odvozená cesta se při každém volání dokazuje, že zůstává pod kontejnerem. Každý registrovaný worktree dostane postavení a každá podmínka stabilní kód s nápravou; čtyři schopnosti worktree.* promítají stejnou typovanou topologii do MCP, HTTP, OpenAPI, Swagger UI a Cockpitu a pre-commit hook se ptá hlídače. |
docs/WORKTREES.md | apps/majordomus-cli/src/worktree/path.rs | test/cases/96_worktree_topology.sh | zaznamenané důkazy: nespuštěno |
| Špatně umístěný worktree se přesune na svou kanonickou cestu se zachovanou změněnou, připravenou, nepřipravenou i nesledovanou prací, ověřeno otiskem pořízeným před přesunem a po něm, a krok se hlásí jako přesunutý, jen když se oba rovnají Plán nic nemění a před aplikací se přepočítá pod zámkem repozitáře. Git přesune adresář jedním přejmenováním; obyvatel kontejneru odejde na přípravnou cestu a pak dovnitř; přesun mezi souborovými systémy se odmítne, pokud není povolena kopie, a pak se ověří proti manifestu každé položky, než se odstraní originál. Nic se neresetuje, neodkládá do stashe, nečistí, nečekoutuje ani nepřepisuje: existující cíl je pojmenovaný konflikt, zamčený worktree čeká, odpojený se nikdy nepřesouvá a pracovní checkout relace se hlásí a přesouvá jen na požádání. |
docs/WORKTREES.md | apps/majordomus-cli/src/worktree/migrate.rs | test/cases/96_worktree_topology.sh | zaznamenané důkazy: nespuštěno |
| Funkce produktu je jeden soubor pod vrstvou, objevený, ne registrovaný, a odpovídá na ni příkazový řádek, HTTP API, dokument OpenAPI, MCP, odvozený graf, matice schopností a úvodní stránka webu i stránky funkcí, aniž by se cokoli jiného měnilo Odstranění souboru jej odstraní ze všech, což je přesně to, na čem by skrytý registr selhal. Druh, jeho schéma a jeho zdrojová třída jsou deklarace, takže zjišťování, validace, identita, index i zdroj MCP nepotřebovaly žádný vlastní kód. |
docs/PRODUCT.md | apps/majordomus-cli/src/product.rs | test/cases/97_product_features.sh | zaznamenané důkazy: nespuštěno |
| Produkt je zařazen pod několik oblastí deklarovaných jednou jako soubory vrstvy; funkce jmenuje právě jednu a členové, rozhraní, záruky a případy užití každé oblasti se odvozují z funkcí, které ji jmenují, takže stabilní funkci nelze vynechat z mapy produktu, aniž by to model odmítl Doména neuvádí žádnou funkci. Stabilní funkce, která nejmenuje žádnou doménu, přestože nějaká je deklarována, nebo jmenuje doménu, která neexistuje, neprojde product validate; odstranění souboru domény ji odstraní z každé odpovědi (ADR 0104). |
docs/PRODUCT.md | apps/majordomus-cli/src/product.rs | test/cases/800_product_domains.sh | zaznamenané důkazy: nespuštěno |
| Přes která rozhraní je funkce zpřístupněna, co za ní stojí a na co odpovídá, se odvozuje z registrů, které tato fakta vlastní, nikdy se nepíše ručně, a zdrojový soubor, který některé zapíše, schéma odmítne Soubor funkce obsahuje pouze odkazy a redakční rozhodnutí. Povrchy plynou z toho, na co se promítají její moduly, příkazy a druhy, počty z registru a indexu, okamžiky z katalogu why, cesta z id. Schéma nastavuje additionalProperties false, takže `surfaces:` nebo `route:` ve funkci je chyba validace, ne tvrzení, kterému stránka uvěří. |
docs/PRODUCT.md | apps/majordomus-cli/src/product.rs | apps/majordomus-cli/tests/product.rs | zaznamenané důkazy: nespuštěno |
| Každý odkaz, který funkce činí, se vyřeší proti registru, který jej vlastní, a ten, který ne, je chyba jmenující soubor, klíč a nejbližšího kandidáta, ne stránka odkazující nikam Modul schopnosti, veřejný příkaz nebo druh objektu, který nepojmenovává žádná stabilní funkce, se ohlásí jako mezera a zobrazí na matici, ne odmítne: věc, kterou produkt dělá a produktová stránka ji nezmiňuje, je přesně to, co má model zviditelnit. |
docs/PRODUCT.md | apps/majordomus-cli/src/product.rs | apps/majordomus-cli/tests/product.rs | zaznamenané důkazy: nespuštěno |
| Datová sada, ze které se web vykresluje, nese jen pole, která jmenuje povolený seznam, takže próza funkce, strojová cesta nebo pole, které nikdo nepovolil, se nemůže dostat na publikovanou stránku Hranicí je kopie pole po poli přes PUBLIC_FEATURE_FIELDS, ne vyloučení, na které by se dalo zapomenout: pole přidané do modelu na webu chybí, dokud ho někdo nepojmenuje. Test ověřuje, že tam není klíč mimo allowlist, žádné tělo, žádný kořen fixture ani dočasná cesta; scripts/generate-site-data artefakt odmítne ještě jednou, než z něj cokoli vykreslí. |
docs/PRODUCT.md | apps/majordomus-cli/src/site.rs | apps/majordomus-cli/tests/product.rs | zaznamenané důkazy: nespuštěno |
| Domovská stránka webu a stránky funkcí nepojmenovávají žádnou vlastní funkci, modul, příkaz, provider ani počet a zastaralý produktový dataset je odmítnut pre-commit hookem i kontrolou rust dříve, než ho lze mergovat scripts/site-check odmítne šablonu, generátor, program jq nebo navigační soubor, který jmenuje cestu funkce nebo vlastní soubor poskytovatele, dokazuje, že každá veřejná funkce má svou stránku a každá stránka funkci, a porovnává značky, které matice ukazuje, se značkami, které odvodil model. `majordomus generate --check` odmítne strom, jehož datová sada neodpovídá repozitáři. |
docs/GITHUB_PAGES_ARCHITECTURE.md | site/templates/index.html | test/cases/400_derivation_is_one_graph.sh | zaznamenané důkazy: nespuštěno |
| Schopnost přidaná do registru se objeví v seznamu, navigaci a vyhledávání Cockpitu a na vlastní stránce s formulářem generovaným z jejího schématu, aniž by se upravil jediný řádek Cockpitu a_capability_the_repository_adds_reaches_every_cockpit_surface přidá jedno pravidlo do fixture repozitáře, z něhož registr udělá schopnost, a ptá se Cockpitu na ni přes skutečný socket v jeho výpisu, na její vlastní stránce, na stránce jejího objektu s položkou navigace pro její druh a v jeho vyhledávání; the_runner_form_is_generated_from_the_input_schema ve stejném souboru dokazuje formulář. Nic v Cockpitu tu schopnost nejmenuje. |
docs/COCKPIT.md | apps/majordomus-cli/src/cockpit/mod.rs | apps/majordomus-cli/tests/cockpit.rs | zaznamenané důkazy: nespuštěno |
| Dashboard UI na /ui odkazuje každou schopnost, kterou načetl, na stránku této schopnosti, servíruje se pod bezpečnostní politikou Cockpitu a nikdy nečeká na frontu pull requestů, která je vlastní stránkou a fragmentem the_dashboard_is_served_at_ui_under_the_cockpits_policy spustí skutečný server nad fixture repozitářem a ověří, že stránka odkazuje na /cockpit/capabilities/<id> pro každou ze schopností health.report, release.version, distribution.releases, plan.status, plan.roadmap a mesh.peers, nese content-security politiku Cockpitu a frontu tahá z /ui/panels/pull-requests, místo aby citovala integration.queue; the_queue_panel_is_a_page_and_a_fragment dokazuje vlastní route fronty. |
docs/MAJORDOMUS_UI.md | apps/majordomus-cli/src/ui/dashboard.rs | apps/majordomus-cli/tests/ui_surface.rs | zaznamenané důkazy: nespuštěno |
| Observatory na /ui/observatory a /ui/kiosk zobrazí scénu, jen když schopnosti, které vyžaduje, odpověděly něčím k vykreslení, nebo — u scény meshe, kde žádný mesh neběží — když repozitář nese jeho nahrávku, kterou označí jako replay; scéna bez obojího nenese žádný model a uvede důvod zdroje, na serveru i v publikovaném snímku stejně Případ spustí server nad čerstvě inicializovaným repozitářem a pořídí z něj snímek UI a na obojím čte projekci, kterou stránka nese: osm scén v deklarovaném pořadí, každý zdroj uvedený se svým stavem a selhavší s důvodem, dostupnou scénu s modelem a nedostupnou bez něj a s důvodem, tři scény meshe nedostupné tam, kde žádný mesh neběží, kiosk nesoucí stejné scény, dvě přesměrování a snímek obsahující stránku a její skript. Čte projekci, ne plátno: co skript vykreslí z modelu dostupné scény, se tu netvrdí. |
docs/MAJORDOMUS_UI.md | apps/majordomus-cli/src/ui/observatory.rs | test/cases/3011_the_observatory_draws_nothing_it_did_not_read.sh | zaznamenané důkazy: nespuštěno |
| Objekt nasazení, který porušuje svůj uzavřený kontrakt — klíčem, který kontrakt nemá, jinou verzí schématu, chybějícím polem, rozhraním, portem, počtem strojů nebo health routou, které by nemohly fungovat, hodnotou, která vypadá jako přihlašovací údaj, nebo identitou, o kterou se hlásí dva soubory — doctor odmítne s uvedením důvodu Toto je shellová polovina kontraktu, rozhodnutá bez přítomného toolchainu Rustu. Sémantická polovina, tedy health route, kterou nezaregistrovala žádná schopnost, nebo balíček, který workspace neobsahuje, patří do apps/majordomus-cli/src/deploy/mod.rs a dokazují ji testy tohoto modulu, ne tento případ. Případ páruje každé odmítnutí podle jeho důvodu; nevyžaduje, aby nález jmenoval objekt, nekontroluje exit status doctor a neukazuje, že objekt dorazí do indexu nebo výpisu objektů, takže nic z toho se zde netvrdí. |
.ai/repo/rules/vendor/majordomus/rules/deployment-contract.v1.md | lib/deployment.sh | test/cases/84_deployment_contract.sh | zaznamenané důkazy: nespuštěno |
| Důkaz tvrzení je provedení zaznamenané s commitem, proti kterému běželo, ne cesta k testu, která se vyřeší Matice váže tvrzení k testu cestou a kontrola cesty dokazuje jen to, že soubor existuje. Kniha pod .ai/repo/evidence zaznamenává poslední provedení každého testu s jeho výsledkem, délkou, commitem, stavem stromu, digestem zdroje, časem a původem; `majordomus evidence show` odvozuje stav každého tvrzení z tohoto joinu při každém čtení a tvrzení, jehož test nikdo nespustil, se čte jako `not_run`, místo aby z existence souboru zdědilo záruku. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/mod.rs | test/cases/124_evidence.sh | zaznamenané důkazy: zastaralé |
| CI zaznamenává každý test, který spustila, spolu s commitem a během, ve kterém proběhl, a web publikuje verdikt sledovaného ledgeru u tohoto commitu jako aktuální jen tehdy, když běh CI na publikovaném commitu měřil čisté stromy a nic nechybělo, nebylo odmítnuto ani neselhalo; jinak jako zastaralý se vzdáleností či selháními, jako neznámý s důvody, nebo jako nedostupný s důvodem Úloha evidence ve validate.yml nejprve odvodí report přes `majordomus evidence show` na vlastním checkoutu, změřeném čistém či špinavém, se staženými reporty a výstupem v dočasném adresáři runneru, takže tento report je verdiktem sledovaného ledgeru na commitu běhu. Teprve poté zaznamená výsledky sady a crate přes `majordomus evidence record --origin ci`, který každé provedení označí během z jeho prostředí; tyto řádky jsou záznamem běhu, počítají se v manifestu a o žádném verdiktu nerozhodují, a řádky běhu na trunku se do sledovaného ledgeru dostanou jen přes zaznamenávací pull request z ADR 0080. Sada i úloha rust měří každá strom, ve kterém běžely, s vyloučením jen výstupů, které jejich běh pojmenovává, na cestách, kam tento běh zapisuje (rust-check zapisuje v adresáři crate), a pracovní strom manifestu se odvozuje z těchto měření; report změřený na jiném commitu je odmítnut a report, který nepřinesl žádné provedení, je nepřítomný. U pull requestu je zaznamenaným commitem merge commit, který běžel, s head vedle něj. `scripts/pages evidence` publikuje artefakt publikovaného commitu nebo jeho nejbližšího předka do site/data/evidence.json, který se nikdy necommituje, a zadrží current, se všemi důvody, kdykoli běh nemůže report potvrdit, včetně reportu, který kolektor neodvodil nebo nepřinesl. ADR 68, ve znění ADR 0087. |
docs/EVIDENCE.md | scripts/ci/evidence-collect | test/cases/357_ci_records_evidence.sh | zaznamenané důkazy: nespuštěno |
| Každé pravidlo jmenuje, co jej dokazuje, a každá cesta, kterou jmenuje, je ve stromu Pravidlo mohlo v anglické próze pojmenovat případ chování a nikdo si nevšiml, když byl tento případ přejmenován nebo smazán; pravidlo se dál četlo jako vynucované. Kontrola drží obě poloviny vztahu. Pojmenovaná cesta, která ve stromu není, je `dangling` a nikdy se neratchetuje, protože neexistující důkaz je horší než žádný důkaz. Pravidlo kterékoli třídy, které nepojmenovává ani validátor, ani test, ani důvod, je `unproven`, což je polovina, kterou žádná jiná kontrola v tomto repozitáři neumí hledat; poradní není výjimka a jedinou výjimkou je vendorované pravidlo označené `principle`, které balíček připíná hashem a které kontrola počítá při každém běhu. `majordomus rules` hlásí stejný stav `unproven` pro každou třídu, ale za nález ho označuje jen u blokujícího pravidla; u poradního ho odmítá až kontrola. |
docs/DOCTRINE.md | scripts/ci/rule-proof-check | test/cases/125_rule_proof.sh | zaznamenané důkazy: zastaralé |
| Každé tvrzení, pravidlo, funkce, příkaz, schopnost, nástroj MCP a případ užití, které repozitář deklaruje, je předmět důkazů, jehož členové a testy se odvozují z již existujících deklarací, a odevzdaný index předmětů, který se od tohoto odvození liší, se odmítne `majordomus generate site` zapisuje site/data/registry/evidence-subjects.json z matice tvrzení, pravidel, funkcí, případů užití, registru příkazů, zdokumentovaných příkladů příkazové řádky, vestavěných schopností a první hlavičky pokrytí a negativní hlavičky každého případu; schopnost se skládá z tvrzení implementovaných v souboru, v němž je její modul sestaven, a slovo příkazu, na které odpovídá shellový nástroj i spustitelný soubor, jmenuje oba programy. Nic neuvádí subjekt, člena ani route ručně, takže přidání deklarace přidá její subjekt a odebrání ho odebere. `generate --check` ruční úpravu odmítne. Soubor nese jen strukturu - žádný řádek knihy ani commit - takže zaznamenání běhu ho nikdy nezastará. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/subject.rs | test/cases/507_evidence_subjects_are_derived.sh | zaznamenané důkazy: nespuštěno |
| Behaviorální a negativní testy, které rejstřík subjektů uvádí pro příkaz, jsou přesně ty, které uvádí jeho stránka příkazu, obojí načtené z první hlavičky pokrytí a negativního testu každého případu Hlavičky případů měly před indexem několik čtenářů: stránky příkazů generátoru webu, doktrínu pokrytí příkazů, kontrolu command-furnished a trasování dopadu případů užití, přičemž poslední dvě hledají příkaz kdekoli v kterémkoli řádku covers mezi hranicemi slov, a ne jako slovo prvního. Index čte první řádek slovo od slova, jako stránka. Případ drží obojí shodné, drží každý případ na jedné hlavičce od každého druhu a drží každý řádek covers na jmenování týchž veřejných příkazů v obou čteních, takže čtenáři se zatím nemohou rozejít; kontrolní řez je přesune na index. Dvě další shellová odvození se k testům dostávají deklaracemi, ne hlavičkami: stránky schopností dávají každé schopnosti tvrzení implementovaná v souboru jejího modulu a stránky doktrín jmenují první test každého pravidla. Tentýž případ drží každé z nich shodné s indexem. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/subject.rs | test/cases/507_evidence_subjects_are_derived.sh | zaznamenané důkazy: nespuštěno |
| Pravidlo, které žádný program nedokáže vyjádřit, to říká ve své vlastní hlavičce s důvodem a počítá se zvlášť od každého pravidla, které má kontrolu Některá pravidla opravdu nemají strojový výraz: původ toho, co bylo napsáno, nebo zda si mechanismus zaslouží své náklady. Před `reviewed_because` ležela v seznamu dluhů vedle pravidel, na která se jen nedostalo, a obojí bylo nerozlišitelné. Důvod je celá deklarace — vedle něj není žádný příznak, protože příznak lze nastavit, ale důvod nelze nastavit, aniž by se napsal. Spustitelný důkaz ho vždy přebije, takže pravidlo, které získá případ, přestane být vynucováno revizí, aniž si kdokoli musí pamatovat něco smazat. |
docs/DOCTRINE.md | scripts/ci/rule-proof-check | test/cases/125_rule_proof.sh | zaznamenané důkazy: zastaralé |
| Stav důkazu pravidla se odvozuje ze stromu a knihy společně a mechanismus, který odmítá porušení, se nikdy nehlásí jako běh, který prošel `majordomus doctrine` se ptá, zda repozitář pravidlo nyní splňuje; graf důkazů se ptá, zda je pravidlo vůbec ve stavu, v němž by splněno být mohlo. Deset stavů a ty, které se nesmí slít, jsou `proven` (úspěšný běh a od té doby se nic nezměnilo), `gated` (spustitelná kontrola, kterou spouští kontrola CI, bez zde zaznamenaného verdiktu) a `reviewed` (deklarovaná výjimka). Stav pravidla je nejslabší z jeho částí, takže jediný visící případ způsobí, že pravidlo visí, kolik dalších jich prochází. |
docs/DOCTRINE.md | apps/majordomus-cli/src/rules/mod.rs | test/cases/133_rule_graph.sh | zaznamenané důkazy: zastaralé |
| Každý autorský soubor v tomto repozitáři je psán anglicky a vlastní jméno, testovací fixture nebo publikovaný překlad, který takový není, nese svůj důvod vedle kontroly Kontrola je test abecedy a říká to: písmeno, které se vyskytuje v češtině, slovenštině či polštině a nikdy v angličtině, nebo celé jiné písmo, není angličtina, ať je o souboru pravda cokoli jiného. Anglická próza nesoucí větu v jiném jazyce zapsanou v ASCII jím projde a vždy projde - pravidlo zůstává širší než kontrola, což je poctivý vztah mezi nimi. Dvě výjimky se deklarují s důvodem: `name` pro vlastní jméno a `fixture` pro soubor, který používá cizí řetězec jako data k důkazu, že s ním program umí zacházet. |
docs/DOCTRINE.md | scripts/ci/english-only-check | test/cases/138_governance_gates.sh | zaznamenané důkazy: zastaralé |
| Stránka publikovaného webu psaná v jazyce čtenáře je deklarována s tímto jazykem a důvodem a je odmítnuta, pokud stránka sama tentýž jazyk nedeklaruje project.english-only v2 (ADR 0077) drží vlastní artefakty repozitáře v angličtině bez výjimek a jmenuje jednu oddělenou populaci: obsah publikovaný pro čtenáře v jeho jazyce. Toto oprávnění stojí tři deklarace, které se musí shodovat - cesta je pod site/content-src/ nebo jeho projekcí, allow list nese jazyk a povinný důvod a samotná stránka deklaruje tentýž jazyk. Třetí z nich brání tomu, aby allow list byl souborem, do něhož lze připsat položku a umlčet nález. |
.ai/repo/rules/project/english-only.v4.md | scripts/ci/english-only-check | test/cases/403_published_translation.sh | zaznamenané důkazy: nespuštěno |
| Každé zjištění, které příkaz hlásí, pojmenuje příkaz, který ho reprodukuje `mj_finding` bere příkaz k reprodukci jako pátý argument a bez něj nález vypíše bez příkazu, takže volající, který na něj zapomněl, vytvořil nález, který vypadal přesně jako nález, který ho mít nemůže. Kontrola počítá argumenty každého volání pomocných funkcí pro hlášení, volání předávající dál bere jako věc volajícího a volání, které neumí rozebrat, hlásí jako nečitelné, místo aby ho tiše propustila. Zavedena byla s prázdnou baseline: devět porušení, která našla, bylo opraveno, ne zaznamenáno. |
docs/DOCTRINE.md | scripts/ci/finding-reproduce-check | test/cases/138_governance_gates.sh | zaznamenané důkazy: zastaralé |
| Běh zaznamenaný pro tento commit a běh, jehož vstupy se od té doby prostě nezměnily, se hlásí jako různé stavy, nikdy jako jeden `proven` znamená, že rozdíl mezi vlastním commitem provedení a pracovním stromem je prázdný, s výjimkou řádku samotné účetní knihy — strom před vámi je strom, který běh změřil. `inputs_unchanged` je úspěšný běh, kde se nic z toho, co tvrzení jmenuje, neliší od pracovního stromu — absence známé invalidace, nikoli důkaz na HEAD, protože změna, kterou tvrzení nejmenuje, ho mohla porušit. Smíchání obojího je cesta, jak odznak přestane cokoli znamenat, proto jsou stavy odlišné v modelu, v každé projekci i v kontrole. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/mod.rs | test/cases/124_evidence.sh | zaznamenané důkazy: zastaralé |
| Zaznamenání výsledku jednoho testu nikdy nesmaže důkazy zaznamenané pro jiný test Účetní kniha se slučuje po testech, nepřepisuje se po bězích, takže `bash test/run.sh 84_distribution_model` následované záznamem aktualizuje přesně tuto jednu položku. Zápis celé knihy by z běhu jednoho případu udělal repozitář, který prokázal jedinou věc, což je horší než repozitář, který neprokázal nic, protože to vypadá záměrně. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/ledger.rs | test/cases/124_evidence.sh | zaznamenané důkazy: zastaralé |
| Každé tvrzení pojmenovává test, který je má rozhodnout, a každý test pojmenovává tvrzení, která má rozhodnout, z jednoho odvození `evidence claim` odpovídá, co dokazuje tvrzení, a `evidence proves` odpovídá, co dokazuje test, včetně ostatních tvrzení, která ho sdílejí. Oba čtou stejný join, takže si ty dva směry nemohou odporovat; relace, kterou lze procházet jen jedním směrem, je jen půl relace. |
docs/EVIDENCE.md | apps/majordomus-cli/src/capability/builtin/evidence.rs | test/cases/124_evidence.sh | zaznamenané důkazy: zastaralé |
| Tvrzení, které deklaruje záruku, již žádný zaznamenaný běh nepodporuje, pojmenuje kontrola, místo aby se zobrazilo jako zaručené `majordomus evidence show --check` skončí s kódem 10 u každého zaručeného tvrzení, které důkazy nepodporují, a `scripts/evidence-check` to hlídá proti .ai/repo/evidence-baseline.txt, který eviduje stav po jednotlivých tvrzeních, nikoli seznam jmen. Selhat mohou dvě věci: záruka, kterou baseline vedla jako podloženou a která už není, a podložená záruka, která z matice zmizela. Tvrzení, které baseline nikdy neznala a které nemá zaznamenaný běh, je nový dluh — pojmenovaný a započítaný, nikdy regrese — protože západka, která by střílela na růst, by zdaňovala sepisování tvrzení. Kontrola je poradní, dokud baseline nese nepodložené řádky, a `--strict` je cílový stav; posuzuje se pouze `guaranteed`, protože advisory, planned a rejected už samy říkají, že aktuální důkaz není tím, co tvrdí. |
docs/EVIDENCE.md | scripts/evidence-check | test/cases/124_evidence.sh | zaznamenané důkazy: zastaralé |
| Tvrzení se čte jako prokázané, jen když byl jeho úspěšný běh zaznamenán na commitu, který předložená revize obsahuje, mezi oběma se nezměnilo nic než kniha důkazů a ani zaznamenaný, ani předložený strom nebyl špinavý; běh na commitu, který předložená revize neobsahuje, se čte jako zastaralý; pojmenovaná revize se posuzuje podle knihy odevzdané v ní a čistý neúspěšný běh téhož testu, který checkout drží neodevzdaný a zaznamenaný mezi nimi, ji omezí na zastaralou `evidence::freshness` je jediná pravdivostní tabulka, kterou čtou všechny povrchy, a jen její řádek proven se smí zobrazit jako ověřený. `evidence show --presented HEAD` posuzuje načtený commit tak, jak je commitnut, z knihy, kterou ten commit drží, proti jeho stromu změřenému bez pracovní kopie knihy; `--presented-tree` toto měření jen oslabuje. Běh, který drží pracovní kniha a commitnutá ne, je uveden v `presented.uncommitted` a čte se jen monotónním pravidlem, které proven zadržuje a verdikt nikdy nerozhoduje. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/freshness.rs | test/cases/502_evidence_is_judged_at_the_presented_revision.sh | zaznamenané důkazy: nespuštěno |
| Test, který odmítl běžet, se čte jako not_run s detailem, že odmítl, nikdy jako prokázaný ani selhávající, a test, který skončil chybou nebo vypršel, se čte jako selhávající Zaznamenané přeskočení dříve četlo jako selhání, protože tak četl každý výsledek, který nebyl průchodem. Je to absence důkazu, ne protidůkaz: tvrzení čte not_run s podrobností, že test odmítl běžet, a záruka, která na něm spočívá, je stále zjištěním, takovým, které říká, že test odmítl, ne že nebyl nikdy zaznamenán. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/freshness.rs | test/cases/502_evidence_is_judged_at_the_presented_revision.sh | zaznamenané důkazy: nespuštěno |
| Pravidlo s neúspěšným testem se čte jako neúspěšné bez ohledu na jeho ostatní testy, takže blokující pravidlo, jehož testy jsou jeden neúspěšný a jeden nespuštěný, je stále nález `freshness::aggregate` je jediná agregace: selhávající, pokud selhává kterákoli část, jinak nejslabší z částí, které mohou nést důkaz, jinak nejslabší ze všech. Deklarované pořadí řadí failing nad not_run, takže prosté nejslabší z neúspěšného a přeskočeného testu dalo not_run, což není nález, a selhání skrylo. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/freshness.rs | test/cases/502_evidence_is_judged_at_the_presented_revision.sh | zaznamenané důkazy: nespuštěno |
| Žádný objevovací socket meshe se neotevře, dokud repozitář necommitne zapnutou deklaraci meshe, a vypnutá či chybějící deklarace se hlásí jako důvod, ne jako chyba Sdílený server aktivuje runtime meshe pouze z povoleného objektu mesh-declaration (druh, schéma a třída zdrojů ve vrstvě); testy dokazují, že zakázaná deklarace nic neotevře, nevytvoří žádnou identitu a odpoví proč, a že aktivace nikdy nezdrží obsluhu. Kostra, z níž nový repozitář vychází, žádnou deklaraci nedodává (ADR 0050); tento repozitář commituje vlastní povolenou, revidované rozhodnutí, které popisuje docs/MESH.md a drží test/cases/491_the_mesh_is_on_here.sh. |
docs/MESH.md | apps/majordomus-cli/src/shared.rs | apps/majordomus-cli/tests/mesh.rs | zaznamenané důkazy: nespuštěno |
| Každé pozorování objevování konverguje do jednoho omezeného registru, deduplikovaného podle identity uzlu a runtime napříč zdroji, chráněného proti replay na úrovni instance, a každý povrch tento registr promítá a nedrží žádné vlastní peery tests/mesh.rs dokazuje konvergenci k jednomu záznamu přes skutečný socket a unit testy registru dokazují deduplikaci z více zdrojů, zahazování replayů, zacházení s restartem a mez vyřazování; test/cases/130_mesh.sh pokrývá cestu operátora bez sítě a žádnou část tohoto tvrzení nenese; scripts/ci/mesh-check (kontrola mesh-check) odmítne UDP socket mimo src/mesh/ a druhé místo konstrukce MeshRegistry. Od discovery protokolu 2 (ADR 0067) je záznam jedním runtimem uzlu, takže dva worktrees jednoho stroje jsou dva záznamy pod jedním klíčem. |
docs/MESH.md | apps/majordomus-cli/src/mesh/registry.rs | apps/majordomus-cli/tests/mesh.rs | zaznamenané důkazy: nespuštěno |
| Dva runtimy jednoho repozitáře se propojí jen podepsaným handshake chráněným proti replay, který ověřuje protokol, identitu repozitáře a důvěru, a každé odmítnutí je typované a viditelné Oddělené serverové procesy se propojují přes TCP a jejich odmítnutí poškozených, padělaných, budoucího protokolu, jiného repozitáře a nedůvěryhodných hello se čtou zpět přes HTTP; unit testy mesh::cooperation pokrývají replay hello a synchronizačního čítače i propojení se sebou samým. Žádné TLS - autenticita je věcí protokolu, důvěrnost sítě (ADR 0067). |
.ai/repo/rules/project/mesh-cooperation-is-authenticated.v1.md | apps/majordomus-cli/src/mesh/cooperation.rs | apps/majordomus-cli/tests/mesh_cooperation.rs | zaznamenané důkazy: nespuštěno |
| Výhradní nárok učiněný na jednom runtime vylučuje překrývající se nárok na každém propojeném runtime a souběžné nároky se všude vyřeší na jednoho pojmenovaného vítěze Property testy mesh::state dokazují, že fold nezávisí na pořadí ani duplicitě a že žádné prokládání nenechá dva držené exkluzivní claimy ve střetu; integrační testy odmítnou konfliktní claim napříč dvěma procesy, dvěma worktree i přes relay; test rozdělení sítě v procesu a scénář network_partition v laboratoři sloučí rozdělení do jednoho drženého a jednoho konfliktního claimu. Nejde o silnou konzistenci: při rozdělení mohou držet obě strany a konflikt se pojmenuje po zacelení. |
.ai/repo/rules/project/mesh-cooperation-is-authenticated.v1.md | apps/majordomus-cli/src/mesh/state.rs | apps/majordomus-cli/tests/mesh_cooperation.rs | zaznamenané důkazy: nespuštěno |
| Runtimy obsluhující různé repozitáře nikdy nevytvoří kooperativní spojení, ani když se navzájem objeví Identita repozitáře je digest kořenových commitů nebo deklarovaná hodnota, nikdy cesta; handshake odmítne neshodu oběma směry a ingest odmítne událost jiného repozitáře. Laboratoř to dokazuje mezi uzly Linuxu, které se navzájem objevily multicastem. |
.ai/repo/rules/project/mesh-cooperation-is-authenticated.v1.md | apps/majordomus-cli/src/mesh/repository.rs | apps/majordomus-cli/tests/mesh_cooperation.rs | zaznamenané důkazy: nespuštěno |
| Runtime, který přestane vysílat tep — zhroutil se, byl zabit nebo oddělen sítí — vyprší u svých peerů v deklarované lhůtě, jeho nároky přestanou vylučovat a jeho restart se znovu připojí jako týž runtime bez duplikátu Serverový proces se zabije signálem SIGKILL a znovu se spustí ve stejném checkoutu; jeho peer jej uvádí jednou s počítanými restarty a claim jeho předchozího běhu zůstává vypršelý. Beats stárnou na vlastních monotónních hodinách každého runtime. Laboratoř to opakuje s docker kill a odpojením sítě. |
docs/MESH.md | apps/majordomus-cli/src/mesh/cooperation.rs | apps/majordomus-cli/tests/mesh_cooperation.rs | zaznamenané důkazy: nespuštěno |
| Runtimy propojené jen přes relay konvergují k jednomu digestu stavu, každá událost je držena jednou, bez smyčky replikace Tři serverové procesy v řadě se shodnou na digestu, drží stejný počet událostí a po konvergenci nenesou další události; podpisy původu přežijí přenos. Doručení je at-least-once s idempotentní aplikací, ne exactly-once. |
docs/MESH.md | apps/majordomus-cli/src/mesh/journal.rs | apps/majordomus-cli/tests/mesh_cooperation.rs | zaznamenané důkazy: nespuštěno |
| Zhutnění žurnálu spolupráce nemění nic živého — předávka, kterou nikdo nepřevzal, si ponechá svůj proud po omezenou dobu, kdo převzal předávku a kdo odpověděl na revizi, zůstává u nich a zhutněný runtime, který znovu ohlásí tep, se načte znovu celý Případ 493 spouští tests/mesh_compaction.rs, dva runtimy propojené skutečným podepsaným protokolem přes transport uvnitř procesu, protože žádný black-box ovladač nedosáhne kompakce v omezeném čase (server kompaktuje každých šedesát heartbeatů a mrtvý stream drží patnáct minut; deklarovat lze jen heartbeat a expiraci). Jednotkové testy deníku reprodukují každou vadu zaznamenanou v PR 588 a jeho property test zajišťuje, že kompakce nezmění žádný živý claim, otevřenou relaci, přebírajícího předávky ani odpověď na review na náhodných historiích. Nepokryto – dva runtimy mohou vypsat různé digesty, dokud každý kompaktuje podle vlastního rozvrhu; živý stav se shoduje a docs/MESH.md to říká. |
docs/MESH.md | apps/majordomus-cli/src/mesh/journal.rs | test/cases/493_mesh_compaction_keeps_what_is_live.sh | zaznamenané důkazy: nespuštěno |
| Samostatné linuxové uzly na skutečné síti se navzájem objeví přes multicast, propojí se, sdílejí claimy a předávky a zotaví se z rozdělení sítě i pádu, v laboratoři, kterou CI spouští Čtyři kontejnery na jednom docker bridge, bez seedů; deset scénářů se změřenými časy zapsanými do target/mesh-lab/evidence.json; úloha CI mesh-lab spustí laboratoř a poté scripts/ci/mesh-lab-evidence, který odmítne záznam, jenž není úplným přejímacím záznamem — laboratoř sama sebe nesoudí. Případ 414 pokrývá tohoto čtenáře a drží jeho požadovanou množinu rovnou scénářům, jichž laboratoř dosahuje. Jeden segment vrstvy 2 a jedno jádro — nikoli směrovaná topologie, topologie s NAT ani WAN; fyzické stroje jsou zdokumentovaný ruční postup. |
docs/MESH.md | test/mesh-lab/run | test/cases/414_mesh_lab_evidence.sh | zaznamenané důkazy: nespuštěno |
| Objevený uzel nezíská žádné provádění ani oprávnění tím, že byl zaslechnut; stav meshe smí změnit jen podepsaný provoz od propojeného uzlu a důvěra označuje záznamy podle explicitní politiky, jejíž výchozí hodnota je deny_unknown Jednotkové testy důvěry dokazují, že deny_unknown pozoruje, aniž by důvěřoval, sémantiku allowlist a TOFU a že změna klíče u známého id uzlu je odmítnuta; integrační test dokazuje, že padělaná obálka je započtené odmítnutí. Objevení stále nic neuděluje: být slyšen nebo důvěryhodný sám o sobě žádné spojení nepovoluje – spojení vyžaduje handshake z mesh-cooperation-links – a nic, co propojený peer pošle, nic nespouští; příkazy spolupráce zapisují deník tohoto runtime a u přijaté předávky jeden záznam do adresáře handovers tohoto checkoutu (ADR 0067). |
.ai/repo/rules/project/mesh-is-observation-not-authority.v1.md | apps/majordomus-cli/src/mesh/trust.rs | apps/majordomus-cli/tests/mesh.rs | zaznamenané důkazy: nespuštěno |
| Zapnutá deklarace meshe, kterou sdílený server neaktivoval, je selhání kontroly `runtime` v `mesh doctor` (exit 10) nesoucí důvod serveru a řádek `Mesh: DECLARED ENABLED BUT NOT ACTIVE` v briefingu na začátku relace — nikdy tiché vypnutí; a commitnutá deklarace tohoto repozitáře je sledovaná, zapnutá, povoluje flotilu na allowlistu a pojmenovává hub Runtime drží jediný bit, který říká, zda sdílený server o něčem rozhodl (aktivoval se, nebo odmítl s uvedeným důvodem); kontrola `runtime` v doctoru čte rozhodnutí serveru, je-li bit nastaven, a hlásí absenci, není-li; `majordomus mesh doctor` se ptá běžícího serveru na jeho zprávu, takže verdikt je verdiktem serveru. Knihovna hooků z této zprávy vykreslí řádek briefingu a sama žádný požadavek neposílá. apps/majordomus-cli/tests/mesh.rs dokazuje tři verdikty na skutečném serveru; případ dokazuje odpovědi briefingu a návratový kód přes startovací událost poskytovatele a čte potvrzenou deklaraci tohoto repozitáře (ADR 0059). Nezajišťuje, že mesh k někomu dosáhne, a huby se spouštějí ručně. |
docs/MESH.md | apps/majordomus-cli/src/mesh/doctor.rs | test/cases/494_the_mesh_is_declared_and_held.sh | zaznamenané důkazy: nespuštěno |
| Příchozí povolení, která deklarace meshe na stroji implikuje — port multicastové skupiny, deklarované porty hubu, jejichž adresa je adresou stroje, port serveru za loopbackem — se odvozují z deklarace příkazem `majordomus mesh firewall`, který pojmenuje backend firewallu hostitele, příkazy, které je povolí, a vlastní verdikt firewallu, skončí s exit 10, když je pozorováno chybějící pravidlo nebo jádro zalogovalo zahození směrem na tyto porty, a jehož `apply` spouští příkazy jen jako root a nikdy přes HTTP ani MCP; `mesh doctor` nese stejný verdikt jako svou kontrolu `firewall` Plán, detekce backendu a každý úsudek o výstupu firewallu jsou čisté funkce s doctesty; hostitele se dotýká jen pozorování a aplikace a každé říká, kdy nemohlo (nepozorovatelné bez roota je absence, ne selhání, pokud log jádra neukazuje zahozené pakety). Případ spouští report nad deklarací tohoto repozitáře a nad fixtures a nikdy nic neaplikuje. Nenutí firewall, na němž příkaz nikdo nespouští, cokoli připustit. |
docs/MESH.md | apps/majordomus-cli/src/mesh/firewall.rs | test/cases/495_the_firewall_admits_the_mesh.sh | zaznamenané důkazy: nespuštěno |
| Poskytovatelé a modely se deklarují jednou v share/models.yaml a CLI, HTTP, OpenAPI, MCP i Cockpit vykreslují tuto jedinou deklaraci bez vlastního názvu modelu models.list a models.route jsou deklarace schopností, takže každý povrch je projekce; diagnostika katalogu sama při prvním čtení ohlásí duplicitní alias nebo nedeklarovaného dodavatele. Pořadí deklarací je pořadí preferencí směrování, ověřitelné přečtením souboru. |
docs/MODELS.md | apps/majordomus-cli/src/models/mod.rs | test/cases/131_models.sh | zaznamenané důkazy: nespuštěno |
| Rozhodnutí o směrování uvádí, proč byl vybraný model vybrán, a u každého vyloučeného modelu první kontrolu, kterou nesplnil — stejná odpověď na stejnou otázku, bez skrytého stavu Směrování je čistá funkce nad deklarovaným katalogem a uvedenou potřebou; unit testy dokazují pořadí preferencí, pevné pořadí kontrol za každým důvodem vyloučení a to, že model uvedený přímo se stále kontroluje proti požadavkům. |
docs/MODELS.md | apps/majordomus-cli/src/models/mod.rs | test/cases/131_models.sh | zaznamenané důkazy: nespuštěno |
| Katalog modelů hlásí, zda je nastavena pojmenovaná proměnná s přihlašovacími údaji dodavatele, a nemůže nést žádnou tajnou hodnotu — schéma nemá pole, ve kterém by se dala skrýt credential_env pojmenovává proměnnou prostředí a zjišťuje se pouze std::env::var_os(..).is_some(); test projde JSON schéma katalogu a odmítne každý název vlastnosti, který zavání přihlašovacím údajem. |
docs/MODELS.md | apps/majordomus-cli/src/models/mod.rs | test/cases/131_models.sh | zaznamenané důkazy: nespuštěno |
| Koncová událost poskytovatele a jeho událost kompakce odvozují znalosti, které epizoda vytvořila, do kandidátních záznamů ve sledovaném stromu, z knihy a gitu a nikdy z konverzace, ať je úloha aktivní, nebo ne, a zaznamenají do knihy, že tak učinily Cesta uzavření v lib/session.sh spouští deriver poté, co je záznam relace publikován, a před připojením session.closed, takže po každém uzavření následuje jeho řádek knowledge.derived; adaptér komprese jej volá přímo, nezávisle na přepínači kontrolních bodů. Rozhodnutí se stane konvencí, vyřešená otázka faktem, zablokovaná úloha poučením, ověřené dokončení faktem; Next Action předávky je stav pokračování a nikdy se z ní neodvozuje. Nic nečte konverzaci, prompt ani model. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/563_knowledge_is_derived_at_the_boundary.sh | zaznamenané důkazy: nespuštěno |
| Druhé odvození nad týmiž důkazy nic nezapíše, řekne to a nechá pracovní strom beze změny; id záznamu se odvozuje z epizody a výtahu důkazů, takže tentýž fakt vždy skončí v témže souboru Záznam se složí do dočasného souboru ve stejném adresáři a porovná se bajt po bajtu se souborem, který pojmenovává id; shodný se ohlásí jako beze změny a dočasný soubor se odstraní, odlišný se přejmenuje přes původní. Datum je den řádku s důkazem, nikdy hodiny, a do bajtů nevstupuje žádná náhodná hodnota, takže stejný ledger a stejný git dají na každém stroji stejný soubor. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/564_knowledge_derivation_is_idempotent.sh | zaznamenané důkazy: nespuštěno |
| Vypnutý přepínač politiky nic neodvozuje a řekne to; odvození, které selže uvnitř provider hooku, se zaznamená jako provider.event.failed a hook přesto skončí s 0 session.knowledge_on_end a session.knowledge_on_compact jsou dva přepínače, čtené z politiky a nezávislé na checkpoint_on_compact. Hook musí svému poskytovateli vrátit úspěch a vrácení úspěchu není totéž jako tvrzení, že se práce stala, proto adaptér hlásí selhání přes mj_capture_session_failed s poslední řádkou deriveru jako důvodem a epizodu v každém případě uzavře. |
docs/KNOWLEDGE.md | lib/capture.sh | test/cases/565_knowledge_switch_and_failure_leave_evidence.sh | zaznamenané důkazy: nespuštěno |
| Každý záznam znalostí je validní podle schématu bez neznámého klíče, jednoznačně identifikovaný, doložený důkazy, je-li ověřený, rozlišuje každý odkaz, který uvádí, a neobsahuje žádnou konverzaci; check, doctor a `majordomus knowledge check` odmítnou záznam, který tomu neodpovídá mj_validate_knowledge_integrity čte candidates/ a curated/ jednou a odmítne kandidáta, který tvrdí verified, visící cíl derived_from nebo relations, duplicitní id napříč oběma adresáři, klíč, který generovaný allow-list nenese, nahrazený záznam bez superseded_by i bez zamítnutí a řádek titulku, popisu či těla, který odpovídá kontrole přepisů, jíž se dodržuje never-store-transcripts. Reference na knihu a git (session, task, decision, commit) se přeloží zde, v jednom průchodu, a jsou vnější vůči kompilátoru grafu, který je nikdy nehlásí jako visící. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/707_knowledge_check_refuses_malformed_records.sh | zaznamenané důkazy: nespuštěno |
| Repozitář, ve kterém se epizody uzavírají a do prahu zastarání nenásleduje žádné odvození znalostí, hlásí doctor a watch jako zastavený zapisovač a zjištění zmizí, jakmile se odvození zapíše mj_validate_knowledge_lifecycle porovnává dva fakty stejně jako validátor z ADR 0052, uzavírání epizod a následné derivace, posuzované vůči session.freshness.stale_minutes; zároveň čte zdroj životního cyklu kvůli volání deriveru, dokud je zapnuté session.knowledge_on_end. Checkout, jehož ledger neobsahuje žádný řádek knowledge.derived, se přeskočí, ne selže, takže v den, kdy derivér dorazí, žádný checkout nezčervená; první derivace přeskakování ukončí. Čtečka v Rustu knowledge_base.status dělá část posudku o aktuálnosti ze stejných čísel. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/708_health_sees_a_stopped_knowledge_writer.sh | zaznamenané důkazy: nespuštěno |
| verified zapisuje jen promote s důkazy na stdin nebo člověk úpravou souboru, nikdy deriver; povýšení přesune záznam do curated/ a zamítnutí jej nahradí s důvodem, každé zanechá řádek v knize Prázdný stdin se odmítne, protože úkon bez důkazů je jen tvrzení, a stdin s označením přepisu se odmítne z téhož důvodu, z něhož záznam nesmí žádné nést. Povýšení zachová derived_from, přidá povyšující epizodu, připojí důkazy pod sekci Evidence a zapíše knowledge.promoted; zamítnutí přepíše kandidáta na místě jako superseded se sekcí Rejected a zapíše knowledge.rejected. Deriver přeskakuje povýšené či nahrazené id, takže žádný z těchto úkonů další hranice epizody nevrátí. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/709_knowledge_promotion_is_an_act.sh | zaznamenané důkazy: nespuštěno |
| knowledge observe zapíše jeden řádek ledgeru observation.recorded s jeho druhem, tématem, tvrzením a typovanými odkazy na důkazy, uvnitř otevřené epizody, uvnitř úlohy či mimo ni, a odmítne jakýkoli jiný tvar nebo nepřítomnost epizody, aniž by cokoli zapsal Druhy jsou friction, workaround, defect, drift a repetition. Subjekt je cesta relativní k repozitáři bez „..“ nebo capability:, rule:, command:, gate: následované identifikátorem; odkaz na důkaz je file:, test:, commit:, issue: nebo claim: následované tím, co jmenuje. Výrok přes více řádků nebo začínající jako replika konverzace se odmítá. Nevalidní pozorování skončí kódem 2; pozorování zaznamenané bez otevřené epizody skončí kódem 10 s odkazem na session start, protože deriver vybírá řádky podle razítka epizody. Každé odmítnutí nechá knihu, jaká byla. Pozorování se na hranici epizody odvodí do kandidáta (ADR 0118). |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/980_a_session_records_what_it_observed.sh | zaznamenané důkazy: nespuštěno |
| Každé pozorování zaznamenané epizodou se na jejím konci a bez modelu stane vlastním kandidátem, který říká, o čem je, a knowledge candidates seskupí záznamy o jednom tématu s epizodami, které za nimi stojí; epizoda, která nic nepozorovala, zaznamená, že nic nenašla Id pochází z ADR 0091: epizoda následovaná otiskem druhu, subjektu a tvrzení, takže každý soubor patří jediné epizodě a nic se nečte, nesloučí a nezapisuje zpět. Odmítnutý záznam zůstává odmítnutý a pozdější pozorování jeho subjektu je nový kandidát uvedený vedle něj ve stejné skupině. Čtečka v Rustu knowledge_base.candidates odpovídá na stejné skupiny. ADR 0118. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/981_an_observation_becomes_a_grouped_candidate.sh | zaznamenané důkazy: nespuštěno |
| Každý kandidát odvozený z pozorování nese trasu — platform, enforcement, generator, documentation nebo project — odvozenou ze struktury jeho tématu a nikdy z jeho formulace a v repozitáři, který nástroj přijal, trasuje vlastní share/ do project platform je subjekt command:, capability: nebo rule:majordomus.*, cesta pod vendorovanými pravidly, nebo vlastní share/ nástroje, jen když leží uvnitř repozitáře; enforcement je jiné rule: nebo gate:; generator je cesta, kterou rozsah deklaruje jako generovanou nebo kterou .gitattributes označuje merge=derived; documentation je cesta pod docs/; cokoli jiného je project. Směrování nic nerozhoduje; povýšení a zamítnutí zůstávají úkony. ADR 0118. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/982_a_candidate_is_routed_by_what_it_is_about.sh | zaznamenané důkazy: nespuštěno |
| Úvodní briefing pojmenuje kandidáty čekající na posouzení na této větvi, počet a id, omezeně a v rámci rozpočtu briefingu, a jejich nepřítomnost vypíše, místo aby ji vynechal Sekce stojí po otevřených otázkách a před předávkou v odvozeném briefingu a je omezena stejně jako blok otevřených otázek. Větev kandidáta je větev epizody, kterou jmenuje jeho derived_from, čtená ze sledovaného záznamu relace nebo, dokud ještě není zapsán, z knihy; kandidát, jehož epizodu tento checkout nedokáže přeložit, je jmenován na vlastním řádku jako unattributed, ne skryt. |
docs/KNOWLEDGE.md | lib/derive.sh | test/cases/710_briefing_names_the_candidates.sh | zaznamenané důkazy: nespuštěno |
| Více kandidátů, než dovoluje strop politiky, nebo kandidát starší než věk daný politikou je advisory zjištění doctoru, které je pojmenuje; obě čísla jsou deklarována jednou v politice knowledge.candidates_max_files a knowledge.candidate_max_age_minutes se čtou přes mj_pol_req a chybějící klíč se hlásí na třídě pravidla. Stáří revize je stáří položky ve frontě — nejstarší řádek knowledge.derived, který soubor jmenuje, poté commit, který jej přidal, poté datum záznamu — nikdy ne samotný den důkazu. Kandidát, kterého správa verzí nesleduje, je rovněž jmenován, s nápravou git add za fix:, protože záznam, který git nedrží, nikdo neobjeví. Pravidlo se spouští pouze z doctoru, takže plná fronta revizí nikdy nezčervená watch. |
docs/KNOWLEDGE.md | lib/knowledge.sh | test/cases/711_candidates_are_reviewed_not_accumulated.sh | zaznamenané důkazy: nespuštěno |
| Kandidáti čekající na posouzení, jeden záznam podle id s rozřešenými odkazy a stav odvození checkoutu jsou každý jednou deklarace a odpovídají stejným obsahem přes příkazovou řádku, HTTP i MCP knowledge_base.candidates, knowledge_base.record a knowledge_base.status jsou bloky capability! v jednom modulu; majordomus generate je promítne do cest HTTP, dokumentu OpenAPI, nástrojů a zdrojů MCP, podpříkazů knowledge spustitelného souboru, katalogu modulů cockpitu a inventáře měření výkonu. Čtečka bere kandidáty z indexu, účetní knihu z modulu relací a prahy z čtení politiky v modulu kontinuity; nic nezapisuje a absenci hlásí jako absenci. |
docs/KNOWLEDGE.md | apps/majordomus-cli/src/capability/builtin/knowledge_base.rs | apps/majordomus-cli/tests/knowledge_base.rs | zaznamenané důkazy: nespuštěno |
| Každý spustitelný řádek, funkce a oblast, které změna v crate Rustu přidá nebo se jich dotkne, musí být pokryty testem; změna, která nechá nový kód nepokrytý, se odmítne a nedotčený starý dluh se ponechá scripts/ci/coverage-differential protne jediný kanonický export llvm-cov (bez testovacího kódu) s řádky, kterých se podle gitu změna dotkla vůči merge-base větve s trunkem, včetně pracovního stromu, a skončí s kódem 10 na první změněné spustitelné položce, kterou žádný test nepokrývá. Pravidlem je project.new-code-is-covered; případ 132 podstrčí záměrně nepokrytý změněný řádek, dokáže, že kontrola selže, pak jej pokryje a dokáže, že projde, a dokáže, že nerozřešitelná báze je UNKNOWN, ne tichý průchod. |
docs/COVERAGE.md | scripts/rust-coverage | test/cases/132_coverage_differential.sh | zaznamenané důkazy: nespuštěno |
| Zpráva commitu, která nesplňuje deklarovanou politiku commitů repozitáře, je odmítnuta v okamžiku zápisu a stávající dluh historie je zaznamenán a nesmí růst Soudcem je commit.validate; .githooks/commit-msg se ho ptá s odloženými cestami, což je jediný okamžik, kdy lze ještě levně zaznamenat opravu bez testu mezi svými soubory, a scripts/ci/commit-policy se téhož soudce ptá na historii přes commit.history. Hook je v seznamu vynucování politiky deklarován jako commit-policy-on-message a doctor toto zapojení sesouhlasuje. Předtím bylo pravidlo project.conventional-commits jen poradní a jeho chování při selhání znělo "Toto pravidlo nerozhoduje žádný příkaz; rozhoduje recenzent"; nashromáždilo se 48 předmětů nad deklarovanou šířku a 38 neznámých slov typu, aniž si toho někdo všiml. |
docs/COMMIT.md | apps/majordomus-cli/src/commit/verdict.rs | test/cases/274_commit_policy.sh | zaznamenané důkazy: zastaralé |
| Slovník rozsahů, proti kterému se commit posuzuje, se učí z vlastní historie tohoto repozitáře, ne z tabulky, takže subsystém commitnutý dnes je ve slovníku dnes a rozsah mimo něj je varování, ne odmítnutí commit.scopes čte nejvýše 1500 commitů z git log a počítá souvislost každého scope s prefixy adresářů do hloubky čtyř segmentů; suggest() remízu hlásí jako nejednoznačnou, místo aby ji rozhodl, a neodpoví vůbec nic, pokud žádný dřívější commit nespojuje žádný scope s danými cestami - což je poctivá odpověď pro první commit subsystému a lepší než nejoblíbenější scope repozitáře. Případ dokazuje, že slovník sleduje historii: scope, který byl před commitem o něm neznámý, je po něm známý. |
docs/COMMIT.md | apps/majordomus-cli/src/commit/scopes.rs | test/cases/274_commit_policy.sh | zaznamenané důkazy: zastaralé |
| Plán commitu nese otisk repozitáře, worktree, HEAD a přesné sady změn, ze které byl odvozen, takže plán, podle kterého se jedná po pohybu stromu, se odmítne s důvodem, ne aplikuje Několik pracovníků sdílí checkout a ještě víc jich sdílí repozitář, takže plán vypočtený na jednom HEAD a provedený na jiném by commitnul soubory, které někdo jiný stageoval, pod zprávou o práci, která už není tím, co se změnilo. Otisk není zámek a závodu nezabrání; odmítá být tím, kdo v něm tiše prohraje. Dva worktree jednoho repozitáře sdílejí repozitář a liší se worktree, což drží jejich plány od sebe. Nese také pravidlo project.derived-files-regenerated: množina změn obsahující generované soubory je jeden commit, protože jen poslední z několika by mohl nést aktuální odvozená data. |
docs/COMMIT.md | apps/majordomus-cli/src/commit/plan.rs | test/cases/274_commit_policy.sh | zaznamenané důkazy: zastaralé |
| Testovací binárka crate, která nespustila žádný test nebo jen filtrovanou podmnožinu, se zaznamená jako přeskočení, ta s neúspěšným testem jako selhání a ta, která nevytiskla žádný výsledek, jako chyba, ať jsou ve výstupu jakékoli barevné kódy; co zatím žádné tvrzení nedokáže pojmenovat, je uvedeno jako zahozené Výsledkový řádek cargo test říká ok i pro binárku, která nespustila nic, proto recorder čte její počty. Selhávající počet je selhání, binárka, která nic neprošla nebo spustila filtrovanou podmnožinu, je přeskočení, řádek bez počtu nebo binárka bez výsledkového řádku je chyba a escape sekvence se odstraňují jako první. Unit-test binárka crate, její doctesty, binárky mimo tests/ a výsledkové řádky, které nejmenoval žádný řádek Running, jsou v záznamu uvedeny jako dropped s důvodem, protože žádné tvrzení je nemůže jmenovat, dokud je runner nezaznamená po jednom. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/record.rs | test/cases/506_a_crate_binary_that_ran_nothing_is_not_a_pass.sh | zaznamenané důkazy: nespuštěno |
| Zaznamenané provedení nese commit a strom, které uvedlo měření jeho vlastního běhu, přičemž měření jmenuje report, ke kterému patří, a nikdy neskrývá sledovanou změnu; měření jiného commitu nebo jiného reportu se odmítne, lokální měření, které nejmenuje žádný report, se odmítne, report z CI bez měření se odmítne a report zaznamenaný bez měření nese neznámý strom, který se nikdy nečte jako prokázaný evidence stamp měří checkout tak, jak jej běh zanechal, přičemž účetní kniha důkazů je ignorována a vyloučeny jsou jen vlastní nesledované výstupy běhu; evidence record --provenance přenáší toto měření do provedení ve zprávě a digest čistého běhu bere z commitu. Razítko měří v okamžiku pořízení, ne v průběhu běhu, a soubor stromu úlohy CI nejmenuje žádnou zprávu, dokud CI neorazítkuje svou zprávou. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/record.rs | test/cases/505_a_recording_carries_what_its_run_measured.sh | zaznamenané důkazy: nespuštěno |
| Každý záznam vytvoří záznam běhu pojmenovávající svůj commit, strom, který měřil běh každého reportu, jeho součty a to, co chybělo, bylo zahozeno nebo neznámé, a souhrn pokrytí se k němu připojí jen svázaný s commitem a stromem, na kterých byl měřen evidence record vrací EvidenceRunRecord a zapisuje jej přes --run-record; --coverage naváže souhrn scripts/rust-coverage na jeho commit a změřený strom s minimy, která uvádějí soubory prahů. Záznam běhu o verdiktu nerozhoduje; může pouze odepřít proven jediným monotónním pravidlem, které zatím žádný povrch neaplikuje. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/run.rs | test/cases/505_a_recording_carries_what_its_run_measured.sh | zaznamenané důkazy: nespuštěno |
| Záznam pořízený s --ledger local zapisuje jen ignorovaný lokální ledger, nemění žádný sledovaný soubor a nehýbe žádným verdiktem Lokální účetní kniha leží pod .ai/local/evidence/, kterou repozitář ignoruje; sledovaná kniha zůstává jedinou autoritou, z níž se odvozuje verdikt. |
docs/EVIDENCE.md | apps/majordomus-cli/src/evidence/ledger.rs | test/cases/505_a_recording_carries_what_its_run_measured.sh | zaznamenané důkazy: nespuštěno |
| Testovací případ, který odmítne běžet, se hlásí jako přeskočení a tak se i zaznamená, takže kniha důkazů nikdy nemůže číst případ, který nic neověřil, jako důkaz tvrzení, které jmenuje Případ, který nemohl splnit předpoklad, to oznámil pomocí `exit 0`, tedy stavem, pro který runner zapsal `ok`, takže `majordomus evidence record` zanesl do ledgeru jako úspěch běh, který nic neměřil. `skip` z test/lib.sh skončí s kódem 4 a zapíše soubor, který runner pojmenovává v MJ_SKIP_MARK, runner zapíše SKIP do TSV v sériové i paralelní fázi a Outcome::Skip nic nedokazuje. Přeskočení stále není selhání: návratový kód běhu se nemění a běh, ve kterém všechny případy odmítly, je běh, ne "nenalezeny žádné případy". Ani selhání není přeskočení: případ běží pod `set -e`, `jq -e` selže s kódem 4, když nevyprodukoval výsledek, a 4 bez značky se zaznamená jako FAIL. Stará podoba je odmítnuta tam, kde by se zapsala: případ, který dokazuje toto tvrzení, čte každý soubor v test/cases/ a selže, když některý říká `exit 0` před svým posledním příkazem mimo tělo heredoc nebo komentář, takže případ může skončit se stavem 0 jen tím, že dojde ke svému konci. |
docs/EVIDENCE.md | test/run.sh | test/cases/413_a_skipped_case_is_not_a_proof.sh | zaznamenané důkazy: nespuštěno |
| Majordomus uvažuje, rozhoduje, implementuje a ověřuje i bez jediného poradce: chybějící poradci se hlásí jako běžný stav, podstatná nejistota dostane strukturované lokální posouzení a závěr netvrdí, že proběhlo nezávislé posouzení případ staví své prostředí od nuly (env -i, PATH obsahující jen git a node, žádné přihlašovací údaje), takže platí i na stroji, kde je nainstalován každý advisor. |
docs/REASONING.md | apps/majordomus-cli/src/reasoning/policy.rs | test/cases/730_reasoning_works_with_no_advisor.sh | zaznamenané důkazy: nespuštěno |
| Každý transport poradce podléhá jednomu kontraktu — typovaná selhání, termíny, zrušení, normalizované odpovědi, hlášené využití, zakrytá tajemství — prokázanému proti atrapám bez sítě, modelu či přihlašovacích údajů node --test scripts/lib/advisors/contract.test.mjs; případ odmítne běh s méně testy, než sada obsahuje. |
docs/REASONING.md | scripts/lib/advisors/contract.mjs | test/cases/731_advisor_transport_contract.sh | zaznamenané důkazy: nespuštěno |
| Poradci, kteří se neshodnou, nikdy nerozhodují počtem: závěr je odmítnut, dokud je neshoda nad jeho posouzením nevyřešená, vyřešení vyžaduje důkazy a každá obdržená odpověď musí být zvážena případ nechá zvítězit menšinový postoj, jakmile spor rozhodne experiment. |
docs/REASONING.md | apps/majordomus-cli/src/reasoning/store.rs | test/cases/732_disagreement_is_settled_by_evidence.sh | zaznamenané důkazy: nespuštěno |
| Poradce, který vyprší, je omezen rychlostí, odmítne své přihlašovací údaje nebo odpoví chybně formátovaně, je zaznamenán přesně jako takový, nikdy neblokuje práci, otevře jistič, který se po ochlazení zase zavře, a nikdy neshodí relaci circuit se odvozuje ze zaznamenaných výsledků a hodin; případ zkracuje cooldown pomocí MAJORDOMUS_REASONING_COOLDOWN_SECONDS. |
docs/REASONING.md | apps/majordomus-cli/src/reasoning/availability.rs | test/cases/733_advisor_failure_and_recovery.sh | zaznamenané důkazy: nespuštěno |
| Rozhodnutí a jeho původ přežijí relaci: další relace je najde ve svém kontextu a předávce, znovu použije platný závěr místo další konzultace a znovu jej otevře jen na základě nových důkazů skriptovaný poradce relace B by se při dotazu zasekl, takže znovupoužití dokazuje absence konzultace. |
docs/REASONING.md | apps/majordomus-cli/src/reasoning/state.rs | test/cases/734_reasoning_survives_the_session.sh | zaznamenané důkazy: nespuštěno |
| Poradci se deklarují jednou v share/advisors.yaml odkazem na tabulku providerů a katalog modelů; nový poradce se dostane do příkazové řádky, politiky, HTTP, OpenAPI, MCP i Cockpitu bez úpravy jediného konzumenta případ přidá reprezentativního poradce do fixture katalogu a přečte jej zpět z každého povrchu, pak odstraní jeho spustitelný soubor a vidí jej všude jako nedostupný. |
docs/REASONING.md | share/advisors.yaml | test/cases/735_a_new_advisor_needs_no_consumer_edit.sh | zaznamenané důkazy: nespuštěno |
| Relace si nemůže nárokovat revizi, kterou nedostala: konzultace musí jmenovat poradce, kterého vybral její zaznamenaný plán, revize závěru se počítá a reasoning check a doctor odmítnou padělaný záznam, vazbu na poskytovatele, přihlašovací údaje modelu v CI a odmítnuté tvrzení v dokumentu negativní případ: každá vada je podstrčena a musí být pojmenována příkazem reasoning check (kód 10) i doctorem. |
docs/REASONING.md | apps/majordomus-cli/src/reasoning/check.rs | test/cases/736_reasoning_check_refuses_drift.sh | zaznamenané důkazy: nespuštěno |
| Zda úloha přidala dluh, zanechala branch nebo worktree, nebo rozrostla backlog, odpovídá invariant dokončení z gitu, základů dluhu a zaznamenaného pozorování forge, měřeno od místa, kde úloha začala; odečet, který nebyl proveden, je neznámý, nikdy propuštění odečty patří repozitáři, ne jednomu pracovníkovi; případ přidá záznam do baseline, vytvoří větev a worktree a poškodí výchozí commit úlohy, aby viděl unknown místo pass. |
docs/CLI.md | apps/majordomus-cli/src/gates/closing.rs | test/cases/1037_the_closing_question_is_measured.sh | zaznamenané důkazy: nespuštěno |
| Každý diagram Mermaid sestaveného webu dostane id (diagram-<name>), seznam svých uzlů, ovládací prvky prohlížeče a odkaz pro každý uzel, který je identitou objektu, k němuž web má stránku, vše odvozené při buildu; odkaz na případ staví fixture web, spouští průchod a scripts/ci/link-check nad ním a podstrčí nedeklarovaný uzel, uzel jiného diagramu, chybějící diagram a duplicitní deklarovaný název; chování prohlížeče je specifikace diagramu ve scripts/interaction-probe, kterou toto tvrzení nepokrývá. |
docs/DIAGRAMS.md | scripts/lib/diagrams.mjs | test/cases/3006_diagrams_are_interactive_and_linkable.sh | zaznamenané důkazy: nespuštěno |
advisory
| claim | zdroj | implementace | test | zaznamenané důkazy |
|---|---|---|---|---|
| Záznam rozhodnutí bez úlohy, hlavy (head) a důvodu se hlásí a neblokuje decisions.md je záměrně ručně editovatelný, takže nepřipsatelná položka je varování. finish stále odmítne, když profil vyžaduje záznam, který nenajde. |
docs/DOCTRINE.md | lib/check.sh | test/cases/21_decision_question.sh | zaznamenané důkazy: nespuštěno |
| Třída schopností, úsilí při uvažování, upovídanost výstupu, kontext a ověřování jsou pět nezávislých os Osy se validují a promítají do instrukcí workeru. Zda je worker dodržuje, zvenčí pozorovat nelze. |
share/skeleton/profiles/implementation.yaml | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Profil pojmenovává třídu schopností, a ne model konkrétního dodavatele Přiřazení třídy ke konkrétnímu modelu je na tom, kdo spouští pracovníka. Majordomus model nikdy nevybírá ani nevolá. |
share/skeleton/profiles/deep-work.yaml | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Profil deklaruje, jaký kontext má worker načíst, a nic víc majordomus context nyní sestavuje briefing z těchto přepínačů a tento výběr je zaručen (viz context-assembly). Toto tvrzení zůstává informativní, protože nic neměří, co worker po předání briefingu skutečně přečetl. |
share/skeleton/profiles/routine.yaml | lib/check.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
| Stupňování úsilí při uvažování po opakovaných zablokovaných pokusech se zaznamenává, nepředpokládá se | share/skeleton/profiles/debugging.yaml | lib/update.sh | test/cases/03_update.sh | zaznamenané důkazy: nespuštěno |
| Profil určuje, jak často má worker vytvářet checkpoint, a zastaralá úloha se hlásí Zpráva o zastaralosti je zaručena. To, zda worker vytváří kontrolní body, zaručeno není. |
share/skeleton/policy.yaml | lib/check.sh | test/cases/04_start_check.sh | zaznamenané důkazy: nespuštěno |
plánováno
| claim | zdroj | implementace | test | zaznamenané důkazy |
|---|---|---|---|---|
| Úloha bude vědět, které commity vytvořila, místo aby je odvozovala z rozsahu Rozsah se dnes kontroluje pomocí git diff base..HEAD a rozsah commitů nemá autora, takže když do téže větve ve stejném checkoutu commituje jiná relace, její soubory se započtou jako práce této úlohy. Zaznamenání každého commitu v okamžiku, kdy vznikne, mění otázku z heuristiky nad rozsahy na výčet. Seznam by byl jen vyhledávací tabulkou, kterou git přebije, nikdy autoritou, a přepsaný commit by se ohlásil jako nerozpoznaný, ne odhadem přiřazený. |
docs/CONTINUITY.md | — | — | zaznamenané důkazy: žádný test |
| Volitelné runtime adaptéry omezí velikost čtení, velikost výstupu a fan-out podle limitů odvozených z profilu Jediná studovaná implementace byla během pár dní vrácena zpět, protože její limity byly globální konstanty, ne odvozené z úlohy. |
docs/DESIGN.md | — | — | zaznamenané důkazy: žádný test |
| Telemetrie provádění se bude zaznamenávat, jakmile ji poskytovatel poctivě zpřístupní Dnes nic neměří spotřebu tokenů. Každé pole estimated_ je označeno a vyloučeno z vynucování. |
docs/DESIGN.md | — | — | zaznamenané důkazy: žádný test |
| Majordomus uvede změnu celkového počtu tokenů jen z porovnaných, ověřených běhů, které splňují pravidlo publikace dané metodikou Měření, jeho runner i kalkulátor existují; chybí dostatek důkazů. Generovaná zpráva uvádí, co zaznamenané běhy ukazují a proč z nich zatím žádné tvrzení neplyne. |
docs/ECONOMICS.md | — | — | zaznamenané důkazy: žádný test |
| Náklady na přijatý výsledek se budou vykazovat jen z naměřených dat | docs/DESIGN.md | — | — | zaznamenané důkazy: žádný test |
| Doporučení směrování se budou odvozovat z naměřených dat o nákladech a výsledcích Pouze doporučení. Majordomus model nevolá. |
docs/DESIGN.md | — | — | zaznamenané důkazy: žádný test |
| Jedna politika bude sdílena napříč repozitáři a pracovníky | docs/DESIGN.md | — | — | zaznamenané důkazy: žádný test |
| Milník bude na GitHubu uzavřen, teprve až budou splněny intenty, které realizuje Projekce na GitHub uzavře milník jen podle jeho odvozeného stavu plánu a žádný záměr nečte. Uzavřenou práci, které důkazy odporují, odmítne kontrola intent-realization, ne tracker. |
docs/PLANNING.md | — | — | zaznamenané důkazy: žádný test |
| Kritérium rozhodnuté příkazem nebo nasazením bude splněno zaznamenaným důkazem Takové kritérium se rozváže a čte jako `not_derivable` a samo nikdy nenaplní kritérium, protože kniha důkazů zaznamenává jen běhy testů a tvrzení. Záměr, jehož kritéria jsou všechna tohoto druhu, dnes nelze splnit. |
docs/PLANNING.md | — | — | zaznamenané důkazy: žádný test |
| Žádný pull request nelze mergnout do výchozí větve, dokud je stav verdiktu červený, protože to vyžaduje pravidlo větve Pojmenováno, aby opomenutí bylo vidět, a ne jen naznačeno tvrzením výše, které je předpokládalo. Změřeno 2026-09-11 - `gh api repos/korczis/prismatic-majordomus/branches/master/protection` odpovídá 404 Branch not protected a `gh api repos/korczis/prismatic-majordomus/rulesets` odpovídá []. Na master tedy není žádný povinný stav a každá kontrola v tomto repozitáři je při merge pouze poradní, což je důvod, proč může červený trunk přetrvávat, proč mohou odvozená data zastarat po merge na straně serveru (obojí zaznamenává docs/CI.md) a proč poctivé čtení zeleného běhu zní "nic nenamítalo", a ne "nic nemohlo namítat". Uzavření je úkon v nastavení repozitáře, který provádí operátor, ne změna tohoto stromu; je zde zaznamenáno, protože slib, který nikdo nedodržuje, je horší, když nikdo nevidí, že dodržen není. |
docs/CI.md | — | — | zaznamenané důkazy: žádný test |
zamítnuto
| claim | zdroj | implementace | test | zaznamenané důkazy |
|---|---|---|---|---|
| Řazené nebo sémantické vyhledávání v trvalých záznamech záměrně není implementováno Korpus tvoří hrstka souborů Markdown a jeden JSONL. Index nebo úložiště embeddingů by byl druhý zdroj pravdy, který je nutné udržovat v souladu s prvním, a prohledání je rychlejší než tento problém. Přehodnotí se jen tehdy, objeví-li se repozitář, kde je prohledání měřitelně příliš pomalé. |
docs/CONTINUITY.md | — | — | zaznamenané důkazy: žádný test |
| Záznam úlohy nemá závislosti; posloupnost mezi relacemi se nereprezentuje Odmítnuto pro záznamy úloh, a jen pro ně. Úkoly a milníky závislosti nesou, validované jako dva grafy — viz docs/ROADMAP.md a docs/PLANNING.md. Odmítnuto zůstává, aby úloha, záznam práce jedné relace, čekala na jinou; na checkout je aktivní jedna úloha a koordinací mezi checkouty je zpráva o překryvu rozsahů. Původní znění říkalo, že nikde neexistuje graf závislostí, což přestalo platit, když přišel model plánu. |
docs/DESIGN.md | — | — | zaznamenané důkazy: žádný test |