Co to znamená
Existuje jediný soubor, který říká, jaké jsou veřejné příkazy a co každý znamená: share/commands.yaml. Nese kategorii každého příkazu, jeho fázi životního cyklu, zda mění stav, zda potřebuje aktivní úlohu, co čte, co zapisuje, jaké kódy ukončení může vydat a demonstraci, která jej reprezentuje na webu.
Není autoritou pro to, co běží. To rozhoduje bin/majordomus a obě jsou drženy vůči sobě, místo aby jedno bylo odvozeno z druhého: příkaz dispečovaný bez záznamu i záznam pro příkaz, který nic nedispečuje, jsou selhání.
Princip
test/cases/30_command_registry.sh čte dispatch tabulku z binárky a povrch z registru a porovnává je v obou směrech. Kontroluje také to, co sám registr nedokáže: že id jsou jedinečná, že class, visibility a requires_task zůstávají ve svých slovnících, že každé stage, které příkaz jmenuje, registr deklaruje, a že každá konstanta MJ_EX_*, na kterou modul příkazu odkazuje, je uvedena v deklarovaných exit kódech toho příkazu.
„Interní“ je definováno, ne tvrzeno. Příkaz je veřejný přesně tehdy, když jej uvádí text nápovědy, a to se kontroluje v obou směrech, takže označení příkazu za interní se nemůže stát způsobem, jak ho udržet mimo nápovědu a uniknout povinnostem veřejného příkazu. Interní je dnes jen help.
Jak to vidět
bash test/run.sh 30_command_registry
sed -n '/^commands:/,$p' share/commands.yaml | grep '^ - id:'
grep -oE '^ [a-z|]+\)$' bin/majordomus | tr -d ' )' | tr '|' '\n' | sortCo nepokrývá
Registr popisuje povrch; negeneruje ho. Dispatch je stále case v bin/majordomus a přidání příkazu znamená úpravu obou souborů — sladění činí z zapomenutí jednoho z nich selhání, ne nemožnost. Prózová pole (summary, note) jsou redakční a nic nekontroluje, zda jsou pravdivá.
Proč existuje
Povrch existoval na čtyřech místech, která nešlo porovnat: dispatch tabulka, text použití, nadpisy ## v docs/CLI.md a parsování zprávy nápovědy generátorem webu. Jejich sladění odhalilo hned při prvním běhu dva defekty. checkpoint bylo zdokumentováno jako neschopné skončit s 10, ačkoli jeho modul zjevně může, a majordomus version --bogus vypsalo verzi a skončilo s 0, zatímco každý jiný příkaz neznámou volbu odmítne s 2, protože version se dispatchuje před parserem voleb a nikdo jej nikdy neporovnal se zbytkem povrchu.