I3902 — A hung Pages build is replaced by a declared bound, and the right tree is rebuilt, never redeployed
GitHub's own Pages build that stays `building` or `queued` longer than deploy.build_hung_after (.ai/repo/ci/pages.yaml) is hung: `scripts/pages rebuild` replaces it and says why, a younger one is waited on with its own exit (13), and the scheduled publisher hands a build in flight of the right tree to the rebuild instead of redeploying an identical tree.
BLOKOVÁNO vlna 0 · p0 · profil implementation · bezpečné paralelně
Blokováno. Tento úkol nemůže začít, dokud není hotov milestone:the-runtime-supervises-itself. Stav je z toho odvozen, ne deklarován.
Cíl
GitHub's own Pages build that stays `building` or `queued` longer than deploy.build_hung_after (.ai/repo/ci/pages.yaml) is hung: `scripts/pages rebuild` replaces it and says why, a younger one is waited on with its own exit (13), and the scheduled publisher hands a build in flight of the right tree to the rebuild instead of redeploying an identical tree.
Proč
On 2026-10-22 the deploy of 355a0cee79a pushed gh-pages at 20:28Z. GitHub's build of it was still `building` 47 minutes later while majordomus.dev served 2034d4a3f0b, and the deploy run ended success with a warning. `scripts/pages rebuild` refused every request while any build was in flight, so a hung build could never be replaced. The scheduled `owed` job chose `deploy` for it: forty minutes of rustdoc, UI and Cockpit snapshots to push the same tree, every thirty minutes. The owner, in Czech, asked for it to be solved rock-solid and the Majordomus way, because it is a critical feature: stuck builds must be watched, timed out and killed automatically, because they burn compute minutes and delivery time, and this must be in Majordomus's DNA.
Aktuální stav
A hung GitHub Pages build blocks publication until it ends on its own; nothing replaces it.
Cílový stav
A build in flight past its declared bound is replaced within one schedule; a right tree is never redeployed to get past its own build; every refusal says which of not-yet, unreadable or refused it is.
Rozsah
- .ai/repo/ci/pages.yaml
- scripts/pages
- .github/workflows/pages.yml
- test/cases/625_a_rebuild_is_asked_only_when_it_helps.sh
- .ai/repo/project/issues/I3902.yaml
- .ai/repo/project/issues/I3903.yaml
Mimo rozsah
- Stuck or stale GitHub Actions runs: I3903.
- Serving the site from a Pages artifact instead of the gh-pages branch, which would remove GitHub's second build: an ADR first, because gh-pages is also the evidence store (ADR 0087).
Závislosti
Žádné. Tento úkol je kořenem grafu.
Co na tom čeká
Kritéria přijetí
- A build of this commit in flight past deploy.build_hung_after is replaced, and the output says it was hung
- A hung build of another commit is replaced as well; a young build of either is waited on with exit 13 and no request
- A build whose start time cannot be read is never taken for an old one
- The scheduled remedy hands an errored or in-flight build of the trunk's own tree to the rebuild, and deploys only a stale tree
Validace
- bash test/run.sh 625_a_rebuild_is_asked_only_when_it_helps
Požadované důkazy
- case_625
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
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.
Canonical record: .ai/repo/project/issues/I3902.yaml. Read it back with majordomus plan show I3902.