Skip to content

feat(#564): collapse completed milestone groups in dependency graph - #664

Merged
xsovad06 merged 1 commit into
mainfrom
feat/issue-564
Aug 14, 2026
Merged

feat(#564): collapse completed milestone groups in dependency graph#664
xsovad06 merged 1 commit into
mainfrom
feat/issue-564

Conversation

@xsovad06

Copy link
Copy Markdown
Owner

Summary

  • Add collapsible milestone groups in the supervisor dependency graph so completed phases occupy minimal space, with a "Hide Done" toggle to remove them entirely
  • Remove unused/premature features (merge queue monitor, direct subprocess spawn, auto-triage, issue state rollback, config hot-reload) that accumulated as dead code or were superseded by simpler approaches
  • Clean up Pydantic config models by removing extra="ignore" overrides and unused fields

Changes

Supervisor dependency graph (the #564 feature)

  • Completed milestone groups (all nodes done/closed) auto-collapse to a 28px tombstone showing the group name and node count; click to expand
  • Expanded completed groups show a "collapse" link in the header; collapse state persists via localStorage per milestone
  • "Hide Done" / "Show Done" toolbar button toggles visibility of all completed groups; persisted via localStorage
  • Layout recomputed on toggle: tombstones use reduced height, hidden groups excluded from the 2-column grid

Feature removal: merge queue monitor

  • Deleted merge_queue_monitor.py service, MergeQueueEntry DB model, migration 029, and 1285 lines of tests
  • Removed merge queue checks from _wait_and_finalize, recover_stale_runs, and dashboard lifespan startup
  • Removed merge-queue marker file creation from integrate-pr.md command
  • The integrate-pr command still polls merge queue status inline; only the background monitor is removed

Feature removal: direct subprocess spawn

  • Deleted spawn_direct() and _PIPELINE_ROLES from sova/ipc/runtime.py
  • start_agent() now routes all roles through ClaudeCodeRuntime.spawn() uniformly
  • Removed shell.py docstring that referenced the spawn_direct exception

Feature removal: issue state rollback

  • Deleted rollback_issue_state() from agent_recovery.py and its invocation in recover_stale_runs
  • Removed RESET_STALE_STATE and SPAWN_TRIAGE progression actions, _execute_stale_reset(), and associated gate checks from the progression engine
  • Deleted test_rollback.py (263 lines)

Feature removal: config hot-reload

  • Removed reload_config(), _config_reloaded event, and _interruptible_sleep() from SupervisorDaemon
  • Removed _reload_daemon_config() from settings router
  • Daemon now reads self._config directly and computes poll interval once at loop start

Config model cleanup

  • Removed extra="ignore" from all Pydantic SettingsConfigDict across 30+ config models (reverts to default Pydantic behavior)
  • Removed supervisor.auto_triage, dashboard.confirm_model, task_source.jira_display_name fields and their settings metadata
  • Removed model confirmation modal auto-bypass logic from agents.html (modal always shows now)

Misc cleanup

  • Removed stash/pop logic from _resolve_issue_worktree in agent_context.py
  • Simplified RearrangeCommitsStep.validate_output by removing agent-memory exclusion from diff checks
  • Removed _queueSaveInFlight / _queueLastSaved race guard and simplified drag-drop in supervisor queue JS
  • Removed _get_project_agents registry fallback for non-default slugs
  • Updated AGENTS.md service count (39 to 38) and test count
  • Updated sova.toml: poll_interval 240s to 30s, scheduler disabled, removed auto_research/auto_triage

Review guidance

This PR bundles the requested graph collapse feature (#564) with significant dead code removal. The removals are the bulk of the diff (3,376 of 3,788 deleted lines).

Key areas to verify:

  • Graph collapse logic: the D3 rendering changes in supervisor.html are the core feature. Check that tombstone rendering, expand/collapse state, and the "Hide Done" toggle interact correctly
  • Merge queue removal completeness: verify no remaining imports or references to merge_queue_monitor or MergeQueueEntry
  • extra="ignore" removal: this changes Pydantic validation from silently ignoring unknown TOML keys to raising errors. Any project with typos or deprecated keys in sova.toml will now fail at config load
  • spawn_direct removal: all agent spawning now goes through Claude Code. This re-introduces the wrapper cost (~$0.50/run) and 600s timeout that spawn_direct was designed to avoid
  • sova.toml changes: poll_interval_seconds dropped from 240 to 30, scheduler_enabled set to false, auto_research removed. These are local config changes that should not ship

Test plan

  • make check passes (lint + full pytest suite)
  • Deleted tests for removed features: test_merge_queue_monitor.py, test_rollback.py, and related test functions in test_dashboard.py, test_progression.py, test_config.py, test_ipc.py, test_agent_pool.py
  • Graph collapse feature verified by running the dashboard and testing expand/collapse/hide-done interactions on the supervisor page

Closes #564

@xsovad06 xsovad06 self-assigned this Aug 14, 2026
@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@xsovad06, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3f9e0f7a-2ff8-4e59-8856-20c01c4eb047

📥 Commits

Reviewing files that changed from the base of the PR and between edf7a2f and 26c23e5.

⛔ Files ignored due to path filters (1)
  • .claude/agent-memory/cookbook.md is excluded by !.claude/** and included by none
📒 Files selected for processing (3)
  • sova/dashboard/templates/supervisor.html
  • sova/supervisor/watchdog.py
  • tests/test_scheduler.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

Copy link
Copy Markdown

@xsovad06
xsovad06 merged commit 681f934 into main Aug 14, 2026
8 checks passed
@xsovad06
xsovad06 deleted the feat/issue-564 branch August 14, 2026 11:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(supervisor): collapse completed milestone groups in dependency graph

1 participant