frontend: render Skipped node state as a quiet 'not run' glyph

Closes hyperhive#2788.

State::Skipped now rides the wire (per hive-host-sock's dag_view, no
longer filtered) — this was the last missing piece: the frontend had
no glyph for it, so a skipped node's per-node chip fell through to
QUEUE_STATE_GLYPH's '?' fallback.

Added a 'skipped' entry (·, same quiet glyph hivectl already uses for
the same state — no contract between them, just consistent taste) and
a .rqe-node-skipped CSS rule (dimmed only, no strikethrough —
deliberately distinct from .rqe-node-cancelled: a skipped node wasn't
dropped mid-flight, it was never going to run, so it should read as
expected/quiet rather than alarming). rollupState's defensive arm
(every(n => skipped || done) => done) already landed in #2799 and
needed no changes here.

buildNodeTree has no state-based filtering, so skipped nodes render
in the tree exactly like any other node kind — no other changes
needed. Verified with a full frontend build; nix fmt clean.
This commit is contained in:
iris 2026-07-27 20:41:35 +02:00 committed by mara
commit 7908332168
2 changed files with 12 additions and 0 deletions

View file

@ -157,6 +157,14 @@ const QUEUE_STATE_GLYPH = {
done: '✔',
failed: '✖',
cancelled: '⊘',
// Not-taken branch of an outcome split (e.g. the failure tail on a
// successful deploy) — expected, not an error, so a quiet glyph rather
// than an attention-grabbing one. Only ever visible while the owning
// DAG is still live/failed — a fully-settled green DAG drops off the
// wire entirely (see hive-host-sock::jobs::dag_view). Same glyph
// hivectl uses for the same state (no contract between them, just
// consistent taste).
skipped: '·',
};
function firstFailedNode(entry) {