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

Co tento projekt dodal a co dodá příště, odvozené, ne udržované: changelog skládá záznamy release vrstvy, rozhodnutí datovaná v okně každého release a konvenční commity v jeho rozsahu; zpráva o verzi čte jediné místo, kde se verze píše, a projekci, kterou vypisuje shellový nástroj, a říká, čím se podle veřejného kontraktu musí stát — nebo že to nelze změřit, a tedy nic nerozhoduje — a vedle toho jako důkaz uvádí, co naznačují commity od posledního release.

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.

release

Co tento projekt dodal a co dodá příště, odvozené, ne udržované: changelog skládá záznamy release vrstvy, rozhodnutí datovaná v okně každého release a konvenční commity v jeho rozsahu; zpráva o verzi čte jediné místo, kde se verze píše, a projekci, kterou vypisuje shellový nástroj, a říká, čím se podle veřejného kontraktu musí stát — nebo že to nelze změřit, a tedy nic nerozhoduje — a vedle toho jako důkaz uvádí, co naznačují commity od posledního release.

GET /api/v1/changelog release.changelog

Changelog

Každý release, který vrstva eviduje, od nejnovějšího, s dosud nevydanou prací na prvním místě. Rozhodnutí sekce jsou ADR datované v okně tohoto releasu, její změny konvenční commity v jeho rozsahu, její artefakty vlastní důkazy záznamu. Nic z toho není psáno ručně a sekce, kterou nešlo přečíst, to říká, místo aby se jevila jako prázdná.

  • query
  • implementováno
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_changelog
  • Zdroj MCP {"name": "changelog", "uri": "majordomus://changelog"}

Parametry dotazu

názevtyppovinnépopispříklady
verze string ne Jedna verze, nebo `unreleased`; bez hodnoty každá sekce. one-version: "0.10.0"

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/changelog?version=0.10.0"

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 ReleaseChangelog Changelog: 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.
GET /api/v1/release/analysis release.analysis

Co udělal veřejný kontrakt a nejmenší verze, kterou dovoluje

Veřejný povrch schopností tohoto stromu proti tomu, který publikoval poslední release, každý jeho pohyb pojmenovaný s důvodem, proč se počítá tak, jak se počítá, a nejmenší verze, kterou tento strom smí proto deklarovat. Úroveň kompatibility se měří z kontraktu, ne čte z předmětů commitů: schopnost, trasa, nástroj MCP, příkaz nebo povinné pole kteréhokoli ze dvou schémat, které volající mohl držet a už nemůže, je zásadní změna, ať se commit, který je odstranil, nazval jakkoli. Co o sobě commity řekly, se nese vedle verdiktu jako důkaz a odpověď říká, kdy se obojí rozchází.

  • query
  • implementováno
  • měření výkonu prominuto: published_history
  • cache vypnuta
  • nástroj MCP majordomus_release_analysis

Parametry dotazu

názevtyppovinnépopispříklady
od string ne Ref k porovnání místo posledního releasu: `v0.4.0`, nebo jakýkoli commit, který nese commitnutý registr.

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/release/analysis"

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 ReleaseVersionPlan Co veřejná smlouva udělala a nejmenší verze, kterou dovoluje: 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.
GET /api/v1/release/next release.next

Verze, kterou landing přidělí, a proč

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
  • měření výkonu prominuto: published_history
  • cache vypnuta
  • Nástroj MCP majordomus_release_next

Parametry dotazu

názevtyppovinnépopispříklady
základ string ne Trunk, z něhož přistání vychází; když chybí, vzdálená sledovaná reference trunku, který tento repozitář uvádí (výchozí větev jeho remote, jinak jeho vlastní trunk).
head string ne Co přistává; `HEAD`, když chybí.

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/release/next"

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 LandingDecision Verze, kterou přistání přidělí, a proč: 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.
GET /api/v1/release/version release.version

Verze a ta, kterou kontrakt požaduje příště

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.

  • query
  • implementováno
  • vyžaduje se měření výkonu
  • cache checkout (max_entries=2)
  • Nástroj MCP majordomus_release_version

Žá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/release/version"

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 ReleaseVersionReport Verze a ta, kterou kontrakt vyžaduje příště: 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.

AppliedExemption

object
Výjimka, kterou rozhodnutí uplatnilo, podle třídy.

