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.

release.version

Verze, kterou deklaruje manifest crate — jediné místo, kde se píše — verze, kterou shellový nástroj vypisuje ze své projekce `share/version.txt`, a zda je tato projekce aktuální — otázka, kterou odmítá `generate --check` a na které staví kontrola `scripts/release-version --check`. Pak další verze, což je odpověď veřejné smlouvy: verze, kterou `release analyze` vyžaduje oproti poslednímu releasu — deklarovaná verze, pokud už smlouvu splňuje, jinak nejmenší, kterou smlouva dovoluje, a nejmenší release nad posledním, když smlouva žádný nad ním nevyžaduje — přičemž `decided_by` jmenuje, kdo odpověděl. Je to tentýž výběr releasu, na který `release bump` zvyšuje, když není jmenován cíl, takže zpráva a zapisovatel se nemohou rozejít. Když smlouvu nelze změřit — chybí publikovaná základna, verze nejsou tři čísla, nebo jiná chyba činí plán nesolidním, plán, ze kterého `release bump` odmítá zapisovat — základna je odmítnuta, ne hádána: `next` chybí, `decided_by` je `undecided` a `contract_unreadable` nese každou chybu, jednu na řádek. Zvýšení, které implikují konvenční commity od posledního releasu, verze, kterou by vytvořilo, a samotné commity se nesou vedle jako důkaz a nikdy neodpovídají za `next` místo smlouvy.

Verze, kterou deklaruje manifest crate — jediné místo, kde se píše — verze, kterou shellový nástroj vypisuje ze své projekce `share/version.txt`, a zda je tato projekce aktuální — otázka, kterou odmítá `generate --check` a na které staví kontrola `scripts/release-version --check`. Pak další verze, což je odpověď veřejné smlouvy: verze, kterou `release analyze` vyžaduje oproti poslednímu releasu — deklarovaná verze, pokud už smlouvu splňuje, jinak nejmenší, kterou smlouva dovoluje, a nejmenší release nad posledním, když smlouva žádný nad ním nevyžaduje — přičemž `decided_by` jmenuje, kdo odpověděl. Je to tentýž výběr releasu, na který `release bump` zvyšuje, když není jmenován cíl, takže zpráva a zapisovatel se nemohou rozejít. Když smlouvu nelze změřit — chybí publikovaná základna, verze nejsou tři čísla, nebo jiná chyba činí plán nesolidním, plán, ze kterého `release bump` odmítá zapisovat — základna je odmítnuta, ne hádána: `next` chybí, `decided_by` je `undecided` a `contract_unreadable` nese každou chybu, jednu na řádek. Zvýšení, které implikují konvenční commity od posledního releasu, verze, kterou by vytvořilo, a samotné commity se nesou vedle jako důkaz a nikdy neodpovídají za `next` místo smlouvy.

Zpřístupnění

Kde je tato jedna definice dosažitelná. Absence je explicitní: povrch, který není uveden, ji nenese.

povrchjako
MCPnástroj majordomus_release_version
HTTPGET /api/v1/release/version operationId release.version
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 · Prázdné

Žádný vstup.

Žádné vlastnosti: schopnost nebere žádný vstup.

JSON Schema
{
  "additionalProperties": false,
  "description": "No input.",
  "title": "Empty",
  "type": "object"
}

výstup · ReleaseVersionReport

Jaká je verze, čím se podle veřejného kontraktu má stát a co o sobě říkají commity od posledního release.

next je odpověď smlouvy (ADR 0051): required_version analýzy, nebo nejmenší release nad posledním, když je tento požadavek samotným posledním release. Odvození z commitů je důkaz — bump a commits_imply — a nikdy ne odpověď: když smlouvu nelze změřit, next chybí, decided_by je undecided a contract_unreadable říká proč. Výběr je crate::release::version::select, tedy jedna funkce, z níž release bump bere také svůj výchozí cíl.

