capability-graph — Jeden graf schopností, dvě projekce a žádný druhý inventář toho, co tento repozitář umí
Jediný typovaný deterministický graf schopností skládá registry, které už své fakty vlastní — nenahrazuje je — a přidává mezi ně typované vztahy, které se odvozují tam, kde existuje stabilní konvence, a deklarují tam, kde ne. Běžící server i publikovaný web se vykreslují z toho jednoho grafu: statická projekce je snímek, běhová projekce je snímek plus živý stav. Navigace, přehled, detail, vyhledávání, pohled na vztahy a matice pokrytí jsou všechny odvozené, visící vztah shodí generování místo toho, aby se vykreslil jako chybějící sekce, a schopnost, která existuje bez dokumentace, testu nebo vynucování, je jako taková viditelná, nikoli k nerozeznání od té, která je má.
AKTIVNÍ 11 of 33 issues done
- připraveno
- 7
- blokováno
- 15
- aktivní
- 0
- verify
- 0
- hotovo
- 11
- zrušeno
- 0
Problém
Spustitelný soubor už deklaruje schopnost jednou a promítá ji do MCP, HTTP, OpenAPI, Swaggeru, příkazové řádky a nyní Cockpitu (ADR 2, ADR 4, ADR 12). Vše, co repozitář ví a co není schopností, je mimo tento model: dovednosti, pravidla, rozhodnutí, dokumenty, případy užití, příklady, měření výkonu a nasazení jsou autoritativní každé ve svém adresáři a se schopnostmi spojené jen v hlavě čtenáře. Cockpit, úvodní stránka, navigace, indexy webu a vyhledávání si proto každé skládá vlastní pohled na to, co existuje, a každý nový subsystém stojí úpravu v každém z nich. Selhání, které to způsobuje, není vizuální: schopnost bez dokumentace, bez testu a bez vynucování vypadá přesně jako ta, která má všechno tři, protože vztah nic nerozřeší.
Výsledek
Jediný typovaný deterministický graf schopností skládá registry, které už své fakty vlastní — nenahrazuje je — a přidává mezi ně typované vztahy, které se odvozují tam, kde existuje stabilní konvence, a deklarují tam, kde ne. Běžící server i publikovaný web se vykreslují z toho jednoho grafu: statická projekce je snímek, běhová projekce je snímek plus živý stav. Navigace, přehled, detail, vyhledávání, pohled na vztahy a matice pokrytí jsou všechny odvozené, visící vztah shodí generování místo toho, aby se vykreslil jako chybějící sekce, a schopnost, která existuje bez dokumentace, testu nebo vynucování, je jako taková viditelná, nikoli k nerozeznání od té, která je má.
Aktuální stav
Cockpit je projekce registru a indexu s vlastním odvozením grafu (ADR 12, feature/ai-artifacts). Webové plochy se činí objevitelnými od svých producentů (ADR 13, rozpracováno). Dovednosti, pravidla, rozhodnutí, případy užití, dokumenty, měření výkonu a — po milníku nasazení — nasazení jsou indexovány každé jako druh a žádné z nich není se schopností spojeno ničím, co stroj čte.
Cílový stav
Přispěvatel zaregistruje schopnost v subsystému, který ji vlastní, spustí generování a Cockpit, navigace, hledání, graf, index dokumentace, matice pokrytí, statický snímek i metadata runtime se změní. Nic jiného se upravovat nemusí a CI odmítne změnu, která kterékoli z nich nechá zastaralé.
Rozsah
- apps/majordomus-cli/src/graph.rs
- apps/majordomus-cli/src/capability
- apps/majordomus-cli/src/cockpit
- apps/majordomus-cli/src/generate.rs
- share/cockpit
- web
- dokumentace
- .ai/repo/rules/project
- .ai/repo/adrs
- .ai/repo/skills
- test/cases
- .github/workflows
Mimo rozsah
- Ručně udržované menu, seznam stránek nebo inventář schopností v jakémkoli formátu, včetně YAML
- Nahrazení jakéhokoli registru, který už je autoritativní pro to, co vlastní
- Klientský aplikační framework; Cockpit zůstává renderovaný na serveru s progresivním vylepšením
- Jazyk popisu rozvržení se souřadnicemi, sloupci nebo stromy komponent jako daty
- Externí vyhledávací služba pro graf této velikosti
- Mutující ovládací prvky v Cockpitu nad rámec toho, co už bezpečným činí stávající autorizační architektura
Kritéria přijetí
- Graf skládá existující autoritativní registry a nezavádí druhé úložiště toho, co vlastní
- Každý uzel má stabilní identitu, která přežije změnu názvu, identity jsou jedinečné a generování je deterministické nad shodnými vstupy
- Vztahy jsou typované, odvozují se jen ze stabilních konvencí a vztah, který se nerozpozná, shodí generování zprávou jmenující oba konce
- Statická a runtimová projekce pocházejí ze stejného grafu a jejich reprezentace jsou po odstranění polí pouze za běhu shodné
- Povrch, který vyžaduje běžící backend, se ve statické projekci nenabízí jako použitelný a toto rozhodnutí vychází z metadat dostupnosti, ne z jakékoli kontroly umístění stránky
- Navigace, přehled, detail, vyhledávání i matice pokrytí jsou odvozeny a přidání schopnosti nevyžaduje úpravu žádné z nich
- Matice pokrytí hlásí dokumentaci, testy, vynucování a měření výkonu jen tam, kde tvrzení podporuje artefakt nebo vyřešená vazba
- Cockpit je použitelný na úzkém viewportu telefonu a jeho základní informace jsou přítomny před spuštěním JavaScriptu
- Každé zde zavedené pravidlo vynucování má kontrolu, kterou CI provádí, doloženou negativním testem
Validace
- bash test/run.sh
- bin/majordomus doctor
- cargo test --workspace --all-features
- majordomus generate --check
- scripts/cockpit-probe
Požadované důkazy
- federated_graph
- stable_identity
- relations_resolve
- dual_projection_parity
- derived_surfaces
- coverage_matrix
- mobile_and_baseline
- rules_enforced
- extensibility_proved
Rizika
- Složení osmi registrů do jednoho modelu zve devátý obchod, který drží složení. Agregát se odvozuje při každém buildu a commituje se jen jako generovaný artefakt; cokoli v něm ručně upraveného je vada.
- Odvozování z názvů je křehké v den, kdy dva subsystémy pojmenují něco stejným způsobem. Odvozování je povoleno pouze nad stabilními identitami a nejednoznačnost je výslovná deklarace, nikoli heuristika.
- Matice pokrytí, která hlásí, co tvrdí metadata, místo toho, co existuje, je horší než žádná matice, protože vypadá jako důkaz. Každá zelená buňka se musí rozřešit na artefakt.
- Cockpit a webové povrchy se právě staví na jiných větvích. Tento milník je rozšiřuje a musí přistát po nich, ne vedle nich.
- Pohled na graf je to, co chce každý postavit jako první, a to, na čem nejméně záleží, pokud je model pod ním špatný. Model je první a vizualizace ho čte.
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I1001 | HOTOVO | 0 | — | Jeden typovaný graf skládá registry, které už vlastní svá fakta |
| I1002 | HOTOVO | 1 | I1001 | Vztahy jsou typované, odvozené ze stabilních identit a nikdy nevisí do prázdna |
| I1003 | HOTOVO | 1 | I1001 | Dovednosti, pravidla, rozhodnutí, dokumenty, případy užití a měření výkonu vstupují do grafu samy za sebe |
| I1004 | HOTOVO | 1 | I1001 | Dostupnost a viditelnost jsou metadata, ne podmínky v šabloně |
| I1005 | HOTOVO | 2 | I1002, I1004 | Graf je generovaný artefakt se schématem a bez nebezpečného pole |
| I1006 | HOTOVO | 3 | I1005 | Runtime čte graf přes registr, jako každé jiné čtení |
| I1007 | PŘIPRAVENO | 3 | I1005 | Web vykresluje tentýž graf, vygenerovaný jednou |
| I1008 | BLOKOVÁNO | 4 | I1006, I1007 | Obě projekce se prokazatelně shodují s jedním modelem |
| I1009 | PŘIPRAVENO | 3 | I1004, I1005 | Každé menu v tomto repozitáři pochází z jedné derivace |
| I1010 | PŘIPRAVENO | 3 | I1005 | Přehled je to, co existuje, spočítané, ne tvrzené |
| I1011 | PŘIPRAVENO | 2 | I1002 | Matice pokrytí hlásí důkazy a nikdy zelenou buňku bez nich |
| I1012 | PŘIPRAVENO | 3 | I1005 | Jeden detailní pohled, sestavený z toho, co uzel skutečně má |
| I1013 | BLOKOVÁNO | 4 | I1007 | Vyhledávání nad grafem, generované, bez čehokoli ke spouštění |
| I1014 | BLOKOVÁNO | 4 | I1002, I1007 | Pohled na vztahy čte graf a sám nedrží žádná data |
| I1015 | HOTOVO | 2 | I1004 | Povrch, za kterým není server, se nenabízí, jako by ho měl |
| I1016 | BLOKOVÁNO | 4 | I1009 | Cockpit funguje na telefonu i dříve, než se spustí JavaScript |
| I1017 | PŘIPRAVENO | 4 | I1006 | Živý stav je překryv, který degraduje až na nic |
| I1018 | BLOKOVÁNO | 3 | I1011, I1015 | Pravidla povrchu existují jako kontroly, dokázané tím, že je donutíme selhat |
| I1019 | BLOKOVÁNO | 4 | I1018 | Jedna dovednost spouští celou smyčku a sama je v grafu |
| I1020 | BLOKOVÁNO | 4 | I1002, I1007 | Na zdraví grafu odpovídá doctor, který už odpovídá na všechno ostatní |
| I1021 | BLOKOVÁNO | 5 | I1014, I1015, I1016 | Rozhraní dokazuje prohlížeč, v šířkách, které lidé používají |
| I1022 | BLOKOVÁNO | 4 | I1007 | Drift v jakémkoli odvozeném povrchu shodí build |
| I1023 | HOTOVO | 3 | I1005 | Nic soukromého se nedostane na publikovanou stránku |
| I1024 | BLOKOVÁNO | 5 | I1014 | Rozhraní má váhu a ta se měří |
| I1025 | HOTOVO | 1 | I1001 | Federovaný model a jeho dvě projekce jsou architektonické rozhodnutí |
| I1026 | BLOKOVÁNO | 4 | I1012, I1025 | Architektura vysvětluje sama sebe, zevnitř |
| I1027 | BLOKOVÁNO | 5 | I1018, I1019 | Syntetická schopnost architekturu dokazuje, místo aby ji popisovala |
| I1028 | BLOKOVÁNO | 4 | I1009 | Inventáře, které toto nahrazuje, se odstraní, nenechají se běžet vedle |
| I1029 | BLOKOVÁNO | 6 | I1021, I1022, I1023 | Kontrola odmítne to, co by tiše rozbilo rozhraní |
| I1030 | BLOKOVÁNO | 7 | I1010, I1013, I1017, I1020, I1024, I1026, I1027, I1028, I1029 | Milník se přijímá na základě svých důkazů |
| I1031 | HOTOVO | 0 | — | Obsluhovaný povrch říká, který checkout obsluhuje |
| I1966 | HOTOVO | 0 | — | Složený graf je celý, nebo jeho generování odmítne |
| I3314 | PŘIPRAVENO | 0 | — | An object's read names the commit that last changed its file, and its page lists the commits that changed it |
Graf
flowchart LR
I1001["I1001<br/>One typed graph composes the registries that already own their facts"]:::done
I1002["I1002<br/>Relations are typed, inferred from stable identities, and never dangle"]:::done
I1003["I1003<br/>Skills, rules, decisions, documents, use cases and benchmarks enter the graph as themselves"]:::done
I1004["I1004<br/>Availability and visibility are metadata, not conditions in a template"]:::done
I1005["I1005<br/>The graph is a generated artifact with a schema and no unsafe field"]:::done
I1006["I1006<br/>The runtime reads the graph through the registry, like every other read"]:::done
I1007["I1007<br/>The site renders the same graph, generated once"]:::ready
I1008["I1008<br/>The two projections are proved to be the same model"]:::blocked
I1009["I1009<br/>Every menu in this repository comes from one derivation"]:::ready
I1010["I1010<br/>The overview is what exists, counted rather than claimed"]:::ready
I1011["I1011<br/>The coverage matrix reports evidence, and never a green cell without one"]:::ready
I1012["I1012<br/>One detail view, assembled from what a node actually has"]:::ready
I1013["I1013<br/>Search over the graph, generated, with nothing to run"]:::blocked
I1014["I1014<br/>The relation view reads the graph and holds no data of its own"]:::blocked
I1015["I1015<br/>A surface with no server behind it is not offered as if it had one"]:::done
I1016["I1016<br/>The Cockpit works on a phone and before JavaScript runs"]:::blocked
I1017["I1017<br/>Live state is an overlay that degrades to nothing"]:::ready
I1018["I1018<br/>The surface rules exist as checks, proved by making them fail"]:::blocked
I1019["I1019<br/>One skill runs the whole loop, and is itself in the graph"]:::blocked
I1020["I1020<br/>The graph's health is answered by the doctor that already answers everything else"]:::blocked
I1021["I1021<br/>A browser proves the interface, at the widths people use"]:::blocked
I1022["I1022<br/>Drift in any derived surface fails the build"]:::blocked
I1023["I1023<br/>Nothing private reaches a published page"]:::done
I1024["I1024<br/>The interface has a weight, and it is measured"]:::blocked
I1025["I1025<br/>The federated model and its two projections are an architecture decision"]:::done
I1026["I1026<br/>The architecture explains itself, from inside itself"]:::blocked
I1027["I1027<br/>A synthetic capability proves the architecture instead of describing it"]:::blocked
I1028["I1028<br/>The inventories this replaces are removed, not left running beside it"]:::blocked
I1029["I1029<br/>The gate refuses what would silently break the interface"]:::blocked
I1030["I1030<br/>The milestone is accepted on its evidence"]:::blocked
I1031["I1031<br/>A served surface says which checkout it is serving"]:::done
I1966["I1966<br/>The composed graph is whole or its generation refuses"]:::done
I3314["I3314<br/>An object's read names the commit that last changed its file, and its page lists the commits that changed it"]:::ready
I1001 --> I1002
I1001 --> I1003
I1001 --> I1004
I1001 --> I1025
I1002 --> I1005
I1002 --> I1011
I1002 --> I1014
I1002 --> I1020
I1004 --> I1005
I1004 --> I1009
I1004 --> I1015
I1005 --> I1006
I1005 --> I1007
I1005 --> I1009
I1005 --> I1010
I1005 --> I1012
I1005 --> I1023
I1006 --> I1008
I1006 --> I1017
I1007 --> I1008
I1007 --> I1013
I1007 --> I1014
I1007 --> I1020
I1007 --> I1022
I1009 --> I1016
I1009 --> I1028
I1010 --> I1030
I1011 --> I1018
I1012 --> I1026
I1013 --> I1030
I1014 --> I1021
I1014 --> I1024
I1015 --> I1018
I1015 --> I1021
I1016 --> I1021
I1017 --> I1030
I1018 --> I1019
I1018 --> I1027
I1019 --> I1027
I1020 --> I1030
I1021 --> I1029
I1022 --> I1029
I1023 --> I1029
I1024 --> I1030
I1025 --> I1026
I1026 --> I1030
I1027 --> I1030
I1028 --> I1030
I1029 --> I1030
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (33)
- I1001 Jeden typovaný graf skládá registry, které svá fakta už vlastní
- I1002 Relace jsou typované, odvozené ze stabilních identit a nikdy nevisí do prázdna
- I1003 Dovednosti, pravidla, rozhodnutí, dokumenty, případy užití a měření výkonu vstupují do grafu samy za sebe
- I1004 Dostupnost a viditelnost jsou metadata, ne podmínky v šabloně
- I1005 Graf je generovaný artefakt se schématem a bez nebezpečného pole
- I1006 Runtime čte graf přes registr, jako každé jiné čtení
- I1007 Web vykresluje tentýž graf, generovaný jednou
- I1008 Obě projekce jsou prokázány jako tentýž model
- I1009 Každá nabídka v tomto repozitáři pochází z jednoho odvození
- I1010 Přehled je to, co existuje, spočítané, ne tvrzené
- I1011 Matice pokrytí vykazuje důkazy a nikdy nezobrazí zelenou buňku bez nich
- I1012 Jeden detailní pohled, sestavený z toho, co uzel skutečně má
- I1013 Vyhledávání nad grafem, generované, bez čehokoli ke spuštění
- I1014 Pohled na vztahy čte graf a nedrží vlastní data
- I1015 Povrch bez serveru za sebou se nenabízí, jako by ho měl
- I1016 Cockpit funguje na telefonu a před spuštěním JavaScriptu
- I1017 Živý stav je překryv, který degraduje na nic
- I1018 Pravidla povrchů existují jako kontroly, doložené tím, že je donutíme selhat
- I1019 Jedna dovednost spouští celou smyčku a sama je v grafu
- I1020 Na zdraví grafu odpovídá doctor, který už odpovídá na všechno ostatní
- I1021 Rozhraní prokazuje prohlížeč, na šířkách, které lidé používají
- I1022 Drift v kterémkoli odvozeném povrchu shodí build
- I1023 Nic soukromého se nedostane na publikovanou stránku
- I1024 Rozhraní má váhu a ta se měří
- I1025 Federovaný model a jeho dvě projekce jsou architektonické rozhodnutí
- I1026 Architektura se vysvětluje sama, zevnitř sebe
- I1027 Syntetická schopnost architekturu dokládá, místo aby ji popisovala
- I1028 Inventáře, které to nahrazuje, se odstraňují, nenechávají se běžet vedle
- I1029 Kontrola odmítne to, co by tiše rozbilo rozhraní
- I1030 Milník se přijímá na základě svých důkazů
- I1031 Obsluhovaný povrch říká, který checkout obsluhuje
- I1966 Složený graf je celý, nebo jeho generování odmítne
- I3314 An object's read names the commit that last changed its file, and its page lists the commits that changed it
Kanonický záznam: .ai/repo/project/milestones/capability-graph.yaml. Přečtěte ho zpět pomocí majordomus plan show capability-graph.