measurements-are-tracked-over-time — Coverage and CI cost are kept, exported and drawn over time, from the one measurement each has
Every master run's coverage and CI cost is kept as a derived series, exported in LCOV and Cobertura from the one measurement docs/COVERAGE.md requires, uploaded to Coveralls and Codecov when their secrets exist, drawn on the site and in the Cockpit, and emitted as OpenTelemetry when an endpoint is configured; no number differs between the gate, the export and the graph.
PLANNED 0 of 6 issues done
- ready
- 3
- blocked
- 3
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
Coverage is measured on every run and kept nowhere: scripts/rust-coverage's export is a 14-day artifact, no format another tool reads is written, nothing is uploaded, and no history or graph exists. CI cost is the same: ci-timings reads only the open pull requests' latest observation, so a regression of a job's minutes or a gate's pass rate is seen by a person reading runs, not by the repository. The owner's order of 2026-10-22 asks for coverage and pipeline telemetry that can be analysed, improved and connected to Coveralls, Codecov and OpenTelemetry.
Outcome
Every master run's coverage and CI cost is kept as a derived series, exported in LCOV and Cobertura from the one measurement docs/COVERAGE.md requires, uploaded to Coveralls and Codecov when their secrets exist, drawn on the site and in the Cockpit, and emitted as OpenTelemetry when an endpoint is configured; no number differs between the gate, the export and the graph.
Current state
rust-coverage writes one JSON export per run; validate.yml uploads it for 14 days; .ai/repo/ci/suite-durations.tsv is the only kept CI cost, refreshed by hand.
Desired state
LCOV and Cobertura exports of the one measurement (I3932); a coverage and CI-cost series per master run with graphs (I3933); OpenTelemetry traces of CI runs (I3934) and of agent sessions (I3935) when an endpoint is configured; every external upload skipped, never failed, without its secret.
Scope
- scripts/rust-coverage
- .github/workflows/validate.yml
- docs/COVERAGE.md
- test/cases
- .ai/repo/project
Out of scope
- A second coverage counter, threshold or parser anywhere
- Sending anything outside the repository without the owner's secret configured for it
- Changing any gate's verdict
Acceptance criteria
- The export, the gate and the graph give the same line totals for the same run, shown by a case
- A master run's coverage and CI cost are in the series without anyone running a command
- With no secret or endpoint configured, every upload and export step is skipped and the run's verdict is unchanged
Validation
- bin/majordomus plan validate
Evidence required
- suite
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I3932 | BLOCKED | 1 | I3919 | Coverage is exported as LCOV and Cobertura from its one measurement, and uploaded to Coveralls and Codecov when their secrets exist |
| I3933 | BLOCKED | 2 | I3932 | Every master run's coverage and CI cost join a derived series that the site and the Cockpit draw |
| I3934 | READY | 0 | — | A CI run is emitted as an OpenTelemetry trace when an endpoint is configured, and nothing is sent when none is |
| I3935 | BLOCKED | 1 | I3934 | An agent session's telemetry reaches the same OpenTelemetry endpoint, configured once and projected to every provider |
| I3941 | READY | 0 | — | The UI draws the trends the pages publication records: coverage and CI time per run, and the slowest jobs |
| I4220 | READY | 0 | — | A run that /trends/ draws is a link the site check decides by provenance |
The graph
flowchart LR
I3932["I3932<br/>Coverage is exported as LCOV and Cobertura from its one measurement, and uploaded to Coveralls and Codecov when their secrets exist"]:::blocked
I3933["I3933<br/>Every master run's coverage and CI cost join a derived series that the site and the Cockpit draw"]:::blocked
I3934["I3934<br/>A CI run is emitted as an OpenTelemetry trace when an endpoint is configured, and nothing is sent when none is"]:::ready
I3935["I3935<br/>An agent session's telemetry reaches the same OpenTelemetry endpoint, configured once and projected to every provider"]:::blocked
I3941["I3941<br/>The UI draws the trends the pages publication records: coverage and CI time per run, and the slowest jobs"]:::ready
I4220["I4220<br/>A run that /trends/ draws is a link the site check decides by provenance"]:::ready
I3932 --> I3933
I3934 --> I3935
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (6)
- I3932 Coverage is exported as LCOV and Cobertura from its one measurement, and uploaded to Coveralls and Codecov when their secrets exist
- I3933 Every master run's coverage and CI cost join a derived series that the site and the Cockpit draw
- I3934 A CI run is emitted as an OpenTelemetry trace when an endpoint is configured, and nothing is sent when none is
- I3935 An agent session's telemetry reaches the same OpenTelemetry endpoint, configured once and projected to every provider
- I3941 The UI draws the trends the pages publication records: coverage and CI time per run, and the slowest jobs
- I4220 A run that /trends/ draws is a link the site check decides by provenance
Canonical record: .ai/repo/project/milestones/measurements-are-tracked-over-time.yaml. Read it back with majordomus plan show measurements-are-tracked-over-time.