From a4f06557a2bd66474bcd49aef327ba016c266f73 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 5 Jun 2026 15:27:09 +0100 Subject: [PATCH] Clean swarm CTB TUI rows --- scripts/render-voidbot-swarm-dashboard.mjs | 17 +++++++++++++---- state/evidence.jsonl | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/render-voidbot-swarm-dashboard.mjs b/scripts/render-voidbot-swarm-dashboard.mjs index c34a1d6..74cd83b 100644 --- a/scripts/render-voidbot-swarm-dashboard.mjs +++ b/scripts/render-voidbot-swarm-dashboard.mjs @@ -1173,8 +1173,8 @@ function buildEveProviderState(snapshot) { }, upcoming.slice(0, 14).map((turn, index) => eveNode(`turn-${stableId(turn.identityId)}-${index}`, "text", { role: "mono", - text: `${String(index + 1).padStart(2, " ")}. ${String(turn.displayName ?? turn.identityId ?? "face").padEnd(10, " ")} ${turnState(turn).padEnd(9, " ")} ${minutesText(turn.nextTurnInMinutes).padStart(6, " ")} ${mentionText(turn).padEnd(5, " ")} s${formatNumber(turn.effectiveSpeed, 3)} h${formatNumber(turn.heat, 2)}`, - status: turnState(turn), + text: formatTurnText(turn, index), + status: turnStatus(turn), detail: `${turn.repoName ?? "repo"} / due ${minutesText(turn.nextTurnInMinutes)} / ${mentionDetail(turn)}`, }), )), @@ -1195,11 +1195,20 @@ function stableId(value) { .replace(/^-+|-+$/g, "") || "id"; } -function turnState(turn) { +function formatTurnText(turn, index) { + const rank = String(index + 1).padStart(2, " "); + const name = String(turn?.displayName ?? turn?.identityId ?? "face").padEnd(10, " "); + const status = turnStatus(turn).padEnd(7, " "); + const due = minutesText(turn?.nextTurnInMinutes).padStart(6, " "); + const mention = mentionText(turn).padEnd(5, " "); + return `${rank}. ${name} ${status} ${due} ${mention} s${formatNumber(turn?.effectiveSpeed, 3)} h${formatNumber(turn?.heat, 2)}`; +} + +function turnStatus(turn) { if (turn?.activeJobId) return "active"; if (turn?.restState?.isNapping) return "nap"; if ((turn?.pendingMentionCount ?? 0) > 0) return "mention"; - return minutesText(turn?.nextTurnInMinutes); + return "idle"; } function minutesText(value) { diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 297bcb6..e9d88d2 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -351,3 +351,4 @@ {"ts":"2026-06-05T13:52:45Z","type":"implementation","status":"ok","note":"Restored Odin visibility for voidbot.swarm: Odin/VoidBot CultMesh consumers now import cultmesh-ts and cultcache-ts package roots instead of private dist subpaths, normal swarm dashboard publication writes the CultMesh witness again, and CTB Eve text now shows due time plus anchored/unanchored mention markers (m1 vs m?1)."} {"ts":"2026-06-05T14:16:31Z","type":"ops","status":"blocked","note":"Nightwing dashboard not visible because Nightwing host is unreachable from Starfire: Nightwing.Home resolves to 192.168.1.75, but ping, SSH 22, Eve dashboard 8795, and browser 8891 do not answer; a quick LAN TCP sweep only found Starfire 8795 and EVE/iPad SSH on 192.168.1.72."} {"ts":"2026-06-05T14:23:01Z","type":"ops","status":"warn","note":"Nightwing reboot restored host reachability and visible-ops, but the Nightwing-local voidbot.swarm broker tab is not the live Odin/CultMesh swarm surface: ws://192.168.1.75:8795/eve/deck/voidbot.swarm renders 'VoidBot Swarm snapshot missing' from /srv/gamecult/eve-dashboard/state/voidbot-swarm-state.json, while Odin at 192.168.1.66:8797 exposes the live voidbot.swarm CultMesh lowering."} +{"ts":"2026-06-05T14:26:56Z","type":"implementation","status":"ok","note":"Cleaned the VoidBot swarm CTB Eve text contract: CTB rows now format rank/name/state/due/mention/speed/heat explicitly, so scheduled turns publish state=idle plus a single due time instead of duplicating due time as both status and due."}