Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

ralph/python rewrite#12

Merged
elasticdotventures merged 13 commits into
mainfrom
ralph/python-rewrite
Feb 3, 2026
Merged

ralph/python rewrite#12
elasticdotventures merged 13 commits into
mainfrom
ralph/python-rewrite

Conversation

@elasticdotventures
Copy link
Copy Markdown
Member

  • feat: task-002 - Add OpenCode executor support
  • feat: task-004 - Add visual progress display with dependency trees
  • chore: Update progress for task-004 completion\n\n🤖 Generated with Nori\n\nCo-Authored-By: Nori contact@tilework.tech
  • feat: task-002 - Add OpenCode executor support
  • chore: Update progress for task-002 completion\n\n🤖 Generated with Nori\n\nCo-Authored-By: Nori contact@tilework.tech
  • feat: task-003 - Refactor CLI with subcommands for better ergonomics
  • feat: task-005 - Write comprehensive test suite
  • feat: task-006 - Update documentation

b and others added 8 commits February 1, 2026 17:33
Implemented OpenCodeExecutor as a fourth executor option alongside amp, claude,
and codex. The executor follows the established ToolExecutor protocol pattern
and integrates seamlessly with the existing runner infrastructure.

Changes:
- Created OpenCodeExecutor dataclass in ralph/executors.py with frozen=True, slots=True
- Uses _TeeToStderr pattern for real-time subprocess output capture
- Integrated into runner._build_executor() match statement
- Created test stub at tests/tool_stubs/opencode for integration testing
- Fixed test_codex_executor_with_extra_args to include new RalphConfig fields

