Co to znamená
Nález bez způsobu, jak ho znovu spatřit, je názor. Příkaz k reprodukci je to, co umožní dalšímu člověku nebo další relaci ověřit fakt, místo aby reportu věřili — a v repozitáři, na kterém pracuje několik agentů najednou, je věřit reportu, který nikdo nemůže znovu spustit, způsob, jak chybný nález přežije týden.
Princip
mj_finding v lib/common.sh bere příkaz k reprodukci jako pátý argument a když chybí, vypíše nález bez něj. To je ta chyba: volající, který ho zapomněl, vyprodukoval nález, který se čte přesně jako nález, který žádný mít nemohl. Nic je nedokázalo rozlišit, takže je nerozlišilo nic, a mezi oběma zbýval jen recenzent.
scripts/ci/finding-reproduce-check čte každé volání pomocné funkce pro hlášení v shellovém nástroji a skriptech — mj_fail, mj_drift, mj_warn, mj_doctrine_fail — a počítá její argumenty. Tři rozhodnutí činí počet poctivým:
- Pomocná funkce jmenovaná uvnitř řetězce je text o ní, ne její volání. Sken prochází každý řádek mimo jeho uvozené úseky; bez toho by tato kontrola hlásila sama sebe.
- Přeposílající volání —
mj_fail "$@"— předá cokoli dostalo, takže počet patří tomu, kdo je zavolal, a ten volající se měří tam, kde je napsán. - Volání, které kontrola neumí zpracovat se hlásí jako
unreadablea počítá se, nikdy se tiše nepropustí. Nezpracované volání, které by se tvářilo jako vyhovující, by bylo právě touto vadou, o úroveň výš.
mj_ok a mj_info jsou výroky, ne nálezy, a neměří se: na řádku, který říká, že je něco v pořádku, není co reprodukovat.
Jak to vidět
scripts/ci/finding-reproduce-check report, and fail on new debt
scripts/ci/finding-reproduce-check --strict fail on any finding, baseline ignoredCo nepokrývá
Zda příkaz skutečně reprodukuje nález. Kontrola počítá argumenty; nemůže spustit, co čte. Volající, který předá "true" jako pátý argument, ji splní, a to musí zachytit revize.
Měří také jen shellový nástroj a skripty tohoto repozitáře. Nálezy, které hlásí spustitelný soubor v Rustu, nesou příkaz k reprodukci v typovaném poli, ne v poziční položce, takže tuto vadu mít nemohou; behaviorální případy se také neměří, protože případ nad nálezy tvrdí, a nehlásí je.
Proč existuje
Protože oba stavy byly ve výstupu nerozeznatelné. mj_finding vytiskne nález bez příkazu k reprodukci, když žádný není předán, takže „tento nález nemá příkaz“ a „tento nález nemohl žádný mít“ se vykreslily stejně a čtenář nemohl rozeznat opomenutí volajícího od skutečné nepřítomnosti.
Co to dokazuje
Samotná kontrola, spouštěná proti tomuto repozitáři v CI při každé změně. Přistála s prázdnou základní hodnotou, což je část, kterou stojí za to říct: našla devět porušení napříč lib/doctor.sh a lib/watch.sh a ta byla opravena, a ne zaznamenána, takže kontrola drží hranici na nule, a ne na devíti.