Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 9 additions & 15 deletions apps/decodex/src/orchestrator/operator_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -8098,10 +8098,8 @@ <h2 id="recent-title">Run History</h2>
(project.cleanup_blocked_count ?? 0) +
(project.cleanup_pending_count ?? 0) +
(project.post_review_lane_count ?? 0);
const connector = projectConnectorSummary(project);
const syncNeedsAttention = project.enabled && ["backoff", "degraded", "stale"].includes(connector);

return workCount > 0 || (project.warning_count ?? 0) > 0 || syncNeedsAttention;
return workCount > 0;
}

function activeProjects(projects) {
Expand All @@ -8124,6 +8122,9 @@ <h2 id="recent-title">Run History</h2>
if ((project.cleanup_blocked_count ?? 0) > 0) {
return { label: "cleanup blocked", tone: "tone-wait", title: "Post-land cleanup needs operator action" };
}
if ((project.cleanup_pending_count ?? 0) > 0) {
return { label: "cleanup pending", tone: "tone-retained", title: "Post-land cleanup pending" };
}
if (project.connector_state === "backoff") {
return {
label: "sync backoff",
Expand All @@ -8135,14 +8136,7 @@ <h2 id="recent-title">Run History</h2>
(project.warning_count ?? 0) > 0 ||
["degraded", "stale_cache"].includes(project.connector_state)
) {
if ((project.cleanup_pending_count ?? 0) > 0) {
return { label: "cleanup pending", tone: "tone-retained", title: "Post-land cleanup pending" };
}

return { label: "sync degraded", tone: "tone-wait", title: "Tracker sync or retry state degraded" };
}
if ((project.cleanup_pending_count ?? 0) > 0) {
return { label: "cleanup pending", tone: "tone-retained", title: "Post-land cleanup pending" };
return { label: "sync degraded", tone: "tone-muted", title: "Tracker sync or retry state degraded" };
}

return { label: "ok", tone: "tone-ready", title: "No project warnings" };
Expand Down Expand Up @@ -8458,13 +8452,13 @@ <h2 id="recent-title">Run History</h2>
if ((project.cleanup_pending_count ?? 0) > 0) {
return 4;
}
if (["backoff", "degraded", "stale_cache"].includes(project.connector_state)) {
if (projectHasActiveWork(project)) {
return 5;
}
if ((project.warning_count ?? 0) > 0) {
if (["backoff", "degraded", "stale_cache"].includes(project.connector_state)) {
return 6;
}
if (projectHasActiveWork(project)) {
if ((project.warning_count ?? 0) > 0) {
return 7;
}

Expand Down Expand Up @@ -9165,7 +9159,7 @@ <h4>${escapeHtml(title)}</h4>
function recoveryWorktreeShouldDefaultOpen(renderedWorktree) {
const role = renderedWorktree.role;

return role.tone === "tone-blocked" || role.label.includes("cleanup");
return role.tone === "tone-blocked";
}

function renderWorktrees(snapshot) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1140,7 +1140,8 @@ fn operator_dashboard_projects_show_compact_activity_work_and_location() {
assert!(response.contains("return projects.filter(projectHasActiveWork);"));
assert!(response.contains("project.queued_candidate_count ?? 0"));
assert!(response.contains("project.post_review_lane_count ?? 0"));
assert!(response.contains("return workCount > 0 || (project.warning_count ?? 0) > 0 || syncNeedsAttention;"));
assert!(response.contains("return workCount > 0;"));
assert!(!response.contains("syncNeedsAttention"));
assert!(!response.contains("project.retained_worktree_count ?? 0);"));
assert!(!response.contains("projectHasRecentActivity(project)"));
assert!(response.contains("class=\"project-activity\""));
Expand All @@ -1157,6 +1158,7 @@ fn operator_dashboard_projects_show_compact_activity_work_and_location() {
assert!(response.contains("return { label: \"cleanup pending\", tone: \"tone-retained\""));
assert!(response.contains("label: \"sync backoff\""));
assert!(response.contains("label: \"sync degraded\""));
assert!(response.contains("label: \"sync degraded\", tone: \"tone-muted\""));
assert!(response.contains("return { label: \"ok\", tone: \"tone-ready\""));
assert!(!response.contains("function projectSyncMeta(project, health)"));
assert!(!response.contains("const connectorCopy = projectSyncMeta(project, health);"));
Expand Down Expand Up @@ -1326,7 +1328,8 @@ fn operator_dashboard_flow_counts_distinguish_intake_attention() {
assert!(response.contains("? pluralize(retainedWorktrees.length, \"worktree\")"));
assert!(!response.contains("retained or cleanup"));
assert!(response.contains("function recoveryWorktreeShouldDefaultOpen(renderedWorktree)"));
assert!(response.contains("role.tone === \"tone-blocked\" || role.label.includes(\"cleanup\")"));
assert!(response.contains("role.tone === \"tone-blocked\""));
assert!(!response.contains("role.label.includes(\"cleanup\")"));
assert!(response.contains("label: isDirty ? \"post-review cleanup blocked\" : \"post-review cleanup\""));
assert!(response.contains("retainedWorktrees.some(recoveryWorktreeShouldDefaultOpen)"));
assert!(!response.contains("syncDefaultDetailOpenState(nodes.panels.worktrees, retainedWorktrees.length > 0);"));
Expand Down