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.

HTTP API: rules

Co tento repozitář odmítá a co dokáže pro každé odmítnutí skutečně ukázat. Pravidlo deklaruje třídu — blocking, kde kontrola práci odmítne, nebo advisory, kde se očekává, že si ho čtenář přečetl — a blok vynucování, který pojmenovává buď validátor, jejž volá dispatcher, nebo případy chování, které ho dokazují. Tento modul tuto deklaraci spojuje se stromem a s knihou zaznamenaných běhů a hlásí pro každé pravidlo, zda to, co pojmenovává, existuje, zda ho vlastní nějaký runner, zda byl někdy spuštěn, zda běh prošel a zda je běh starší než to, čeho se týká. Blokující pravidlo, jehož důkaz chybí, visí v prázdnu nebo selhává, je nález, protože pravidlo, které nikdo nedokáže prokázat, je pravidlo, které nikdo nevynucuje.

Vykresleno z docs/generated/openapi.json, který spustitelný soubor generuje ze svého registru schopností a CI jej odmítne, je-li zastaralý. Surový dokument je na /openapi.json; běžící server servíruje stejný dokument na vlastní /openapi.json a Swagger UI na /swagger.

rules

Co tento repozitář odmítá a co dokáže pro každé odmítnutí skutečně ukázat. Pravidlo deklaruje třídu — blocking, kde kontrola práci odmítne, nebo advisory, kde se očekává, že si ho čtenář přečetl — a blok vynucování, který pojmenovává buď validátor, jejž volá dispatcher, nebo případy chování, které ho dokazují. Tento modul tuto deklaraci spojuje se stromem a s knihou zaznamenaných běhů a hlásí pro každé pravidlo, zda to, co pojmenovává, existuje, zda ho vlastní nějaký runner, zda byl někdy spuštěn, zda běh prošel a zda je běh starší než to, čeho se týká. Blokující pravidlo, jehož důkaz chybí, visí v prázdnu nebo selhává, je nález, protože pravidlo, které nikdo nedokáže prokázat, je pravidlo, které nikdo nevynucuje.

GET /api/v1/rules rules.report

Každé pravidlo proti důkazu, který pro ně existuje

Celý korpus pravidel spojený se stromem a ledgerem: za každé pravidlo jeho třída, režim vynucování, validátor a případy, které jmenuje, zda je každý ve stromě, provedení za každým, kontroly CI, které je spouštějí, a věta vysvětlující, jak byl stav odvozen. Součty počítají celý korpus i při filtrované odpovědi a nálezy jmenují každé pravidlo, jehož deklarovanou třídu důkaz nepodporuje. Drží se po stavu checkoutu, nikdy déle: ledger je soubor, který se mění mimo tento proces, a jeho úprava, úprava validátoru nebo jakéhokoli sledovaného souboru, nový nesledovaný soubor, commit nebo nový ref je nová odpověď.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache checkout (max_entries=8)
  • Nástroj MCP majordomus_rules
  • zdroj MCP {"name": "rules", "uri": "majordomus://rules"}
  • $ rules report

Parametry dotazu

názevtyppovinnépopispříklady
state RuleState | null ne Jen pravidla v tomto stavu důkazu (`proven`, `inputs_unchanged`, `stale`, `failing`, `not_run`, `unrunnable`, `dangling`, `unproven`). Bez zadání: každé pravidlo.
třída RuleClass | null ne Pouze pravidla této třídy (`blocking`, `advisory`). Chybí: každé pravidlo. blokující: "blocking"
jmenný prostor string ne Jen pravidla tohoto jmenného prostoru — `project` pro vlastní pravidla tohoto repozitáře, `majordomus` pro vendorovaný balíček. Chybí: obojí.
findings_only boolean ne Pouze pravidla, jejichž deklarovanou třídu důkaz nepodporuje, s nálezy. Součty stále počítají celý korpus, takže filtrovaná odpověď nikdy neuvede nepravdivě, kolik z něj bylo zkoumáno. findings: true

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/rules?class=blocking&findings_only=true"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 RulesReport Každé pravidlo proti důkazu, který pro ně existuje: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/rules/proves rules.proves

