convergence.report
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.
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
- module convergence
- #convergence
- #git
- #worktree
- #integration
Zpřístupnění
Kde je tato jedna definice dosažitelná. Absence je explicitní: povrch, který není uveden, ji nenese.
| povrch | jako |
|---|---|
| MCP | nástroj majordomus_convergence zdroj majordomus://convergence |
| HTTP | GET /api/v1/convergence operationId convergence.report |
| příkazová řádka | majordomus convergence |
Schémata
Kanonický vstup a výstup z typů Rustu; schéma nástroje MCP a parametry a odpovědi OpenAPI se odvozují z nich.
vstup · Prázdné
Žádné vlastnosti: schopnost nebere žádný vstup.
JSON Schema
{
"additionalProperties": false,
"description": "No input.",
"title": "Empty",
"type": "object"
}výstup · ConvergenceReport
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");| vlastnost | typ | povinné | popis |
|---|---|---|---|
| at_risk | integer | 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. |
| držení | array | ano | Každá držba, ohrožené první, pak podle druhu a identity. |
| repozitář | string | ano | Primární checkout, z něhož se měřilo. |
| schema | string | ano | SCHEMA. |
| součty | object | ano | Kolik držených položek nese každou dispozici, podle jejího slova. |
| trunk | string | null | ne | Trunk, vůči kterému se rozhodovalo o zahrnutí, pokud nějaký je. |
JSON Schema
{
"$defs": {
"Disposition": {
"description": "Where the work a holding carries can be reached from.\n\nThe order is the order of safety: everything above `Disposition::LocalOnly` is\nreachable by somebody who is not the worker that made it.\n\n```\nuse majordomus_cli::convergence::Disposition;\n\n// declared in the order of safety, so the derived order says which is worse\nassert!(Disposition::Integrated < Disposition::Published);\nassert!(Disposition::Published < Disposition::LocalOnly);\nassert_eq!(serde_json::to_string(&Disposition::LocalOnly).unwrap(), \"\\\"local_only\\\"\");\n```",
"oneOf": [
{
"const": "integrated",
"description": "The trunk reaches it: it is in the repository's own history.",
"type": "string"
},
{
"const": "published",
"description": "A remote reaches it: another checkout can fetch it, and it survives this disk.",
"type": "string"
},
{
"const": "local_only",
"description": "Committed here and nowhere else. One disk away from being lost.",
"type": "string"
},
{
"const": "uncommitted",
"description": "Not committed at all: files in a work tree, or a stash entry.",
"type": "string"
}
]
},
"Holding": {
"description": "One thing holding work, and what is known about where that work can be reached from.\n\n```\nuse majordomus_cli::convergence::{Disposition, Holding, HoldingKind};\n\nlet branch = Holding {\n kind: HoldingKind::Branch,\n identity: \"feature/x\".into(),\n disposition: Disposition::LocalOnly,\n evidence: \"abc123 is on no remote-tracking ref of this checkout\".into(),\n remedy: \"git push -u origin feature/x\".into(),\n at_risk: true,\n};\n// an at-risk holding always carries the command that would move it out of danger\nassert!(branch.at_risk && !branch.remedy.is_empty());\n// and a reachable one carries none, so the field is left out of the document\nlet safe = Holding { disposition: Disposition::Published, remedy: String::new(), at_risk: false, ..branch };\nassert!(!serde_json::to_string(&safe).unwrap().contains(\"remedy\"));\n```",
"properties": {
"at_risk": {
"description": "This holding's work exists on one disk only.",
"type": "boolean"
},
"disposition": {
"$ref": "#/$defs/Disposition",
"description": "Where the work can be reached from."
},
"evidence": {
"description": "What was actually read — never a restatement of the disposition.",
"type": "string"
},
"identity": {
"description": "How it is named: a branch name, an absolute worktree path, a stash ref.",
"type": "string"
},
"kind": {
"$ref": "#/$defs/HoldingKind",
"description": "What kind of thing holds it."
},
"remedy": {
"description": "The command that would move it out of danger. Empty when it is not at risk.",
"type": "string"
}
},
"required": [
"kind",
"identity",
"disposition",
"evidence",
"at_risk"
],
"type": "object"
},
"HoldingKind": {
"description": "What kind of thing is holding the work.\n\n```\nuse majordomus_cli::convergence::HoldingKind;\n\n// the word a report and a persisted record use; renaming a variant must not rename it\nassert_eq!(HoldingKind::Worktree.as_str(), \"worktree\");\nassert_eq!(serde_json::to_string(&HoldingKind::Stash).unwrap(), \"\\\"stash\\\"\");\n```",
"oneOf": [
{
"const": "worktree",
"description": "A registered work tree, holding files that are not committed.",
"type": "string"
},
{
"const": "branch",
"description": "A local branch, holding commits.",
"type": "string"
},
{
"const": "stash",
"description": "An entry of `git stash`.",
"type": "string"
}
]
}
},
"description": "The repository's convergence: every holding, and the one verdict over them.\n\n```\nuse majordomus_cli::convergence::{ConvergenceReport, SCHEMA};\n\nlet empty = ConvergenceReport {\n schema: SCHEMA.into(),\n repository: \"/tmp/r\".into(),\n trunk: Some(\"master\".into()),\n holdings: vec![],\n tallies: Default::default(),\n at_risk: 0,\n converged: true,\n};\n// the verdict is the one word a gate reads; the count is what a person reads next to it\nassert!(empty.converged && empty.at_risk == 0);\nassert_eq!(serde_json::to_value(&empty).unwrap()[\"schema\"], \"convergence/v1\");\n```",
"properties": {
"at_risk": {
"description": "The holdings that exist on one disk only.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"converged": {
"description": "Nothing is held where it can be lost.",
"type": "boolean"
},
"holdings": {
"description": "Every holding, at-risk ones first, then by kind and identity.",
"items": {
"$ref": "#/$defs/Holding"
},
"type": "array"
},
"repository": {
"description": "The primary checkout this was measured from.",
"type": "string"
},
"schema": {
"description": "`SCHEMA`.",
"type": "string"
},
"tallies": {
"additionalProperties": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"description": "How many holdings carry each disposition, by its word.",
"type": "object"
},
"trunk": {
"description": "The trunk the containment was decided against, when there is one.",
"type": [
"string",
"null"
]
}
},
"required": [
"schema",
"repository",
"holdings",
"tallies",
"at_risk",
"converged"
],
"title": "ConvergenceReport",
"type": "object"
}Politiky
- benchmark
- povinné — cíl na každém transportu, který expozice deklaruje; případy jsou ty ze vstupního typu
- cache
- vypnuto — každé volání spustí handler
Cíle benchmarku
Odvozeno z registru pro tento repozitář: jeden požadavek na transport a případy, které poskytuje typ vstupu. Celá matice je na stránce měření výkonu.