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.

Příští verzi přidělí při přistání integrační exekutor z verze trunku a změřeného dopadu změny pod typovanou spodní mezí politiky

Příští verzi přidělí při přistání integrační exekutor z verze trunku a změřeného dopadu změny pod typovanou spodní mezí politiky

majordomus://adr/adr-0134navrženo releaseverzováníintegrace

odkazuje na

  • put_in_force apps/majordomus-cli/src/integration/allocate.rs (soubor)
  • put_in_force apps/majordomus-cli/src/integration/drain.rs (soubor)
  • put_in_force apps/majordomus-cli/src/release/compat.rs (soubor)
  • put_in_force apps/majordomus-cli/src/release/landing.rs (soubor)
  • put_in_force adr-0029
  • put_in_force adr-0051
  • put_in_force adr-0085
  • put_in_force project.release-is-a-projection@2
  • put_in_force project.the-version-is-measured@2
  • put_in_force test/cases/1060_the_version_is_allocated_at_landing.sh (test)
  • put_in_force test/cases/1061_the_executor_allocates_the_version_at_landing.sh (test)

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

134. Další verzi přiděluje při přistání integrační executor z verze trunku a změřeného dopadu změny pod typovanou podlahou politiky

Kontext

Verze má jednoho zapisovatele (ADR 0029, ADR 0085) a její minimum se měří z veřejného kontraktu proti poslednímu release (ADR 0051). Kdo ji zapisuje a kdy, bylo ponecháno tomu, kdo si toho všiml první: version-surface odmítne první pull request po release, který kontrakt posune, dokud tento pull request verzi sám nezvýší.

