feat: Sprint 4 — phase docs + dashboard mode#47
Merged
Conversation
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>
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
Review
🤖 Generated with Claude Code