dashboard: consolidate NodeView.has_log into build_log_id

Per mara's review on #2896: has_log: bool was fully redundant once
build_log_id: Option<i64> existed alongside it (has_log was always
just build_log_id.is_some()). Dropped has_log, threading the single
Option<i64> field through job_queue::mod.rs, the hivectl NodeView
test-helper literal, and the one remaining frontend consumer
(findLiveBuild's live-log-panel gate, which now checks
build_log_id != null instead of the separate bool).

Also fixed a now-stale doc comment on GET /api/build-log/{node_id}
that claimed the dashboard used on-demand node-id fetches "instead
of an inline build_log_id on the wire" -- no longer true after this
PR put one there for the BUILD L0GS deep-link.

cargo build/clippy/test clean across the three touched crates; nix
fmt clean; frontend build verified (0 has_log references, 3
build_log_id references in the built builds.js bundle).
This commit is contained in:
iris 2026-08-01 11:30:36 +02:00 committed by mara
commit 4c37ce9150
5 changed files with 13 additions and 18 deletions

View file

@ -444,11 +444,11 @@ function clearLiveLogPoll() {
}
// First (entry, node) pair with a running node that has a log.
// Gate on has_log so lock/noop/store-only nodes don't open a blank panel.
// Gate on build_log_id so lock/noop/store-only nodes don't open a blank panel.
function findLiveBuild(queue) {
for (const e of queue || []) {
if (rollupState(e.nodes || []) !== 'Running') continue;
const node = (e.nodes || []).find((n) => n.state === 'Running' && n.has_log);
const node = (e.nodes || []).find((n) => n.state === 'Running' && n.build_log_id != null);
if (node) return { entry: e, node };
}
return null;