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: sdílené typy

Schémata, která používají operace více než jednoho tagu nebo na která nedosáhne žádná operace, a každá operace nesoucí více než jeden tag.

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.

Schémata

Komponenty, které používají operace více než jednoho tagu, nebo žádná. Každý řádek je vlastním polem typu, jeho dokumentační komentář je popis; typ, který vlastní jiná stránka, odkazuje tam.

ActiveTask

object
Aktivní úloha tohoto checkoutu, pokud nějaká je.
vlastnosttyppovinnépopis
id string ano Id úlohy.
úloha string ano Na čem se pracuje.
profil string ano Profil provádění, pod kterým běží.
výsledek string ano Jeho dosavadní typovaný výsledek: active, handed_over, nebo dokončený.
scope array of string ne Cesty, které si nárokuje.
vyžaduje array of string ne Závazky, které dluží, než je k dispozici výsledek completed.

Vedle scope a ne uvnitř něj, protože oba sliby jsou různé: rozsah je ohraničení — kam smí pracovník zapisovat — a toto je dodání. Změna může ležet celá uvnitř svého rozsahu a přesto být na notebooku necommitnutá (ADR 0030). super::obligations je to, co každou z nich posuzuje proti jejímu důkazu; zde se hlásí tak, jak je deklarována.

started_at string ne Kdy začalo.
head string ne Commit, na kterém začal.
issue string ne Úkol, o kterém worker řekl, že jej tato úloha provádí (start --issue). Jméno, nikdy stav: čemu slouží, odpovídá intents.binding při každém čtení (ADR 0111).
intent string ne Záměr, kterému podle worker slouží tato úloha (start --intent).
výjimka string ne Třída výjimky, kterou pracovník uvedl místo toho (start --exempt).
exemption_because string ne Důvod uvedený u výjimky.
binding string ne Stálé intents.binding, které odpovědělo při startu úlohy — co bylo start tehdy řečeno, ne kde práce stojí nyní.
plan_revision string ne Připnutí toho, k čemu práce byla, když úloha začala.
evidence_standing string ne Zafixovaný stav důkazů obsloužených kritérií v okamžiku, kdy úloha začala.

Používá Closure Completion Continuity

AnswerObservation

object
Kdy byl přečten stav za odpovědí: kontrakt čerstvosti odpovědi schopnosti.

Deklarováno jednou a neseno ve výstupním typu každé odpovědi, která je obrazem stavu, takže výstupní schéma, OpenAPI, schémata nástrojů MCP i JSON příkazové řádky ho nesou bez vlastního přenosu. Nastavuje se tam, kde se stav čte — build indexu, čtení gitu — nikdy executorem, který ví, kdy handler běžel, ne kdy byl pořízen stav, který četl.

use std::time::{Duration, UNIX_EPOCH};
use majordomus_cli::index::AnswerObservation;
let at = UNIX_EPOCH + Duration::from_secs(1_788_000_000);
let o = AnswerObservation::taken("git read", at, Some(Duration::from_secs(120)));
assert_eq!(o.observed_at, "2026-08-29T10:40:00Z");
assert_eq!(o.stale_after.as_deref(), Some("2026-08-29T10:42:00Z"));
assert!(!o.is_stale_at(at + Duration::from_secs(120)));
assert!(o.is_stale_at(at + Duration::from_secs(121)));
vlastnosttyppovinnépopis
observed_at string ano RFC 3339 UTC, celé sekundy: kdy se četl stav za odpovědí. Prázdné jen v odpovědi z indexu, který nebyl nikdy sestaven (ručně vyrobený v testu).
zdroj string ano Co bylo v tu dobu přečteno: index build nebo git read.
stale_after string | null ne RFC 3339 UTC: po tomto okamžiku odpovědi nelze věřit jako aktuální, i když nic neoznámilo změnu. Chybí, pokud není znám žádný slepý bod.

Používá Health RepositoryObservations

CapabilityId

string
Stabilní, globálně smysluplná identita: jmenný prostor, tečka a lokální část. repository.info a objects.get pro programy; <kind>.<identity> pro deklarativní objekt (rule.majordomus.scope-integrity@1, document.docs/CLI.md, policy..ai/repo/policy.yaml).

Gramatika: jmenný prostor odpovídá [a-z][a-z0-9_-]*; lokální část je neprázdná a neobsahuje bílý znak ani řídicí znak, jakýkoli jiný Unicode ano, protože je neprůhledná: cesta, verzovaná identita nebo jméno, jak ji vytvořilo pravidlo identity druhu.

Používá Capability CapabilitySummary CommandProvenance

CapabilityKind

"query" | "command" | "resource"
Čím schopnost je. Existují tři druhy, protože existují tři sémantiky: něco, co se provede a nic nemění, něco, co se provede a mění paměť vlastního procesu, a něco, co se čte. Příkaz může také zapisovat vlastní sledované záznamy repozitáře, což jeho druh neříká a jeho politika provádění ano (ExecutionPolicy::writes_repository).

Jak dlouho volání trvá, není druh. Čtení, které prochází každý soubor vrstvy, je stále čtení, a to, co jej činí hodným sledování — že hlásí průběh a zastaví se, když je o to požádáno — je jedna vlastnost jeho handleru, deklarovaná pomocí crate::capability::Executable::cancellable a nesená na ExecutionPolicy.

  • querySpustitelné a jen pro čtení: typovaný handler, vstupní schéma, výstupní schéma.
  • commandSpustitelná a něco měnící: typovaný handler, svázaný s POST přes HTTP a klientům MCP ohlášený jako ne jen pro čtení. Většina nesahá dál než do paměti tohoto procesu (peer, který se ohlašuje); ta, která zapisuje sledované záznamy repozitáře, to říká ve své politice provádění, odkud to čte projekce.
  • resourceDeklarativní obsah, který repozitář drží: čte se tak, jak je, nikdy se nespouští.

Používá AnswerView Capability CapabilitySummary

CapabilityProvenance

jedna ze 2 variant
Odkud schopnost pochází. Nikdy absolutní cesta.
varianta Napsáno v Rustu, v pojmenovaném modulu tohoto spustitelného souboru. Napsáno v Rustu, složeno v builtin.rs.
modulstringanoModul Rustu, ve kterém byl deskriptor složen.
zdroj"builtin"ano
varianta Přečteno z vrstvy repozitáře.
pathstringanoCesta relativní k repozitáři.
adresářstringanoAdresář, v němž cesta leží, relativně k repozitáři; . pro kořen.
source_classstringanoTřída sources.yaml, která soubor objevila.
sekcestring | nullneSekce manifestu, pod niž cesta spadá, spadá-li pod nějakou.
media_typestringanoTyp média IANA obsahu objektu.
členstring | nullneU jednoho člena kolekčního souboru jeho cesta klíče v souboru (claims.3).
zdroj"declarative"ano

Používá AnswerView Capability CapabilitySummary

Checkouty

"repository" | "this"
Které checkouty zahrnuje čtení stavu serveru.

Obě odpovědi stojí různě a to je celý důvod, proč volba existuje: checkouty repozitáře se čtou z registru gitu a každý stojí čtení leasu a sondu, kdežto samotný tento checkout stojí po jednom a nic nevyčísluje. Slovo, na které se každá varianta serializuje, je slovo, které přijímá parametr dotazu, vstup nástroje i příznak příkazové řádky.

