Přeskočit na obsah

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

I1966 — Složený graf je celistvý, nebo jeho generování odmítne

Zabránit tomu, aby docs/generated/graph.json mlčky zahazoval uzly a hrany na limitu MAX_NODES. Buď se limit zvýší nebo odstraní v rámci změřeného rozpočtu velikosti, nebo generování odmítne zkrácený graf a uvede počet a limit. Commitnutý graf nesmí nikdy být předponou repozitáře, která stále prochází jako celek.

HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně

Součást capability-graph — Jeden graf schopností, dvě projekce a žádný druhý inventář toho, co tento repozitář umí.

Cíl

Zabránit tomu, aby docs/generated/graph.json mlčky zahazoval uzly a hrany na limitu MAX_NODES. Buď se limit zvýší nebo odstraní v rámci změřeného rozpočtu velikosti, nebo generování odmítne zkrácený graf a uvede počet a limit. Commitnutý graf nesmí nikdy být předponou repozitáře, která stále prochází jako celek.

Proč

graph::Builder::node odmítá každý uzel nad MAX_NODES = 2000 (apps/majordomus-cli/src/graph.rs). Nastaví metadata.truncated a compose() pak zahodí každou hranu, jejíž konec nešlo přidat. generate::graph_document odmítne nevyřešený vztah (ADR 0020, případ 390), ale zkrácený graf zapíše bez jediného slova. derive-check zůstává zelený a každý nově indexovaný objekt zaujme místo skutečného uzlu a jeho hran. To je vada, proti které byl napsán případ 390, „soubor vypadá celý a tiše mu chybí jedna hrana“, dosažená jinou cestou. Porušuje to i kritérium milníku capability-graph, že vztah, který se nevyřeší, způsobí selhání generování, místo aby tiše zmizel.

Aktuální stav

Commitnutý docs/generated/graph.json se skládá bez meze uzlů (graph::composed_complete, 9f98133aa2, PR #788) a obsahuje 2434 uzlů a 5341 hran s metadata.truncated false v 2 766 504 bajtech; hrana implemented_by z majordomus://claim/mcp-uri-resolution na apps/majordomus-cli/src/capability/builtin/objects.rs je přítomna. graph::whole odmítne useknutý graf commitnutý jako data a grafy why a product webu jím procházejí, což dokazují unit testy v graph.rs. Stále otevřené: žádný případ neřídí generování nad fixture přes mez, protože složený graf žádnou nemá, a vedle MAX_NODES (2000, mez grafu ukazovaného člověku) není zapsán žádný změřený rozpočet velikosti. Změřeno na master 4090b2b8ae, 2026-10-08.

Cílový stav

Commitnutý graph.json je buď úplný, s metadata.truncated false, nebo se nezapíše: generování selže a jmenuje počet uzlů, který potřebovalo, a strop, o který narazilo, jak už to dělá graph_document u nerozlišené relace. Pokud se strop pro commitovaný artefakt zvýší nebo odstraní, nová mez je rozpočet velikosti změřený na tomto repozitáři a zapsaný vedle konstanty s jeho měřením. Cockpit a interaktivní pohledy smějí mít vlastní mez zobrazení a dál říkají, kdy ji uplatnily.

Rozsah

  • apps/majordomus-cli/src/graph.rs
  • apps/majordomus-cli/src/generate.rs
  • test/cases/390_unresolved_relation_refuses_generation.sh
  • docs/generated/graph.json
  • docs/generated/graph.schema.json

Mimo rozsah

  • Vlastní MAX_NODES registru meshe (apps/majordomus-cli/src/mesh/registry.rs), což je nesouvisející limit na peery
  • Stránky grafů Cockpitu a why-graph a product-graph webu, kromě udržení pravdivosti jejich stávajícího upozornění na zkrácení
  • Změna toho, které objekty, tvrzení nebo relace se skládají: vstupy zůstávají, jde jen o úplnost výstupu
  • Ořezávání tvrzení nebo tříd indexu, aby se dosáhlo pod strop

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • Generování složeného grafu nad tímto repozitářem dává metadata.truncated false, nebo generování skončí nenulově a jmenuje počet uzlů a limit
  • Hrana implemented_by z majordomus://claim/mcp-uri-resolution na apps/majordomus-cli/src/capability/builtin/objects.rs je přítomna v docs/generated/graph.json, stejně jako každá hrana tvrzení, jejíž cílový soubor existuje
  • Fixture, jehož složení překračuje hranici, způsobí odmítnutí generování; nezapíše zkrácený graph.json a případ selže, pokud se odmítnutí odstraní
  • Každá nová mez na commitovaném artefaktu má svou naměřenou velikost (bajty, uzly, hrany) zapsanou vedle konstanty

Validace

  • bash test/run.sh 390_unresolved_relation_refuses_generation
  • cargo test --lib graph::
  • scripts/derive-check

Požadované důkazy

  • composed_graph_complete_or_refused
  • truncation_refusal_case
  • size_budget_measured

Důkazy

pokrývátypcommandvýsledeku commitu
composed_graph_complete_or_refusedtestjq '.graph.metadata.truncated, (.graph.nodes|length), (.graph.edges|length)' docs/generated/graph.json; cargo test --lib -- graph:: generate::tests::a_composed_graphok na e8505a431d plus tato změna, na lundra: 89 prošlo, 0 selhalo. Commitnutý docs/generated/graph.json drží 2795 uzlů a 6128 hran s metadata.truncated false, nad MAX_NODES 2000, protože graph::composed_complete komponuje bez limitu; generování nyní prochází přes graph::whole, takže zkrácená kompozice končí kódem 10 s uvedením počtu, který držela, a limitu, místo aby byla zapsána. Hrana implemented_by z majordomus://claim/mcp-uri-resolution do apps/majordomus-cli/src/capability/builtin/objects.rs je přítomnae8505a4
truncation_refusal_casetestcargo test --lib generate::tests::a_composed_graph_that_stopped_at_a_bound_is_refused_and_not_committed, pak znovu s odstraněným odmítnutím v graph::wholeok tak, jak je napsáno: kompozice omezená na jeden uzel se odmítne s exit 10 a zprávou jmenující 1 uzel a mez 2000 a celá se přijme. S odstraněným odmítnutím týž test SELHAL, panikou na generate.rs:3248, takže test selže, když se odmítnutí odstraní; soubor byl poté obnovene8505a4
size_budget_measuredartifactwc -c docs/generated/graph.json; jq '(.graph.nodes|length), (.graph.edges|length)' docs/generated/graph.jsonzměřeno na masteru 97c4521f91 a zapsáno vedle graph::composed_complete: 2795 uzlů, 6128 hran, 3 339 236 bajtů. Commitnutý artefakt nenese žádnou mez, takže se nezavedla žádná nová konstanta; MAX_NODES zůstává mezí grafu, který se ukazuje člověkue8505a4

Riziko

Zvýšení limitu bez rozpočtu problém vrátí o velikost později a graph.json už má 2,3 MB. Rázné odmítnutí způsobí selhání každého derive, dokud se mez nevyřeší, takže odmítnutí a nová mez patří do jedné změny.

Časová osa

zahájeno
2026-10-14T20:13:37Z
ověřeno
2026-10-14T20:14:49Z
dokončeno
2026-10-14T20:15:20Z

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I1966.yaml. Přečtěte jej zpět pomocí majordomus plan show I1966.

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