use majordomus_cli::release::landing::AppliedExemption;
let e = AppliedExemption { id: "plan-records".into(), reason: "plan records".into() };
assert_eq!(e.id, "plan-records");
vlastnosttyppovinnépopis
id string ano Id třídy.
důvod string ano Popis třídy, který je důvodem, proč se spodní mez nepoužila.

Používá LandingDecision

LandingDecision

object
Co přistání přiděluje a proč, krok za krokem.

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");
vlastnosttyppovinnépopis
schema string ano DECISION_SCHEMA.
trunk_version string ano Co deklaruje hlavní větev: číslo, od něhož se zvedá to další.
pozorováno ReleaseImpact → ReleaseImpact ano Jak daleko změna posouvá veřejný kontrakt, změřeno (ADR 0051).
required_by_compatibility ReleaseImpact → ReleaseImpact ano Co tento posun vyžaduje podle režimu verze.
spodní mez ReleaseImpact → ReleaseImpact ano Spodní mez politiky, nebo none, když se uplatnila výjimka.
výjimka AppliedExemption | null → AppliedExemption ne Výjimka, která snížila práh, pokud nějaká byla.
vybráno ReleaseImpact → ReleaseImpact ano Větší z požadavku a spodní meze.
next_version string ano Verze kmene zvýšená o selected.
alokace ReleaseAllocation → ReleaseAllocation ano Zda politika alokuje při přistání; rozhodnutí se počítá tak či tak.
režim ReleasePolicyMode → ReleasePolicyMode ano Režim kompatibility, který verze trunku uvádí v platnost.
vysvětlení array of string ano Jedna věta na krok, v pořadí, v jakém bylo rozhodnuto.

Používá release.next

ReleaseAllocation

"off" | "landing"
Zda executor integrace alokuje verzi, když přistává pull request.

use majordomus_cli::release::landing::Allocation;
// a policy that says nothing changes nothing: a pull request raises its own version
assert_eq!(Allocation::default(), Allocation::Off);
let a: Allocation = serde_json::from_str("\"landing\"").unwrap();
assert_eq!(a.as_str(), "landing");
  • offVerzi zvyšuje ten, kdo mění kontrakt, jako před ADR 0134.
  • landingIntegrační executor ji zvyšuje při přistání; pull request ne.

Používá LandingDecision

ReleaseBaseline

object
Release, vůči kterému se tento strom měří, a jak byl nalezen.

use majordomus_cli::release::compat::Baseline;
let baseline = Baseline {
    version: "0.5.0".into(),
    reference: "v0.5.0".into(),
    read_at: "3a032c1e033b".into(),
    commit: "3a032c1e033b".into(),
    recorded: true,
    atoms: 300,
    fingerprint: "sha256:…".into(),
};
// `recorded` is the half that matters: a baseline taken from a tag alone is reported.
assert!(baseline.recorded);
assert_eq!(baseline.reference, "v0.5.0");
vlastnosttyppovinnépopis
verze string ano 0.5.0.
reference string ano v0.5.0: release tak, jak jej čtenář pozná.
read_at string ano Ref, z něhož byl povrch skutečně čten — commit, který uvádí záznam release a který klon má vždy, místo tagu, který mít nemusí.
commit string ano Commit, na který se ref rozřešil.
zaznamenáno boolean ano Zda vrstva drží release záznam, což z něj činí kanonickou verzi, a ne jen nejnovější věc, která vypadala jako tag.
atomy integer (uint) ano Kolik veřejných atomů publikoval.
otisk string ano Otisk povrchu, který publikoval.

Používá ReleaseVersionPlan

ReleaseChange

object
Jedna změna z jednoho commitu.
vlastnosttyppovinnépopis
druh ReleaseChangeKind → ReleaseChangeKind ano Co udělal.
scope string | null ne Oblast, ve které to udělal, když ji předmět jmenoval: commands, ci, site.
předmět string ano Předmět bez typu a rozsahu, které mu předcházely.
zpětně nekompatibilní boolean ano Zda se commit označil jako breaking, pomocí ! nebo trailer BREAKING CHANGE:.
commit string ano Zkrácený commit.
url string | null ne Kde lze ten commit přečíst, když je známa vlastní URL repozitáře. Odvozeno z about::REPOSITORY, nikdy nezapsáno vedle každé položky.
references pole ReleaseReference → ReleaseReference ne Záznamy vrstvy, které tento commit jmenuje — úkoly, milníky — srovnané s tím, co vrstva skutečně drží.

Používá ReleaseChangeGroup ReleaseVersionReport

ReleaseChangeDirection

"added" | "removed" | "changed"
Zda změna přidala, odebrala nebo pozměnila část kontraktu.

use majordomus_cli::release::compat::Direction;
assert_eq!(Direction::Removed.sign(), '-');
  • addedDříve tam nebylo.
  • removedDřív tam bylo a teď není.
  • changedJe v obou a liší se.

Používá ReleaseSurfaceChange

ReleaseChangeGroup

object
Změny jednoho druhu, s nadpisem a pořadím, které rozhodují, kde se zobrazí.

Seskupení je v dokumentu, ne v každém rendereru. Bylo jen v rendereru Markdownu a web — který Rustovou funkci vidět nemůže — seskupoval abecedně, takže tentýž changelog se četl ve dvou pořadích podle toho, který povrch ho ukázal. Pořadí prezentace uvedené jednou a přenášené je jediný druh, který přežije projekci.

vlastnosttyppovinnépopis
druh ReleaseChangeKind → ReleaseChangeKind ano Co v ní změny udělaly.
nadpis string ano Nadpis, pod kterým se zobrazuje.
pořadí integer (uint8) ano Kde se řadí mezi ostatními skupinami; vzestupně.
změny pole ReleaseChange → ReleaseChange ano Změny v pořadí, v jakém byly commity čteny.

Používá ReleaseSection

ReleaseChangelog

object
Celý changelog.
vlastnosttyppovinnépopis
schema string ano Schéma, které tento dokument splňuje.
aktuální string ano Verze, kterou strom aktuálně deklaruje.
sekce pole ReleaseSection → ReleaseSection ano Nejnovější první, nevydaná sekce vede, když existuje.
diagnostika array of string ano Co nešlo přečíst, řečeno místo skrytí: repozitář bez historie gitu, záznam o release, který nejmenuje žádný commit, tag, který v tomto klonu není.
produced_by ReleaseProducedBy | null → ReleaseProducedBy ne Která schopnost odpověděla a kde jinde lze tutéž hodnotu získat.

Používá release.changelog

ReleaseChangelogArtifact

object
Jeden publikovaný artefakt, z vlastních důkazů záznamu vydání.
vlastnosttyppovinnépopis
cíl string ano Platformní triple, který záznam jmenuje.
název string ano Název souboru.
sha256 string ano Jeho SHA-256, jak ho záznam přečetl ze souboru.

Používá ReleaseSection

ReleaseCommitEvidence

object
Co o sobě říkaly předměty commitů od základní linie.

Důkaz, nikdy autorita. Je zde, aby člověk viděl lidský popis a změřený vedle sebe a aby VersionPlan::understated mohlo říct, kdy se oba rozcházejí — což je případ, který má celý tento subsystém zachytit.

use majordomus_cli::release::compat::{CommitEvidence, Impact};
let commits = CommitEvidence {
    commits: 24,
    implied: Impact::Patch,
    breaking: Vec::new(),
};
// The contract moved by a minor and the subjects claim a patch: the plan reports that
// disagreement rather than deferring to the words.
assert!(commits.implied < Impact::Minor);
vlastnosttyppovinnépopis
commity integer (uint) ano Kolik commitů od základní linie.
implikováno ReleaseImpact → ReleaseImpact ano Co by implikovaly samotné jejich typy conventional commits.
zpětně nekompatibilní array of string ne Předměty těch, které tvrdily, že jsou breaking.

Používá ReleaseVersionPlan

ReleaseDecision

object
Jedno rozhodnutí, tak jak ho uvádí vlastní objekt ADR vrstvy.
vlastnosttyppovinnépopis
id string ano adr-0027.
název string ano Rozhodnutí jeho vlastními slovy.
status string ano proposed, accepted, superseded.
datum string ano Datum, které záznam nese.
url string | null ne Kde lze přečíst samotné rozhodnutí: soubor v repozitáři. Web nemá stránku pro jednotlivá ADR, takže toto je poctivý cíl, ne vymyšlená trasa.
přidáno string | null ne Commit, který soubor přidal, což rozhoduje o release, do něhož patří. Datum ve front matteru říká, kdy bylo rozhodnutí učiněno; to jsou různé otázky.

