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.

Push spustí to, co by jako první našla CI

Push spustí to, co by jako první našla CI

majordomus://rule/project.a-push-runs-what-ci-would-find-first@1aktivní ciproces

Zdůvodnění

Dne 2026-10-09 CI dvakrát odmítlo release 0.19.0, pokaždé kvůli něčemu, co lokální běh najde za pár sekund. Prvním byla strukturní kontrola, economics-claims, za 6 s a always: true. Druhým případ sady, 08, za 1 s. Ani jedno před pushem neběželo. Pre-push hook spustil finish --check, který hlásí požadované kontroly jako nikdy nenahlášené a žádnou z nich nespouští, a případy se vybíraly odhadem. Každé odmítnutí stálo okruh přes CI delší než hodinu, pak další derive za zámkem stroje, a to u jediné změny, na kterou vlastník čekal.

Celá úloha structure odpovědí není. Trvá asi 20 minut, sahá na API GitHubu a z jednoho stroje pushuje devět relací. Co push dluží, je ta část CI, která je levná, lokální a jistě selže stejným způsobem, vybraná podle toho, co CI měřilo.

Požadované chování

  • .githooks/pre-push volá scripts/ci/run-plan --before-push po finish --check. Politika to deklaruje (enforcement: structure-gates-on-push, zapojeno přes git-hook:pre-push), takže doctor a skrze něj hook pre-commit odmítne klon, jehož hook je přestane volat.
  • Krok spočítá plán tohoto stromu, jako to dělá CI, a push odmítne (exit 12), když se plán spočítat nedá. scripts/ci-plan odmítne base nebo head, který nejmenuje žádný commit. Dřív pipoval selhávající git diff do sort, jehož stav selhání skryl, a vracel tak plán spočítaný z ničeho s kódem 0.
  • Kontroly. Spouští vybrané strukturní kontroly plánu, které nejsou v network: true označeny .ai/repo/ci/gates.yaml a jejichž zaznamenané sekundy nejsou víc než MJ_PUSH_GATE_SECONDS (výchozí 15). Sekundy pocházejí z .ai/repo/ci/structure-durations.tsv, které scripts/ci-baseline --structure-durations zapisuje z artefaktů ci-metrics-structure, jež CI nahrává. Bere je od nejlevnější, dokud jejich součet zůstává v MJ_PUSH_GATE_BUDGET (výchozí 120).
  • Přeskočené kontroly. Každá vynechaná kontrola vypíše jeden řádek, který ji jmenuje a říká proč: sahá na síť, nemá zaznamenanou dobu trvání, je nad limitem na kontrolu, nebo je za rozpočtem. Chybějící soubor dob trvání push odmítne.
  • Případy. Spouští případy, které .ai/repo/ci/suite-durations.tsv zaznamenal nejvýše MJ_PUSH_CASE_SECONDS (výchozí 5), po čtyřech zároveň. Jmenovitě vynechává případ, který deklaruje majordomus-exclusive nebo spouští server (serve_up, mcp_shared, serve ensure|start, launcher MCP). Rychlé je to, co zaznamenalo CI. Případ se serverem měří časování a porty a na stroji, který sdílí devět relací, selže kvůli zátěži, ne kvůli změně: pět jich tak selhalo při prvním běhu.
  • Mez a verdikt. Hlásí svůj naměřený čas proti MJ_PUSH_BOUND (výchozí 180). Překročení pojmenuje nejpomalejší kroky a push nikdy neodmítne: vytížený stroj jej nesmí shodit, jinak lidé krok obcházejí. Neprošlá kontrola nebo případ push odmítne, pojmenuje je a vypíše konec svého výstupu.
  • Stdin. Každá kontrola a každý případ běží se zavřeným stdin. Stdin hooku je seznam refů. test/run.sh dal každému případu stdin runneru, protože úloha na pozadí pod řízením úloh si jej ponechává, takže případ, který četl stdin, čekal věčně na otevřené rouře: případ 54, 39 minut, téhož dne.

Chování při selhání

Push je odmítnut se jmény toho, co selhalo, a větou „CI would refuse this push for the same reason“. Neexistuje žádný příznak, který krok přeskočí, stejně jako neexistuje --no-verify.

Ověření

test/cases/1021_a_push_runs_what_ci_would_find_first.sh řídí krok nad plánem a trváními, které zapisuje. Dokazuje:

  • spustí se levná kontrola a levná selhávající kontrola odmítne push s jejím výstupem;
  • každý druh vynechané kontroly je jmenován s důvodem: síť, žádné zaznamenané trvání, přes limit na kontrolu a za rozpočtem;
  • chybějící soubor s dobami trvání nebo plán, který nelze spočítat (neznámý základ), push odmítne;
  • hook volá krok, politika deklaruje vynucování a plán nese síťový příznak modelu;
  • případ, který čte stdin v rouře, jež se nikdy nezavře, už runner nezablokuje.

První běh kroku na vlastní branchi tu branch odmítl kvůli nepřipnutému sort (order-check), dřív než ji viděla jakákoli CI.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/a-push-runs-what-ci-would-find-first.v1.md
identity
project.a-push-runs-what-ci-would-find-first@1
dostupné také jako
Zdroj MCP majordomus://rule/project.a-push-runs-what-ci-would-find-first@1 · majordomus entity show rule/project-a-push-runs-what-ci-would-find-first-1 · GET /api/v1/entity?uri=majordomus://rule/project.a-push-runs-what-ci-would-find-first@1
v Cockpitu
/cockpit/objects/rule/project-a-push-runs-what-ci-would-find-first-1

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.