Co tento test dokazuje

Jeden test — podle identity nebo podle cesty, kterou jej pravidlo jmenuje — s každým pravidlem, které jej jmenuje, a pravidly, která by zůstala bez jakéhokoli důkazu, kdyby byl smazán. Toto je opak rules.show a čte stejné odvození, takže se oba směry nemohou rozcházet. Je to otázka, kterou nešlo položit, dokud relace šla jen jedním směrem: před smazáním nebo přejmenováním případu, co přestane být vynucováno.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_rule_proves
  • $ rules proves

Parametry dotazu

názevtyppovinnépopispříklady
test string ano `test/cases/07_scope.sh`, nebo `suite:07_scope`, nebo `crate:product`. suite: "test/cases/125_rule_proof.sh"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/rules/proves?test=test%2Fcases%2F125_rule_proof.sh"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 TestSubjects Co tento test dokazuje: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/rules/rule rules.show

Co toto pravidlo dokazuje

Jedno pravidlo s úplným důkazem: validátor a případy, které pojmenovává, provedení za každým, kontroly, které je spouštějí, pravidla, na kterých závisí, a pravidla, která závisejí na něm — každé se stavem, ve kterém je, protože pravidlo je dokázáno jen tak daleko, jak jsou jeho závislosti — a, když není dokázáno, jedna věta říkající, co by muselo platit, aby bylo. Pravidlo, které tento repozitář nedeklaruje, je not-found, ne prázdná odpověď, protože překlep, který by se četl jako 'toto pravidlo nemá důkaz', je jediná odpověď, kterou tato schopnost nesmí dát.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache checkoutu (max_entries=32)
  • Nástroj MCP majordomus_rule
  • $ rules show

Parametry dotazu

názevtyppovinnépopispříklady
pravidlo string ano Id pravidla, s verzí nebo bez ní: `project.scope-is-declared`, nebo identita, kterou drží index. first: "majordomus.adr-integrity@1"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/rules/rule?rule=majordomus.adr-integrity%401"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 RuleDetail Co toto pravidlo dokládá: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.

Schémata

Komponenty, které používají jen operace tohoto tagu. Každý řádek je pole daného typu, jeho doc komentář je popis; typ vlastněný jinou stránkou na ni odkazuje.

RuleArtifactKind

"case" | "gate" | "unknown"
Čím cesta jmenovaná pravidlem skutečně je, rozhodnuto tím, co ji pohání, ne tím, kde leží.

Korpus jmenuje dva druhy a toto rozlišení je rozdílem mezi verdiktem a mechanismem. Případ řídí runner, takže jeho provedení lze zaznamenat a repozitář může ukázat, že prošel. Kontrola je spustitelná kontrola, kterou CI kontrola spouští jako vlastní příkaz, nebo modul unit testů (src/<module>/tests.rs), který kompiluje kontrola spouštějící cargo test crate: odmítá porušení při každém běhu a tento repozitář pro ni neeviduje žádný verdikt, takže lze ukázat mechanismus, ne výsledek. Cokoli jiného, co pravidlo jmenuje, je důkazem jen v próze.

Příklad

use majordomus_cli::rules::ArtifactKind;
assert_eq!(ArtifactKind::Case.label(), "case");
assert_eq!(ArtifactKind::Gate.label(), "gate");
  • caseBehaviorální případ, který řídí runner; jeho provedení se zaznamenávají.
  • gateSpustitelná kontrola, kterou kontrola CI spouští jako samostatný příkaz, nebo modul s unit testy, který zkompiluje kontrola spouštějící cargo test daného crate.
  • unknownAni jedno. Nic to nemůže spustit, takže nic to nemůže nikdy zaznamenat.