use majordomus_cli::capability::builtin::server::Checkouts;
assert_eq!(serde_json::to_value(Checkouts::This).unwrap(), "this");
assert_eq!(serde_json::to_value(Checkouts::Repository).unwrap(), "repository");
assert_eq!(Checkouts::default(), Checkouts::Repository, "the wide answer is what a caller who says nothing has always got");
  • repositoryKaždý checkout, který git pro repozitář eviduje, primární první — vždy čtení lease a sonda. Výchozí, protože je to odpověď, kterou tato schopnost dávala, dokud se nebylo na co ptát.
  • thisPouze tento checkout. Nevyčísluje se žádný jiný checkout, nečte se žádný jiný zámek a nesonduje se žádný jiný server; servers drží jedinou položku a je to tato.

Používá brief.session peers.list server.status

CoverageStrength

"uncovered" | "observed" | "weak" | "covered"
Jak dobře je kritérium neseno plánem: zda pro ně existuje práce, zda je tato práce hlídána důkazy a zda zaznamenaná mezera už viděla, že je pravdivé.

use majordomus_cli::intent_plan::CoverageStrength;
// the wire spelling every surface answers with
assert_eq!(serde_json::to_string(&CoverageStrength::Weak).unwrap(), "\"weak\"");
// the order is the one a reader ranks by: uncovered is the worst
assert!(CoverageStrength::Uncovered < CoverageStrength::Covered);
  • uncoveredNeslouží mu žádný živý úkol.
  • observedNeslouží mu žádný živý úkol a nemusí: zaznamenaná mezera už pozorovala, že platí. Zda je splněno, je dál otázkou důkazů, nikdy této.
  • weakKaždý živý úkol, který mu slouží, nevyžaduje žádný důkaz, takže nic nebrání jeho dokončení.
  • coveredAlespoň jeden živý úkol, který mu slouží, vyžaduje před HOTOVO důkazy.

Používá CriterionCoverage

CoveringIssue

object
Jeden úkol, jak jej vidí pokrytí: který milník jej nese, jaký stav pro něj plán odvodil a kolik důkazů dluží, než smí být DONE.

use majordomus_cli::intent_plan::CoveringIssue;
let issue = CoveringIssue {
    id: "I1901".into(),
    milestone: "intent-planning".into(),
    status: "READY".into(),
    evidence_need: 2,
};
// an issue that owes no evidence covers a criterion only weakly
assert!(issue.evidence_need > 0);
vlastnosttyppovinnépopis
id string ano Id úkolu.
milestone string ano Jeho milník.
status string ano Její odvozený stav.
evidence_need integer (uint32) ano Kolik tokenů důkazů vyžaduje, než smí být DONE.

Používá CriterionCoverage

CriterionCoverage

object
Jedno kritérium jednoho záměru a práce, která je nese: živé úkoly, které mu slouží, milníky, pod nimiž ty úkoly leží, a síla z nich odvozená.

use majordomus_cli::intent_plan::{CoverageStrength, CriterionCoverage};
let c = CriterionCoverage {
    intent: "intent-planning".into(),
    criterion: "gap-is-recorded".into(),
    strength: CoverageStrength::Uncovered,
    issues: vec![],
    milestones: vec![],
};
// nothing serves it, so nothing in the plan will make it true
assert_eq!(c.strength, CoverageStrength::Uncovered);
assert!(c.issues.is_empty());
vlastnosttyppovinnépopis
intent string ano Záměr.
kritérium string ano Id kritéria v něm.
síla CoverageStrength → CoverageStrength ano Síla odvozená z úkolů, které slouží.
úkoly pole CoveringIssue → CoveringIssue ano Každý živý úkol, který mu slouží, v pořadí id.
milníky array of string ano Milníky, do nichž tyto úkoly patří, seřazené a jedinečné.

Používá IntentCoverage IntentExplanation

Diagnostika

object
Jedno zjištění o deklarativním stavu, pojmenované stabilním kódem, vázané na cestu, pokud existuje, a nesoucí příkaz, který ho reprodukuje, pokud existuje.
vlastnosttyppovinnépopis
závažnost Závažnost → Závažnost ano Jak závažné.
kód string ano Stabilní strojově čitelný kód, např. unknown_key, duplicate_identity.
path string | null ne Cesta dotčeného souboru relativní k repozitáři, pokud nějaká je.
zpráva string ano Co je špatně, pro člověka; kód je pro program.

Používá CommitPlan CommitVerdict CompiledContext JudgedCommit LayerSummary Records RepositoryEnvironment RepositoryReport Status Synced

Vzdálenost

object
Kolik commitů má jedna ref, které druhá nemá.

use majordomus_cli::worktree::trunk::Distance;
let d = Distance { behind: 779, ahead: 0 };
assert_eq!(serde_json::to_value(d).unwrap(), serde_json::json!({"behind": 779, "ahead": 0}));
vlastnosttyppovinnépopis
pozadu integer (uint64) ano Commity remote trunku, které tomuto refu chybí.
napřed integer (uint64) ano Commity tohoto refu, které vzdálenému trunku chybí.

Používá TrunkDistance

Divergence

"exact" | "advanced" | "diverged" | "different_context" | "unknown"
Jak daleko je zaznamenaný commit záznamu od commitu, na kterém je tento checkout.

Čtyři slova jsou záměrně slova shellového nástroje. Čtenář, který by narazil na advanced z jedné plochy a stale z jiné, by se tytéž čtyři fakty musel učit dvakrát.

  • exactZapsáno při tomto commitu. Důvěřujte mu.
  • advancedGit se od té doby posunul. Věřte mu a počítejte s tím, že část z toho je hotová.
  • divergedZaznamenaný commit není předek: historie byla přepsána. Věřte gitu, ne tomuto.
  • different_contextJiná větev nebo jiný worktree. Tento záznam není o vaší práci.
  • unknownGit neuměl odpovědět, takže tento proces to říká, místo aby hádal exact.

Používá ObligationClosure Record

ErrorBody

object
Tělo každé chybové odpovědi.
vlastnosttyppovinnépopis
chyba ErrorDetail → ErrorDetail ano Jediná chyba.

Používá artifacts.list brief.session capabilities.list capabilities.projections capabilities.describe release.changelog commands.get commands.list commands.graph commit.history commit.plan commit.scopes commit.validate continuity.state continuity.device continuity.plan continuity.publish continuity.records continuity.resume continuity.status continuity.sync convergence.report dashboard.overview delivery.report delivery.feature deploy.get deploy.list deploy.check deploy.observed design.system design.contrast design.explain design.tokens devcontext.compile devcontext.explain devcontext.policy devtask.issue devtask.milestone directories.list distribution.model distribution.artifact distribution.build distribution.releases distribution.status economics.summary economics.check economics.explain economics.runs editors.status entity.show entity.kinds environment.status environment.explain environment.preflight episodes.list episodes.attach episodes.detach evidence.report evidence.claim evidence.test executions.list executions.cancel executions.demonstrate executions.events executions.get executions.protocol executions.report executions.start gates.model gates.completion graph.get graph.list guard.edit health.report intents.list intents.binding intents.coverage intent_realization.explain intents.preflight intents.propose intent_realization.work intents.record intents.validate knowledge_base.candidates knowledge_base.record knowledge_base.status lifecycle.closed lifecycle.episodes lifecycle.providers lifecycle.recovery lifecycle.runtime health.live mcp.projection mesh.status mesh.claim mesh.release mesh.cooperation mesh.doctor mesh.events mesh.firewall mesh.handover.publish mesh.handover.consume mesh.identity mesh.link.hello mesh.link.sync mesh.nodes mesh.peer mesh.peers mesh.register mesh.review.request mesh.review.answer mesh.review.withdraw mesh.session.open mesh.session.close mesh.state mesh.verify models.list models.route monitor.stream objects.get objects.list objects.verify obligations.vocabulary obligations.closure observatory.capture observatory.events observatory.replay pack.plan pack.verify peers.list peers.announce perf.counters plan.model plan.delivery plan.drift plan.flight plan.issues plan.next plan.record plan.roadmap plan.status plan.transition plan.validate plan.waves product.domains product.feature product.features product.matrix product.providers product.validate integration.queue integration.cleanup integration.events integration.explain integration.prove_dry_run integration.timings integration.trains quality.report quality.rustdoc health.ready reasoning.status reasoning.advisors reasoning.check reasoning.explain reasoning.plan reasoning.record recover.orphans release.analysis release.next release.version repository.info rules.report rules.proves rules.show repository.scope repository.scope_classify objects.search served.show server.status session_domain.identity session_domain.machine shell.check skills.status skills.explain skills.verify trace.report trace.commit trace.issue web.surfaces why.list why.areas why.audiences why.diagnose why.moment why.validate worktree.topology worktree.inspect worktree.migration_plan worktree.status worktree.trunk worktree.uncommitted

ErrorDetail

object
Co se pokazilo, jak to jmenuje projekce HTTP.
vlastnosttyppovinnépopis
kód string ano Jaký druh selhání to je: invalid_input, not_found, method_not_allowed, refused, forbidden, too_large, unavailable (povrch, jehož producent neběžel) nebo internal.
zpráva string ano Důvod, pro člověka.

Používá ErrorBody

EvidenceExecution

object
Jeden zaznamenaný běh jednoho testu: vše, co si toto úložiště o něm trvale pamatuje.

Každé pole je původ. Výsledek bez commitu je anonymní zelená, což je věc, z níž se odznak nikdy nesmí odvozovat.

use majordomus_cli::evidence::{digest_of, Execution, Origin, Outcome, Runner, TestId};

let id = TestId::of("apps/majordomus-cli/tests/why.rs").unwrap();
let run = Execution {
    test: id.as_string(),
    runner: Runner::Crate,
    source: id.source(),
    outcome: Outcome::Pass,
    seconds: 12,
    commit: "0".repeat(40),
    working_tree: "clean".into(),
    digest: digest_of(b"fn main() {}"),
    at: "2026-09-11T00:00:00Z".into(),
    origin: Origin::Ci,
    command: id.reproduce(),
    run: None,
};

// it is a value in a tracked JSON file, so it has to survive the file unchanged
let back: Execution = serde_json::from_str(&serde_json::to_string(&run).unwrap()).unwrap();
assert_eq!(back, run);
assert_eq!(back.test, "crate:why");
assert_eq!(back.command, "cargo test --test why");

Příklad

Jeden zaznamenaný běh s provenancí, kterou runner nenesl: který commit, jaký stav stromu, digest vlastního zdroje testu, kdy a jak jej spustit znovu.

use majordomus_cli::evidence::{Execution, Origin, Outcome, Runner};
let e = Execution {
    test: "suite:07_scope".into(),
    runner: Runner::Suite,
    source: "test/cases/07_scope.sh".into(),
    outcome: Outcome::Pass,
    seconds: 3,
    commit: "a04b65c9".into(),
    working_tree: "clean".into(),
    digest: "sha256:00".into(),
    at: "2026-09-11T00:00:00Z".into(),
    origin: Origin::Local,
    command: "bash test/run.sh 07_scope".into(),
    run: None,
};
assert!(e.outcome.proves());
vlastnosttyppovinnépopis
test string ano Test ve formě TestId::as_string.
runner EvidenceRunner → EvidenceRunner ano Který runner jej vytvořil.
zdroj string ano Vlastní zdroj testu, relativně k repozitáři.
výsledek EvidenceOutcome → EvidenceOutcome ano Co řekl.
sekundy integer (uint64) ano Jak dlouho to trvalo, v celých sekundách.
commit string ano Plné id commitu, vůči kterému byl běh proveden.
working_tree string ano clean, dirty nebo unknown: zda strom, který běh měřil, byl commit.
otisk string ano sha256:<hex> vlastního zdroje testu, jaký byl v době zaznamenání běhu. Provedení, jehož test už tento hash nemá, nespustilo test, který tam je nyní.
v string ano Kdy bylo zaznamenáno, RFC 3339, UTC.
původ EvidenceOrigin → EvidenceOrigin ano Kde běh proběhl.
command string ano Přesný příkaz, který tento jeden test spustí znovu.
run EvidenceRun | null → EvidenceRun ne Běh průběžné integrace, v němž bylo provedení zaznamenáno, pokud šlo o běh, který se uměl pojmenovat. Chybí u lokálního běhu a u každého řádku zaznamenaného před pojmenováním běhů, proto se verze ledgeru nezměnila.

Používá ClaimEvidence EvidenceClaimProof RuleTestProof TestEvidence

EvidenceOrigin

"local" | "ci" | "release"
Kde běh proběhl. Kanonický model je neutrální vůči providerům: adaptér CI zaznamenává Ci a nic zde neví ani nezajímá, o jaké CI šlo.

use majordomus_cli::evidence::Origin;

assert_eq!(Origin::parse("CI"), Some(Origin::Ci));
assert_eq!(Origin::parse("local"), Some(Origin::Local));
// naming the provider is the adapter's business; the ledger records the kind of run,
// so a repository that changes CI does not change what its old evidence says
assert!(Origin::parse("github-actions").is_none());

Příklad

use majordomus_cli::evidence::Origin;
assert_eq!(Origin::parse("ci"), Some(Origin::Ci));
assert_eq!(Origin::parse("nowhere"), None);
  • localNěkdo to spustil na vlastním stroji.
  • ciBěh průběžné integrace.
  • releaseBěh release.

Používá EvidenceExecution

EvidenceOutcome

"pass" | "fail" | "skip" | "timeout" | "error"
Co běh řekl o jednom testu.

NotRun záměrně chybí: je to absence provedení, ne výsledek, který nějaké mělo. Zakódovat je zde by umožnilo zapisovateli zapsat „tohle neběželo“ a nechat to započítat mezi to, co běželo.

use majordomus_cli::evidence::Outcome;

assert!(Outcome::parse("ok").proves());
assert!(!Outcome::parse("timeout").proves());
// exactly one of the five is evidence of anything; the other four are reasons there
// is none, kept apart because "it declined" and "the harness broke" are different bugs
assert_eq!(Outcome::parse("skipped"), Outcome::Skip);
assert_eq!(Outcome::parse("nonsense"), Outcome::Error);

Příklad

use majordomus_cli::evidence::Outcome;
assert!(Outcome::parse("ok").proves());
assert_eq!(Outcome::parse("wat"), Outcome::Error);
  • passProšlo to.
  • failSelhalo to.
  • skipOdmítl běžet a řekl to (nesplněný předpoklad, který případ sám hlásí).
  • timeoutLimit zasáhl dřív, než skončilo.
  • errorHarness ho vůbec nemohl spustit.

