I2472 — Jak dlouho trvá CI, se měří od startu každého běhu po jeho dokončení a obrazovka CI/CD to kreslí
Zaznamenávat, kdy začal každý běh kontroly na headu otevřeného pull requestu, vedle toho, kdy skončil, a z tohoto záznamu odpovídat, jak dlouho CI trvá, typovanou schopností (integration.timings): za každou kontrolu její změřené běhy, selhání, medián, 90. percentil a nejdelší trvání; za každý otevřený head jeho celkový čas a nejpomalejší kontrolu; a kolik běhů nešlo změřit. Obrazovka CI/CD v majordomus ui ji kreslí místo panelu, který říkal, že žádná schopnost nezaznamenává časy CI.
HOTOVO vlna 4 · p1 · profil implementation · běží samostatně
Součást development-runtime — The runtime has a development surface.
Cíl
Zaznamenávat, kdy začal každý běh kontroly na headu otevřeného pull requestu, vedle toho, kdy skončil, a z tohoto záznamu odpovídat, jak dlouho CI trvá, typovanou schopností (integration.timings): za každou kontrolu její změřené běhy, selhání, medián, 90. percentil a nejdelší trvání; za každý otevřený head jeho celkový čas a nejpomalejší kontrolu; a kolik běhů nešlo změřit. Obrazovka CI/CD v majordomus ui ji kreslí místo panelu, který říkal, že žádná schopnost nezaznamenává časy CI.
Proč
Vlastník dne 2026-10-11 požádal o implementaci každého pohledu ze snímků obrazovky UI (pack v3 M08; reference 07-ci-cd ukazuje časy sestavení a propustnost). Obrazovka CI/CD od d3 (I2462) říká, že žádná schopnost nezaznamenává časování CI po jednotlivých během, a žádná to nedělala: pozorování forge uchovalo, kdy se kontrola dokončila, ale ne kdy začala, přestože souhrn GitHub CLI odpovídá na obojí. Čas CI je latence, na kterou integrační linka čeká u každého pull requestu, a nic ho neměřilo.
Aktuální stav
Pozorování kontroly drží svůj název, stav, druh, aplikaci a čas dokončení. Panel dob sestavení na obrazovce CI/CD říká, že se nic neměří.
Cílový stav
Pozorování forge zaznamenává started_at pro každý běh kontroly (prázdné pro kontext stavu nebo běh, který nezačal; dříve zaznamenané pozorování se čte s prázdnou hodnotou, takže schéma zůstává 4). integration.timings (GET /api/v1/pull-requests/timings, MCP majordomus_ci_timings) měří ze zaznamenaného pozorování a bez dotazu na forge běhy každé kontroly se začátkem a koncem: prošlé, neúspěšné, medián a 90. percentil (nejbližší pořadí) a nejdelší sekundy, od nejpomalejšího mediánu; u každého otevřeného headu dobu od začátku jeho první kontroly po dokončení jeho poslední kontroly a jeho nejpomalejší kontrolu, od nejdelšího čekání; a kolik běhů nešlo změřit, což se počítá a nikdy neměří jako nula. Obrazovka CI/CD kreslí medián každé kontroly jako pruh proti nejpomalejší s jejími čísly vedle a deset nejdelších čekání, každé vedoucí k jeho pull requestu na PR Drain; bez pozorování říká, že nic není změřeno.
Rozsah
- apps/majordomus-cli/src/integration/model.rs
- apps/majordomus-cli/src/integration/forge.rs
- apps/majordomus-cli/src/integration/timings.rs
- apps/majordomus-cli/src/integration/mod.rs
- apps/majordomus-cli/src/capability/builtin/integration.rs
- apps/majordomus-cli/src/ui/timings.rs
- apps/majordomus-cli/src/ui/delivery.rs
- apps/majordomus-cli/src/ui/mod.rs
- .ai/repo/project/issues/I2472.yaml
- docs/MAJORDOMUS_UI.md
- test/cases/1077_ci_timings_are_measured.sh
Závislosti
Co na tom čeká
Kritéria přijetí
- check_of zaznamenává startedAt jako started_at a pozorování bez něj se stále čte
- integration.timings odpovídá na změřené běhy, selhání, medián, 90. percentil a nejdelší sekundy každé kontroly a na celkový čas a nejpomalejší kontrolu každé otevřené hlavy, jen ze zaznamenaného pozorování
- běh bez začátku nebo konce a stavový kontext se počítá jako neměřený a nikdy se neměří jako nula
- obrazovka CI/CD kreslí časování a hlava vede ke svému pull requestu; bez pozorování říká, že se nic neměří
Validace
- cargo test --lib integration::timings
- cargo test --lib ui::
- test/run.sh 1077_ci_timings_are_measured
Požadované důkazy
- integration_timings_unit_tests
- ci_timings_case_1077
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| integration_timings_unit_tests | ci | cargo test --lib integration::timings (validate run 38223440282 on 722228ef3c, the v0.21.0 top) | 7 testů integration::timings ok, 5 testů ui::timings ok | 722228e |
| ci_timings_case_1077 | ci | test/run.sh 1077_ci_timings_are_measured (validate run 38223440282 na 722228ef3c, vrchol v0.21.0) | případ 1077_ci_timings_are_measured ok | 722228e |
Časová osa
- zahájeno
- 2026-10-12T11:03:04Z
- ověřeno
- 2026-10-12T11:03:13Z
- dokončeno
- 2026-10-12T11:03:32Z
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/I2472.yaml. Přečtěte ho zpět pomocí majordomus plan show I2472.