Okamžik
„Hotovo. Všechny testy procházejí.“ Mergujete. Ráno je pipeline červená, změna se dotkla souboru, na který se nikdo neptal, a „testy“, které prošly, byly ty dva, které worker zvolil ke spuštění.
Proč k tomu dochází
„Hotovo“ bylo slovo v přepisu. Nikdo nezapsal před začátkem práce, co by muselo platit, aby byla přijata — takže jediným důkazem bylo tvrzení samotného workera a plynulé tvrzení je levné. Studovaná prostředí byla toho plná: stavová pole s hodnotami ve volném textu, poznámky o dokončení, které nikdy nevznikly, a zdokumentovaná auditní stopa po krocích, kterou nikdy nezkontrolovala žádná kontrola.
Proč to lepší model nevyřeší
Schopnější model vytvoří přesvědčivější tvrzení o dokončení. To je zcela špatná osa: problém je v tom, že se tvrzení používá tam, kde se vyžadují důkazy, a řešením je kontrola, která tvrzení nečte. Sebejistota a správnost jsou nezávislé a čím plynulejší pracovník, tím méně se na jejich korelaci dá spolehnout.
Co to stojí
Přepracování je ta malá část. Velká část je eroze signálu: jakmile „hotovo“ několikrát znamenalo „tvrzeno jako hotovo“, nikdo to slovo k ničemu nepoužije a každé dokončení musí člověk znovu ověřit, což je právě náklad, který měli pracovníci odstranit.
Co Majordomus dělá
majordomus finish vyhodnotí kontrakt řádek po řádku a každý řádek vypíše jako pass nebo fail: dotčené soubory v deklarovaném rozsahu; vlastní ověřovací příkaz projektu proběhl a skončil nulou nad stromem, který se pod ním nehnul, se zaznamenaným příkazem, návratovým kódem, délkou a stromem; záznam úlohy stále popisuje tento checkout; žádná otevřená otázka k této úloze není nevyřešená; existuje předávka nebo poznámka o dokončení s požadovanými sekcemi. Pokud kterýkoli řádek selže, nic se nezapíše.
Výsledek je hodnota z uzavřeného slovníku — completed, partial, blocked, no_match, failed — ne próza. no_match znamená, že práce byla vykonána a hledaná věc neexistuje; failed znamená, že práci nebylo možné vykonat. V chatu vypadají podobně a jsou to různá fakta. Každé odmítnutí jmenuje příkaz, který selhávající řádek reprodukuje.
Před a po
before worker: "Done. All tests pass." -> merged
after majordomus finish --outcome completed --verify-command "make test"
OK scope_respected
FAIL verification_ran exit 1 [reproduce: make test]
nothing writtenJak to ověřit
Spusťte finish s ověřovacím příkazem, který selže. Nic se nezapíše, selhávající řádek je jmenován a vytiskne se příkaz k reprodukci. Pak to opravte a spusťte znovu; hlavní kniha nese návratový kód, trvání a strom, které byly skutečně pozorovány.
Co nedělá
Spouští ověřovací příkaz, který mu dáte; nerozhoduje, které testy záleží. Požadavek na regresní test v profilu debugging kontroluje jen, zda byla dotčena cesta tvaru testu, ne co test prokazuje. Nerevidouje kód.