Skip to content

fleet-report: grey bars show how CI hours were found; runners in use while work waits - #33

Merged
squid-protocol merged 1 commit into
mainfrom
feat/runner-method-greys
Oct 30, 2026
Merged

squid-protocol merged 1 commit into
mainfrom
feat/runner-method-greys

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

What this does

The CI hours bars show how each day was found. The estimates ran high, so measured and estimated days shouldn't look alike:

Grey Meaning
Dark Measured: running-job readings cover at least 75% of the day
Mid The stratified sample's estimate
Light The old small sample, least reliable

The tooltip gives the method, and the legend lists only the ones on the chart. Today's measured bar isn't faded, because a faded dark bar reads as an estimate.

A new limits panel, "Runners in use while work waits". It shows each day's median running jobs when 10+ runs are queued, against the runner limit, with the peak and the share of time at the limit in the tooltip. A long queue should fill the pool, so a line under the limit is a ceiling worth explaining.

occupancy_backfill.jsonl adds historical readings. main() reads it alongside occupancy.jsonl. It's a separate file so the live sampler can't overwrite it, and each line is marked "source": "churn-tick".

The backfill data

The file comes from churn's per-tick job counts, published separately to the dashboard branch. Against the sampler, the two sources agree: 299 paired readings, an average difference of 0.13 jobs. Ticks that read fewer runs than were in progress are left out, leaving 1,657 readings. They count GitGalaxy only, while other repos added a few runner-hours a day at most on the days we can compare.

Day Estimate Measured before Measured with backfill
Oct 25 468 h 38% coverage, unused 305 h
Oct 27 332 h 224 h 229 h
Oct 28 414 h 278 h 289 h
Oct 29 400 h 72% coverage, unused 272 h
Oct 30 294 h 323 h 317 h

Oct 24 and 26 stay estimates, at 31% and 74% coverage. Nothing recorded running jobs before Oct 24, so earlier days can't be corrected and stay marked as estimates.

Median running while work waits, Oct 24 to 30: 14, 13, 15, 16, 15, 13, 14, at the limit about 1-4% of the time.

Do the tests fail when something is broken?

Sabotage Result
Measured days treated as estimates 2 failed
Quiet readings counted as waiting 1 failed
Backfill file not read passed at first, so I added an end-to-end test through main(); it now fails

Checks

All tests in this repo pass; the count is in the PR's pytest check. Rendered from live data and checked in Chrome.

🤖 Generated with Claude Code

…while work waits

Measured, sampled and old-sample days now look different, because the estimates ran up to
half again above the measured hours. A new limits panel shows the median running jobs when
10+ runs are queued. occupancy_backfill.jsonl adds readings from before the sampler covered a day.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@squid-protocol
squid-protocol marked this pull request as ready for review October 30, 2026 23:14
@squid-protocol
squid-protocol merged commit 0c649bf into main Oct 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant