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.

Každý objekt má schéma a pravidla se řeší v jednom stanoveném pořadí

Každý objekt má schéma a pravidla se řeší v jednom stanoveném pořadí

majordomus://rule/majordomus.schema-integrity@1aktivní schemarulespořadíkontrakt

odkazuje na

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

Zdůvodnění

Dvě věci, na které se repozitář Majordomus, kde bylo toto pravidlo napsáno, spoléhal, byly pravdivé jen proto, že je kód náhodou dělal, a ani jedna nebyla zapsána nikde, kde by to člověk mohl číst.

První je pořadí, v němž se pravidla aplikují. Množina pravidel, jejíž pořadí je náhodou načítání, je množina, o které nikdo nemůže uvažovat: které ze dvou pravidel vyhrává, lze zjistit jen spuštěním, a změna loaderu tiše mění, co repozitář znamená. Pořadí je kontrakt, takže patří do pravidla, a ne jen do lib/rules.sh.

Druhá je, že schéma je volitelné. Druh může být deklarován bez schema: a jeho metadata se pak přenášejí nevalidovaná — tiše, bez nálezu, přesně jako druh, který validuje. Každý druh bez schématu je místo, kde se překlep ve front matter stává daty. Stejná díra existuje opačným směrem: soubor schématu, který žádný druh nejmenuje, nic nepopisuje, nikdy se neaplikuje a unáší se pryč od tvaru, pro který byl napsán, aniž si toho někdo všimne. Repozitář Majordomus měl při psaní tohoto pravidla čtyři takové soubory, čímž byla díra nalezena.

A cesta pod AI vrstvou, kterou žádný zdroj nenárokuje, není čtena ničím a validována ničím, zatímco zvenčí vypadá jako součást vrstvy.

Požadované chování

Pořadí. Účinná sada je vendorovaný základ v pořadí, v jakém jej uvádí manifest, následovaný vlastními pravidly repozitáře, vyřešená jako graf závislostí: pravidlo je za každým pravidlem, které deklaruje v depends_on. Rozlišení je deterministické — stejné vstupy dávají stejné pořadí při každém běhu — a úplné: chybějící závislost, cyklus nebo dvě pravidla nárokující jednu identitu je chyba a nic se neuplatní částečně. Projektové pravidlo nesmí znovu použít vendorovaný jmenný prostor, takže základ lze nahradit, aniž by se tiše zahodilo přepsání, které nikdo nedeklaroval.

Schémata. Každý druh, který nástroj čte, deklaruje schéma, kromě druhu, jehož formát nenese žádná metadata — prostý textový soubor nemá co validovat a tato výjimka patří formátu, ne autorovi. Každý soubor schématu v distribuci je pojmenován nějakým druhem: schéma, které nic neaplikuje, se smaže nebo zapojí, nikdy se nenechá. Každé schéma se parsuje jako JSON Schema draft 2020-12.

Schéma, které popisuje stav pod ignorovanou polovinou vrstvy, není druh, protože tu polovinu nic neindexuje; uplatňuje ho příkaz, který soubor zapisuje, a pravidlo ho drží k tomu, aby ho něco uplatňovalo, a ne k tomu, aby byl druhem.

Pokrytí. Každá cesta pod .ai/repo/ je nárokována mapováním zdrojů, takže soubor ve vrstvě je buď objektem deklarovaného druhu, nebo záměrným vyloučením, a nikdy jen nepovšimnutý.

Chování při selhání

Porušení je nález FAIL v kategorii schema a příkaz, který ho našel, skončí s kódem 10. Pod watch se totéž porušení hlásí jako drift a příkaz skončí s kódem 11.

Ověření

mj_validate_schema_integrity rozhoduje o všech třech, dispatchováno z doctor, watch. Behaviorální případ test/cases/32_schema_integrity.sh je dokazuje odebráním schématu druhu, přidáním schématu, které žádný druh nejmenuje, a přidáním cesty, kterou nenárokuje žádný zdroj, a CI ten případ spouští.

Odkud to pochází

kanonický soubor
.ai/repo/rules/vendor/majordomus/rules/schema-integrity.v1.md
identity
majordomus.schema-integrity@1
dostupné také jako
Zdroj MCP majordomus://rule/majordomus.schema-integrity@1 · majordomus entity show rule/majordomus-schema-integrity-1 · GET /api/v1/entity?uri=majordomus://rule/majordomus.schema-integrity@1
v Cockpitu
/cockpit/objects/rule/majordomus-schema-integrity-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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