refactor(#2808): the wire state enum is the scheduler's own

`hive_host_sock::jobs::State` was a hand-maintained copy of
`hive_jobq::State` — five variants spelled the same in both, kept in sync
by whoever remembered. Adding `Skipped` last week meant adding it twice.
The wire crate now re-exports the scheduler's enum and `to_wire_state` is
gone.

Two states that were hidden now reach clients. `to_wire_state` renamed
`Pending` to `Queued` and folded `Finishing` into `Running`, so the
dashboard could not distinguish a node waiting on its dependencies from
one whose own work is done while its sub-nodes still run. Both are now
visible, and consumers say which they mean.

Every consumer had to move with it, and only the Rust ones said so: the
exhaustive matches in `hivectl` and `DagView::rollup_state` failed to
compile, while the dashboard's fourteen string comparisons would have
gone quietly wrong — a `finishing` node no longer counting as running,
a `pending` node no longer as queued.

The frontend also builds CSS class names out of the state string
(`rqe-` + state, `rqe-node-` + state) and keys its glyph map on it, all
lowercase. Those go through a `stateSlug` helper now; comparisons use the
wire spelling, presentation lowercases. Without that split every queue
entry and node chip would have silently lost its styling.

Dropping the `State as JobState` alias in hive-c0re falls out of this:
the alias only existed to tell two `State` types apart, and there is one
now.
This commit is contained in:
atlas 2026-07-27 21:50:24 +02:00
commit b9aab7e923
8 changed files with 72 additions and 93 deletions

View file

@ -286,8 +286,10 @@ fn node_line(
fn state_glyph(state: hive_host_sock::jobs::State) -> &'static str {
match state {
hive_host_sock::jobs::State::Queued => "",
hive_host_sock::jobs::State::Running => "",
hive_host_sock::jobs::State::Pending => "",
// `Finishing` is own-work-done with sub-nodes still going — in flight,
// so it reads the same as running.
hive_host_sock::jobs::State::Running | hive_host_sock::jobs::State::Finishing => "",
hive_host_sock::jobs::State::Done => "",
hive_host_sock::jobs::State::Failed => "",
hive_host_sock::jobs::State::Cancelled => "",
@ -362,7 +364,7 @@ mod tests {
node(0, "alice", "prebuild", State::Done),
node(1, "alice", "stop_for_update", State::Done),
node(2, "alice", "swap", State::Running),
node(3, "alice", "reconcile", State::Queued),
node(3, "alice", "reconcile", State::Pending),
],
};
let line = render_dag_line(&dag);