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: convergence

Zda je každá jednotka práce v tomto repozitáři někde, kde ji může najít jiný worker. Holding je cokoli, co může práci držet — pracovní strom s necommitnutými soubory, větev s commity, stash — a každý nese dispozici přečtenou z gitu: integrated (trunk na něj dosáhne), published (dosáhne na něj remote-tracking ref), local_only (commitnuto na tomto disku a nikde jinde) nebo uncommitted. Poslední dvě jsou ohrožené: jsou neviditelné pro každého jiného workera a worker, který skončí, není rollback. Měří se offline, jen z tohoto checkoutu; zda pro větev existuje pull request, je otázka na forge a tady se neklade.

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.

convergence

Zda je každá jednotka práce v tomto repozitáři někde, kde ji může najít jiný worker. Holding je cokoli, co může práci držet — pracovní strom s necommitnutými soubory, větev s commity, stash — a každý nese dispozici přečtenou z gitu: integrated (trunk na něj dosáhne), published (dosáhne na něj remote-tracking ref), local_only (commitnuto na tomto disku a nikde jinde) nebo uncommitted. Poslední dvě jsou ohrožené: jsou neviditelné pro každého jiného workera a worker, který skončí, není rollback. Měří se offline, jen z tohoto checkoutu; zda pro větev existuje pull request, je otázka na forge a tady se neklade.

GET /api/v1/convergence convergence.report

Drží se nějaká práce tam, kde se může ztratit?

Každé držení tohoto repozitáře s jeho dispozicí, přečtenými důkazy pro ni a příkazem, který by ho dostal z ohrožení, součty podle dispozice, kolik držení existuje jen na jednom disku, a jeden verdikt nad nimi. Čte se z gitu při každém volání: commit, push nebo uložení v editoru změní odpověď mezi dvěma voláními.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_convergence
  • Zdroj MCP {"name": "convergence", "uri": "majordomus://convergence"}
  • $ convergence

Žádné parametry.

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/convergence"

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 ConvergenceReport Drží se nějaká práce tam, kde se může ztratit?: 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.

ConvergenceReport

object
Konvergence repozitáře: každé držení a jediný verdikt nad nimi.

use majordomus_cli::convergence::{ConvergenceReport, SCHEMA};

let empty = ConvergenceReport {
    schema: SCHEMA.into(),
    repository: "/tmp/r".into(),
    trunk: Some("master".into()),
    holdings: vec![],
    tallies: Default::default(),
    at_risk: 0,
    converged: true,
};
// the verdict is the one word a gate reads; the count is what a person reads next to it
assert!(empty.converged && empty.at_risk == 0);
assert_eq!(serde_json::to_value(&empty).unwrap()["schema"], "convergence/v1");
vlastnosttyppovinnépopis
schema string ano SCHEMA.
repozitář string ano Primární checkout, z něhož se měřilo.
trunk string | null ne Trunk, vůči kterému se rozhodovalo o zahrnutí, pokud nějaký je.
držení pole Holding → Holding ano Každá držba, ohrožené první, pak podle druhu a identity.
součty mapa celých čísel (uint) ano Kolik držených položek nese každou dispozici, podle jejího slova.
at_risk integer (uint) ano Držené věci, které existují jen na jednom disku.
sbíhá boolean ano Nic není drženo tam, kde by se to mohlo ztratit.

Používá convergence.report

Dispozice

"integrated" | "published" | "local_only" | "uncommitted"
Odkud je dosažitelná práce, kterou držení nese.

Pořadí je pořadí bezpečnosti: vše nad Disposition::LocalOnly je dosažitelné někým, kdo není worker, který to vytvořil.

use majordomus_cli::convergence::Disposition;

// declared in the order of safety, so the derived order says which is worse
assert!(Disposition::Integrated < Disposition::Published);
assert!(Disposition::Published < Disposition::LocalOnly);
assert_eq!(serde_json::to_string(&Disposition::LocalOnly).unwrap(), "\"local_only\"");
  • integratedTrunk k němu dosáhne: je ve vlastní historii repozitáře.
  • publishedRemote jej dosáhne: jiný checkout jej může fetchnout a přežije tento disk.
  • local_onlyCommitnuto tady a nikde jinde. Jeden disk od ztráty.
  • uncommittedVůbec necommitnuto: soubory v pracovním stromě nebo položka stash.

Používá Holding

Držení

object
Jedna věc držící práci a co je známo o tom, odkud je ta práce dosažitelná.

use majordomus_cli::convergence::{Disposition, Holding, HoldingKind};

let branch = Holding {
    kind: HoldingKind::Branch,
    identity: "feature/x".into(),
    disposition: Disposition::LocalOnly,
    evidence: "abc123 is on no remote-tracking ref of this checkout".into(),
    remedy: "git push -u origin feature/x".into(),
    at_risk: true,
};
// an at-risk holding always carries the command that would move it out of danger
assert!(branch.at_risk && !branch.remedy.is_empty());
// and a reachable one carries none, so the field is left out of the document
let safe = Holding { disposition: Disposition::Published, remedy: String::new(), at_risk: false, ..branch };
assert!(!serde_json::to_string(&safe).unwrap().contains("remedy"));
vlastnosttyppovinnépopis
druh HoldingKind → HoldingKind ano Co za věc to drží.
identity string ano Jak se pojmenovává: název větve, absolutní cesta worktree, ref stashe.
dispozice Disposition → Disposition ano Odkud je práce dosažitelná.
evidence string ano Co bylo skutečně přečteno — nikdy ne přepis dispozice.
náprava string ne Příkaz, který by to dostal z nebezpečí. Prázdné, když to v ohrožení není.
at_risk boolean ano Práce tohoto držení existuje jen na jednom disku.

Používá ConvergenceReport

HoldingKind

"worktree" | "branch" | "stash"
Co za věc práci drží.

use majordomus_cli::convergence::HoldingKind;

// the word a report and a persisted record use; renaming a variant must not rename it
assert_eq!(HoldingKind::Worktree.as_str(), "worktree");
assert_eq!(serde_json::to_string(&HoldingKind::Stash).unwrap(), "\"stash\"");
  • worktreeRegistrovaný work tree, který drží necommitnuté soubory.
  • branchLokální větev držící commity.
  • stashPoložka git stash.

Používá Holding

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