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.

I2282 — Dispatchnutý verdikt pull requestu se záznamem nesplňuje ochranu větve

Učinit pull request se záznamem, který release navrhuje, sloučitelným, aniž by ho člověk zavíral a znovu otevíral, nebo přestat v docs/DISTRIBUTION.md a případu 996 tvrdit, že je.

HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně

Součást test-evidence — Každé ověřitelné tvrzení a widget se na každém povrchu převádí na testovací důkaz vázaný na revizi.

Cíl

Učinit pull request se záznamem, který release navrhuje, sloučitelným, aniž by ho člověk zavíral a znovu otevíral, nebo přestat v docs/DISTRIBUTION.md a případu 996 tvrdit, že je.

Proč

docs/DISTRIBUTION.md ('Why the release asks for the verdict of its record') říká, že publikační job spouští validate na release/record-<tag>, že kontrolní běhy se připojují k hlavě commitu, kterou pull request čte, a že záznam tedy už nesedí s prázdným souhrnem, dokud ho někdo nezavře a znovu neotevře. Dne 2026-10-10 u záznamu v0.19.1, #866 na hlavě 03e1d8a597, přesně takto vyžádaný běh (38015081212) skončil úspěchem s kontrolním během `ci` od aplikace 15368, tedy aplikace a kontextu, které vyžaduje ochrana větve masteru (strict false, žádné rulesety). Merge byl odmítnut s 'base branch policy prohibits'. Běh pull_request způsobený otevřením záznamu (38015082449, aktér github-actions[bot]) skončil selháním s nulou jobů; obě sady kontrol jsou přiřazeny k pull requestu 866 a jeho statusCheckRollup zůstal prázdný, dokud zavření a znovuotevření v 05:22Z nespustilo běh pull_request 38027303212. Dispatch zatím záznam sám o sobě mergeovatelným neudělal: dispatch v0.18.0 (#832) selhal a mergnul se po běhu zavřít/znovu otevřít, v0.19.0 (#861) byl admin-merge. Případ 996 drží, že oba workflow jsou spolu propojeny; nikdy nepozoruje, že by se záznamový pull request stal mergeovatelným. Každý release od té doby ztratil jeden cyklus CI, asi 90 minut, mezi publikací a tím, než záznam dorazí na web.

Aktuální stav

Publikační úloha otevírá pull request záznamu pomocí GITHUB_TOKEN a spouští validate na jeho větvi. `ci` spuštěné dispatchem se nepočítá: rollupy #1142 a #1147 neuvádějí žádnou kontrolu, ačkoli jejich dispatchované `ci` prošlo, a 2026-10-16 byl záznam v0.27.0 (#1273, head a2aa25f) odmítnut, i když jeho dispatchované `ci` bylo zelené (běh 38865302829). Jeho běh pull_request (38865305333) byl vytvořen jako action_required, ne selhal s nulou úloh jako do v0.26.0, a záznam se sloučil na tomto běhu, jakmile jej člověk schválil. Od fix/the-record-dispatch-is-not-the-records-verdict release.yml, tělo pull requestu záznamu, docs/DISTRIBUTION.md ('Who starts the record's verdict', runbook a tabulka selhání) a případ 996 nazývají dispatch předčasným čtením a jmenují krok člověka: schválit čekající běh, nebo zavřít a znovu otevřít (majordomus prs drain). Zbývá vlastníkovo rozhodnutí o GitHub App nebo fine-grained tokenu, který by spustil vlastní běh záznamu bez člověka; do té doby nelze ukázat record_pull_request_mergeable_without_reopen.

Cílový stav