Dne 2026-10-09 a 2026-10-10 byla tato cena změřena na vlastní práci tohoto repozitáře:

  • další číslo se mezi relacemi vyjednávalo zprávami (0.19.1 pro jeden pull request, 0.19.2 pro jiný, 0.20.0 pro „první funkci“);
  • každá feature branch pak kolidovala s trunkem na řádku verze v apps/majordomus-cli/Cargo.toml, autorské cestě, kterou refresh integračního executoru odmítá, takže se každá opravovala ručně (#807, #821, #827, #829);
  • release mezi tím (v0.20.0) zneplatnil každé nesené zvýšení a každá větev se musela znovu zvýšit na 0.21.0.

Pull request zvolil svou verzi dřív, než věděl, na který master přistane. Volbu nic neserializovalo kromě lidí.

Rozhodnutí

  1. Verze se přiděluje při přistání. Když politika repozitáře říká release.allocation: landing, pull request verzi nezvyšuje. Integrační executor (ADR 0101) ji zvýší při obnovení, které už provádí před posledním během CI pull requestu, poté co je master zmergován a před derive, takže head, který posuzuje povinná kontrola, a head, který přistane, nesou stejnou verzi.
  2. Číslo se počítá z trunku, nikdy z branche. Další verze je trunk_version.raised_to(selected), kde trunk_version je to, co master deklaruje v okamžiku refresh. Opakování, druhý refresh po posunu masteru nebo zotavení po pádu přepočítá z nového trunku, takže žádná integrace nemůže zvýšit verzi dvakrát a dva pull requesty nemohou držet totéž číslo: executor obnovuje vždy jeden pull request pod integračním lease a přistání, které posune master, znovu způsobí, že každý jiný head je behind.
  3. Co se vybírá, je typované. selected = max(required_by_compatibility, floor):
    • required_by_compatibility je měření ADR 0051 vlastního posunu veřejného povrchu tohoto pull requestu, master proti kandidátovi, přeložené režimem verze (pod 1.0.0 stojí odebrání minor, od 1.0.0 major);
    • floor je release.floor v politice: none, patch, minor nebo major, čteno přes režim verze jako kompatibilita, takže pod 1.0.0 žádá minor spodní hranice major; změna, která se nedotkne žádné cesty, není přistání a spodní hranici nedluží;
    • změněné cesty se vypisují bez detekce přejmenování, takže soubor přesunutý do vyňatého stromu se posuzuje i na cestě, kterou opustil;
    • změna, která přidává .ai/repo/releases/v<trunk>.yaml, záznam release, který trunk již deklaruje, nedluží žádnou spodní mez: záznam následuje svůj tag a může změnit více, než pokrývá třída záznamů (záznam v0.20.0 změnil také .gitattributes a docs/INSTALL.md), a její zvýšení by jej přeneslo za tag, který zaznamenává. Rozhoduje přidání, měřené od místa, kde se head odštěpil: změna, která upravuje již napsaný záznam, mez dluží, takže žádný pull request jí neunikne dotykem záznamu;
    • neznámý pohyb zůstává tím, čím ho činí ADR 0051, nikdy bezpečnou záplatou.
  4. Výjimka snižuje jen práh, nic jiného. release.exempt deklaruje třídy, každou s id, popisem a cestami, které pokrývá. Pull request je vyňat, když každá cesta, kterou mění, spadá do jedné třídy: pak se práh neuplatní, požadavek kompatibility ano. Záznam release, vlastní obnova executoru a změna záznamů plánu jsou třídy, které tento repozitář deklaruje. Přepínač pro jednotlivý pull request neexistuje.
  5. Alokace není publikace. Zvýšená verze je integrovaný fakt; release se publikuje tagem a ověřuje svým záznamem a smoke testem. Nic v tomto rozhodnutí netaguje ani nepublikuje.
  6. Repozitář, který neříká nic, se nemění. release.allocation má výchozí off a release.floor výchozí none: kontrola a zvýšení fungují přesně jako dříve.

Důsledky

  • majordomus release next (schopnost release.next) jen pro čtení odpovídá, co by executor přidělil pro daný head proti base, a proč: verzi trunku, naměřený posun, spodní mez, případnou výjimku a další verzi.
  • Tento repozitář nastavuje allocation: landing a floor: minor: každá způsobilá integrace posune alespoň minor (požadavek vlastníka z 2026-10-10).
  • Obnovení exekutoru musí před přidělením vyřešit konflikt na řádku verze ve prospěch kmene, protože vlastní číslo větve už není tvrzením autora.
  • Model konzistence, řečeno otevřeně: GitHub neslučuje a nepublikuje atomicky. Zaručeno je, že každá přistálá integrace nese právě jednu alokaci spočtenou z masteru, na který přistála, protože head, který přistane, je head, který executor obnovil a CI posoudilo (--match-head-commit), a executor je jediným zapisovatelem alokace.

Dodávka

  • Řez A (tento záznam): typovaný blok politiky, rozhodovací engine, release.next.
  • Řez B: přidělení uvnitř refresh executoru (integration/allocate.rs), řešení konfliktu řádku verze v klasifikaci a v refresh a trailer Version-Allocated: <next> (<selected> from <trunk>) na commitu, který refresh pushuje. Politika, kterou se přistání řídí, je ta, kterou commituje master, čtená z commitu a nikdy z pracovního stromu executoru: vztah headu k masteru je cachován dvojicí id commitů jako navždy platný fakt, takže vše, na čem závisí, musí být faktem těchto commitů. Opakování nebo refresh po posunu masteru přepočítá z nového masteru (případ 1061).
  • Řez B2: head, který už obsahuje master, ale nenese číslo, které mu přidělí přistání, přesto dluží obnovu. Jeho vztah zůstává up_to_date a říká, jakou verzi dluží (owes_version, čtenou ze dvou commitů jako vše, co drží cache vztahů), a kontrola čerstvosti jej odmítne jako needs_refresh s version_unallocated:VERSION, nikdy jako behind_master, což říká, že chybí master. Dodáno s řezem B. allocation zůstává v tomto repozitáři off až do řezu C, aby se po pull requestu nežádalo ruční zvýšení verze a pak další obnova kvůli ní.
  • Řez C: version-surface na pull requestu pod allocation: landing odmítne ruční zvýšení místo jeho požadování; version.yml přestane otevírat pull requesty se zvýšením.
  • Řez D: životní cyklus release jako jeden typovaný stavový automat nad stávajícím workflow.
  • Slice E: cesta k manifestu z politiky, aby nainstalovaný repozitář používal týž engine.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0134-the-version-is-allocated-at-landing.md
identity
adr-0134
dostupné také jako
Zdroj MCP majordomus://adr/adr-0134 · majordomus entity show adr/adr-0134 · GET /api/v1/entity?uri=majordomus://adr/adr-0134
v Cockpitu
/cockpit/objects/adr/adr-0134

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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