Používá RuleTestProof

RuleClass

"blocking" | "advisory" | "unknown"
Co pravidlo deklaruje o tom, jak silně zavazuje.

Repozitář má právě dva a nejsou to závažnosti na škále: blocking znamená, že kontrola práci odmítne, advisory znamená, že se čeká, že to čtenář přečetl. Pravidlo, jehož front matter neříká ani jedno, se hlásí jako Class::Unknown, místo aby dostalo výchozí hodnotu, protože hádání je přesně to, jak se blokující pravidlo nenápadně stane radou.

Příklad

use majordomus_cli::rules::Class;
assert_eq!(Class::Blocking.label(), "blocking");
assert_eq!(Class::parse("advisory"), Class::Advisory);
  • blockingKontrola odmítne práci, která ji porušuje.
  • advisoryNormativní pro každého, kdo to čte; porušení nic neodmítne.
  • unknownFront matter nedeklaroval žádnou třídu, nebo takovou, kterou tento repozitář nezná.

Používá rules.report RuleDefinition RuleFinding RuleSummary

RuleCoverage

object
Kolik korpusu pravidel nese každou část důkazu.

Každé zdejší číslo se počítá ze stromu. Nic v této struktuře nesmí být zapsáno nikde jinde: napevno zapsaný počet pravidel je vada, kterou tento repozitář opakovaně znovu objevuje.

Příklad

Každé číslo se počítá ze stromu; prázdný korpus se počítá jako nula, nečte se jako úplný, k čemuž slouží Coverage::default.

use majordomus_cli::rules::Coverage;
let c = Coverage::default();
assert_eq!(c.rules, 0);
assert_eq!(c.review_only, 0);
vlastnosttyppovinnépopis
rules integer (uint) ano Nalezená pravidla.
blokující integer (uint) ano Z toho blokujících.
advisory integer (uint) ano Z nich doporučující.
named_proof integer (uint) ano Pravidla jmenující validátor nebo alespoň jeden test.
artifacts_present integer (uint) ano Pravidla, jejichž každá jmenovaná cesta je ve stromu.
spustitelné integer (uint) ano Pravidla, jejichž alespoň jeden test vlastní runner.
zaznamenáno integer (uint) ano Pravidla, jejichž každý test má zaznamenaný běh.
prochází integer (uint) ano Pravidla, jejichž všechny zaznamenané běhy prošly.
řízeno kontrolou integer (uint) ano Pravidla, která spouští nějaká CI kontrola.
mechanism_only integer (uint) ano Pravidla, jejichž jediným spustitelným důkazem je kontrola: mechanismus, který odmítá porušení, bez zaznamenaného verdiktu. Počítají se odděleně od passing, aby se tato dvě čísla nikdy nečetla jako jedno.
review_only integer (uint) ano Pravidla, která s důvodem deklarují, že je vynucuje čtenář. Počítají se zvlášť od každého spustitelného režimu: růst tohoto čísla je slábnutí správy a souhrn, který by ho zahrnul do součtu, by skryl právě to.
splněno integer (uint) ano Pravidla, jejichž stav jejich třída unese.

Používá RulesReport

RuleDefinition

object
Jedno pravidlo, jak ho repozitář kanonicky deklaruje.

Příklad

Sestaveno pomocí definitions z indexu, ne ručně. Jeho řazení je to, které crate má, takže zpráva nad týmž stromem se čte dvakrát stejně.