Používá ReleaseSection

ReleaseDiagnostic

object
Něco o stavu release, co by měl člověk vědět, ať je verdikt jakýkoli.

use majordomus_cli::release::compat::{Diagnostic, Severity};
let d = Diagnostic {
    id: "tag-without-record".into(),
    severity: Severity::Warning,
    message: "v0.1.0 is tagged and the layer holds no release record for it".into(),
};
assert_eq!(d.severity, Severity::Warning, "a warning states the plan still stands");
vlastnosttyppovinnépopis
id string ano tag-without-record, tag-predates-records, record-without-tag, tag-commit-mismatch.
závažnost ReleaseSeverity → ReleaseSeverity ano Zda zastavuje release, jen varuje, nebo jen informuje.
zpráva string ano Co je špatně, jednou větou.

Používá ReleaseVersionPlan

ReleaseImpact

"none" | "patch" | "minor" | "major"
Jak moc změna hýbe kontraktem.

Uspořádané tak, aby „deklarovaný bump pokrývá požadované“ bylo porovnáním, a ne tabulkou:

use majordomus_cli::release::compat::Impact;
assert!(Impact::Major > Impact::Minor);
assert!(Impact::Minor > Impact::Patch);
assert!(Impact::Patch > Impact::None);
  • noneSmlouva se nepohnula.
  • patchPřesunulo se za hranici: volající to nepozná.
  • minorNěco dorazilo; každý stávající volající stále funguje.
  • majorNěco, co volající mohl držet, zmizelo nebo se pod ním změnilo.

Používá LandingDecision ReleaseCommitEvidence ReleaseSurfaceChange ReleaseVersionPlan

ReleasePolicy

object
Politika kompatibility, pojmenovaná a verzovaná.

use majordomus_cli::release::compat::{Impact, Policy, POLICY_SCHEMA};
use majordomus_cli::release::version::Version;
let policy = Policy::for_version(Version::parse("0.5.0").unwrap());
assert_eq!(policy.schema, POLICY_SCHEMA, "a verdict carries the rules it was reached under");
assert_eq!(policy.required_of(Impact::Major), Impact::Minor);
vlastnosttyppovinnépopis
schema string ano majordomus/version-policy/v1.
režim ReleasePolicyMode → ReleasePolicyMode ano Které pravidlo platí, rozhodnuto samotnou verzí baseline.

Používá ReleaseVersionPlan

ReleasePolicyMode

"pre1-0-strict" | "semver"
Jak tento projekt mění změřený dopad na verzi, kterou dluží.

Sémantické verzování dává 0.y.z plošnou výjimku — „cokoli se SMÍ kdykoli změnit“ — a Elm tuto výjimku odmítá tím, že každý balíček začíná na 1.0.0, protože pravidlo s únikovým východem je pravidlo o tom, kdy použít východ. Tento repozitář je 0.x a nezasloužil si 1.0.0, takže není k dispozici ani jedna odpověď: požadovat major by znamenalo požadovat 1.0.0 za jedno odstranění a udělit výjimku by dovolilo vydat breaking změnu jako patch.

Takže pod 1.0.0 je spodní mez minor. Jakýkoli pohyb povrchu, zaniklý či nový, je přinejmenším minor release; jen nezměněný povrch nedluží nic. To je nejsilnější signál, který 0.x má, a odstranění se stále jmenuje jako zpětně nekompatibilní bez ohledu na verdikt, takže se důkazy potichu nestanou minorem spolu s číslem.

V 1.0.0 posun končí: Mode::Semver je běžné pravidlo a přechod je jeden řádek Policy::required_of.

use majordomus_cli::release::compat::{Mode, Policy};
use majordomus_cli::release::version::Version;
assert_eq!(Policy::for_version(Version::parse("0.9.0").unwrap()).mode, Mode::Pre1_0Strict);
assert_eq!(Policy::for_version(Version::parse("1.0.0").unwrap()).mode, Mode::Semver);
  • pre1-0-strictPod 1.0.0: zásadní změny jsou povoleny a stojí minor, ne nic.
  • semverNa 1.0.0 nebo nad: dopad je požadavek.

Používá LandingDecision ReleasePolicy

ReleaseProducedBy

object
Která schopnost odpověděla tímto dokumentem a kde je tato schopnost promítnuta.

