release.next
Na co exekutor integrace zvedá verzi trunku, když přistává head (ADR 0134): verze, kterou trunk deklaruje, jak daleko head posouvá veřejný kontrakt změřený proti commitnutému registru trunku, co ten posun vyžaduje podle režimu verze, spodní mez repozitáře z `release.floor` v politice, třída výjimky, která mez snížila, pokud každá změněná cesta spadá do jedné, větší z požadavku a meze, a verze trunku jím zvýšená — s jednou větou na krok. Vše se čte z gitu na dvou refech, takže odpověď nezávisí na tom, který spustitelný soubor běží, ani na vlastní verzi větve, a proto opakované přistání nemůže zvýšit dvakrát. Rozhoduje a nic nezapisuje; vstup, který nelze přečíst, se odmítne, nehádá se.
Na co exekutor integrace zvedá verzi trunku, když přistává head (ADR 0134): verze, kterou trunk deklaruje, jak daleko head posouvá veřejný kontrakt změřený proti commitnutému registru trunku, co ten posun vyžaduje podle režimu verze, spodní mez repozitáře z `release.floor` v politice, třída výjimky, která mez snížila, pokud každá změněná cesta spadá do jedné, větší z požadavku a meze, a verze trunku jím zvýšená — s jednou větou na krok. Vše se čte z gitu na dvou refech, takže odpověď nezávisí na tom, který spustitelný soubor běží, ani na vlastní verzi větve, a proto opakované přistání nemůže zvýšit dvakrát. Rozhoduje a nic nezapisuje; vstup, který nelze přečíst, se odmítne, nehádá se.
- query
- implementováno
- module release
- #release
- #version
- #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_release_next |
| HTTP | GET /api/v1/release/next operationId release.next |
| příkazová řádka | — |
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 · ReleaseNextInput
release.next: přistání, na které se ptá.
use majordomus_cli::capability::builtin::release::NextInput;
// nothing named is the landing the executor performs: this branch onto the trunk
let input = NextInput::default();
assert_eq!((input.base.as_deref(), input.head()), (None, "HEAD"));| vlastnost | typ | povinné | popis |
|---|---|---|---|
| základ | string | null | ne | Trunk, ze kterého přistání vychází; když chybí, remote-tracking ref trunku, který tento repozitář jmenuje (výchozí větev jeho remote, jinak jeho vlastní trunk). |
| head | string | null | ne | Co přistává; HEAD při absenci. |
JSON Schema
{
"additionalProperties": false,
"description": "The input of `release.next`: the landing it is asked about.\n\n```\nuse majordomus_cli::capability::builtin::release::NextInput;\n// nothing named is the landing the executor performs: this branch onto the trunk\nlet input = NextInput::default();\nassert_eq!((input.base.as_deref(), input.head()), (None, \"HEAD\"));\n```",
"properties": {
"base": {
"description": "The trunk the landing raises from; when absent, the remote-tracking ref of the trunk\nthis repository names (its remote's default branch, else its own trunk).",
"type": [
"string",
"null"
]
},
"head": {
"description": "What lands; `HEAD` when absent.",
"type": [
"string",
"null"
]
}
},
"title": "ReleaseNextInput",
"type": "object"
}výstup · LandingDecision
use majordomus_cli::release::compat::Impact;
use majordomus_cli::release::landing::{decide, LandingDecision, ReleasePolicy, DECISION_SCHEMA};
use majordomus_cli::release::version::Version;
let d: LandingDecision = decide(Version::parse("1.2.3").unwrap(), Impact::None, &ReleasePolicy::default(), &[]);
assert_eq!(d.schema, DECISION_SCHEMA);
assert_eq!(d.next_version, "1.2.3", "nothing moved and nothing is owed");| vlastnost | typ | povinné | popis |
|---|---|---|---|
| alokace | reference | ano | Zda politika alokuje při přistání; rozhodnutí se počítá tak či tak. |
| výjimka | jedno ze 2 | ne | Výjimka, která snížila práh, pokud nějaká byla. |
| vysvětlení | array | ano | Jedna věta na krok, v pořadí, v jakém bylo rozhodnuto. |
| spodní mez | reference | ano | Spodní mez politiky, nebo none, když se uplatnila výjimka. |
| režim | reference | ano | Režim kompatibility, který verze trunku uvádí v platnost. |
| next_version | string | ano | Verze kmene zvýšená o selected. |
| pozorováno | reference | ano | Jak daleko změna posouvá veřejný kontrakt, změřeno (ADR 0051). |
| required_by_compatibility | reference | ano | Co tento posun vyžaduje podle režimu verze. |
| schema | string | ano | DECISION_SCHEMA. |
| vybráno | reference | ano | Větší z požadavku a spodní meze. |
| trunk_version | string | ano | Co deklaruje hlavní větev: číslo, od něhož se zvedá to další. |
JSON Schema
{
"$defs": {
"AppliedExemption": {
"description": "The exemption a decision applied, by class.\n\n```\nuse majordomus_cli::release::landing::AppliedExemption;\nlet e = AppliedExemption { id: \"plan-records\".into(), reason: \"plan records\".into() };\nassert_eq!(e.id, \"plan-records\");\n```",
"properties": {
"id": {
"description": "The class's id.",
"type": "string"
},
"reason": {
"description": "The class's description, which is the reason the floor did not apply.",
"type": "string"
}
},
"required": [
"id",
"reason"
],
"type": "object"
},
"ReleaseAllocation": {
"description": "Whether the integration executor allocates the version when it lands a pull request.\n\n```\nuse majordomus_cli::release::landing::Allocation;\n// a policy that says nothing changes nothing: a pull request raises its own version\nassert_eq!(Allocation::default(), Allocation::Off);\nlet a: Allocation = serde_json::from_str(\"\\\"landing\\\"\").unwrap();\nassert_eq!(a.as_str(), \"landing\");\n```",
"oneOf": [
{
"const": "off",
"description": "The version is raised by whoever changes the contract, as before ADR 0134.",
"type": "string"
},
{
"const": "landing",
"description": "The integration executor raises it at landing; a pull request does not.",
"type": "string"
}
]
},
"ReleaseImpact": {
"description": "How much a change moves the contract.\n\nOrdered, so that \"the declared bump covers what is required\" is a comparison rather than\na table:\n\n```\nuse majordomus_cli::release::compat::Impact;\nassert!(Impact::Major > Impact::Minor);\nassert!(Impact::Minor > Impact::Patch);\nassert!(Impact::Patch > Impact::None);\n```",
"oneOf": [
{
"const": "none",
"description": "The contract did not move.",
"type": "string"
},
{
"const": "patch",
"description": "It moved behind the boundary: a caller cannot tell.",
"type": "string"
},
{
"const": "minor",
"description": "Something arrived; every existing caller still works.",
"type": "string"
},
{
"const": "major",
"description": "Something a caller could hold is gone or changed under it.",
"type": "string"
}
]
},
"ReleasePolicyMode": {
"description": "How this project turns a measured impact into the version it owes.\n\nSemantic versioning hands `0.y.z` a blanket exemption — \"anything MAY change at any\ntime\" — and Elm refuses the exemption by starting every package at `1.0.0`, because a\nrule with an escape hatch is a rule about when to use the hatch. This repository is `0.x`\nand has not earned `1.0.0`, so neither answer is available: demanding `major` would\ndemand `1.0.0` for a single removal, and granting the exemption would let a breaking\nchange ship as a patch.\n\nSo below `1.0.0` the floor is a minor. Any movement of the surface, gone or new, is at\nleast a minor release; only an unchanged surface owes nothing. That is the strongest\nsignal `0.x` has, and a removal is still *named* as breaking whatever the verdict, so the\nevidence does not quietly become a minor along with the number.\n\nAt `1.0.0` the shift ends: `Mode::Semver` is the ordinary rule, and the transition is\none line of `Policy::required_of`.\n\n```\nuse majordomus_cli::release::compat::{Mode, Policy};\nuse majordomus_cli::release::version::Version;\nassert_eq!(Policy::for_version(Version::parse(\"0.9.0\").unwrap()).mode, Mode::Pre1_0Strict);\nassert_eq!(Policy::for_version(Version::parse(\"1.0.0\").unwrap()).mode, Mode::Semver);\n```",
"oneOf": [
{
"const": "pre1-0-strict",
"description": "Below `1.0.0`: breaking changes are allowed, and cost a minor rather than nothing.",
"type": "string"
},
{
"const": "semver",
"description": "At or above `1.0.0`: the impact is the requirement.",
"type": "string"
}
]
}
},
"description": "What a landing allocates, and why, step by step.\n\n```\nuse majordomus_cli::release::compat::Impact;\nuse majordomus_cli::release::landing::{decide, LandingDecision, ReleasePolicy, DECISION_SCHEMA};\nuse majordomus_cli::release::version::Version;\nlet d: LandingDecision = decide(Version::parse(\"1.2.3\").unwrap(), Impact::None, &ReleasePolicy::default(), &[]);\nassert_eq!(d.schema, DECISION_SCHEMA);\nassert_eq!(d.next_version, \"1.2.3\", \"nothing moved and nothing is owed\");\n```",
"properties": {
"allocation": {
"$ref": "#/$defs/ReleaseAllocation",
"description": "Whether the policy allocates at landing; the decision is computed either way."
},
"exemption": {
"anyOf": [
{
"$ref": "#/$defs/AppliedExemption"
},
{
"type": "null"
}
],
"description": "The exemption that lowered the floor, if one did."
},
"explanation": {
"description": "One sentence per step, in the order the decision was made.",
"items": {
"type": "string"
},
"type": "array"
},
"floor": {
"$ref": "#/$defs/ReleaseImpact",
"description": "The policy's floor, or `none` when an exemption applied."
},
"mode": {
"$ref": "#/$defs/ReleasePolicyMode",
"description": "The compatibility mode the trunk's version puts in force."
},
"next_version": {
"description": "The trunk's version raised by `selected`.",
"type": "string"
},
"observed": {
"$ref": "#/$defs/ReleaseImpact",
"description": "How far the change moves the public contract, measured (ADR 0051)."
},
"required_by_compatibility": {
"$ref": "#/$defs/ReleaseImpact",
"description": "What that movement requires under the version's mode."
},
"schema": {
"description": "`DECISION_SCHEMA`.",
"type": "string"
},
"selected": {
"$ref": "#/$defs/ReleaseImpact",
"description": "The larger of the requirement and the floor."
},
"trunk_version": {
"description": "What the trunk declares: the number the next one is raised from.",
"type": "string"
}
},
"required": [
"schema",
"trunk_version",
"observed",
"required_by_compatibility",
"floor",
"selected",
"next_version",
"allocation",
"mode",
"explanation"
],
"title": "LandingDecision",
"type": "object"
}Politiky
- benchmark
- waived — prominuto: published_history
- 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.
| transport | state | případy | targets |
|---|---|---|---|
| direct | prominuto (published_history) | 0 | |
| mcp | prominuto (published_history) | 0 | |
| http | prominuto (published_history) | 0 |