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ě
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á | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| distribution_claims_match_pipeline | ci | gh 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_reopen | artifact | read 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 wanted | 91c0b5d |
Č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.