vlastnosttyppovinnépopis
souhlasí boolean ano Zda je ta projekce aktuální. generate --check odmítne zastaralou a scripts/release-version --check dokazuje, že ji nástroj vypisuje; je to tatáž otázka kladená spustitelným souborem, takže odpověď může ukázat každé rozhraní.
bump string ano Co naznačují předměty commitů od něj: major, minor, patch nebo none. Jen důkaz — kontrakt rozhoduje o next; release analyze hlásí, kde se oba rozcházejí.
změny array ano Kolik commitů od posledního release a jakého druhu — důkazy pro zvýšení verze, aby překvapivou odpověď šlo ověřit, a ne jí věřit.
commits_imply string | null ne Verze, kterou by tento bump vytvořil z posledního release (z deklarované verze, pokud ještě nic nevyšlo). Pouze důkaz, i když kontrakt odpovědět nedokáže.
contract_unreadable string | null ne Proč smlouva nemohla odpovědět, když je decided_by undecided.
decided_by reference ne Kdo odpověděl next. výchozí "undecided"
deklarováno string ano Verze, kterou deklaruje manifest crate — jediné místo, kde se tvoří.
last_release string | null ne Poslední release: nejvyšší verze, kterou vrstva eviduje (nejnovější verzový tag, pokud neeviduje žádnou) — základ, od něhož release analyze měří kontrakt, takže kontrakt a důkazy z commitů popisují jedno okno.
next string | null ne Další verze. Když šlo smlouvu změřit, verze, kterou vyžaduje: deklarovaná verze, když ji už splňuje, jinak nejmenší, kterou dovoluje — a když je to samotný poslední release, nejmenší release nad ním. Chybí, když by se nic nevydávalo a když smlouvu nešlo změřit (decided_by: undecided): neměřitelný základ se odmítne, neodhaduje se.
nástroj string ano Verze, kterou vypisuje bin/majordomus: to, co uvádí její projekce, share/version.txt.
JSON Schema
{
  "$defs": {
    "ReleaseChange": {
      "description": "One change, from one commit.",
      "properties": {
        "breaking": {
          "description": "Whether the commit marked itself breaking, with `!` or a `BREAKING CHANGE:` trailer.",
          "type": "boolean"
        },
        "commit": {
          "description": "The abbreviated commit.",
          "type": "string"
        },
        "kind": {
          "$ref": "#/$defs/ReleaseChangeKind",
          "description": "What it did."
        },
        "references": {
          "description": "The records of the layer this commit names — issues, milestones — resolved against\nwhat the layer actually holds.",
          "items": {
            "$ref": "#/$defs/ReleaseReference"
          },
          "type": "array"
        },
        "scope": {
          "description": "The area it did it in, when the subject named one: `commands`, `ci`, `site`.",
          "type": [
            "string",
            "null"
          ]
        },
        "subject": {
          "description": "The subject, without the type and scope that prefixed it.",
          "type": "string"
        },
        "url": {
          "description": "Where that commit can be read, when the repository's own URL is known. Derived from\n`about::REPOSITORY`, never written beside each entry.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "kind",
        "subject",
        "breaking",
        "commit"
      ],
      "type": "object"
    },
    "ReleaseChangeKind": {
      "description": "What a conventional commit says it did.\n\nThe set is the one the repository's own commit convention uses; a commit whose subject\ndoes not parse is `ChangeKind::Other` and still appears, because a changelog that\nsilently drops what it cannot classify is a changelog that lies by omission.",
      "oneOf": [
        {
          "const": "feat",
          "description": "A capability a person did not have before.",
          "type": "string"
        },
        {
          "const": "fix",
          "description": "Behaviour that was wrong and is not any more.",
          "type": "string"
        },
        {
          "const": "perf",
          "description": "Performance, with the behaviour unchanged.",
          "type": "string"
        },
        {
          "const": "refactor",
          "description": "Structure, with the behaviour unchanged.",
          "type": "string"
        },
        {
          "const": "docs",
          "description": "Documentation.",
          "type": "string"
        },
        {
          "const": "test",
          "description": "Tests.",
          "type": "string"
        },
        {
          "const": "chore",
          "description": "The build, the pipeline, the tooling.",
          "type": "string"
        },
        {
          "const": "ci",
          "description": "Continuous integration.",
          "type": "string"
        },
        {
          "const": "style",
          "description": "Formatting, with the behaviour unchanged.",
          "type": "string"
        },
        {
          "const": "build",
          "description": "The build system or its dependencies.",
          "type": "string"
        },
        {
          "const": "revert",
          "description": "A change that undoes another.",
          "type": "string"
        },
        {
          "const": "merge",
          "description": "An integration: one line of work brought into another.\n\nNot in the conventional-commit specification, and in this repository's history 38\ntimes and counting, because integration here is a deliberate act with a subject\nsomebody writes — `merge: bring origin/master into feature/x` — and not the sentence\n`git merge` composes. Declaring it is what lets the validator hold those subjects to\nthe same width and the same references as every other commit, instead of either\nrefusing a convention this project practises or exempting it from being checked at\nall. The changelog never renders it: `commits::in_range` reads the log with\n`--no-merges`, so a merge commit is not a release entry however its subject is\nspelled.",
          "type": "string"
        },
        {
          "const": "other",
          "description": "A commit whose subject does not parse as a conventional commit.",
          "type": "string"
        }
      ]
    },
    "ReleaseReference": {
      "description": "A record of the layer that a commit names in its own text.\n\nInferred, never declared beside the commit: an issue id or a milestone id appearing in a\nsubject or a body is a reference, and the layer already holds the object it refers to. A\nreference to something the layer does not have is not carried — a link to a record that\ndoes not exist is worse than no link, because the reader cannot tell until they follow it.\n\n```\nuse majordomus_cli::release::model::Reference;\nlet r = Reference {\n    kind: \"issue\".into(),\n    id: \"I1305\".into(),\n    title: \"An observed contract has a fingerprint\".into(),\n    route: Some(\"/plan/i1305/\".into()),\n};\nlet json = serde_json::to_value(&r).unwrap();\nassert_eq!(json[\"id\"], \"I1305\");\nassert_eq!(json[\"route\"], \"/plan/i1305/\");\n// a reference the site has no page for carries no route rather than an invented one\nlet bare = Reference { route: None, ..r };\nassert!(serde_json::to_value(&bare).unwrap().get(\"route\").is_none());\n```",
      "properties": {
        "id": {
          "description": "`I1305`, `M000`.",
          "type": "string"
        },
        "kind": {
          "description": "`issue` or `milestone`.",
          "type": "string"
        },
        "route": {
          "description": "Where it is published on this site, when it has a page.",
          "type": [
            "string",
            "null"
          ]
        },
        "title": {
          "description": "What it is, from the record itself.",
          "type": "string"
        }
      },
      "required": [
        "kind",
        "id",
        "title"
      ],
      "type": "object"
    },
    "ReleaseVersionDecidedBy": {
      "description": "Who answered a version report's `next`: the public contract, the contract with the\ncommits — or no one, because the contract could not be measured.\n\nADR 0051 makes the contract the authority and demotes conventional commits to evidence,\nso `DecidedBy::Contract` is the normal answer. An unmeasurable contract is refused, not\nguessed: `DecidedBy::Undecided` leaves `next` absent and carries the reason, and the\ncommit inference stays what it always is, evidence — never the answer in its place.\n\n```\nuse majordomus_cli::release::model::DecidedBy;\nassert_eq!(serde_json::to_value(DecidedBy::Contract).unwrap(), \"contract\");\nassert_eq!(DecidedBy::Undecided.as_str(), \"undecided\");\nassert_eq!(DecidedBy::default(), DecidedBy::Undecided);\n```",
      "oneOf": [
        {
          "const": "contract",
          "description": "`release analyze` measured the public contract against the last release, and `next`\nis the version it requires: the declared version when that already satisfies the\ncontract, otherwise the smallest one it allows.",
          "type": "string"
        },
        {
          "const": "contract_and_commits",
          "description": "The contract was measured and requires no release over the last one — only behaviour\nbehind the public boundary changed — while the commits carry changes: `next` is the\nsmallest release above the last, a patch, however much the commit subjects claim.",
          "type": "string"
        },
        {
          "const": "undecided",
          "description": "The contract could not be measured — no published baseline carries a registry, or a\nversion is not three numbers — so nothing decides `next`: it is absent, the reason is\nin `contract_unreadable`, and `release bump` without an explicit target refuses.",
          "type": "string"
        }
      ]
    }
  },
  "description": "What the version is, what the public contract requires it to become, and what the\ncommits since the last release say about themselves.\n\n`next` is the contract's answer (ADR 0051): the analysis' `required_version`, or the\nsmallest release above the last when that requirement is the last release itself. The\ncommit inference is evidence — `bump` and `commits_imply` — and never the answer: when the\ncontract cannot be measured `next` is absent, `decided_by` is `undecided` and\n`contract_unreadable` says why. The selection is `crate::release::version::select`, the\none function `release bump` also takes its default target from.",
  "properties": {
    "agree": {
      "description": "Whether that projection is current. `generate --check` refuses a stale one and\n`scripts/release-version --check` proves the tool prints it; this is the same question\nasked by the executable, so every surface can show the answer.",
      "type": "boolean"
    },
    "bump": {
      "description": "What the commit subjects since it imply: `major`, `minor`, `patch`, or `none`.\nEvidence only — the contract decides `next`; `release analyze` reports where the two\ndisagree.",
      "type": "string"
    },
    "changes": {
      "description": "How many commits since the last release, and of what kind — the evidence for the\nbump, so that a surprising answer can be checked rather than believed.",
      "items": {
        "$ref": "#/$defs/ReleaseChange"
      },
      "type": "array"
    },
    "commits_imply": {
      "description": "The version that bump would produce from the last release (from the declared version\nwhen nothing was released yet). Evidence only, even when the contract cannot answer.",
      "type": [
        "string",
        "null"
      ]
    },
    "contract_unreadable": {
      "description": "Why the contract could not answer, when `decided_by` is `undecided`.",
      "type": [
        "string",
        "null"
      ]
    },
    "decided_by": {
      "$ref": "#/$defs/ReleaseVersionDecidedBy",
      "default": "undecided",
      "description": "Who answered `next`."
    },
    "declared": {
      "description": "The version the crate manifest declares — the one place it is authored.",
      "type": "string"
    },
    "last_release": {
      "description": "The last release: the highest version the layer records (the newest version tag when\nit records none) — the baseline `release analyze` measures the contract from, so the\ncontract and the commit evidence describe one window.",
      "type": [
        "string",
        "null"
      ]
    },
    "next": {
      "description": "The next version. When the contract could be measured, the version it requires: the\ndeclared version when that already satisfies it, otherwise the smallest one it allows\n— and, when that is the last release itself, the smallest release above it. Absent\nwhen nothing would be released, and when the contract could not be measured\n(`decided_by: undecided`): an unmeasurable baseline is refused, not guessed.",
      "type": [
        "string",
        "null"
      ]
    },
    "tool": {
      "description": "The version `bin/majordomus` prints: what its projection, `share/version.txt`, states.",
      "type": "string"
    }
  },
  "required": [
    "declared",
    "tool",
    "agree",
    "bump",
    "changes"
  ],
  "title": "ReleaseVersionReport",
  "type": "object"
}

Politiky

benchmark
povinné — cíl na každém transportu, který expozice deklaruje; případy jsou ty ze vstupního typu
cache
checkout — až 2 položky v procesu, vymezené otiskem registru, čtením repozitáře kontextem a stavem checkoutu (HEAD, index, refy, každá změněná cesta)

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.

transportstatepřípadytargets
directpokryto1výchozí studený+teplý
mcppokryto1výchozí studený+teplý
httppokryto1výchozí studený+teplý

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