All quality checks passing: mypy strict, ruff linting, pytest (67 passed, 3 skipped)
🤖 Generated with [Nori](https://nori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
Implemented rich visual feedback for Ralph execution progress:
- Created ralph/progress_display.py module with:
  * ProgressStats dataclass for task metrics
  * display_progress_bar() with Unicode box-drawing (█ and ░)
  * display_task_tree() showing tasks with status icons (✓, ⚡, ○)
  * display_progress_summary() combining bar, stats, and tree
- Integrated into runner.py replacing basic text progress
- Uses Unicode box-drawing for dependency visualization
- Shows blocked tasks with indented dependencies

Files changed: ralph/progress_display.py (new), ralph/runner.py
Quality checks: mypy --strict ✓, ruff ✓, pytest 67/70 passed ✓
🤖 Generated with [Nori](https://nori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
- Added OpenCodeExecutor class to ralph/executors.py
- Integrated OpenCode into runner._build_executor() match statement
- Added "opencode" to CLI tool choices
- Added test coverage: test_opencode_executor_success and test_opencode_executor_with_extra_args
- OpenCode test stub already exists at tests/tool_stubs/opencode
- Config fields opencode_model and opencode_extra_args already present

All acceptance criteria met:
✅ OpenCodeExecutor dataclass created with frozen=True, slots=True
✅ Uses _TeeToStderr pattern for subprocess output
✅ run() method returns Result[str, Exception]
✅ Implicitly follows ToolExecutor protocol (duck typing)
✅ Integrated into runner._build_executor() match statement
✅ Uses config.opencode_model and config.opencode_extra_args
✅ Test stub created at tests/tool_stubs/opencode
🤖 Generated with [Nori](https://nori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
- Implemented CLI with subcommands: run, status, list-tasks
- Added FileTaskMasterClient for direct tasks.json access
- CLI now uses argparse subparsers with comprehensive help text
- Updated all tests to support new CLI structure
- All 72 tests passing, full type checking compliance
🤖 Generated with [Nori](https://nori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
- Created tests/test_taskmaster_adapter.py with 28 tests
  * Tests for Task class from_dict() and to_dict() methods
  * Tests for FileTaskMasterClient (all CRUD operations)
  * Tests for CLITaskMasterClient (all methods with mocking)
  * Tests for MCPTaskMasterClient (not implemented stubs)
  * Tests for create_client() factory function
  * Tests for get_current_branch() helper
- Created tests/test_progress_display.py with 15 tests
  * Tests for compute_progress_stats() with various scenarios
  * Tests for display_progress_bar() with different completions
  * Tests for display_task_tree() with various task states
  * Tests for display_progress_summary() integration
- OpenCode executor tests already existed in test_executors.py
- CLI subcommand tests already existed in test_ralph_cli.py
- Achieved 90% test coverage (727 statements, 74 missed)
- All 115 tests passing (3 skipped for real tool integration)
- All quality checks passing (mypy --strict, ruff)
🤖 Generated with [Nori](https://nori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
Updated three README files to document TaskMaster integration, new CLI
subcommands, and OpenCode executor support:

README.md changes:
- Added OpenCode as fourth executor option
- Updated workflow section with new CLI subcommands (run, status, list-tasks)
- Added visual progress display section with Unicode box-drawing examples
- Added TaskMaster format migration guide with prd.json → tasks.json
- Updated all examples to use new subcommand syntax
- Updated key files table to reflect tasks.json format

ralph/README.md changes:
- Added TaskMaster integration section with task format documentation
- Documented new CLI subcommands (run, status, list-tasks) with examples
- Added dependency management section (dependsOn, blockedBy)
- Added visual progress display documentation with status icons
- Updated environment variables to include OPENCODE_MODEL and TASKMASTER_URL
- Added hybrid mode documentation (file-based vs MCP)
- Expanded breaking changes section with new features list
- Updated project structure to show new modules (taskmaster_adapter, progress_display)

README-MCP.md changes:
- Added TaskMaster MCP integration section
- Documented TaskMaster MCP server setup (file-based and MCP modes)
- Added TaskMaster CLI integration instructions
- Added MCP client config example for TaskMaster
- Documented TaskMaster features in Ralph (status management, dependencies, visual progress)
- Added migration reference to main README

All quality checks passing (mypy, ruff, pytest).
🤖 Generated with [Nori](https://nori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
Copilot AI review requested due to automatic review settings February 2, 2026 11:35
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements a comprehensive rewrite of Ralph's task management system with TaskMaster integration, adds OpenCode executor support, refactors the CLI with subcommands, and implements visual progress displays.

Changes:

  • Added TaskMaster integration with file-based client (FileTaskMasterClient) supporting direct tasks.json access
  • Implemented visual progress display with Unicode box-drawing characters (progress bars, task trees, status icons)
  • Refactored CLI with subcommands: run, status, and list-tasks for better discoverability
  • Added OpenCode executor as fourth tool option alongside amp, claude, and codex
  • Created comprehensive test suite with 476 lines of TaskMaster tests and 422 lines of progress display tests
  • Updated all documentation (ralph/README.md, README.md, README-MCP.md) to reflect new features

Reviewed changes

Copilot reviewed 19 out of 21 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/test_taskmaster_adapter.py Comprehensive unit tests for FileTaskMasterClient, CLITaskMasterClient, and MCPTaskMasterClient
tests/test_progress_display.py Complete test coverage for visual progress components
tests/tool_stubs/opencode Integration test stub for OpenCode executor
tests/test_ralph_cli.py Updated CLI tests for new subcommand structure
tests/test_ralph_integration.py Integration tests updated to use new CLI syntax
tests/test_executors.py Added OpenCode executor tests
tests/test_runner.py Removed unused imports (MagicMock, Path)
tests/test_logging_utils.py Removed unused patch import
tests/test_archiver.py Removed unused imports (Failure, ARCHIVE_DIR, LAST_BRANCH_PATH)
ralph/taskmaster_adapter.py Implemented FileTaskMasterClient for direct tasks.json read/write
ralph/progress_display.py New module with progress stats, bars, trees, and summary displays
ralph/executors.py Added OpenCodeExecutor with model and extra_args support
ralph/runner.py Integrated visual progress display into main loop
ralph/ralph_cli.py Major refactor with argparse subparsers and three subcommands
ralph/README.md Extensive documentation updates for all new features
README.md Main README updated with TaskMaster format migration guide
README-MCP.md MCP integration documentation with TaskMaster details
tasks.json Task status updates marking tasks 002-005 as done
progress.txt Progress entries documenting implementation of tasks 002-005
tests/pycache/conftest.cpython-311-pytest-9.0.2.pyc Binary cache file (should not be committed)
ralph/pycache/archiver.cpython-311.pyc Binary cache file (should not be committed)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ralph/ralph_cli.py
Comment on lines +154 to 158
run_parser.add_argument(
"--task-id",
metavar="TASK",
help="Target a specific task ID",
)
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The --task-id argument is defined and displayed in dry-run mode, but it's not actually used when executing the agent loop in non-dry-run mode. Either implement the functionality to target a specific task, or remove this argument if it's not yet supported.

Copilot uses AI. Check for mistakes.
Comment thread ralph/README.md
| `CODEX_SANDBOX` | Sandbox mode | `workspace-write` |
| `CODEX_FULL_AUTO` | Enable full automation | `true` |
| `CODEX_EXTRA_ARGS` | Additional codex arguments | (empty) |
| `OPENCODE_MODEL` | OpenCode model to use | `opencode-default` |
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation states the default OPENCODE_MODEL is "opencode-default", but the OpenCodeExecutor class in ralph/executors.py uses "gpt-4" as the default model. These should be consistent - either update the documentation to match the code's default of "gpt-4", or update the code to match the documentation.

Suggested change
| `OPENCODE_MODEL` | OpenCode model to use | `opencode-default` |
| `OPENCODE_MODEL` | OpenCode model to use | `gpt-4` |

Copilot uses AI. Check for mistakes.
Comment thread ralph/ralph_cli.py
Comment on lines +164 to +169
run_parser.add_argument(
"--verbose",
"-v",
action="store_true",
help="Enable verbose output",
)
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The --verbose flag is defined but not actually used in the cmd_run function. Either implement verbose logging functionality or remove this argument if it's not yet supported.

Copilot uses AI. Check for mistakes.
Comment thread tests/test_taskmaster_adapter.py Outdated
from __future__ import annotations

import json
from datetime import datetime
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import of 'datetime' is not used.

Suggested change
from datetime import datetime

Copilot uses AI. Check for mistakes.
b added 5 commits February 3, 2026 08:26
…tation

Task-005: Write comprehensive test suite
- Created tests/test_taskmaster_adapter.py (28 tests)
- Created tests/test_progress_display.py (15 tests)
- Achieved 90% code coverage (727 statements, 653 covered)
- All 115 tests passing (112 active + 3 skipped)

Task-006: Update documentation
- Updated README.md with TaskMaster integration
- Updated ralph/README.md with technical details
- Updated README-MCP.md with MCP patterns
- Documented CLI subcommands and OpenCode support

All quality checks passing: mypy --strict ✓, ruff ✓, pytest ✓
Resolved merge conflicts by keeping our TaskMaster integration and subcommand CLI:
- Kept tasks.json (essential for TaskMaster)
- Kept ralph/ralph_cli.py (subcommands: run, status, list-tasks)
- Merged README files with both our docs and main's OPERATIONS.md reference
- Fixed parameter name mismatch in taskmaster_adapter.py (tasks_file)
- Fixed test imports to use ralph.ralph_cli

Changes from main:
- Added OPERATIONS.md for operational docs
- Added ralph/__main__.py and ralph/entrypoint.py (MCP support)
- Updated pyproject.toml, justfile, and other config files
- Removed __pycache__ files

Test status: 122 passed, 4 failed, 3 skipped
- 4 failures are in integration tests expecting entrypoint.py structure
- These tests need updating to work with our subcommand CLI
- All core functionality tests pass
Fixed all test failures after merge:
- Updated main() to accept optional argv parameter
- Fixed __main__.py to call ralph_cli.main() instead of entrypoint.main()
- Updated pyproject.toml entry point to use ralph.ralph_cli:main
- Fixed test_main_runs_with_agent and test_main_defaults_to_sys_argv to use subcommand syntax
- Updated test_help_flag to check for subcommands instead of --agent flag
- Removed duplicate test_main_version_flag function
- Added missing Path import in test_ralph_cli.py

Test results: 126 passed, 3 skipped (100% pass rate)
Quality checks: mypy --strict ✓, ruff ✓ (only ARG001 warnings remain)
Task-007: Update justfile with new commands
- Added ralph-tasks, ralph-status, ralph-opencode commands
- Added ralph-mcp and ralph-mcp-http for MCP server
- Added ralph-dry-run for testing without execution
- Added ralph-tasks-pending and ralph-tasks-active for filtered views
- Updated all existing commands to use new subcommand syntax

Task-008: Update skills for TaskMaster format
- Updated skills/prd/SKILL.md to generate .taskmaster/tasks/tasks.json
- Updated skills/ralph/SKILL.md to convert PRDs to TaskMaster format
- Added dependency tracking documentation (dependsOn vs blockedBy)
- Added task size rules and validation checklists
- Updated examples with full TaskMaster v1.0 schema
- Optional markdown PRD output for documentation

All 8 tasks completed successfully! ✅
- Updated workflow to show PRD skill generating TaskMaster format directly
- Added complete example workflow from feature description to PR
- Updated CLI commands to show subcommand syntax (run --tool)
- Added all new justfile commands (ralph-status, ralph-tasks, ralph-mcp, etc.)
- Documented TaskMaster CLI usage for task management
- Updated file paths to .taskmaster/tasks/tasks.json
- Added monitoring and management section
- Clarified dependency tracking (dependsOn vs blockedBy)
- Added visual progress display symbols (█ ░ ├─ └─)
@elasticdotventures elasticdotventures merged commit 0b4eb47 into main Feb 3, 2026
2 checks passed
@elasticdotventures elasticdotventures deleted the ralph/python-rewrite branch February 3, 2026 04:33
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants