From 2bf3f37abdb2ce751f176af2965e92a12c352d67 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 16 Jun 2026 08:40:22 +0100 Subject: [PATCH] Advance Idunn plan past Nightwing Eve dashboard --- crates/idunn-daemon/src/main.rs | 70 +++++++++++++++++++++++++++++---- docs/idunn.md | 22 ++++++----- 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/crates/idunn-daemon/src/main.rs b/crates/idunn-daemon/src/main.rs index fca185b..4dfa34f 100644 --- a/crates/idunn-daemon/src/main.rs +++ b/crates/idunn-daemon/src/main.rs @@ -840,7 +840,6 @@ fn swarm_surgery_plan( updated_at: &str, ) -> IdunnSwarmSurgeryPlanRecord { let next_target = [ - "nightwing-eve-dashboard", "nightwing-eve-browser-reference", "vili", "yggdrasil-streampixels", @@ -893,7 +892,7 @@ fn swarm_surgery_plan( .to_string(), next_target: next_target.to_string(), cut_line: - "Muninn, Idunn, Odin, Stonks, Weksa, VoidBot, Nightwing Gjallar, and Mimir Eve dashboard now exercise daemon-owned RUDP health. Nightwing Eve runtime surfaces are the next local runtime cut. Live Raven still needs GameCult-Muninn, GameCult-Muninn-Activate, and GameCult-Muninn-VideoProof task actions repaired to execute wscript.exe hidden launchers directly; application is blocked while Raven SSH is unreachable." + "Muninn, Idunn, Odin, Stonks, Weksa, VoidBot, Nightwing Gjallar, Mimir Eve dashboard, and Nightwing Eve dashboard now exercise daemon-owned RUDP health. Nightwing Eve browser reference is the next local runtime cut. Live Raven still needs GameCult-Muninn, GameCult-Muninn-Activate, and GameCult-Muninn-VideoProof task actions repaired to execute wscript.exe hidden launchers directly; application is blocked while Raven SSH is unreachable." .to_string(), verification_layer: "CultMesh keepalive store records plus live Idunn decision cycles, not process exit codes or chat summaries." @@ -935,6 +934,11 @@ fn daemon_transport_profile( "partial-rudp-health-live", "Gjallar framebuffer composition health is published over CultNet/RUDP from Nightwing; native CultMesh/RUDP input and provider advertisement remain migration debt before the service/status probe can be deleted.", ), + "nightwing-eve-dashboard" => ( + "daemon-published-rudp-health + compatibility.local-command fallback", + "partial-rudp-health-live", + "Nightwing Eve dashboard service health is published over CultNet/RUDP from the Mimir.EveDashboard systemd process; browser/runtime lowering state and command boundaries remain migration debt before the service probe can be deleted.", + ), _ => ( "compatibility.local-command", "migration-required", @@ -1193,15 +1197,32 @@ fn daemon_surgery_plan(target: &DaemonTarget, updated_at: &str) -> IdunnDaemonSu "nightwing-eve-dashboard" | "nightwing-eve-browser-reference" => { severity = "medium"; owner = "Eve lowering/runtime owner"; - current_mechanism = - "Nightwing Eve runtime services are watched through local service probes; browser-facing transports are lowering bridges." - .to_string(); intended_authority = "Eve runtimes subscribe to provider-owned CultMesh/CultNet state; any browser/WebSocket bridge is display-only and does not own daemon health." .to_string(); cut_line = "Cut display/runtime liveness from provider truth. Browser-compatible bridges may remain only as lowering targets." .to_string(); + if target.daemon_id == "nightwing-eve-dashboard" { + status = "partial-rudp-health-live"; + current_mechanism = + "Nightwing Eve dashboard publishes nightwing.cultnet-rudp-eve-dashboard-health over CultNet/RUDP from the Mimir.EveDashboard systemd process; the local service probe remains fallback evidence only." + .to_string(); + cut_line = + "Keep the service probe as fallback only until the Nightwing Eve dashboard lowering surface publishes provider advertisement, command_boundary, and transport_profile records over CultNet/RUDP." + .to_string(); + steps = vec![ + "Keep live nightwing.cultnet-rudp-eve-dashboard-health publication running from the Mimir.EveDashboard systemd process.".to_string(), + "Publish Nightwing Eve dashboard provider advertisement and lowering-state records over cultnet.transport.rudp.v0.".to_string(), + "Publish Nightwing Eve dashboard command_boundary and transport_profile records from the runtime.".to_string(), + "Teach Odin and Nightwing projections to prefer the dashboard RUDP/CultMesh records over service compatibility probes.".to_string(), + "Delete or demote health-nightwing-eve-dashboard.cmd to a manual compatibility probe with no lifecycle truth.".to_string(), + ]; + } else { + current_mechanism = + "Nightwing Eve browser reference is watched through a local service probe; browser-facing transports are lowering bridges." + .to_string(); + } } "yggdrasil-heimdall" | "yggdrasil-repixelizer" | "yggdrasil-streampixels" => { severity = "medium"; @@ -2144,13 +2165,28 @@ mod tests { enabled: true, interval_seconds: 30, }; + let nightwing_eve_browser_reference = DaemonTarget { + daemon_id: "nightwing-eve-browser-reference".to_string(), + verse_id: "nightwing.local".to_string(), + name: "Nightwing Eve browser reference".to_string(), + health_contract: health_contract( + "nightwing.cultnet-rudp-browser-reference-health", + "failed", + ), + health_command: Some("health-nightwing-eve-browser-reference.cmd".to_string()), + deploy_command: None, + restart_command: Some("restart-nightwing-eve-browser-reference.cmd".to_string()), + enabled: true, + interval_seconds: 30, + }; let plan = swarm_surgery_plan( "starfire-local", &[ odin, mimir, - nightwing_eve_dashboard, + nightwing_eve_dashboard.clone(), + nightwing_eve_browser_reference, stonks, weksa.clone(), voidbot.clone(), @@ -2164,11 +2200,11 @@ mod tests { assert_eq!(plan.plan_id, "swarm-surgery:starfire-local"); assert_eq!(plan.status, "active-transport-migration"); - assert_eq!(plan.next_target, "nightwing-eve-dashboard"); + assert_eq!(plan.next_target, "nightwing-eve-browser-reference"); assert!(plan.current_phase.contains("Nightwing Eve")); assert!( plan.cut_line - .contains("Muninn, Idunn, Odin, Stonks, Weksa, VoidBot, Nightwing Gjallar, and Mimir Eve dashboard") + .contains("Muninn, Idunn, Odin, Stonks, Weksa, VoidBot, Nightwing Gjallar, Mimir Eve dashboard, and Nightwing Eve dashboard") ); assert!(plan.cut_line.contains("GameCult-Muninn-Activate")); assert!(plan.cut_line.contains("GameCult-Muninn-VideoProof")); @@ -2250,6 +2286,24 @@ mod tests { .cut_line .contains("service/status probe as fallback") ); + + let nightwing_eve_dashboard_plan = + daemon_surgery_plan(&nightwing_eve_dashboard, "unix:100"); + assert_eq!( + nightwing_eve_dashboard_plan.status, + "partial-rudp-health-live" + ); + assert!( + nightwing_eve_dashboard_plan + .current_mechanism + .contains("nightwing.cultnet-rudp-eve-dashboard-health") + ); + assert!( + nightwing_eve_dashboard_plan + .steps + .iter() + .any(|step| step.contains("Mimir.EveDashboard systemd process")) + ); } #[test] diff --git a/docs/idunn.md b/docs/idunn.md index debebc3..d46f4c6 100644 --- a/docs/idunn.md +++ b/docs/idunn.md @@ -280,21 +280,23 @@ serialized provider witness refresh. VoidBot publishes pulse. Gjallar publishes `gjallar.cultnet-rudp-framebuffer-composition-health` from the C# Nightwing framebuffer service. Mimir Eve dashboard publishes -`mimir.cultnet-rudp-provider-health` from the Nightwing systemd broker. Live -Idunn cycles accept these records before command-probe fallback. +`mimir.cultnet-rudp-provider-health` from the Nightwing systemd broker, and the +same process publishes `nightwing.cultnet-rudp-eve-dashboard-health` for the +Nightwing dashboard service itself. Live Idunn cycles accept these records +before command-probe fallback. Raven's Muninn scheduled-task repair is a separate ops invariant: `GameCult-Muninn`, `GameCult-Muninn-Activate`, and `GameCult-Muninn-VideoProof` must execute `wscript.exe` hidden launcher actions, not raw `.cmd` task actions. -Next: move the remaining Nightwing Eve runtime surfaces off compatibility -service probes, then continue runtime-by-runtime until compatibility probes can -be deleted or demoted. Stonks, Weksa, VoidBot, Gjallar, and Mimir still owe -provider advertisement and command-boundary RUDP publication before their -compatibility surfaces can be purely display/debug lowerings; Gjallar also owes -native CultMesh/RUDP deck input to replace the current Odin WebSocket lowering -bridge. Raven Muninn task action repair is queued separately and remains blocked -while Raven is unreachable over SSH; the prepared actuator is +Next: move the Nightwing Eve browser reference off compatibility service probes, +then continue runtime-by-runtime until compatibility probes can be deleted or +demoted. Stonks, Weksa, VoidBot, Gjallar, Mimir, and the Nightwing Eve dashboard +service still owe provider advertisement and command-boundary RUDP publication +before their compatibility surfaces can be purely display/debug lowerings; +Gjallar also owes native CultMesh/RUDP deck input to replace the current Odin +WebSocket lowering bridge. Raven Muninn task action repair is queued separately +and remains blocked while Raven is unreachable over SSH; the prepared actuator is `scripts\repair-raven-muninn-task-actions.ps1`. No ad hoc JSON manifest, HTTP endpoint, TCP socket, or WebSocket bridge may