Používá EvidenceExecution

EvidenceRun

object
Běh kontinuální integrace, v němž bylo provedení zaznamenáno: dost na to, aby se šlo vrátit k běhu, který ho vytvořil.

Origin říká, o jaký druh běhu šlo, a záměrně nejmenuje žádného poskytovatele. Toto jmenuje jeden konkrétní běh slovy, jimiž ho poskytovatel oslovoval v okamžiku, kdy proběhl — jeho identifikátor, pokus, workflow a job a adresa, kterou čtenář následuje — protože odkaz sestavený později ze šablony by vedl tam, kam se vyvinula představa šablony o poskytovateli. Konstruuje ho jen adaptér; nic v modelu nečte jméno poskytovatele.

use majordomus_cli::evidence::RunRef;

let actions = |k: &str| {
    let v = match k {
        "GITHUB_ACTIONS" => "true",
        "GITHUB_SERVER_URL" => "https://github.com",
        "GITHUB_REPOSITORY" => "owner/repo",
        "GITHUB_RUN_ID" => "42",
        "GITHUB_RUN_ATTEMPT" => "2",
        "GITHUB_WORKFLOW" => "validate",
        "GITHUB_JOB" => "evidence",
        _ => return None,
    };
    Some(v.to_string())
};
let run = RunRef::from_env(actions).unwrap();
assert_eq!(run.id, "42");
assert_eq!(run.attempt, 2);
assert_eq!(run.url, "https://github.com/owner/repo/actions/runs/42/attempts/2");
// a run that names neither its pull request's head nor its event still names itself
assert_eq!((run.head_sha, run.event), (None, None));

let head = "0123456789abcdef0123456789abcdef01234567";
let pull = |k: &str| match k {
    "MJ_RUN_HEAD_SHA" => Some(head.to_string()),
    "GITHUB_EVENT_NAME" => Some("pull_request".to_string()),
    _ => actions(k),
};
let run = RunRef::from_env(pull).unwrap();
assert_eq!(run.head_sha.as_deref(), Some(head));
assert_eq!(run.event.as_deref(), Some("pull_request"));

// outside a run there is nothing to name, and a half-described run is not a run
assert!(RunRef::from_env(|_| None).is_none());
assert!(RunRef::from_env(|k| (k == "GITHUB_ACTIONS").then(|| "true".to_string())).is_none());
vlastnosttyppovinnépopis
provider string ano Poskytovatel, který jej provedl, tak jak jej jmenuje adaptér, který jej zaznamenal.
id string ano Identifikátor běhu u poskytovatele.
pokus integer (uint32) ano Který pokus daného běhu, počítáno od 1.
workflow string ano Workflow, k němuž běh patří.
úloha string ano Job v rámci běhu, který provedení zaznamenal.
url string ano Kde čtenář běh najde, tak jak jej poskytovatel tehdy adresoval.
head_sha string | null ne Head commit pull requestu, když byl běh během pull requestu (jeho commit je merge commit GitHubu, strom, který běžel). Nese se vedle commitu, nikdy ho nenahrazuje.
událost string | null ne Událost, která běh spustila: push, pull_request, schedule, workflow_dispatch.

Používá EvidenceExecution

EvidenceRunner

"suite" | "crate"
Který runner výsledek vytvořil, a tedy jak se test jmenuje a znovu spouští.

Repozitář má dnes přesně dva, které tvrzení může jmenovat. Třetí by byl variantou zde a větví v TestId::of; tvrzení jmenující něco, co žádný runner nevytváří, se hlásí jako ProofState::Unrunnable, místo aby se tiše počítalo jako pokryté.

use majordomus_cli::evidence::{Runner, TestId};

// which runner owns a test is read off where the test lives, never declared
assert_eq!(TestId::of("test/cases/07_scope.sh").unwrap().runner, Runner::Suite);
assert_eq!(
    TestId::of("apps/majordomus-cli/tests/why.rs").unwrap().runner,
    Runner::Crate
);
// and a path under neither directory belongs to no runner at all
assert!(TestId::of("test/lib.sh").is_none());

Příklad

use majordomus_cli::evidence::Runner;
assert_eq!(Runner::Suite.prefix(), "suite");
assert_eq!(Runner::Crate.prefix(), "crate");
  • suiteBehaviorální případ pod test/cases/, spouštěný test/run.sh.
  • crateIntegrační testovací binárka pod apps/majordomus-cli/tests/, spouštěná cargo test.

Používá EvidenceExecution TestEvidence

ExecutionEffect

"read" | "process_state" | "repository_mutation"
Co spuštění schopnosti mění mimo volajícího.

Klasifikováno, nikdy deklarováno: vyplývá z druhu, což je pole, které deklarace už nese. Projekce to čte, aby rozhodla, zda se zeptat před spuštěním něčeho — potvrzení Cockpitu se z toho odvozuje — místo jmenování schopností, se kterými musí zacházet opatrně, což je seznam, který zastará den po napsání.

  • readNic se nemění. Každý dotaz a každý zdroj tohoto spustitelného souboru.
  • process_stateMění se paměť tohoto procesu a nic mimo něj.
  • repository_mutationRepozitář se mění.

    Po většinu života tohoto spustitelného souboru se do toho nic nezařazovalo, protože žádná schopnost žádného druhu do repozitáře nezapisovala. Ten den přišel s ADR 0040: vývojová sémantika jsou schopnosti tohoto runtime a první z nich — plan.transition — zapíše pole do vlastního sledovaného záznamu úkolu. Varianta byla do modelu přidána předem, aby to, až se to stane, řekla zde, kde ji už čte projekce a kde se na ni klient ptá před spuštěním, a ne na stránce, která zrovna vykresluje své tlačítko.

    Neklasifikuje se podle druhu, protože druh to nemůže vědět: příkaz, který oznamuje peera, a příkaz, který zapisuje sledovaný soubor, jsou stejného druhu. Handler, který zapisuje do repozitáře, to říká pomocí ExecutionPolicy::writes_repository, stejně jako ten, který se zastavuje, to říká pomocí ExecutionPolicy::stoppable.

Používá mcp.projection ExecutionPolicy McpEffectCount McpToolEntry Row

Čerstvost

"fresh" | "aging" | "stale" | "unknown" | "invalid"
Jak starý je záznam, posuzováno vůči session.freshness v politice.

Toto je druhý ze dvou nezávislých úsudků, které nese každý záznam, a existuje proto, že první na tuto otázku odpovědět nemůže. Divergence říká, kde commit záznamu leží vzhledem k HEAD; advanced znamená, že tento commit je předkem aktuálního, což zní jako shoda a platí stejně v den zápisu záznamu i o měsíc později. Mezi 2026-09-05 a 2026-09-11 tento repozitář servíroval předávku, která byla advanced a šest dní mrtvá, a každý povrch, který tento model četl — MCP, HTTP API, Cockpit — prezentoval její Next Action jako to, co udělat (ADR 0052).

Prahové hodnoty jsou politika a čtou se, nikdy se zde nezopakují: konstanta v tomto souboru by byla druhým zdrojem pravdy pro číslo, které vlastní politika, a repozitář, jehož politika předchází klíči, je hlášen jako Freshness::Unknown s názvem chybějícího klíče, místo aby byl posuzován vůči výchozí hodnotě, kterou nikdo nedeklaroval.