use majordomus_cli::rules::{Class, RuleDefinition};
#### use majordomus_cli::rules::{Enforcement, Mode};
let d = RuleDefinition {
    id: "project.scope-is-declared".into(),
    identity: "project.scope-is-declared@1".into(),
    uri: "majordomus://rule/project.scope-is-declared@1".into(),
    version: 1,
    title: "Scope is declared".into(),
    description: None,
    statement: None,
    status: "active".into(),
    class: Class::Blocking,
    namespace: "project".into(),
    depends_on: vec![],
    tags: vec![],
    path: ".ai/repo/rules/project/scope-is-declared.v1.md".into(),
    enforcement: Enforcement {
        mode: Mode::Declarative, validator: None, category: None, exit_code: None,
        enforced_by: None, tests: vec![], reviewed_because: None,
    },
};
assert_eq!(d.class, Class::Blocking);
vlastnosttyppovinnépopis
id string ano Id pravidla, <namespace>.<stem>, bez verze.
identity string ano Identita, kterou index drží, s verzí.
uri string ano majordomus://rule/<identity>.
verze integer (uint64) ano Deklarovaná verze.
název string ano Název.
popis string | null ne Jednořádkový popis.
výrok string | null ne Normativní věta.
status string ano active, nebo cokoli jiného, co front matter deklaruje.
třída RuleClass → RuleClass ano Jak silně zavazuje.
jmenný prostor string ano Zda přišlo s vendorovaným balíčkem, nebo patří tomuto projektu.
depends_on array of string ne Pravidla, na kterých závisí, podle id.
štítky array of string ne Deklarované štítky.
path string ano Cesta objektu pravidla relativní k repozitáři.
vynucování RuleEnforcement → RuleEnforcement ano Jak se vynucuje, tak jak je deklarováno.

Používá RuleProof

RuleDetail

object
Jedno pravidlo, se vším, co ho dokazuje, a vším, co na něm závisí.

Příklad

Co odpovídá rules show: důkaz, pravidla po obou stranách v grafu závislostí a jedna věta říkající, co by to prokázalo.

use majordomus_cli::capability::builtin::rules::RuleSummary;
use majordomus_cli::rules::{Class, RuleState};
// a RuleDetail carries these summaries for depends_on and required_by
let dep = RuleSummary {
    id: "project.dep".into(), title: "Dep".into(),
    class: Class::Blocking, state: RuleState::NotRun,
};
assert_eq!(dep.class, Class::Blocking);
vlastnosttyppovinnépopis
důkaz RuleProof → RuleProof ano Pravidlo spojené se stromem a knihou.
depends_on pole RuleSummary → RuleSummary ano Pravidla, na kterých toto pravidlo závisí, se stavem každého z nich — pravidlo, jehož závislost není prokázána, je prokázáno jen do té míry, do jaké je prokázána ona.
required_by pole RuleSummary → RuleSummary ano Pravidla, která na tomto závisejí.
chybí string | null ne Co by muselo platit, aby toto pravidlo dosáhlo proven, slovy, nebo nic, když tam už je.

Používá rules.show

RuleEnforcement

object
Blok vynucování pravidla, čtený z x-majordomus.

Příklad

Čteno z front matter místo ručního sestavení; to je tvar, který vytváří kontrolované pravidlo, a režim se určuje tím, co blok skutečně pojmenovává.

use majordomus_cli::rules::{Enforcement, Mode};
let e = Enforcement {
    mode: Mode::Gated,
    validator: None,
    category: None,
    exit_code: None,
    enforced_by: None,
    tests: vec!["test/cases/07_scope.sh".into()],
    reviewed_because: None,
};
assert_eq!(e.mode, Mode::Gated);
vlastnosttyppovinnépopis
režim RuleMode → RuleMode ano Který ze dvou kanonických režimů, nebo žádný.
validátor string | null ne Validátor, který dispečer volá, když je režim dispečerský.
kategorie string | null ne Diagnostická kategorie, pod kterou validátor hlásí.
exit_code integer | null ne Návratový kód, kterým validátor odmítá.
enforced_by string | null ne Která hranice to vynucuje: slovo, které používá vlastní blok pravidla.
tests array of string ne Každý test, který blok jmenuje, v pořadí, v jakém jej jmenuje.
reviewed_because string | null ne Proč toto pravidlo nemůže vyjádřit nic spustitelného, když je režim reviewed. Je tam povinné: deklarovaná výjimka bez důvodu je dluh, který má nahradit.

