Skip to content

feat: Interactive TUI for choo run + Web UI implementation - #18

Merged
RevCBH merged 13 commits into
mainfrom
RevCBH/run-specs-choo
Jan 20, 2026
Merged

feat: Interactive TUI for choo run + Web UI implementation#18
RevCBH merged 13 commits into
mainfrom
RevCBH/run-specs-choo

Conversation

@RevCBH

@RevCBH RevCBH commented Jan 20, 2026

Copy link
Copy Markdown
Owner

Summary

  • Interactive TUI: Add a live terminal UI using bubbletea that shows in-progress units with real-time updates during orchestration

    • Default on when stdout is TTY, falls back to summary-only for pipes/CI
    • Shows progress bars, task titles, and phase indicators
    • Opt-out via --no-tui flag
  • Web UI Implementation: Complete implementation of web monitoring feature (7 tasks)

    • Types, state store, SSE hub, Unix socket server
    • HTTP handlers, main server, CLI command (choo web)
  • Test Refactoring: Separate integration tests from unit tests for faster test runs

Test plan

  • go build ./... passes
  • choo run --unit web --no-pr completes successfully with TUI
  • TUI displays correct task counts on resume
  • choo web --help shows proper usage

🤖 Generated with Claude Code

Test User and others added 10 commits January 19, 2026 20:21
Add a live, interactive terminal UI using bubbletea that shows
in-progress units with real-time updates during orchestration.

Features:
- Default on when stdout is a TTY; falls back to summary-only for pipes/CI
- Opt-out via --no-tui flag
- Shows active units with progress bars and task counts
- Displays current task title and phase (invoking Claude, running validation)
- Keyboard: q or Ctrl+C to quit (triggers graceful shutdown)
- Supports resume scenarios with correct completed task counts

New files:
- internal/cli/tui/{model,update,view,styles,bridge}.go

Modified:
- internal/cli/run.go: TUI integration and --no-tui flag
- internal/orchestrator/orchestrator.go: SuppressOutput config
- internal/worker/{worker,loop}.go: Output suppression, task info in events

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move tests that require real git operations to *_integration_test.go files.
This allows faster unit test runs while preserving comprehensive coverage.

Changes:
- Add fake_runner_test.go for test doubles
- Move git integration tests to separate files
- Add proposal doc for test speed improvements
- Add prompt command to CLI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

o.bus.Emit(events.NewEvent(events.OrchStarted, "").WithPayload(map[string]any{
"unit_count": len(units),
"parallelism": o.cfg.Parallelism,
}))

P2 Badge Include dependency graph in orch.started payload

The orch.started event is emitted with only unit_count and parallelism, but the web store’s HandleEvent initializes unit state exclusively from the Graph in the orch.started payload. With no graph sent here, the web store’s unit map stays empty and all later unit.* events are ignored, so the web dashboard never shows any units or progress during choo run. Consider adding the graph (from the scheduler/graph builder) to this payload or updating the store to initialize units lazily on the first unit event.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

RevCBH and others added 3 commits January 19, 2026 22:48
- Remove unconditional debug logging in loop.go and backpressure.go
- Fix retry reason to differentiate between claude_invocation_failed,
  no_task_completed, and backpressure_failed
- Fix runner reset in pool_test.go to restore previous runner instead
  of nil
- Add nolint annotations for unused functions in WIP code
- Fix unhandled error in generateID() and server error handling
- Fix SSE handler tests to avoid synchronous pipe deadlock

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The orch_ prefixed frontmatter fields are runtime-only, so choo status
should infer unit status from task status:
- All tasks complete → unit complete
- Any task in_progress or some complete → unit in_progress
- Otherwise → unit pending

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The web store's HandleEvent initializes unit state from the graph in the
orch.started payload. Previously, the event was emitted before the
scheduler was built, so no graph was included. This caused the web
dashboard to never show units or progress during `choo run`.

Now we build the schedule first, then emit the event with the graph.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@RevCBH
RevCBH merged commit 11b3eed into main Jan 20, 2026
2 checks passed
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