Skip to content

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.

issuestatuswavedepends ontitle
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

measurements-are-tracked-over-time dependency graphfrom .ai/repo/project
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:2px

Canonical record: .ai/repo/project/milestones/measurements-are-tracked-over-time.yaml. Read it back with majordomus plan show measurements-are-tracked-over-time.

Searches the titles and descriptions of every page this site publishes.