Používá RuleDefinition

RuleFinding

object
Jedno pravidlo, jehož deklarovanou třídu důkaz nepodporuje.

Příklad

use majordomus_cli::rules::{Class, Finding, RuleState};
let f = Finding {
    rule: "project.x".into(),
    class: Class::Blocking,
    state: RuleState::Dangling,
    reason: "it names a path that is not in the tree".into(),
    reproduce: "scripts/ci/rule-proof-check".into(),
};
assert_eq!(f.state, RuleState::Dangling);
vlastnosttyppovinnépopis
pravidlo string ano Id pravidla.
třída RuleClass → RuleClass ano Třída, kterou deklaruje.
state RuleState → RuleState ano Stav, ve kterém je její důkaz.
důvod string ano Proč je tato kombinace nález.
reprodukovat string ano Příkaz, který to ukáže znovu.

Používá RulesReport

RuleMode

"dispatched" | "gated" | "reviewed" | "declarative"
Jak se pravidlo vynucuje, tak jak to deklaruje jeho vlastní front matter.

Příklad

use majordomus_cli::rules::Mode;
assert_eq!(Mode::Dispatched.label(), "dispatched");
assert_eq!(Mode::Declarative.label(), "declarative");
  • dispatchedJmenuje validátor, který dispečer doktríny volá za běhu.
  • gatedJmenuje behaviorální případy a žádný validátor; spouští je kontrola.
  • reviewedNese důvod, proč to nic spustitelného nevyjádří, a tak deklaruje, že to vynucuje čtenář. Poctivá deklarace, nikoli absence: důvod je deklarace — vedle něj není žádný příznak, protože příznak lze nastavit a důvod nastavit nelze, aniž by se napsal — je počítán odděleně od každého spustitelného režimu a odlišuje pravidlo, které nikdo nemohl automatizovat, od pravidla, k němuž se nikdo nedostal.
  • declarativeNejmenuje ani jedno. Správné pro pravidlo, které nic spustitelného nevyjádří; vada u blokujícího.

Používá RuleEnforcement

RuleProof

object
Jedno pravidlo, spojené se vším, co o něm repozitář umí ukázat.

Příklad

RuleProof je to, co report vytváří pro každé pravidlo; satisfied je to, zda stav podporuje třídu, kterou pravidlo deklaruje, což je celá otázka.

use majordomus_cli::rules::{report, RuleProof, RuleState};
use majordomus_cli::evidence::Ledger;
use majordomus_cli::synthetic::SyntheticRepository;
let repo = SyntheticRepository::small().unwrap();
let ledger = Ledger::load(repo.root()).unwrap();
let r = report(&repo.index().unwrap(), &ledger);
let first: &RuleProof = &r.rules[0];
assert_eq!(first.state, RuleState::Unproven);
assert!(first.satisfied, "an advisory rule owes no executable proof");
vlastnosttyppovinnépopis
pravidlo RuleDefinition → RuleDefinition ano Kanonická definice.
validátor RuleValidator | null → RuleValidator ne Validátor, když je režim dispečerský.
tests pole RuleTestProof → RuleTestProof ne Každý test, který pravidlo jmenuje, spojený s ledgerem.
kontroly array of string ne Každá kontrola CI, která spouští něco, co toto pravidlo jmenuje, bez duplicit.
required_by array of string ne Pravidla, která na toto závisí, podle id — opak depends_on, který žádné pravidlo nedeklaruje a který čtenář vždy chce.
state RuleState → RuleState ano Co repozitář umí říct jako celek.
význam string ano Tento stav v jedné větě.
splněno boolean ano Zda je stav takový, s jakým může třída tohoto pravidla žít.