Těch pět slov se dělí do dvou skupin a toto dělení je to, podle čeho volající jedná: fresh a aging jsou aktuální a lze je předložit jako instrukci, stale a invalid je nutné ukázat jako historii a unknown není ani jedno — záznam, který nelze datovat, není tím ještě starý záznam, a zacházet s ním tak by tiše zahodilo naprosto dobrý briefing. Freshness::history je toto dělení a je to jediné místo, kde se rozhoduje.

use majordomus_cli::capability::builtin::continuity::Freshness;

// the two renderings are one value: the serialised word is the word `as_str` gives,
// so a reader who met `stale` from MCP and from the command line met one fact
let stale = serde_json::to_value(Freshness::Stale).unwrap();
assert_eq!(stale, serde_json::json!("stale"));
assert_eq!(stale.as_str(), Some(Freshness::Stale.as_str()));

// and the division a caller acts on: absence of a judgement is not a bad judgement
assert!(Freshness::Stale.history() && Freshness::Invalid.history());
assert!(!Freshness::Unknown.history(), "undated is not old");
assert!(!Freshness::Fresh.history() && !Freshness::Aging.history());
  • freshUvnitř session.freshness.fresh_minutes. Aktuální; jednejte podle toho.
  • agingMezi dvěma prahy. Stále aktuální, ale jeho stáří stojí za zmínku.
  • staleNa session.freshness.stale_minutes nebo později. Historie, nikdy aktuální stav.
  • unknownNemá podle čeho to posoudit: žádné časové razítko nebo nejsou deklarovány žádné prahy.
  • invalidČasové razítko, které se neparsuje, nebo takové z budoucnosti.

Používá KnowledgeCandidate KnowledgeStatus Record

HealthStatus

"ok" | "warn" | "fail" | "unknown"
Kde stojí jedna dimenze systému. Seřazeno podle závažnosti, takže o celku rozhoduje nejhorší kontrola.
  • okEngine, který rozhoduje, že je tato dimenze splněna.
  • warnNic není rozbité a něco stojí za pohled.
  • failEngine, který rozhoduje, tuto dimenzi nesplňuje.
  • unknownTento proces to nemůže rozhodnout a říká to, místo aby hlásil ok.

Používá DashboardCard DashboardOverview DashboardQuestion Health HealthCheck Readiness

IntentCriterion

object
Jedno kritérium s důkazy za ním: co záznam deklaroval, co o něm říká ledger, zda to splňuje, a příkaz, který by důkazy vytvořil znovu.

use majordomus_cli::evidence::ProofState;
use majordomus_cli::intent::{IntentCriterion, IntentEvidenceState};
let c = IntentCriterion {
    id: "stage-is-derived".into(),
    criterion: "the stage follows the plan".into(),
    evidence: "test".into(),
    reference: "apps/majordomus-cli/tests/intent.rs".into(),
    state: IntentEvidenceState::NotRun,
    met: false,
    proof: Some(ProofState::NotRun),
    reproduce: None,
};
// nothing recorded is not a pass
assert!(!c.met);
vlastnosttyppovinnépopis
id string ano Jedinečné v rámci záměru.
kritérium string ano Co je pozorovatelně pravda, když je splněno.
evidence string ano test, claim, command nebo deployment.
ref string ano Co důkazy uvádějí, tak jak jsou napsány.
state IntentEvidenceState → IntentEvidenceState ano Odvozeno: co říkají důkazy.
splněno boolean ano Odvozeno: stav je current.
důkaz ProofState | null → ProofState ne Odvozeno: vlastní verdikt modulu důkazů za state, pro kritérium test nebo claim, jehož odkaz se vyřeší. Splněné kritérium stojí na proven (průchod v této revizi) nebo inputs_unchanged (průchod, jehož pojmenované vstupy se od té doby nehnuly, což není důkaz v této revizi) a každý povrch ukazuje který, takže met není nikdy jediné zaškrtnutí pro obojí.
reprodukovat string | null ne Příkaz, který důkazy vytvoří znovu, když je znám.

Používá IntentPreflightIntent IntentView

IntentEvidenceState

"current" | "stale" | "failing" | "not_run" | "not_derivable" | "unresolved"
Co říkají důkazy za jedním kritériem, jedním slovem. Kritérium splňuje jen Current: zastaralý, selhávající, nezaznamenaný nebo neodvoditelný odkaz nikdy, a stejně tak ten, který se nevyřeší na nic.

Zda je zaznamenaný běh aktuální, se zde nerozhoduje. Kritérium test nebo claim posuzuje jediná pravdivostní tabulka modulu důkazů (evidence::freshness()) na pracovním stromu a čte se přes evidence::current, tentýž soud, jaký dělá report tvrzení a stránky subjektů; IntentEvidenceState::judged je celý překlad. Stav tak následuje důkazy oběma směry: kritérium splněné dnes se čte jako stale nebo failing, jakmile to řekne kniha nebo strom, a znovu jako splněné, jakmile se zaznamená aktuální úspěch.

use majordomus_cli::intent::IntentEvidenceState;
assert_eq!(serde_json::to_string(&IntentEvidenceState::NotRun).unwrap(), "\"not_run\"");
assert_ne!(IntentEvidenceState::Stale, IntentEvidenceState::Current);
  • currentÚspěšný běh, který je aktuálním důkazem na pracovním stromě: jeho commit je v této historii, měřil strom, který byl jeho commitem, test se stále hashuje na to, co běželo, a nic, co kritérium jmenuje, se od té doby nezměnilo — u testu jeho zdroj a zdroj i implementace každého tvrzení, které test dokazuje; u tvrzení to, co tvrzení jmenuje. Změna, kterou kritérium nejmenuje, včetně změny samotné knihy důkazů, ho ponechává aktuálním. Test, který nedokazuje žádné tvrzení jmenující implementaci, nejmenuje žádný testovaný kód, takže u něj se od běhu smí změnit jen kniha. Jediný stav, který kritérium splňuje; proof kritéria říká, zda stojí na proven, nebo na inputs_unchanged.
  • stalePrůchod, který není aktuálním důkazem: něco, co kritérium jmenuje, se od něj změnilo, nejmenuje žádný testovaný kód a od té doby se změnilo cokoli kromě ledgeru a vlastních záznamů plánu, test už nehashuje na to, co běželo, commit běhu není v této historii (nebo ho git nemohl porovnat), nebo běh měřil strom, který nebyl jeho commitem — běh na špinavém stromě, s nímž nelze žádný pozdější strom srovnat.
  • failingPoslední zaznamenaný běh selhal, vypršel časový limit nebo skončil chybou.
  • not_runReference se vyřeší a žádný běh se jí nezapočítává: žádný nebyl zaznamenán, poslední běh odmítl běžet (přeskočení), nebo tvrzení nepojmenovává žádný test, který runner spouští.
  • not_derivableReference se překládá a tento druh důkazů (command, deployment) nelze odvodit z knihy záznamů, takže sám nikdy kritérium nesplní.
  • unresolvedReference je prázdná nebo jmenuje něco, co tento repozitář nedrží.

Používá IntentCriterion IntentUnmetCriterion IntentVerdictReason

IntentFinding