Dokument nese vlastní provenienci, aby čtenář — člověk na webu, klient přes MCP — našel stejnou hodnotu jinde, aniž by něco muselo vyčíslovat trasy. Stránka, která by je vypsala, by je deklarovala podruhé, což je selhání, které mají zachytit tvrzení site-check registry a cli; tohle zachytilo.

use majordomus_cli::release::model::ProducedBy;
let by = ProducedBy {
    capability: "release.changelog".into(),
    cli: Some("majordomus release changelog".into()),
    http: Some("/api/v1/changelog".into()),
    mcp_tool: None,
    mcp_resource: Some("majordomus://changelog".into()),
};
let json = serde_json::to_value(&by).unwrap();
assert_eq!(json["capability"], "release.changelog");
// a surface the capability is not projected on is absent, not null
assert!(json.get("mcp_tool").is_none());
assert_eq!(ProducedBy::default().capability, "");
vlastnosttyppovinnépopis
schopnost string ano Id schopnosti.
cli string | null ne Příkazová řádka, která to vykreslí.
http string | null ne Trasa HTTP, která jím odpovídá.
mcp_tool string | null ne Nástroj MCP.
mcp_resource string | null ne URI zdroje MCP.

Používá ReleaseChangelog

ReleaseReference

object
Záznam vrstvy, který commit jmenuje ve vlastním textu.

Odvozeno, nikdy neuvedeno vedle commitu: id úkolu nebo id milníku ve předmětu či těle je odkaz a vrstva už objekt, na který odkazuje, drží. Odkaz na něco, co vrstva nemá, se nepřenáší — odkaz na neexistující záznam je horší než žádný odkaz, protože čtenář to pozná, až když ho následuje.

use majordomus_cli::release::model::Reference;
let r = Reference {
    kind: "issue".into(),
    id: "I1305".into(),
    title: "An observed contract has a fingerprint".into(),
    route: Some("/plan/i1305/".into()),
};
let json = serde_json::to_value(&r).unwrap();
assert_eq!(json["id"], "I1305");
assert_eq!(json["route"], "/plan/i1305/");
// a reference the site has no page for carries no route rather than an invented one
let bare = Reference { route: None, ..r };
assert!(serde_json::to_value(&bare).unwrap().get("route").is_none());
vlastnosttyppovinnépopis
druh string ano issue nebo milestone.
id string ano I1305, M000.
název string ano Co to je, ze samotného záznamu.
route string | null ne Kde je zveřejněno na tomto webu, když má stránku.

Používá ReleaseChange

ReleaseSection

object
Changelog jedné verze.
vlastnosttyppovinnépopis
verze string ano Verze, nebo unreleased.
štítek string | null ne Tag, pokud byl publikován.
datum string | null ne Kdy byl publikován, ze záznamu.
commit string | null ne Commit, ze kterého bylo publikováno.
nevydáno boolean ano Zda je tato sekce prací, která dosud nebyla vydána.
notes_url string | null ne Poznámky k vydání, které záznam uvádí — samotné publikované vydání.
compare_url string | null ne Každý commit mezi předchozím release a tímto, jak jej vykresluje forge.
tree_url string | null ne Strom v tomto release.
rozhodnutí pole ReleaseDecision → ReleaseDecision ano Rozhodnutí datovaná v okně tohoto releasu.
skupiny pole typu ReleaseChangeGroup → ReleaseChangeGroup ano Změny z commitů v rozsahu tohoto release, seskupené podle toho, co dělaly, a seřazené podle pořadí, které každá skupina nese. Plochý seznam je zřetězením seznamů skupin; nic ho nedrží dvakrát.
artefakty pole ReleaseChangelogArtifact → ReleaseChangelogArtifact ano Co bylo publikováno, když je tato sekce release.

Používá ReleaseChangelog

ReleaseSeverity

"error" | "warning" | "note"
Jak moc diagnostika záleží.

Chyba říká, že samotnému plánu nelze věřit, a blokuje verdikt; varování říká, že se stavem releasu je něco špatně, a verdikt přesto platí; poznámka říká něco pravdivého a ne špatného, aby varování znamenala to, co říkají.