Používají RuleDetail RulesReport

RuleState

"proven" | "inputs_unchanged" | "stale" | "gated" | "failing" | "not_run" | "reviewed" | "unrunnable" | "dangling" | "unproven"
Co o důkazu jednoho pravidla dokáže repozitář říct jako celek.

Řazeno od nejsilnějšího k nejslabšímu, aby se shrnutí seřazené podle toho čte jako žebříček. Stav pravidla se skládá ze stavů jeho částí pomocí crate::evidence::freshness::aggregate: selhávající část ho činí selhávajícím, jinak rozhoduje nejslabší část, která může nést důkaz.

Příklad

use majordomus_cli::rules::RuleState;
assert!(RuleState::Proven < RuleState::Stale);
assert!(RuleState::Stale.passing());
assert!(!RuleState::Dangling.passing());
  • provenKaždý artefakt, který jmenuje, je přítomen, a každý test, který jmenuje, má úspěšný běh, který nic neneplatní.
  • inputs_unchangedKaždý artefakt je přítomen a každý test prošel, ale alespoň jeden běh je jen neznehodnocený, ne změřený proti tomuto stromu.
  • staleProšlý běh existuje, ale něco, čeho se týká, se od té doby změnilo.
  • gatedSpustitelná kontrola provede, co toto pravidlo jmenuje, při každém běhu CI, který ji vybere. Mechanismus je ve stromě a zapojen; žádný verdikt pro něj zde není zaznamenán.
  • failingPoslední běh testu, který toto pravidlo jmenuje, neprošel.
  • not_runKaždý artefakt je přítomen a nikdy nebyl zaznamenán běh alespoň jednoho pojmenovaného testu.
  • reviewedPravidlo deklaruje, s uvedeným důvodem, že ho nic spustitelného nedokáže vyjádřit. Poctivá výjimka: počítá se odděleně od každého dokázaného pravidla, nikdy jako jedno z nich.
  • unrunnablePravidlo jmenuje cestu, kterou v tomto repozitáři neřídí žádný runner.
  • danglingPravidlo jmenuje cestu, která není ve stromu. Důkaz, který neexistuje, je horší než žádný důkaz, protože pravidlo se čte jako dokázané.
  • unprovenPravidlo nejmenuje ani validátor, ani test. Správně pro pravidlo, které nic spustitelného nevyjádří; vada u blokujícího.

Používá rules.report RuleFinding RuleProof RuleSummary

RuleSummary

object
Pravidlo jmenované odjinud, s právě tolika údaji, aby se dalo rozhodnout, zda se jím řídit.

Příklad

use majordomus_cli::capability::builtin::rules::RuleSummary;
use majordomus_cli::rules::{Class, RuleState};
let s = RuleSummary {
    id: "project.x".into(),
    title: "X".into(),
    class: Class::Advisory,
    state: RuleState::Reviewed,
};
assert_eq!(s.state, RuleState::Reviewed);
vlastnosttyppovinnépopis
id string ano Id pravidla.
název string ano Název.
třída RuleClass → RuleClass ano Jak silně zavazuje.
state RuleState → RuleState ano Co repozitář může říct o svém důkazu.

Používá RuleDetail TestSubjects

RuleTestProof

object
Jeden test, který pravidlo jmenuje, spojený s tím, co bylo proti němu zaznamenáno.

Příklad