object
Jeden nález validace: jeho úroveň, stabilní kód, který čtenář vyhledá grepem, záměr nebo milník, kterého se týká, jedna řádka o tom, co je špatně, a příkaz, který jej ukáže znovu.

use majordomus_cli::intent::{IntentFinding, FAIL};
let f = IntentFinding {
    level: FAIL.into(),
    code: "unknown_milestone".into(),
    subject: "intent-lifecycle".into(),
    message: "`no-such` is not a milestone".into(),
    reproduce: "majordomus intent validate".into(),
};
assert_eq!(f.level, "FAIL");
assert_eq!(f.reproduce, "majordomus intent validate");
vlastnosttyppovinnépopis
úroveň string ano FAIL nebo WARN. Selhání znamená, že model záměrů je neplatný.
kód string ano Stabilní kód, který čtenář hledá grepem.
předmět string ano Intent nebo milník, kterého se nález týká.
zpráva string ano Co je špatně, jedním řádkem.
reprodukovat string ano Příkaz, který to ukáže znovu.

Používá IntentCoverage IntentRealization IntentRealizationView IntentValidation

IntentMilestone

object
Jeden milník, který intent jmenuje, tak, jak jej plán odvozuje. Milník, který se nevyřeší, se nese s resolved: false místo zahození, protože jméno, které ukazuje na nic, je nález, ne absence.

use majordomus_cli::intent::IntentMilestone;
let named = IntentMilestone { id: "no-such".into(), resolved: false, status: None };
assert!(!named.resolved);
assert!(named.status.is_none());
vlastnosttyppovinnépopis
id string ano Id, které záměr jmenuje.
vyřešeno boolean ano Zda plán drží milník s tímto id.
status string | null ne Stav, který pro něj plán odvozuje; chybí, když se nevyřeší.

Používá IntentView

IntentStage

"declared" | "planned" | "executing" | "verifying" | "satisfied" | "cancelled" | "superseded"
Kde záměr stojí, odvozeno při každém čtení a nikde neuloženo.

use majordomus_cli::intent::IntentStage;
// one word every surface prints, and an order that follows the work
assert_eq!(IntentStage::Executing.as_str(), "executing");
assert!(IntentStage::Declared < IntentStage::Satisfied);
  • declaredPojmenovaný milník se nerozloží, nebo žádný není pojmenován.
  • plannedKaždý milník se rozpoznává a žádný nezačal.
  • executingMilník je rozpracován.
  • verifyingKaždý milník, který se počítá, je HOTOVO; splnění zatím není doloženo.
  • satisfiedOvěřuje se a každé kritérium má aktuální důkaz.
  • cancelledZáznam říká, že byla opuštěna.
  • supersededZáznam jmenuje záměr, který ho nahradil.

Používá IntentLink IntentPreflightIntent IntentPreflightMatch IntentRealizationView IntentView

IntentVerdict

object
Zda důkazy samy záměr rozhodují a které kritérium ho drží zpátky: každé nesplněné kritérium v pořadí, v němž je záznam deklaruje. Prázdné, když je verdikt satisfied, a když je unknown, protože záměr nedeklaruje žádné kritérium.

use majordomus_cli::intent::{verdict, IntentVerdict, IntentVerdictState};
// an intent that declares no criterion cannot be settled by evidence
let v: IntentVerdict = verdict(&[]);
assert_eq!(v.state, IntentVerdictState::Unknown);
assert!(v.reasons.is_empty());
vlastnosttyppovinnépopis
state IntentVerdictState → IntentVerdictState ano Odvozeno: co říkají důkazy.
důvody pole IntentVerdictReason → IntentVerdictReason ano Každé kritérium, které není splněno, se stavem jeho důkazů.

Používá IntentView

IntentVerdictReason

object
Jedno kritérium, které zdržuje verdikt od satisfied: které, druh důkazu, který jmenuje, a stav, v jakém ten důkaz je — slovy samotného kritéria, ne novými.

use majordomus_cli::intent::{IntentEvidenceState, IntentVerdictReason};
let r = IntentVerdictReason {
    criterion: "probe-passes".into(),
    evidence: "test".into(),
    state: IntentEvidenceState::NotRun,
};
assert_eq!(r.state, IntentEvidenceState::NotRun);
vlastnosttyppovinnépopis
kritérium string ano Id kritéria.
evidence string ano Jeho druh důkazu: test, claim, command nebo deployment.
state IntentEvidenceState → IntentEvidenceState ano Stav těchto důkazů, jak jej kritérium hlásí.

Používá IntentVerdict

IntentVerdictState

"satisfied" | "unsatisfied" | "unknown"
Co o záměru říkají samotné důkazy, jako slovo: odvozeno z jeho kritérií a nikdy z plánu, takže může číst satisfied, zatímco milník je ještě otevřený (ADR 0107).

use majordomus_cli::intent::IntentVerdictState;
let word = serde_json::to_string(&IntentVerdictState::Unsatisfied).unwrap();
assert_eq!(word, "\"unsatisfied\"");
assert_eq!(IntentVerdictState::Satisfied.as_str(), "satisfied");
  • satisfiedKaždé kritérium má aktuální důkaz.
  • unsatisfiedKritérium, které může rozhodnout účetní kniha nebo spojení tvrzení (test, claim), není splněno.
  • unknownKaždé nesplněné kritérium je druhu, který kniha zatím nedokáže rozhodnout (command, deployment), nebo záměr nedeklaruje žádné kritérium: důkazy nemohou odpovědět.

Používá IntentVerdict

IntentView

object
Jeden záměr tak, jak jej deklaruje jeho záznam a jak jej odvozují plán a ledger: tvrzení a invarianty tak, jak byly napsány, každý milník s odvozeným stavem, každé kritérium se stavem svých důkazů, fáze, která vyplývá z obojího, a verdikt, který vyplývá pouze z důkazů.

use majordomus_cli::intent::{verdict, IntentStage, IntentVerdictState, IntentView};
let view = IntentView {
    id: "intent-lifecycle".into(),
    title: "Work is traceable to the intent it serves".into(),
    statement: "A reader can ask what work is for.".into(),
    invariants: vec!["no intent status is stored".into()],
    stage: IntentStage::Declared,
    milestones: vec![],
    satisfaction: vec![],
    met: 0,
    verdict: verdict(&[]),
    governance: vec!["adr:adr-0070".into()],
    non_goals: vec![],
    superseded_by: None,
    source: ".ai/repo/project/intents/intent-lifecycle.yaml".into(),
};
// a record naming no milestone that resolves has not been planned
assert_eq!(view.stage, IntentStage::Declared);
// and one declaring no criterion cannot be settled by evidence
assert_eq!(view.verdict.state, IntentVerdictState::Unknown);
vlastnosttyppovinnépopis
id string ano Identita, která je zároveň názvem souboru.
název string ano Jedna řádka.
výrok string ano Co se musí stát pravdou.
invarianty array of string ano Co musí zůstat pravda.
fáze IntentStage → IntentStage ano Odvozeno: fáze.
milníky pole IntentMilestone → IntentMilestone ano Milníky, každý s odvozeným stavem.
splnění pole IntentCriterion → IntentCriterion ano Kritéria, každé se svým stavem důkazů.
splněno integer (uint) ano Odvozeno: kolik kritérií je splněno.
verdikt IntentVerdict → IntentVerdict ano Odvozeno pouze z kritérií, nikdy z plánu: zda důkazy záměr uzavírají a která kritéria ho zdržují.
governance array of string ano Governance, kterou načte pracovník na tomto záměru.
non_goals array of string ano Co se záměrně nevyžaduje.
superseded_by string | null ne Náhrada, když ji záznam pojmenovává.
zdroj string ano Cesta záznamu relativní k repozitáři.

