Skip to content

feat(observer): the fleet measures the wait it is judged by - #379

Merged
rldyourmnd merged 1 commit into
mainfrom
feat/the-fleet-measures-the-wait-it-is-judged-by
Sep 2, 2026
Merged

feat(observer): the fleet measures the wait it is judged by#379
rldyourmnd merged 1 commit into
mainfrom
feat/the-fleet-measures-the-wait-it-is-judged-by

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

Every wait metric the fleet exported stopped when the provider assigned the intent. gha_fleet_queue_oldest_queued_wait_seconds counts only intents still queued; assignment, boot and runner registration belong to a different gauge with a different threshold. On 2026-09-02 that gauge peaked at 597 s on three scale sets while GitHub's own job records showed waits up to 906 s — no rule could see the number the fleet is judged by, and queue_wait_slow_burn could not fire because the wait it watches ends early.

The observer now closes the measurement. For every intent that entered running within the last fifteen minutes it takes the whole wait — from the immutable first-queued stamp to the moment the runner reported running — and exports:

  • gha_fleet_queue_started_wait_samples
  • gha_fleet_queue_started_wait_median_seconds
  • gha_fleet_queue_started_wait_p90_seconds
  • gha_fleet_queue_started_wait_max_seconds
  • gha_fleet_queue_started_wait_p90_seconds_by_scale_set

queue_started_wait_slow_burn tickets when that percentile stays above the five-minute objective for ten minutes, and its action points at queue_wait_slow_burn and lifecycle_assigned_stall so the reader knows which half of the wait grew before anyone adds capacity.

An empty window reads zero: no jobs started is not a long wait. The still-queued gauge is untouched, and a test pins both behaviours together.

https://claude.ai/code/session_0128syXKxAGCfJGRDxUUNQXp

Every wait metric the fleet exported stopped when the provider assigned the
intent: gha_fleet_queue_oldest_queued_wait_seconds counts only intents still
queued, and the rest of the wait -- assignment, boot, runner registration --
belonged to a different gauge with a different threshold. On 2026-09-02 that
gauge peaked at 597 s on three scale sets while GitHub's own job records
showed waits up to 906 s, so no rule could see the number the fleet is
actually judged by.

The observer now closes the measurement: for every intent that entered
running within the last fifteen minutes it takes the whole wait, from the
immutable first-queued stamp to the moment the runner reported running, and
exports the sample count, median, ninetieth percentile and maximum, plus the
percentile per scale set. queue_started_wait_slow_burn tickets when that
percentile stays above the five-minute objective for ten minutes, and its
action points at the two phase rules so the reader knows which half grew.

Claude-Session: https://claude.ai/code/session_0128syXKxAGCfJGRDxUUNQXp
@rldyourmnd
rldyourmnd enabled auto-merge September 2, 2026 16:32
@rldyourmnd
rldyourmnd merged commit a8cb486 into main Sep 2, 2026
10 checks passed
@rldyourmnd
rldyourmnd deleted the feat/the-fleet-measures-the-wait-it-is-judged-by branch September 2, 2026 16:34
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