use majordomus_cli::rules::{ArtifactKind, TestProof};
use majordomus_cli::evidence::ProofState;
let t = TestProof {
    path: "test/cases/07_scope.sh".into(),
    kind: ArtifactKind::Case,
    present: true,
    test: Some("suite:07_scope".into()),
    state: ProofState::NotRun,
    meaning: ProofState::NotRun.meaning().into(),
    execution: None,
    reproduce: Some("bash test/run.sh 07_scope".into()),
    gates: vec!["shell-suite".into()],
};
assert_eq!(t.kind, ArtifactKind::Case);
vlastnosttyppovinnépopis
path string ano Cesta, kterou pravidlo jmenuje.
druh RuleArtifactKind → RuleArtifactKind ano Co ho řídí: runner, CI kontrola, nebo nic.
přítomno boolean ano Zda je ta cesta ve stromu.
test string | null ne Kanonická identita testu (suite:<case>, crate:<binary>), když cestu vlastní runner. Chybějící znamená, že ji žádný runner neřídí, takže nikdy nelze zaznamenat žádný její běh.
state ProofState → ProofState ano Co o posledním běhu tohoto testu může říct repozitář.
význam string ano Tento stav, jednou větou, z jediného místa, kde je formulován.
provádění EvidenceExecution | null → EvidenceExecution ne Provedení za stavem, když existuje.
reprodukovat string | null ne Příkaz, který tento test spustí znovu.
kontroly array of string ne Kontroly CI, které tento test spouštějí, odvozené z vlastního modelu CI repozitáře.

Používá RuleProof

RuleValidator

object
Validátor, který odeslané pravidlo jmenuje, a zda jej něco definuje.

Validátor není cesta. validator: adr jmenuje shellovou funkci mj_validate_adr, kterou volá dispečer doktrín; nástroj ji najde skenováním lib/, přesně jako majordomus doctor. Číst ji jako cestu je chyba, kterou stojí za to zde zaznamenat, protože je to ta, kterou tento typ měl opravit: způsobí, že každé dispatchované pravidlo ve vendorovaném balíčku hlásí, že jmenuje něco, co ve stromu není, což je opak pravdy — to jsou nejlépe vynucovaná pravidla, jaká existují.

Příklad

use majordomus_cli::rules::ValidatorRef;
let v = ValidatorRef {
    name: "adr".into(),
    function: "mj_validate_adr".into(),
    defined_in: Some("lib/adr.sh".into()),
    present: true,
};
assert_eq!(v.function, "mj_validate_adr");
vlastnosttyppovinnépopis
název string ano Jméno, které pravidlo deklaruje, bez předpony mj_validate_.
funkce string ano Funkce, kterou volá dispatcher.
defined_in string | null ne Soubor, který ji definuje, je-li nějaký.
přítomno boolean ano Zda to cokoli v lib/ definuje.

Používá RuleProof

RulesReport

object
Celý korpus pravidel, ověřený.

Příklad

Celý korpus spojený se stromem a ledgerem. verdict je to, co lze o korpusu říct, že dokazuje; satisfied je jen to, že nejsou žádné nálezy, a obojí se liší, kdykoli blokující pravidlo nebylo nikdy spuštěno.

use majordomus_cli::rules::{RulesReport, RulesVerdict};
let r = RulesReport {
    head: None,
    working_tree: "clean".into(),
    verdict: RulesVerdict::Unproven,
    rules: vec![],
    states: Default::default(),
    coverage: Default::default(),
    findings: vec![],
    satisfied: true,
};
assert!(r.satisfied());
assert_ne!(r.verdict, RulesVerdict::Proven, "no findings is not proof");
vlastnosttyppovinnépopis
head string | null ne Commit, vůči kterému byla zpráva odvozena, pokud ho git uměl určit.
working_tree string ano clean, dirty nebo unknown v době odvození.
verdikt RulesVerdict → RulesVerdict ano Co dokazuje celý korpus: proven, unproven nebo failing. Odvozeno nad celým korpusem před jakýmkoli filtrem, stejně jako součty.
rules pole RuleProof → RuleProof ano Každé pravidlo, v pořadí kanonických id.
stavy mapa celých čísel (uint) ano Kolik pravidel je v jednotlivých stavech, podle vytištěného slova stavu.
coverage RuleCoverage → RuleCoverage ano Části důkazu, spočtené.
zjištění pole RuleFinding → RuleFinding ano Každé pravidlo, jehož deklarovanou třídu důkaz nepodporuje.
splněno boolean ano Zda nejsou žádná zjištění — a nic víc. Korpus, jehož žádné blokující pravidlo nikdy neběželo, je satisfied; verdict je pole, které říká, zda bylo něco dokázáno.