Používá intents.record IntentExplanation IntentList

ObjectProvenance

object
Odkud objekt pochází. Každé pole se počítá z repozitáře, nikdy se nepíše.
vlastnosttyppovinnépopis
path string ano Cesta relativní k repozitáři, lomítka dopředu, jak ji pojmenovává index správy verzí.
adresář string ano Adresář, v němž cesta leží, relativně k repozitáři; . pro kořen. To je pozice v hierarchii, podle níž klient řadí; nepředpokládá se žádná sémantika sloučení.
source_class string ano Třída sources.yaml, která soubor objevila (rule, readme, ...).
sekce string | null ne Sekce manifestu, pod kterou cesta spadá (rules, prompts, ...), pokud pod nějakou spadá; kořenový README.md nespadá pod žádnou.
bajty integer (uint64) ano Velikost souboru v bajtech.
člen string | null ne Pro objekt, který je jedním členem souboru kolekce: cesta klíče člena v souboru (claims.3).

Používá EntityView ObjectView

ObjectSummary

object
Jeden objekt, shrnutý pro výpis.
vlastnosttyppovinnépopis
uri string ano majordomus://<kind>/<identity>.
id string ano Id schopnosti, <kind>.<identity>.
druh string ano Druh, jako který byl objekt přečten.
identity string ano Identita v rámci druhu.
název string | null ne Název, pokud jej pravidlo názvu druhu našlo.
popis string | null ne Jednořádkový popis, pokud jej druh má.
path string ano Zdrojová cesta relativní k repozitáři.

Používá KindEntry ObjectList

ProofState

"proven" | "inputs_unchanged" | "stale" | "failing" | "not_run" | "unrunnable" | "no_test"
Co o důkazu jednoho tvrzení dokáže repozitář říct právě teď.

Seřazeno od nejsilnějšího po nejslabší, takže souhrn řazený podle toho se čte jako žebříček.

use majordomus_cli::evidence::ProofState;

let mut states = vec![ProofState::NotRun, ProofState::Stale, ProofState::Proven];
states.sort();
assert_eq!(
    states,
    vec![ProofState::Proven, ProofState::Stale, ProofState::NotRun]
);

// the two strongest are deliberately not one state: `inputs unchanged` is the absence
// of a known invalidation, and collapsing it into `proven` is the unaccountable badge
assert_ne!(ProofState::Proven, ProofState::InputsUnchanged);
assert!(ProofState::Proven < ProofState::InputsUnchanged);
assert!(ProofState::InputsUnchanged.passing());

Příklad

use majordomus_cli::evidence::ProofState;
assert!(ProofState::Proven.passing());
assert!(!ProofState::NotRun.passing());
assert!(!ProofState::InputsUnchanged.meaning().is_empty());
  • provenÚspěšný běh a od té doby se nic nezměnilo — diff proti commitu samotného provedení je prázdný kromě ledgeru. Důkaz stromu, který máte před sebou.
  • inputs_unchangedÚspěšný běh a nic, co toto tvrzení jmenuje, se od té doby nezměnilo. Ne důkaz na HEAD: něco, co tvrzení nejmenuje, mohlo běh porušit.
  • staleÚspěšný běh, ale něco, co toto tvrzení jmenuje, se od té doby změnilo. Důkaz je starší než jeho předmět.
  • failingPoslední běh testu tohoto tvrzení neprošel.
  • not_runTvrzení jmenuje test, který vlastní runner, a žádný jeho běh nebyl nikdy zaznamenán.
  • unrunnableTvrzení jmenuje cestu, kterou žádný runner v tomto repozitáři neřídí. Nic ji nemůže zaznamenat, takže nic ji tímto způsobem nemůže dokázat.
  • no_testTvrzení nejmenuje vůbec žádný test. Správně pro tvrzení planned nebo rejected a vada pro jakékoli jiné.

Používá evidence.report ClaimEvidence EvidenceClaimProof EvidenceFinding IntentCriterion RuleTestProof SkillTest

ReleaseChangeKind

"feat" | "fix" | "perf" | "refactor" | "docs" | "test" | "chore" | "ci" | "style" | "build" | "revert" | "merge" | "other"
Co conventional commit říká, že udělal.

Množina je ta, kterou používá vlastní konvence commitů repozitáře; commit, jehož předmět se nedá parsovat, je ChangeKind::Other a přesto se objeví, protože changelog, který mlčky zahazuje, co neumí klasifikovat, je changelog, který lže vynecháním.

  • featSchopnost, kterou člověk dřív neměl.
  • fixChování, které bylo špatně a už není.
  • perfVýkon, s nezměněným chováním.
  • refactorStruktura, chování beze změny.
  • docsDocumentation.
  • testTests.
  • choreBuild, pipeline, nástroje.
  • ciContinuous integration.
  • styleFormátování, chování beze změny.
  • buildBuild systém nebo jeho závislosti.
  • revertZměna, která ruší jinou.
  • mergeIntegrace: jedna linie práce přivedená do jiné.

    Není ve specifikaci conventional commits a v historii tohoto repozitáře je 38krát a přibývá, protože integrace je zde záměrný akt s předmětem, který někdo píše — merge: bring origin/master into feature/x — a ne věta, kterou skládá git merge. Jeho deklarace umožňuje validátoru držet tyto předměty na stejné šířce a se stejnými odkazy jako každý jiný commit, místo aby buď odmítal konvenci, kterou tento projekt praktikuje, nebo ji vyjímal z kontroly úplně. Changelog ho nikdy nevykresluje: commits::in_range čte log přes --no-merges, takže merge commit není záznamem release, ať je jeho předmět napsán jakkoli.

  • otherCommit, jehož předmět se nerozparsuje jako conventional commit.

Používá CommitHeader ReleaseChange ReleaseChangeGroup

ServerStanding

"absent" | "starting" | "ready" | "outdated" | "stale"
Kde stojí server checkoutu, rozhodnuto z jeho lease, zda server, který lease jmenuje, odpovídá za tento checkout, a zda to, co odpovídá, je kód tohoto spustitelného souboru.

use majordomus_cli::capability::builtin::server::ServerStanding;
let all = [ServerStanding::Absent, ServerStanding::Starting, ServerStanding::Ready,
           ServerStanding::Outdated, ServerStanding::Stale];
let words: Vec<&str> = all.iter().map(|s| s.as_str()).collect();
assert_eq!(words, ["absent", "starting", "ready", "outdated", "stale"]);
assert_eq!(serde_json::from_str::<ServerStanding>("\"stale\"").unwrap(), ServerStanding::Stale);
  • absentŽádný lease: tento checkout nic neobsluhuje.
  • startingLease bez adresy, dost mladý na to, že jeho vlastník se stále naváže.
  • readyServer, který zámek jmenuje, odpovídá za tento checkout, z kódu na disku, ve verzi tohoto spustitelného souboru.
  • outdatedServer odpovídá, ale ze staršího kódu než tento spustitelný soubor, nebo ze souboru, který byl od jeho spuštění nahrazen: všechno, co říká, je včerejšek.
  • staleLease jmenuje server, který neodpovídá, nebo to vůbec není lease.

