"));
assert!(response.contains("
"));
@@ -1495,11 +1500,16 @@ fn operator_dashboard_run_activity_preserves_snapshot_detail_fields() {
assert!(response.contains("function mergeDashboardRunRecord(snapshotRun, activityRun)"));
assert!(response.contains("function mergeDashboardActiveRuns(snapshot, activeRunRows)"));
assert!(response.contains("let dashboardLiveActiveRuns = [];"));
+ assert!(response.contains("let dashboardLiveAccounts = null;"));
+ assert!(response.contains("let dashboardLiveAccountControl = null;"));
assert!(response.contains("function snapshotWithLiveRunActivity(snapshot)"));
assert!(response.contains("\"issue_identifier\""));
assert!(response.contains("\"title\""));
assert!(!response.contains("field(\"Author\","));
assert!(!response.contains("\"author\",\n"));
+ assert!(response.contains("activityPayload.accountControl"));
+ assert!(response.contains("dashboardLiveAccounts = Array.isArray(payload.accounts)"));
+ assert!(response.contains("dashboardLiveAccountControl ="));
assert!(response.contains("\"child_agent_activity\""));
assert!(response.contains("\"protocol_activity\""));
assert!(response.contains("!dashboardRunFieldHasValue(activityRun[key])"));
@@ -1509,6 +1519,8 @@ fn operator_dashboard_run_activity_preserves_snapshot_detail_fields() {
);
assert!(response.contains("dashboardLiveActiveRuns = payload.activeRuns"));
assert!(response.contains("snapshot: snapshotWithLiveRunActivity(payload.snapshot),"));
+ assert!(response.contains("account_control: accountControl,"));
+ assert!(response.contains("accounts,"));
assert!(response.contains("active_runs: mergedActiveRuns,"));
assert!(!response.contains("active_runs: activeRunRows,"));
}
diff --git a/apps/decodex/src/orchestrator/tests/operator/status/http.rs b/apps/decodex/src/orchestrator/tests/operator/status/http.rs
index 83e1c959..54072821 100644
--- a/apps/decodex/src/orchestrator/tests/operator/status/http.rs
+++ b/apps/decodex/src/orchestrator/tests/operator/status/http.rs
@@ -1045,8 +1045,16 @@ fn operator_dashboard_run_activity_event_summarizes_active_runs() {
let (payload, _consumed) = websocket_text_payload(&message).expect("event should be a text frame");
let payload: Value = serde_json::from_slice(payload).expect("event data should be json");
let data = &payload["payload"];
+ let fingerprint: Value =
+ serde_json::from_slice(&event.fingerprint).expect("fingerprint should be json");
assert_eq!(payload["type"], "runActivity");
+ assert_eq!(data["accountControl"]["mode"], "balanced");
+ assert!(data["accounts"].is_array());
+ assert!(fingerprint.get("emittedAtUnixEpoch").is_none());
+ assert_eq!(fingerprint["accountControl"]["mode"], "balanced");
+ assert!(fingerprint["accounts"].is_array());
+ assert_eq!(fingerprint["activeRuns"][0]["run_id"], "run-1");
assert_eq!(data["activeRuns"][0]["run_id"], "run-1");
assert_eq!(data["activeRuns"][0]["project_id"], "pubfi");
assert_eq!(data["activeRuns"][0]["protocol_activity"]["waiting_reason"], "model");