Skip to content

plan(v0.37): file REQ-325 — the stall classifier names the wrong cause - #896

Merged
avrabe merged 1 commit into
mainfrom
fix/req-325-classifier-dependency-blocked
Sep 6, 2026
Merged

plan(v0.37): file REQ-325 — the stall classifier names the wrong cause#896
avrabe merged 1 commit into
mainfrom
fix/req-325-classifier-dependency-blocked

Conversation

@avrabe

@avrabe avrabe commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Artifact only — no code change.

Found while watching the v0.36.0 release run, in the code REQ-317 shipped a
day earlier.

create-release sat queued behind its needs while the compliance build was
still running. classify_stall returned hosted-starved — because every
queued job carried ubuntu-latest, and the classifier reasons only about labels
and runner capacity.

The fleet at that moment:

online=12  busy=1
idle by label:  4x lean-mem   3x rust-cpu   2x rust-cpu,light
                1x light      1x rust-cpu,netns

Nothing was starved. The job was waiting its turn.

Why this is worth an artifact rather than a shrug

It's the same defect REQ-317 exists to fix, in its own fix: a diagnostic
confidently naming a cause it cannot observe.

And it's reachable, not theoretical. The probe fires on a run queued past thirty
minutes, and this release's builds legitimately take that long — so a slow
release would have auto-filed an issue blaming GitHub-hosted capacity for a
dependency wait, sending the next reader exactly where the old alert did.

My fixture set had no dependency-blocked case, which is why it passed. A
classifier that can only see labels and capacity will name capacity as the cause
of every wait it observes.

Proposed fix (not implemented here)

A queued job whose needs are incomplete is not a stall and must be excluded
before any capacity reasoning runs. The jobs API doesn't expose needs, so the
workflow definition has to be read. Add dependency-blocked as an explicit
outcome rather than folding it into capacity-available, so the distinction is
visible.

Scoped to v0.37.0 alongside REQ-323 and REQ-324.

Found while watching the v0.36.0 release run, in the code REQ-317 shipped a day
earlier. `create-release` sat queued behind its `needs` while the compliance
build was still running, and `classify_stall` returned `hosted-starved` —
because every queued job carried `ubuntu-latest` and the classifier reasons only
about labels and capacity. The fleet was almost entirely idle: online=12,
busy=1, with spare capacity under every label. Nothing was starved; the job was
waiting its turn.

That is the same defect REQ-317 exists to fix, in its own fix: a diagnostic
confidently naming a cause it cannot observe. It is reachable rather than
theoretical — the probe fires on a run queued past thirty minutes, and this
release's builds legitimately take that long, so a slow release would have
auto-filed an issue blaming GitHub-hosted capacity for a dependency wait.

The fixture set had no dependency-blocked case, which is why it passed. A queued
job whose `needs` are incomplete is not a stall at all and has to be excluded
before any capacity reasoning runs.

Scoped to v0.37.0 alongside REQ-323 (fleet-restart suppression, deployed but
not yet demonstrated) and REQ-324 (mutants reported in `#[cfg(kani)]` code that
no test the gate runs can kill).

Refs: REQ-325, REQ-317
Trace: skip
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown

📐 Rivet artifact delta

Change Count
Added 1
Removed 0
Modified 0
Downstream impacted (depth ≤ 5) 0

Graph

graph LR
  REQ_325["REQ-325"]:::added
  classDef added fill:#d4edda,stroke:#28a745,color:#155724
  classDef removed fill:#f8d7da,stroke:#dc3545,color:#721c24
  classDef modified fill:#fff3cd,stroke:#ffc107,color:#856404
  classDef overflow fill:#e2e3e5,stroke:#6c757d,color:#495057,stroke-dasharray: 3 3
Loading
Added
  • REQ-325

📎 Full HTML dashboard attached as workflow artifact rivet-delta-pr-896download from the workflow run.

Posted by rivet-delta workflow. The graph shows only changed artifacts; open the HTML dashboard (above) for full context.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Rivet Criterion Benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: 4178947 Previous: 16bff52 Ratio
traceability_matrix/1000 60573 ns/iter (± 523) 46077 ns/iter (± 202) 1.31
query/10000 331986 ns/iter (± 7225) 244880 ns/iter (± 1851) 1.36

This comment was automatically generated by workflow using github-action-benchmark.

@avrabe
avrabe merged commit 4d811ba into main Sep 6, 2026
33 checks passed
@avrabe
avrabe deleted the fix/req-325-classifier-dependency-blocked branch September 6, 2026 08:26
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