Skip to content

feat: Sprint 4 — phase docs + dashboard mode#47

Merged
egerev merged 33 commits intomainfrom
feat/auto-supervisor-sprint-4
Mar 25, 2026
Merged

feat: Sprint 4 — phase docs + dashboard mode#47
egerev merged 33 commits intomainfrom
feat/auto-supervisor-sprint-4

Conversation

@egerev
Copy link
Copy Markdown
Owner

@egerev egerev commented Mar 25, 2026

Summary

  • Phase 1 Step 11: auto-launch flow replaces context reset (primary path + manual fallback)
  • Phase 2: new Dashboard Mode section (monitoring with launcher polling, 6 commands, 3 reconnection scenarios)
  • SKILL.md: dashboard commands, architecture update, supervisor detection on startup
  • CLAUDE.md: v3.5.0 bump, new modules in architecture/key files, test count 333
  • Fixed stale counts, crash vs stopped distinction, launcher status polling

Test plan

  • 333 tests passing (docs-only sprint, no code changes)
  • Dashboard commands consistent across SKILL.md and phase2-execution.md
  • Reconnection covers all 3 scenarios (running, finished, crashed)
  • Auto-launch handles crash recovery without queue overwrite

Review

  • Claude Product: ACCEPTED (stale counts fixed)
  • Codex Technical: APPROVE (P1 crash detection + P2 launcher polling fixed)

🤖 Generated with Claude Code

egerev and others added 30 commits March 25, 2026 22:53
Phase 1 artifacts for the auto-supervisor feature: design spec,
product brief, implementation plan (4 sprints), and generated
sprint queue.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add validation in SprintQueue.load() to reject absolute paths and
path components containing '..' in sprint plan_file fields, with
fragment (#) support for anchored references.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove --telegram-token and --telegram-chat flags from run/resume
subcommands. _make_notifier() now reads exclusively from env vars.
Notifier.__init__() falls back to TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID
env vars when no args given. Remove unused generate_completion_report
import.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add .superflow/ directory and deduplicate .worktrees/ entry.
Also add .superflow/ to the gitignore template in stage4-setup.md
so onboarded projects include it from day one.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Validates that plan_file resolves within repo_root using os.path.realpath
before opening the file, preventing directory traversal attacks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Renames _DENIED_ENV_KEYS to _SPRINT_ENV_DENY_LIST and adds 12 new
sensitive keys (Telegram, Slack, Stripe, SSH, NPM, Docker, Heroku,
Sentry). ANTHROPIC_API_KEY and GITHUB_TOKEN remain excluded as they
are required by claude -p and gh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Create lib/planner.py with _parse_sprint_headings() supporting colon,
em-dash, and hyphen separator formats. Refactor _extract_plan_section()
in supervisor.py to delegate sprint-type fragments to the shared parser,
fixing boundary detection for em-dash and hyphen headings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Review finding: spec section 7.2 explicitly lists SECRET_KEY in the
Tier 2 deny-list but implementation omitted it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Product: ACCEPTED, Codex Technical: APPROVE
274 tests passing, review findings fixed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements plan_to_queue() that reads a markdown plan file, parses sprint
headings, extracts complexity and depends_on metadata, validates uniqueness
and dependency integrity (including cycle detection via topological sort),
computes SHA-256 content hash, and returns a queue dict matching the schema.

Also adds save_queue() for atomic JSON writes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds optional generated_from parameter to SprintQueue.__init__() and
updates load()/save() to round-trip the field. Old queue files without
generated_from continue to load without error (defaults to None).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds TestPlanToQueue (20 cases), TestSaveQueue (2 cases),
TestValidateQueueFreshness (3 cases), and TestSprintQueueGeneratedFrom
(3 cases) covering plan parsing, content hash verification, freshness
checking, and generated_from round-trip in SprintQueue.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Review finding: absolute paths from CLI/tempfile callers would produce
queue entries rejected by SprintQueue.load() path validation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Product: ACCEPTED, Codex Technical: APPROVE (P1 fixed)
302 tests passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add launch and stop subcommands to superflow-supervisor CLI.
Enhance status command to show launcher info when available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add tests/test_launcher.py with 21 tests covering read_pid, launch,
stop, get_status, restart, and write_skip_request. Add skip-request
and heartbeat tests to test_supervisor.py. Add CLI tests for launch
and stop subcommands in test_cli.py.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Review findings:
- restart() must call supervisor.resume() to recover crashed sprints
  before relaunching (blocker: stuck in_progress sprints on restart)
- _check_skip_requests() now saves queue after applying skips to
  prevent skip loss on crash

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Review finding: relative paths are reinterpreted against repo_root
when the child process starts with cwd=repo_root.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Product: ACCEPTED (blocker+concerns fixed), Codex: APPROVE (P2 fixed, P1 disagree — spec chose killpg deliberately)
333 tests passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add auto-launch flow as primary path after user approval: pre-launch
check, queue generation, supervisor launch with receipt, dashboard mode.
Keep existing context reset as fallback for declined or failed launch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add Dashboard Mode section to phase2-execution.md covering sprint
transition monitoring, interactive commands table, and reconnection
scenarios for auto-launched supervisor sessions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add planner.py and launcher.py to architecture and key files,
update test count (333), bump version to v3.5.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
egerev and others added 3 commits March 25, 2026 23:43
Review findings: CLAUDE.md had 138 tests in architecture tree vs 333
in Key Files table. SKILL.md had 140+ tests (now 333), "4 agents"
(now 2), and missing planner/launcher in reference list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Review findings:
- Phase 1 Step 11: crashed supervisor should offer restart, not
  regenerate queue (would overwrite completed sprint state)
- Dashboard mode: poll launcher.get_status() alongside state file
  to detect supervisor death and trigger crash/restart flow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Product: ACCEPTED (stale counts fixed), Codex: APPROVE (crash detection + polling fixed)
333 tests passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@egerev egerev merged commit cf928e9 into main Mar 25, 2026
@egerev egerev deleted the feat/auto-supervisor-sprint-4 branch March 25, 2026 16:18
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.

1 participant