use majordomus_cli::release::compat::Severity;
assert_ne!(Severity::Error, Severity::Warning);
assert_ne!(Severity::Warning, Severity::Note);
  • errorPlánu nelze věřit; verdikt je blokováno.
  • warningPlán platí a něco je stále špatně.
  • noteNic není špatně; čtenáři se přesto řekne něco o stavu release.

Používá ReleaseDiagnostic

ReleaseStatus

"ok" | "blocked"
Zda strom smí přistát nebo být vydán tak, jak je.

use majordomus_cli::release::compat::Status;
assert_ne!(Status::Ok, Status::Blocked);
  • okDeklarovaná verze pokrývá, co smlouva udělala.
  • blockedNe, a plán říká, o kolik.

Používá ReleaseVersionPlan

ReleaseSurfaceChange

object
Jeden pohyb veřejného kontraktu s důvodem, proč se počítá tak, jak se počítá.

use majordomus_cli::release::compat::{Direction, Impact, SurfaceChange, SurfaceKind};
let change = SurfaceChange {
    impact: Impact::Major,
    direction: Direction::Removed,
    surface: SurfaceKind::Http,
    capability: "alpha.list".into(),
    id: "GET /api/v1/alpha".into(),
    detail: "the capability survives; this way of reaching it does not".into(),
};
assert_eq!(change.to_string(), "- route GET /api/v1/alpha");
vlastnosttyppovinnépopis
dopad ReleaseImpact → ReleaseImpact ano Jak moc sám posouvá kontrakt.
směr ReleaseChangeDirection → ReleaseChangeDirection ano Přidáno, odstraněno nebo změněno.
povrch ReleaseSurfaceKind → ReleaseSurfaceKind ano Který slib to je.
schopnost string ano Schopnost, do které patří.
id string ano Věc sama: GET /api/v1/foo, majordomus_release_analysis, release.analysis.
detail string ano Proč tento dopad a ne menší, v jedné klauzuli.

Používá ReleaseVersionPlan

ReleaseSurfaceKind

"capability" | "kind" | "mcp_tool" | "mcp_resource" | "http" | "cli" | "input" | "output"
Ve které projekci kontraktu je změna.

Ne kde to bylo nalezeno — vše zde se nachází v registru — ale jaký slib to je, aby čtenář viděl „trasa zmizela“, ne ukazatel JSON.

use majordomus_cli::release::compat::SurfaceKind;
assert_eq!(SurfaceKind::Http.as_str(), "route");
  • capabilitySamotná schopnost.
  • kindZda jeho volání cokoli mění.
  • mcp_toolNázev nástroje MCP.
  • mcp_resourceURI zdroje MCP.
  • httpMetoda a cesta HTTP.
  • cliCesta příkazové řádky.
  • inputCo smí volající poslat.
  • outputCo je volajícímu slíbeno zpět.

Používá ReleaseSurfaceChange

ReleaseVersionDecidedBy

"contract" | "contract_and_commits" | "undecided"
Kdo odpověděl na next reportu o verzi: veřejná smlouva, smlouva s commity — nebo nikdo, protože smlouvu nešlo změřit.

ADR 0051 činí smlouvu autoritou a degraduje konvenční commity na důkaz, takže DecidedBy::Contract je běžná odpověď. Neměřitelná smlouva se odmítne, ne hádá: DecidedBy::Undecided nechá next chybět a nese důvod a odvození z commitů zůstává tím, čím vždy je, důkazem — nikdy odpovědí na jeho místě.

use majordomus_cli::release::model::DecidedBy;
assert_eq!(serde_json::to_value(DecidedBy::Contract).unwrap(), "contract");
assert_eq!(DecidedBy::Undecided.as_str(), "undecided");
assert_eq!(DecidedBy::default(), DecidedBy::Undecided);
  • contractrelease analyze změřil veřejný kontrakt proti poslednímu release a next je verze, kterou vyžaduje: deklarovaná verze, když kontrakt už splňuje, jinak nejmenší, kterou dovoluje.
  • contract_and_commitsKontrakt byl změřen a nevyžaduje žádný release nad posledním — změnilo se pouze chování za veřejnou hranicí — zatímco commity nesou změny: next je nejmenší release nad posledním, patch, ať commit subjecty tvrdí cokoli.
  • undecidedKontrakt nebylo možné změřit — žádný publikovaný základ nenese registr nebo verze nejsou tři čísla — takže nic nerozhoduje o next: chybí, důvod je v contract_unreadable a release bump bez explicitního cíle odmítne.