Používá rules.report

RulesVerdict

"proven" | "unproven" | "failing"
Co lze o celém korpusu říci, že dokazuje, jedním slovem, dřív než se přečte jakékoli číslo.

satisfied odpovídá na užší otázku — jsou zde zjištění — a korpus, ve kterém nikdy neběželo žádné blokující pravidlo, žádná nemá, protože not run, gated a reviewed jsou slabší stavy, nikoli vady (docs/DOCTRINE.md). Čteno samo, satisfied: true nad takovým korpusem říká „každé pravidlo je vynucováno“ o repozitáři, který nic neprokázal. Verdikt je odpověď, kterou takto číst nelze: je proven jen tehdy, když je každé blokující pravidlo proven — úspěšný běh zaznamenaný na čistém stromě, na commitu, který od té doby nezměnilo nic než kniha důkazů. Pravidlo, jehož vstupy se prostě nezměnily, to není (ADR 0041) a nechává korpus unproven.

Příklad

use majordomus_cli::rules::{RuleState, RulesVerdict};
// a corpus with a finding is failing, whatever else is true of it
assert_eq!(RulesVerdict::of([RuleState::Proven], true), RulesVerdict::Failing);
// one blocking rule never run is enough to leave the corpus unproven
assert_eq!(
    RulesVerdict::of([RuleState::Proven, RuleState::NotRun], false),
    RulesVerdict::Unproven
);
assert_eq!(RulesVerdict::of([RuleState::Proven], false), RulesVerdict::Proven);
// a pass whose inputs are merely unchanged is not proven
assert_eq!(
    RulesVerdict::of([RuleState::Proven, RuleState::InputsUnchanged], false),
    RulesVerdict::Unproven
);
  • provenKaždé blokující pravidlo je prokázáno: prošlým během zaznamenaným na čistém stromě, na commitu, který od té doby nezměnilo nic než ledger důkazů.
  • unprovenŽádné pravidlo není nález a alespoň jedno blokující pravidlo není doloženo — nikdy nespuštěno, kontrolováno, zrevidováno, zastaralé, nebo procházející jen s nezměněnými vstupy — nebo žádné blokující pravidlo vůbec neexistuje.
  • failingAlespoň jedno pravidlo deklaruje třídu, kterou jeho důkaz nepodporuje.

Používá RulesReport

TestSubjects

object
Co dokazuje jeden test: opak RuleDetail.

Příklad

Opak rules show: co test dokazuje a která pravidla by zůstala bez jakéhokoli důkazu, kdyby byl smazán.

use majordomus_cli::capability::builtin::rules::TestSubjects;
let t = TestSubjects {
    test: Some("suite:07_scope".into()),
    path: "test/cases/07_scope.sh".into(),
    present: true,
    reproduce: Some("bash test/run.sh 07_scope".into()),
    proves: vec![],
    sole_proof_of: vec![],
};
assert!(t.present);
vlastnosttyppovinnépopis
test string | null ne Kanonická identita testu, když cestu vlastní runner.
path string ano Cesta tak, jak byla zadána.
přítomno boolean ano Zda je ta cesta ve stromu.
reprodukovat string | null ne Příkaz, který to spustí znovu.
proves pole RuleSummary → RuleSummary ano Každé pravidlo, které tento test jmenuje, se stavem, v němž je.
sole_proof_of array of string ano Každé pravidlo, které by přišlo o svůj jediný důkaz, kdyby byl tento test smazán. To je otázka, na kterou jednosměrný vztah nikdy nemohl odpovědět.

Používá rules.proves

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