I3903 — A stuck or superseded CI run is found and stopped by a declared bound, by a typed capability on a schedule
A typed forge capability beside apps/majordomus-cli/src/integration/forge.rs lists the repository's in-flight GitHub Actions runs. It cancels three kinds: a run queued longer than its declared bound, a run in progress past its workflow's bound, and a pull-request run whose head is no longer its branch's head. Each cancellation is recorded with its reason in the integration audit trail. It runs on a schedule, the way queue.yml runs `majordomus prs`, and absorbs the cancel logic scripts/ci/release-path carries in shell.
BLOKOVÁNO vlna 1 · p0 · profil implementation · bezpečné paralelně
Blocked. This issue cannot start until I3902, milestone:the-runtime-supervises-itself are done. The status is derived from that, not declared.
Cíl
A typed forge capability beside apps/majordomus-cli/src/integration/forge.rs lists the repository's in-flight GitHub Actions runs. It cancels three kinds: a run queued longer than its declared bound, a run in progress past its workflow's bound, and a pull-request run whose head is no longer its branch's head. Each cancellation is recorded with its reason in the integration audit trail. It runs on a schedule, the way queue.yml runs `majordomus prs`, and absorbs the cancel logic scripts/ci/release-path carries in shell.
Proč
On 2026-10-22 the Actions queue was saturated. Master's validate and pages waited behind runs of heads that had already moved, and a person found and cancelled them by hand. Nothing in the repository cancels a stuck or superseded run: validate's concurrency group never cancels in progress, a failed run cancels only itself (I2664), and Rust has no run cancellation at all. The owner, in Czech: 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
Stuck and superseded runs hold runners until GitHub's six-hour limit or a person cancels them.
Cílový stav
Every in-flight run is judged against a declared bound on a schedule, and the ones past it, or superseded, are cancelled with a recorded reason. Master, release, tag and deploy runs are never cancelled for being superseded.
Rozsah
- apps/majordomus-cli/src/integration
- apps/majordomus-cli/src/capability/builtin
- .ai/repo/ci
- .github/workflows
- scripts/ci/release-path
- docs/CI.md
Mimo rozsah
- Hung Pages builds: I3902.
Závislosti
Kritéria přijetí
- A queued or in-progress run past its declared bound is cancelled once, with its reason recorded
- A pull-request run whose head moved is cancelled; a run of master, a release, a tag or a deploy never is for that reason
- A dry run decides without acting, and the decision is the same
Validace
- cargo test --lib integration
Požadované důkazy
- supervise_unit_tests
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/I3903.yaml. Read it back with majordomus plan show I3903.