Záznamový pull request release se stane mergeovatelným na vlastním zeleném `ci`, bez zavření, znovuotevření nebo admin mergi, a dokumentace říká, co pipeline dokazuje. Jmenují se dva léky. První je rozhodnutí vlastníka, protože potřebuje přihlašovací údaj, který může poskytnout jen vlastník: publikační job otevře, nebo zavře a znovu otevře, záznamový pull request pomocí GitHub App nebo jemně granulárního tokenu, jehož události spouštějí workflow, takže běh pull_request nese `ci` sám. Druhý nepotřebuje nic nového: pipeline a dokumentace přestanou tvrdit, že dispatch je verdikt, release jmenuje zavření/znovuotevření jako zbývající krok a provede ho tokenem, který to umí, nebo ho nese runbook landeru, a případ 996 se zúží na to, co ukazuje.

Rozsah

  • .github/workflows/release.yml
  • docs/DISTRIBUTION.md
  • test/cases/996_the_record_pull_request_gets_its_verdict.sh
  • .ai/repo/ci/release.yaml

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • U release `gh pr view <record> --json mergeStateStatus` čte CLEAN, jakmile jeho `ci` skončí úspěchem, aniž by byl pull request se záznamem uzavřen, znovu otevřen nebo admin-mergnut; nebo docs/DISTRIBUTION.md už neříká, že ano
  • docs/DISTRIBUTION.md pro pull request se záznamem jmenuje jen kroky, které pipeline provádí nebo které provádí runbook lander, a tabulka selhání jmenuje close/reopen, pokud zůstává
  • Případ 996 tvrdí jen to, co pozoruje; pokud si ponechá dispečink, nenazývá ho verdiktem záznamu
  • Pokud je zvolena náprava tokenem, přihlašovací údaj je v docs/DISTRIBUTION.md jmenován jako vlastníkův, s tím, jak se rotuje, a v repozitáři se neobjeví žádná tajná hodnota

Validace

  • bin/majordomus plan validate
  • MJ_TEST_JOBS=4 bash test/run.sh 996

Požadované důkazy

  • record_pull_request_mergeable_without_reopen
  • distribution_claims_match_pipeline

Důkazy

pokrývátypcommandvýsledeku commitu
distribution_claims_match_pipelinecigh run view --job 118758852989 --log (validate run 39438896504, suite-shard (4), runs MJ_TEST_JOBS=4 bash test/run.sh 996)996_the_record_pull_request_gets_its_verdict ok in suite-shard (4) job 118758852989 of validate run 39438896504 on master 9a5a9b77520 (carries fix 8ed40f6eb7c); listed ok in that job's suite.tsv artifact (shard 149 passed, 0 failed, 1 skipped, not 996). Sections 6-7 prove neither release.yml nor docs/DISTRIBUTION.md calls the dispatch the record's verdict ('That run is not the record's verdict.'; branch protection reads no check suite a dispatch created), and that the record PR body, the publish notice, runbook step 6 and the failure-table row name the person's step (approve the waiting run, gh pr close/reopen, majordomus prs drain); the header says the case observes no merge, approval or reopen (criterion 3)91c0b5d
record_pull_request_mergeable_without_reopenartifactread docs/DISTRIBUTION.md ('Who starts the record's verdict', runbook step 6, failure table) on origin/master 91c0b5d5658; gh run view --job 118758852989 --log (validate run 39438896504, suite-shard (4), case 996)Criterion 1 is satisfied by its documented alternative, not by a record that merges on its own: the issue's objective and criterion 1 allow 'or docs/DISTRIBUTION.md no longer says that it does', and fix 8ed40f6eb7c took it. docs/DISTRIBUTION.md now says 'That run is not the record's verdict.', that branch protection reads no check suite a dispatch created, and names the person's step (approve the waiting run, gh pr close/reopen, majordomus prs drain) with the token remedy left as the owner's decision. Case 996 (sections 6-7) asserts exactly that text and ran ok in suite-shard (4) job 118758852989 of validate run 39438896504 on master 9a5a9b77520. A record PR mergeable without reopen is not shown; it needs the owner's GitHub App or fine-grained token and belongs in a new issue if wanted91c0b5d

Časová osa

zahájeno
2026-10-20T21:55:35Z
ověřeno
—
dokončeno
2026-10-20T21:57:30Z

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I2282.yaml. Přečtěte jej zpět přes majordomus plan show I2282.

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