Používají BoardView ServerStatus ServerView

Závažnost

"info" | "warning" | "error"
Jak závažná je diagnostika. Error vyloučí dotčený soubor z indexu a uvede index do zhoršeného stavu; Warning a Info neudělají ani jedno.
  • infoStojí za to vědět; nic nemění.
  • warningNěco k prohlédnutí; objekt se stále servíruje.
  • errorSoubor je vyloučen a index je degradovaný.

Používá Diagnostic EditorDiagnostic ExecutionDiagnostic Finding ProductFinding TopologyDiagnostic

Stabilita

"implemented" | "behaviorally_verified" | "experimental" | "planned" | "unsupported"
Kde schopnost stojí, ve slovníku tvrzení samotného repozitáře. Schopnost, která je Planned nebo Unsupported, může být uvedena, ale není nikdy spustitelná přes žádnou projekci; registr se jinak odmítne sestavit.
  • implementedImplementováno a zatím ho nejmenuje žádný behaviorální test.
  • behaviorally_verifiedImplementováno a dokázáno behaviorálním testem.
  • experimentalImplementováno, spustitelné a očekává se změna.
  • plannedSpecifikováno a neimplementováno: vypsáno, nikdy spustitelné.
  • unsupportedZvážené a odmítnuté: uvedeno s důvodem, nikdy spustitelné.

Používá Capability CapabilitySummary CommandNode

Shrnutí

object
Registr spočítaný: podle zdroje, druhu, stability a projekce.
vlastnosttyppovinnépopis
celkem integer (uint) ano Každá schopnost.
builtin integer (uint) ano Složeno v Rustu.
deklarativní integer (uint) ano Čteno z vrstvy.
by_kind mapa celých čísel (uint) ano Podle druhu (query, resource).
by_stability mapa celých čísel (uint) ano Podle stability.
mcp_tools integer (uint) ano S expozicí nástroje MCP.
mcp_resources integer (uint) ano S expozicí jako zdroj MCP.
http_routes integer (uint) ano S expozicí HTTP.
cli_commands integer (uint) ano S expozicí CLI.
moduly integer (uint) ano Moduly: složené, odvozené a jeden na každý deklarativní druh.
benchmark_required integer (uint) ano Spustitelné soubory, jejichž politika měření výkonu je povinná.
benchmark_waived integer (uint) ano Spustitelné soubory osvobozené od měření výkonu z typovaného důvodu.
v cache integer (uint) ano Executables, které executor cachuje.

Používá CapabilityList RepositoryReport

TrunkDistance

object
Vzdálenost checkoutu od vzdáleného trunku, posouzená.

use majordomus_cli::worktree::trunk::{Distance, TrunkDistance, TrunkStanding};
let d: TrunkDistance = serde_json::from_value(serde_json::json!({
    "standing": "stale", "local_trunk_standing": "stale",
    "worktree": "/repo", "on_trunk": true,
    "checkout": {"behind": 779, "ahead": 0},
    "thresholds": {"warn_behind": 50, "fail_behind": 300},
    "message": "779 commits behind origin/master",
})).unwrap();
assert_eq!(d.standing, TrunkStanding::Stale);
assert_eq!(d.checkout, Some(Distance { behind: 779, ahead: 0 }));
// what is absent stays absent in the answer
assert!(serde_json::to_value(&d).unwrap().get("remedy").is_none());
vlastnosttyppovinnépopis
postavení TrunkStanding → TrunkStanding ano Kde checkout stojí: jeho HEAD — s commitem, který přináší probíhající merge — posouzeno podle prahových hodnot. To je to, co jeho server poskytuje.
local_trunk_standing TrunkStanding → TrunkStanding ano Kde stojí místní větev trunku, posuzováno stejným způsobem: z čeho vychází větev z ní vytvořená. Totéž jako standing, když checkout drží trunk.
worktree string ano Změřený pracovní strom.
on_trunk boolean ano Pracovní strom drží samotnou hlavní větev.
trunk string | null ne Větev kmene, zkráceně.
remote_trunk string | null ne Remote-tracking kmen, proti němuž se počítá (origin/master).
remote_head string | null ne Commit, který pojmenovává sledovací trunk na remotu.
checkout Distance | null → Distance ne HEAD checkoutu vůči vzdálenému trunku. Zatímco probíhá merge, commity, které přináší, se počítají jako přítomné: vytvářený commit je bude obsahovat, takže merge, který přivádí checkout do aktuálního stavu, se nikdy neposuzuje podle stromu, který nahrazuje.
local_trunk Distance | null → Distance ne Lokální větev trunku proti vzdálenému trunku: z čeho vychází větev vytvořená z lokálního trunku.
fetched_at string | null ne Kdy repozitář naposledy provedl fetch (čas FETCH_HEAD), RFC 3339: okamžik, k němuž je tato odpověď pravdivá. Chybí, pokud fetch nikdy neproběhl.
prahy TrunkThresholds → TrunkThresholds ano Prahy, vůči nimž se posuzovalo, tak jak je deklaruje checkout.trunk_distance.
zpráva string ano Co postavení znamená zde, v jednom řádku.
náprava string | null ne Příkazy, které přivedou checkout a lokální trunk na aktuální stav, když je kterýkoli pozadu. Navrhované, nikdy nespouštěné.

Používá worktree.trunk ServerStatus StatusReport

TrunkStanding

"current" | "lagging" | "stale" | "unjudged" | "unmeasured"
Kde checkout stojí vůči vzdálenému trunku.

use majordomus_cli::worktree::trunk::TrunkStanding;
let s: TrunkStanding = serde_json::from_str(r#""lagging""#).unwrap();
assert_eq!(s, TrunkStanding::Lagging);
assert_eq!(serde_json::to_value(TrunkStanding::Unmeasured).unwrap(), "unmeasured");
  • currentPozadu o méně než práh varování, nebo vůbec ne.
  • laggingNa prahu varování nebo za ním: to, co obsluhuje, je dost staré na to, aby klamalo.
  • staleNa prahu selhání nebo za ním: co servíruje, je špatný strom.
  • unjudgedPozadu a politika nedeklaruje žádný práh, podle něhož by vzdálenost posoudila.
  • unmeasuredVzdálenost nešlo změřit: žádný trunk, žádný sledovaný remote trunk, žádné HEAD.

Používá TrunkDistance

TrunkThresholds

object
Prahy, které deklaruje checkout.trunk_distance, v commitech za vzdáleným trunkem. Chybějící je chybějící: čtenář nedodává žádnou výchozí hodnotu a vzdálenost, jíž není s čím posoudit, se hlásí jako unjudged.

use majordomus_cli::worktree::trunk::TrunkThresholds;
let t: TrunkThresholds = serde_json::from_str(r#"{"warn_behind": 50, "fail_behind": 300}"#).unwrap();
assert_eq!((t.warn_behind, t.fail_behind), (Some(50), Some(300)));
assert_eq!(TrunkThresholds::default().warn_behind, None, "absent is not a default");
vlastnosttyppovinnépopis
warn_behind integer | null ne Při tolika commitech pozadu nebo více je checkout lagging: varování.
fail_behind integer | null ne Při tomto počtu commitů zaostávání nebo víc je checkout stale: selhání.

Používá TrunkDistance

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