A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live
I2472
How long CI takes is measured, from when each run started to when it completed, and the CI/CD screen draws it
Where it stands
devtask.issue- Readiness
- complete completion is recorded and every required evidence token is present
- Status
- DONE
- Can start
- not now
- Milestone
- Milestone status
- ACTIVE
- Wave
4- Waiting on
- none
- Holds back
- none
- Behind it in all
0- Evidence
2of2
Moves
plan.transitionWhat it is
- Objective
- Record when each check run on an open pull request's head started, beside when it completed, and answer how long CI takes from that record with a typed capability (integration.timings): per check its measured runs, failures, median, 90th percentile and longest duration; per open head its wall time and slowest check; and how many runs could not be measured. The CI/CD screen of majordomus ui draws it in place of the panel that said no capability records CI timings.
- Why
- The owner asked on 2026-10-11 to implement every view of the UI screenshots (pack v3 M08; reference 07-ci-cd shows build times and throughput). d3's CI/CD screen (I2462) says no capability records per-run CI timings, and none did: the forge observation kept when a check completed but not when it started, although the GitHub CLI's rollup answers both. CI time is the latency the integration lane waits on for every pull request, and nothing measured it.
- Now
- A check observation holds its name, state, kind, app and completion time. The CI/CD screen's build-timings panel says nothing is measured.
- Wanted
- The forge observation records started_at for every check run (empty for a status context or a run that has not started; an observation recorded before is read with it empty, so the schema stays 4). integration.timings (GET /api/v1/pull-requests/timings, MCP majordomus_ci_timings) measures, from the recorded observation and without asking the forge, every check's runs with a start and an end: passed, failed, median and 90th percentile (nearest rank) and longest seconds, the slowest median first; every open head's wall time from its first check's start to its last check's completion and its slowest check, the longest wait first; and how many runs it could not measure, which are counted and never measured as zero. The CI/CD screen draws each check's median as a bar against the slowest with its numbers beside it, and the ten longest waits each leading to its pull request on the PR Drain; without an observation it says nothing is measured.
- Done when
- unknown: the record declares no `completion`
- Risk
- unknown: the record declares no `risk`
Acceptance
- check_of records startedAt as started_at, and an observation without it still reads
- integration.timings answers each check's measured runs, failures, median, 90th percentile and longest seconds, and each open head's wall time and slowest check, from the recorded observation alone
- a run without a start or an end, and a status context, is counted as unmeasured and never measured as zero
- the CI/CD screen draws the timings, and a head leads to its pull request; without an observation it says nothing is measured
- Validation
cargo test --lib integration::timingscargo test --lib ui::test/run.sh 1077_ci_timings_are_measured- Evidence required
integration_timings_unit_testsci_timings_case_1077- Evidence present
integration_timings_unit_testsci_timings_case_1077
Scope
- Touches
apps/majordomus-cli/src/integration/model.rsapps/majordomus-cli/src/integration/forge.rsapps/majordomus-cli/src/integration/timings.rsapps/majordomus-cli/src/integration/mod.rsapps/majordomus-cli/src/capability/builtin/integration.rsapps/majordomus-cli/src/ui/timings.rsapps/majordomus-cli/src/ui/delivery.rsapps/majordomus-cli/src/ui/mod.rs.ai/repo/project/issues/I2472.yamldocs/MAJORDOMUS_UI.mdtest/cases/1077_ci_timings_are_measured.sh- Not
- unknown: the record declares no `non_scope`
- Depends on
- Priority
- p1
- Profile
- implementation
- Parallel safe
- false
- Owner
- unknown: the record declares no `owner`
The work so far
- Branches
- none
- Merged
- none
- Commits
0- Trunk
- master
- Sessions
- none
- Created
- 2026-10-11
- Updated
- 2026-10-12T11:03:32Z
- Started
- 2026-10-12T11:03:04Z
- Verified
- 2026-10-12T11:03:13Z
- Completed
- 2026-10-12T11:03:32Z
Synchronisation
- Adapter
scripts/github-sync- Repository
- unknown: the derived plan's header carries no repository
- External issue
- unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
- State there
- unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
Findings
Nothing is wrong with these records.