I3242 — The pull-request critical path has a committed GitHub baseline and a budget per required job, and a run's summary names its critical path and every cache state
First commit a GitHub baseline window of validate runs through scripts/ci-baseline, warm, partial and cold apart, and derive from it a budget per required pull-request job that sums to 300 s on the critical path, naming every job over its share. Extend integration.timings to p50, p90 and p95 over a declared window of past runs with queue wait reported apart, and have the /ui CI/CD timings panel draw the same values. Extend scripts/ci/summary with sccache statistics, the docker-image job's cache state and the run's critical path across jobs, each value read from the run and none typed in.
BLOKOVÁNO vlna 5 · p2 · profil implementation · bezpečné paralelně
Blocked. This issue cannot start until I2350 is done. The status is derived from that, not declared.
Cíl
First commit a GitHub baseline window of validate runs through scripts/ci-baseline, warm, partial and cold apart, and derive from it a budget per required pull-request job that sums to 300 s on the critical path, naming every job over its share. Extend integration.timings to p50, p90 and p95 over a declared window of past runs with queue wait reported apart, and have the /ui CI/CD timings panel draw the same values. Extend scripts/ci/summary with sccache statistics, the docker-image job's cache state and the run's critical path across jobs, each value read from the run and none typed in.
Proč
c195#2: warm, partial and cold must be reported apart, with GitHub timings, not local ones, as the evidence. It extends milestone ci-critical-path. Proposed in ADR 0186 (A pull request's required verdict is the feedback lane, a gate whose inputs did not change is reused as inputs_unchanged, and the proof lane judges the combined top before it lands) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c195#2.
Aktuální stav
Verified on master 707a04c, 2026-10-18: scripts/ci/summary records `rust cache hit` and `npm cache hit` facts. integration.timings reports, per check, the median, 90th percentile and longest run over the open pull requests' last recorded observation; it has no p95, no window of past runs, and counts queued runs as unmeasured. The image's builder stages run `sccache --show-stats` (deploy/Dockerfile, rendered by deploy/render.rs). .ai/repo/ci/baseline.json exists but no per-job budget is derived from it.
Cílový stav
Every run says warm, partial or cold per cache; a regression of the critical path past its budget fails a gate that names the job and step; and the CI/CD screen draws the same window integration.timings reports.
Rozsah
- scripts/ci/summary
- .github/workflows/validate.yml
- .github/workflows/docker-image.yml
- scripts/ci-baseline
- .ai/repo/ci/baseline.json
- apps/majordomus-cli/src/capability/builtin/integration.rs
- apps/majordomus-cli/src/ui/timings.rs
- test/cases/1077_ci_timings_are_measured.sh
- test/cases/413_a_skipped_case_is_not_a_proof.sh
- .ai/repo/project/intents
- apps/majordomus-cli/src/integration/timings.rs
- apps/majordomus-cli/src/integration/forge.rs
- apps/majordomus-cli/src/integration/model.rs
- apps/majordomus-cli/src/integration/tests.rs
Mimo rozsah
- A second observability store (c255#6 forbids a parallel platform)
- Changing which checks a pull request requires: the required set is I2350's gate model, and the full suite still proves a combined top and a release
- Excluding queue wait from the owner's figure before the owner answers the 300 s target question
Závislosti
- I2472HOTOVO Doba trvání CI se měří od startu každého běhu do jeho dokončení a obrazovka CI/CD ji vykresluje
- I2350READY One gate model names what a local check, a pull request, an integration and a release must run, and no second inventory exists
Co na tom čeká
- I3238BLOCKED A pull request runs the cases its change can affect, chosen from what each case declares it reads, and a change of unknown impact runs them all
- I3239BLOCKED One job builds a run's executable and every other job of that run uses it
- I3240BLOCKED A pull request's browser audit visits the pages its change can reach, and a shared-layout change sweeps them all
- I3241BLOCKED Only a job that reads history fetches all of it
Kritéria přijetí
- A run with no sccache stats reports 'unknown', never zero
- The critical path names the jobs that made it
- A GitHub baseline window of validate runs, warm, partial and cold apart, is committed through scripts/ci-baseline before I3238, I3239, I3240 or I3241 changes the workflow
- A budget for each required pull-request job is derived from the baseline and sums to 300 s on the critical path. Every required job over its share is named, and an issue is filed for it from the measurement
- A pull-request critical path that regresses past its noise-aware budget fails a gate that names the job and step
- integration.timings reports p50, p90 and p95 over a declared window of past runs, with queue wait measured and reported apart instead of counted as unmeasured, and the /ui CI/CD timings panel draws the same values
- Validation runs 1077_ci_timings_are_measured, 413_a_skipped_case_is_not_a_proof and the run_summary_cache_states case this issue adds, replacing the placeholder
- Criterion pr-verdict-within-five-minutes of intent a-change-is-judged-in-minutes becomes evidence: test with a ref to this issue's window case
Validace
- bash test/run.sh 1077_ci_timings_are_measured 413_a_skipped_case_is_not_a_proof
Požadované důkazy
- run_summary_cache_states_case
- ci_timings_window_case
- per_job_budget_gate_case
- github_baseline_window_committed
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/I3242.yaml. Read it back with majordomus plan show I3242.