Používá ReleaseVersionReport

ReleaseVersionPlan

object
Celá odpověď: co se pohnulo, co to vyžaduje a co strom deklaruje.

Jedna hodnota, kterou vykresluje každý povrch — příkazový řádek, /api/v1/release/analysis, nástroj MCP, panel Cockpitu, vygenerovaný dokument i kontrola CI. Nikde neexistuje druhý výpočet, což je vlastnost, díky níž číslo něco znamená.

use majordomus_cli::release::compat::{Status, VersionPlan};
#### use majordomus_cli::release::compat::{Baseline, CommitEvidence, Impact, Policy};
#### use majordomus_cli::release::version::Version;
let plan = VersionPlan {
    policy: Policy::for_version(Version::parse("0.5.0").unwrap()),
    baseline: Baseline {
        version: "0.5.0".into(), reference: "v0.5.0".into(), read_at: "3a032c1e".into(),
        commit: "3a032c1e".into(), recorded: true, atoms: 300, fingerprint: "sha256:a".into(),
    },
    declared_version: "0.5.0".into(),
    tool_version: "0.5.0".into(),
    writers_agree: true,
    atoms: 333,
    fingerprint: "sha256:b".into(),
    implied: Impact::Minor,
    required: Impact::Minor,
    declared: Impact::None,
    required_version: "0.6.0".into(),
    status: Status::Blocked,
    breaking: false,
    changes: Vec::new(),
    commits: CommitEvidence { commits: 24, implied: Impact::Patch, breaking: Vec::new() },
    understated: true,
    diagnostics: Vec::new(),
};
// The contract requires a minor and the version declares none: this tree may not land.
assert_eq!(plan.status, Status::Blocked);
assert!(plan.declared < plan.required);
assert!(plan.understated, "the commit subjects claim less than the contract did");
vlastnosttyppovinnépopis
policy ReleasePolicy → ReleasePolicy ano Politika, za které bylo dosaženo verdiktu.
baseline ReleaseBaseline → ReleaseBaseline ano Release, vůči kterému se měřilo.
declared_version string ano Verze, kterou deklaruje manifest crate — jediné místo, kde se tvoří.
tool_version string ano Verze, kterou vypisuje bin/majordomus: to, co uvádí její projekce, share/version.txt.
writers_agree boolean ano Zda je tato projekce aktuální — uvádí, co manifest deklaruje. Název zůstal z doby, kdy měla verze dva zapisovatele; nyní je jediným manifest.
atomy integer (uint) ano Kolik veřejných atomů tento strom nese.
otisk string ano Otisk povrchu tohoto stromu.
implikováno ReleaseImpact → ReleaseImpact ano Co samotný posun povrchu představuje.
povinné ReleaseImpact → ReleaseImpact ano Co od toho politika vyžaduje.
deklarováno ReleaseImpact → ReleaseImpact ano Co již ta dvě čísla verzí představují.
required_version string ano Nejmenší verze, kterou tento strom smí deklarovat.
status ReleaseStatus → ReleaseStatus ano Zda ano.
zpětně nekompatibilní boolean ano Zda zmizelo něco, co mohl volající držet.
změny pole ReleaseSurfaceChange → ReleaseSurfaceChange ano Každý pohyb kontraktu, od nejhoršího.
commity ReleaseCommitEvidence → ReleaseCommitEvidence ano Co o sobě commity řekly.
podhodnoceno boolean ano Zda předměty commitů podhodnocují to, co smlouva skutečně udělala.
diagnostika pole ReleaseDiagnostic → ReleaseDiagnostic ne Cokoli nekoherentního na stavu release, ať je verdikt jakýkoli.

Používá release.analysis

ReleaseVersionReport

object
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
deklarováno string ano Verze, kterou deklaruje manifest crate — jediné místo, kde se tvoří.
nástroj string ano Verze, kterou vypisuje bin/majordomus: to, co uvádí její projekce, share/version.txt.
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í.
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.
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í.
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.
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.
decided_by ReleaseVersionDecidedBy → ReleaseVersionDecidedBy ne Kdo odpověděl na next.
contract_unreadable string | null ne Proč smlouva nemohla odpovědět, když je decided_by undecided.
změny pole ReleaseChange → ReleaseChange 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.

Používá release.version

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