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.

Nový a změněný spustitelný kód je pokrytý testem; starý dluh se smí jen zmenšovat

Nový a změněný spustitelný kód je pokrytý testem; starý dluh se smí jen zmenšovat

majordomus://rule/project.new-code-is-covered@1aktivní coveragetestovánídoktrína

Zdůvodnění

Pokrytí celého repozitáře je pod 100 % a starý dluh je skutečný; jediná podlaha pro celý crate nemůže zakázat nový dluh, protože změna může přidat nepokrytý kód a souhrnné číslo se sotva pohne. #214 vede čáru tam, kde ji lze udržet bez přepisování historie: kód, kterého se změna dotýká. Nový soubor dluží 100 %, nová funkce dluží 100 %, změněný spustitelný řádek dluží pokrytí a změněná větev dluží pokrytí. Nedotčený starý kód smí zůstat nepokrytý — legacy_debt_after <= legacy_debt_before — ale změna žádný přidat nesmí.

Měření není druhý názor. Je to tentýž export cargo llvm-cov, totéž vyloučení testovacího kódu z obou stran zlomku a totéž pravidlo řádek/funkce/region, které používá kontrola crate (scripts/rust-coverage); diferenciál je tento úsudek protnutý s řádky, kterých se podle gitu změna dotkla. Existuje jediná autorita pokrytí a toto pravidlo je užší otázka, která se jí klade — ne paralelní výpočet, který by se mohl rozcházet.

Požadované chování

  1. Každý spustitelný řádek, funkce a region, který změna pod apps/majordomus-cli/src/*.rs přidá nebo se jich dotkne, měřeno proti merge-base větve s trunkem (včetně pracovního stromu), je pokryt testem.
  2. Změněný řádek, který se nemapuje na žádný spustitelný kód — komentář, prázdný řádek, use, deklarace typu, testovací kód — není vázán: není tam co spouštět, takže diff jen s dokumentací nebo testy projde bez nálezů.
  3. Diferenciál se měří nad jedním kanonickým exportem a jedním vyloučením testů scripts/rust-coverage --changed; žádný konzument nepočítá pokrytí jiným způsobem.
  4. Kontrola rozlišuje PASS, FAIL, UNKNOWN (základ nelze přeložit) a BLOCKED (toolchain pro coverage chybí nebo jeho běhu nešlo důvěřovat). Unknown není pass; blocked není pass; spadlé měření nikdy není zelené.

Chování při selhání

scripts/ci/coverage-differential skončí kódem 10 a pojmenuje každý změněný spustitelný řádek, funkci nebo oblast, kterou nepokrývá žádný test, se souborem a řádkem; kontrola coverage-differential v .ai/repo/ci/gates.yaml ji spouští pro každou změnu pod crate. Skončí kódem 13, když git nedokáže vyřešit bázi (mělký klon, žádný remote), a 12, když chybí cargo-llvm-cov nebo instrumentovaný běh selhal — každé je odmítnutím certifikovat, nikdy úspěchem. Co statické čtení nevidí — že pravidlo měření je vlastní pravidlo kontroly crate — drží níže uvedený behaviorální případ, který vloží záměrně nepokrytý změněný řádek a dokáže, že kontrola selže, poté ho pokryje a dokáže, že kontrola projde.

Ověření

scripts/ci/coverage-differential (kontrola, kód 10 u nepokryté změněné položky) a test/cases/132_coverage_differential.sh, které pohání scripts/rust-coverage --changed proti pevnému exportu llvm-cov a pevnému diffu: ověřuje, že nepokrytý změněný řádek FAIL (kód 10), pokrytý změněný řádek PASS (kód 0), změna jen v dokumentaci se nepodrobuje ničemu a nevyřešitelná base je UNKNOWN (kód 13), ne tichý průchod.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/new-code-is-covered.v1.md
identity
project.new-code-is-covered@1
dostupné také jako
Zdroj MCP majordomus://rule/project.new-code-is-covered@1 · majordomus entity show rule/project-new-code-is-covered-1 · GET /api/v1/entity?uri=majordomus://rule/project.new-code-is-covered@1
v Cockpitu
/cockpit/objects/rule/project-new-code-is-covered-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.