[PR #129] [CLOSED] feat: web dashboard, parallel loops, REST API, and config improvements #152

Closed
opened 2026-02-27 10:22:26 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/mikeyobrien/ralph-orchestrator/pull/129
Author: @mikeyobrien
Created: 1/28/2026
Status: Closed

Base: mainHead: fix/web-config-path-root


📝 Commits (10+)

  • cd87614 fix(parallel-loops): Wire LoopRegistry.register() into worktree spawn flow
  • 98f09e4 feat(loops): add --json flag to ralph loops list
  • 74a07dc refactor: relocate specs and tasks to .ralph/ directory
  • 9eae366 feat(web): add web dashboard (backend + frontend)
  • d10b599 docs: update CLAUDE.md with web dashboard and architecture
  • eb1f7e0 fix(events): use atomic write for JSONL event logging
  • 413dae5 fix(loop): clear scratchpad on fresh runs to prevent stale state
  • ad8fd85 feat(core): add parallel loop infrastructure
  • b5ef7f4 feat(cli): implement parallel loop orchestration
  • b41640f feat(web): add backend API for loop management

📊 Changes

431 files changed (+36121 additions, -1560 deletions)

View changed files

.agent/memories.md (+0 -69)
.agent/tasks.jsonl (+0 -29)
📝 .claude/skills/code-task-generator/SKILL.md (+3 -3)
📝 .claude/skills/find-code-tasks/SKILL.md (+13 -13)
.claude/skills/ralph-loop/SKILL.md (+300 -0)
📝 .gitignore (+27 -4)
📝 .ralph/specs/README.md (+0 -0)
📝 .ralph/specs/adapters/amp.spec.md (+0 -0)
📝 .ralph/specs/adapters/claude/design/detailed-design.md (+0 -0)
📝 .ralph/specs/adapters/claude/idea-honing.md (+0 -0)
📝 .ralph/specs/adapters/claude/implementation/plan.md (+0 -0)
📝 .ralph/specs/adapters/claude/research/adapter-streaming-analysis.md (+0 -0)
📝 .ralph/specs/adapters/claude/research/deprecated-spec.md (+0 -0)
📝 .ralph/specs/adapters/claude/research/implementation-gap-analysis.md (+0 -0)
📝 .ralph/specs/adapters/claude/rough-idea.md (+0 -0)
📝 .ralph/specs/adapters/claude/summary.md (+0 -0)
📝 .ralph/specs/adapters/codex.spec.md (+0 -0)
📝 .ralph/specs/adapters/gemini.spec.md (+0 -0)
📝 .ralph/specs/adapters/kiro.spec.md (+0 -0)
📝 .ralph/specs/beads-lite.spec.md (+0 -0)

...and 80 more files

📄 Description

Summary

This PR introduces the full Ralph web dashboard, parallel loop orchestration, REST API, and numerous core improvements across 37 commits.

Web Dashboard

  • Full-stack web dashboard: Fastify + tRPC + SQLite backend, React + Vite + TailwindCSS frontend
  • Task detail views with real-time log streaming via WebSocket
  • Components: TaskDetailPage, TaskThread, TaskInput, ThreadList, TaskDetailHeader, TaskStatusBar, TaskMetadataGrid, EmptyState, TaskCardSkeleton
  • Settings page with ralph.yml config editor (read/write via tRPC)
  • ralph web CLI command to launch both servers

Parallel Loop Orchestration

  • Worktree-based parallel loop execution with git isolation
  • Core modules: git_ops, landing, handoff, loop_name, planning_session
  • Memorable loop ID generation (adjective-noun format)
  • Loop registry, merge queue (event-sourced JSONL), and CLI management (ralph loops)
  • Integration tests for merge workflows and button state transitions

Merge Workflow UX

  • Merge button on TaskThread for worktree tasks with visual distinction (green border)
  • loops.triggerMergeTask tRPC endpoint for merge-as-task pattern
  • User steering UI for needs-review loops (amber callout with text input)
  • Steering input written to .ralph/merge-steering.txt for merge-ralph
  • ExecutionSummary component with merge-specific styling
  • mergeLoopPrompt database field for merge context tracking

REST API

  • 10 endpoints at /api/v1: health, tasks CRUD, task execution, hats, presets
  • Enables external consumers without tRPC client

Core Improvements

  • Objective persistence in HatlessRalph across iterations after task.start
  • Chaos mode module for controlled failure injection testing
  • Atomic JSONL event logging to prevent corruption from parallel writes
  • Scratchpad clearing on fresh runs to prevent stale state
  • prompt_summary fix to read file content instead of returning path
  • Signal handling fix: is_alive() uses signal None instead of SIGCONT
  • Loop deregistration on exit for clean lifecycle

Security

  • Command injection prevention: ProcessSupervisor uses array-form spawn
  • API validation prevents deletion of running/open/pending tasks

Housekeeping

  • Config path changed from configs/ralph.yml to root ralph.yml
  • Specs and tasks relocated to .ralph/ directory
  • --json flag for ralph loops list
  • Presets catalog (presets/index.json) with 147 entries
  • "Backpressure" renamed to "verification" across presets
  • Removed stale .agent/ files and IMPLEMENTATION_PLAN.md

Test plan

  • cargo test passes
  • npm run test:server — 149 backend tests pass
  • Integration tests for parallel loops and merge workflows
  • Frontend component tests across all new components
  • Pre-commit hooks (formatting + clippy) pass

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/mikeyobrien/ralph-orchestrator/pull/129 **Author:** [@mikeyobrien](https://github.com/mikeyobrien) **Created:** 1/28/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `fix/web-config-path-root` --- ### 📝 Commits (10+) - [`cd87614`](https://github.com/mikeyobrien/ralph-orchestrator/commit/cd8761461c99c5eff75e2857e7179bde7f5b97e9) fix(parallel-loops): Wire LoopRegistry.register() into worktree spawn flow - [`98f09e4`](https://github.com/mikeyobrien/ralph-orchestrator/commit/98f09e4656f1a4696a7aeec3159cc57d6de5d59c) feat(loops): add --json flag to `ralph loops list` - [`74a07dc`](https://github.com/mikeyobrien/ralph-orchestrator/commit/74a07dcccca31a361d42af8910d1d1913e5bf9fe) refactor: relocate specs and tasks to .ralph/ directory - [`9eae366`](https://github.com/mikeyobrien/ralph-orchestrator/commit/9eae36680ac94be06568db783599886555b3778f) feat(web): add web dashboard (backend + frontend) - [`d10b599`](https://github.com/mikeyobrien/ralph-orchestrator/commit/d10b5998070f30af425b9464ce6ccb67728e2d6c) docs: update CLAUDE.md with web dashboard and architecture - [`eb1f7e0`](https://github.com/mikeyobrien/ralph-orchestrator/commit/eb1f7e0e4ea585bbefd895b70c2a0959bcc0c02d) fix(events): use atomic write for JSONL event logging - [`413dae5`](https://github.com/mikeyobrien/ralph-orchestrator/commit/413dae5675a91fa7b3cdf5479accc9f747480c75) fix(loop): clear scratchpad on fresh runs to prevent stale state - [`ad8fd85`](https://github.com/mikeyobrien/ralph-orchestrator/commit/ad8fd85601db64ce3cee2a9cc0999c8c0ff57669) feat(core): add parallel loop infrastructure - [`b5ef7f4`](https://github.com/mikeyobrien/ralph-orchestrator/commit/b5ef7f49e6ee63a785d00b1b0fa28893869c6c67) feat(cli): implement parallel loop orchestration - [`b41640f`](https://github.com/mikeyobrien/ralph-orchestrator/commit/b41640f0244d662b7d5342289b93390c63341bfb) feat(web): add backend API for loop management ### 📊 Changes **431 files changed** (+36121 additions, -1560 deletions) <details> <summary>View changed files</summary> ➖ `.agent/memories.md` (+0 -69) ➖ `.agent/tasks.jsonl` (+0 -29) 📝 `.claude/skills/code-task-generator/SKILL.md` (+3 -3) 📝 `.claude/skills/find-code-tasks/SKILL.md` (+13 -13) ➕ `.claude/skills/ralph-loop/SKILL.md` (+300 -0) 📝 `.gitignore` (+27 -4) 📝 `.ralph/specs/README.md` (+0 -0) 📝 `.ralph/specs/adapters/amp.spec.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/design/detailed-design.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/idea-honing.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/implementation/plan.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/research/adapter-streaming-analysis.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/research/deprecated-spec.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/research/implementation-gap-analysis.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/rough-idea.md` (+0 -0) 📝 `.ralph/specs/adapters/claude/summary.md` (+0 -0) 📝 `.ralph/specs/adapters/codex.spec.md` (+0 -0) 📝 `.ralph/specs/adapters/gemini.spec.md` (+0 -0) 📝 `.ralph/specs/adapters/kiro.spec.md` (+0 -0) 📝 `.ralph/specs/beads-lite.spec.md` (+0 -0) _...and 80 more files_ </details> ### 📄 Description ## Summary This PR introduces the full Ralph web dashboard, parallel loop orchestration, REST API, and numerous core improvements across 37 commits. ### Web Dashboard - Full-stack web dashboard: Fastify + tRPC + SQLite backend, React + Vite + TailwindCSS frontend - Task detail views with real-time log streaming via WebSocket - Components: TaskDetailPage, TaskThread, TaskInput, ThreadList, TaskDetailHeader, TaskStatusBar, TaskMetadataGrid, EmptyState, TaskCardSkeleton - Settings page with ralph.yml config editor (read/write via tRPC) - `ralph web` CLI command to launch both servers ### Parallel Loop Orchestration - Worktree-based parallel loop execution with git isolation - Core modules: git_ops, landing, handoff, loop_name, planning_session - Memorable loop ID generation (adjective-noun format) - Loop registry, merge queue (event-sourced JSONL), and CLI management (`ralph loops`) - Integration tests for merge workflows and button state transitions ### Merge Workflow UX - Merge button on TaskThread for worktree tasks with visual distinction (green border) - `loops.triggerMergeTask` tRPC endpoint for merge-as-task pattern - User steering UI for needs-review loops (amber callout with text input) - Steering input written to `.ralph/merge-steering.txt` for merge-ralph - ExecutionSummary component with merge-specific styling - `mergeLoopPrompt` database field for merge context tracking ### REST API - 10 endpoints at `/api/v1`: health, tasks CRUD, task execution, hats, presets - Enables external consumers without tRPC client ### Core Improvements - Objective persistence in HatlessRalph across iterations after `task.start` - Chaos mode module for controlled failure injection testing - Atomic JSONL event logging to prevent corruption from parallel writes - Scratchpad clearing on fresh runs to prevent stale state - `prompt_summary` fix to read file content instead of returning path - Signal handling fix: `is_alive()` uses signal None instead of SIGCONT - Loop deregistration on exit for clean lifecycle ### Security - Command injection prevention: ProcessSupervisor uses array-form spawn - API validation prevents deletion of running/open/pending tasks ### Housekeeping - Config path changed from `configs/ralph.yml` to root `ralph.yml` - Specs and tasks relocated to `.ralph/` directory - `--json` flag for `ralph loops list` - Presets catalog (`presets/index.json`) with 147 entries - "Backpressure" renamed to "verification" across presets - Removed stale `.agent/` files and `IMPLEMENTATION_PLAN.md` ## Test plan - [x] `cargo test` passes - [x] `npm run test:server` — 149 backend tests pass - [x] Integration tests for parallel loops and merge workflows - [x] Frontend component tests across all new components - [x] Pre-commit hooks (formatting + clippy) pass --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-02-27 10:22:26 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/ralph-orchestrator#152
No description provided.