You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Evolve the wave TUI into a guided workflow orchestrator that leads the user through health analysis → pipeline proposals → selection → execution → monitoring. The current implementation provides a Tab-based multi-view dashboard (Pipelines, Personas, Contracts, Skills, Health, Issues, Suggest) but does not implement the guided flow described in #184 and #245.
wave (no subcommand) becomes the default entry point — the user types wave and gets the guided orchestrator. wave run <pipeline> continues to work unchanged for single-pipeline execution.
This builds on the current internal/tui/ implementation which provides solid infrastructure (7-view Tab system, pipeline launcher, live output, health checks, suggestions, compose sequences) but lacks the guided startup flow.
Problem
The current TUI opens to the Pipelines view (a list of available pipelines). Health checks are accessible via the Health tab but not shown on startup. Suggestions are available via the Suggest tab but require the user to navigate there. There is no guided flow that leads from health → proposals → execution. The user experience is "here are 7 equal tabs, explore them" instead of "here's what your codebase needs, select what to do."
This is the default view on startup — not a pipeline list. The health checks already run via HealthDataProvider. The change is making their progress the primary visual on launch.
If missing dependencies are auto-installable, prompt the user:
Enter on a proposal: launch it (single pipeline or sequence)
Space: toggle selection for multi-pipeline composition
m: modify the prefilled input before launching
s: skip a proposal
Tab: switch to fleet view (the existing Pipelines view for monitoring)
The DAG preview shows execution order and artifact flow between pipelines.
Phase 3: Execution + Fleet Monitoring
After launching pipelines, the view transitions to the fleet view (the existing Pipelines view with live output) — now it makes sense because there are active runs to monitor:
User presses Enter on gh-research — fullscreen live output
╦ ╦╔═╗╦ ╦╔═╗ Pipeline: gh-research
║║║╠═╣╚╗╔╝║╣ Elapsed: 2m 45s • 14k in / 4.8k out
╚╩╝╩ ╩ ╚╝ ╚═╝ Progress: 67% Step 4/6 (1 running, 3 ok)
✓ specify (navigator) [claude-4-opus via claude-code] (45.2s, 3.2k in / 820 out)
└─ deliverable: specification.md
✓ clarify (navigator) [claude-4-opus via claude-code] (30.1s, 2.1k in / 610 out)
└─ deliverable: clarifications.md
✓ plan (navigator) [claude-4-opus via claude-code] (1m 2.4s, 4.8k in / 1.9k out)
├─ deliverable: plan.md
└─ artifact: plan.json (written)
contract: plan-status ✓ valid
handover → tasks
⠸ tasks (craftsman) [claude-4-opus via claude-code] (1m 8s)
Write → .wave/output/tasks.md
○ checklist (navigator)
○ analyze (navigator)
Esc: back to fleet c: cancel q: quit
Interaction Flow: Complete User Journey
1. User runs wave
→ Health phase appears, spinners animate
2. Health checks complete in ~3s
→ Auto-transition to proposals with health summary
3. User sees 3 proposals, reads rationale
→ DAG preview shows gh-research → gh-implement sequence
4. User presses Space on proposal 1 (sequence) and proposal 2 (single)
→ Header updates "2 selected", execution plan shows both
5. User presses Enter to launch
→ Sequence starts: gh-research spawns as detached subprocess
→ gh-pr-review spawns concurrently (parallel with sequence)
→ View transitions to fleet
Updated all file paths from internal/tui/mission/ (deleted) to current internal/tui/ flat structure (e.g., app.go, health_list.go, suggest_list.go, pipeline_launcher.go, live_output.go)
Removed all references to internal/meta/ package (does not exist on main): meta.HealthChecker, meta.ProposalEngine, meta.SequenceExecutor, meta.Installer replaced with actual locations
Updated SequenceExecutor references to internal/pipeline/sequence.go (where it actually lives), including ExecutePlan() for parallel stage support
Removed reference to internal/display/render.go (does not exist); updated to actual display files (dashboard.go, progress.go, formatter.go)
Replaced non-existent TUI components (EventBus, BusEmitter, RunManager, RunContext, StatePoller, HealthCache) with actual components (pipeline_launcher.go, live_output.go, health_provider.go, suggest_provider.go)
Updated Problem section: TUI is no longer "empty run list" — it's a 7-view Tab-based dashboard (Pipelines, Personas, Contracts, Skills, Health, Issues, Suggest)
Updated status table to reflect partial implementations: health checks exist (ViewHealth), suggestions exist (ViewSuggest), compose sequences exist, live output works, issue integration added
Rewrote Implementation Plan to target current file structure and build on existing views
Trimmed redundant interaction mockups for conciseness while preserving key UX designs
Summary
Evolve the
waveTUI into a guided workflow orchestrator that leads the user through health analysis → pipeline proposals → selection → execution → monitoring. The current implementation provides a Tab-based multi-view dashboard (Pipelines, Personas, Contracts, Skills, Health, Issues, Suggest) but does not implement the guided flow described in #184 and #245.wave(no subcommand) becomes the default entry point — the user typeswaveand gets the guided orchestrator.wave run <pipeline>continues to work unchanged for single-pipeline execution.This builds on the current
internal/tui/implementation which provides solid infrastructure (7-view Tab system, pipeline launcher, live output, health checks, suggestions, compose sequences) but lacks the guided startup flow.Problem
The current TUI opens to the Pipelines view (a list of available pipelines). Health checks are accessible via the Health tab but not shown on startup. Suggestions are available via the Suggest tab but require the user to navigate there. There is no guided flow that leads from health → proposals → execution. The user experience is "here are 7 equal tabs, explore them" instead of "here's what your codebase needs, select what to do."
What the issues require vs what exists
compose_list.go) builds sequences with huh formcompose_detail.goshows artifact compatibility between pipeline stepsSequenceExecutor.ExecutePlan()supports parallel stages, not wired to TUISequenceExecutorininternal/pipeline/sequence.gohandles artifact handofflive_output.goshows structured event stream with step progressWhat infrastructure IS reusable
The infrastructure layer is solid and should be preserved:
internal/tui/pipeline_launcher.go) — detached subprocess execution, SQLite tracking, process managementinternal/tui/live_output.go) — structured event stream rendering with step state trackinginternal/tui/health_list.go,health_provider.go) — 6 async checks (git, adapter, database, config, tools, skills)internal/tui/suggest_list.go,suggest_provider.go) — pipeline recommendations with priority and rationaleinternal/tui/compose.go,compose_list.go,compose_detail.go) — interactive sequence builder with artifact compatibility validationinternal/tui/issue_list.go) — GitHub issues with running/finished pipeline childreninternal/tui/header.go,header_logo.go) — animated Wave ASCII logo, 3-row metadata gridinternal/tui/content.go) — split-pane list/detail layoutinternal/pipeline/sequence.go) — sequential and parallel pipeline execution with artifact handoffinternal/display/dashboard.go,progress.go,formatter.go) — terminal rendering utilitiesProposed Behavior
Phase 1: Health Check (visible on startup)
When
waveopens, the user immediately sees health checks running:This is the default view on startup — not a pipeline list. The health checks already run via
HealthDataProvider. The change is making their progress the primary visual on launch.If missing dependencies are auto-installable, prompt the user:
Phase 2: Proposals (automatic transition after health)
When health checks complete, the view transitions to the proposal screen:
Key interactions per #209:
The DAG preview shows execution order and artifact flow between pipelines.
Phase 3: Execution + Fleet Monitoring
After launching pipelines, the view transitions to the fleet view (the existing Pipelines view with live output) — now it makes sense because there are active runs to monitor:
live_output.go)Phase transitions as a state machine
Detailed Screen Mockups & Interaction Examples
Health Phase — Startup Sequence
Frame 1: Immediate open (all checks starting)
Frame 2: Checks completing (1-2 seconds in)
Frame 3: All complete — auto-transitions to proposals
Variant: Missing auto-installable dependency
Variant: Failed health check
Proposals View — Pipeline Selection
Default view: cursor on first proposal
User presses
Spaceon first, thenSpaceon second (multi-select)User presses
mto modify input for the focused proposalFleet View — Active Monitoring
Active runs with live step progress
Multiple runs — sequence grouping + archive divider
Attached View — Fullscreen Single Run
User presses Enter on gh-research — fullscreen live output
Interaction Flow: Complete User Journey
1. User runs
wave→ Health phase appears, spinners animate
2. Health checks complete in ~3s
→ Auto-transition to proposals with health summary
3. User sees 3 proposals, reads rationale
→ DAG preview shows gh-research → gh-implement sequence
4. User presses Space on proposal 1 (sequence) and proposal 2 (single)
→ Header updates "2 selected", execution plan shows both
5. User presses Enter to launch
→ Sequence starts: gh-research spawns as detached subprocess
→ gh-pr-review spawns concurrently (parallel with sequence)
→ View transitions to fleet
6. Fleet view shows 2 active runs + queued gh-implement
→ gh-research: step spinner, tool activity updating
→ gh-pr-review: step spinner
→ gh-implement: queued (waiting for gh-research)
7. User presses Enter on gh-research to attach
→ Fullscreen live output view with all step detail
8. User presses Esc to detach
→ Back to fleet view
9. gh-research completes, gh-implement auto-starts (sequence)
→ Fleet shows gh-research ✓, gh-implement ● (running)
→ Artifacts from gh-research injected into gh-implement
10. User presses Tab to check proposals
→ Proposals view, can launch more pipelines
11. All pipelines complete
→ Fleet view: all runs in archive section with ✓/✗ status
→ User presses q to quit
Implementation Plan
Step 1: Add guided startup flow
Modify
app.goto start in a health phase instead ofViewPipelines:activeView = ViewHealthand auto-run health checksHealthDataProviderViewSuggestFiles:
internal/tui/app.go,internal/tui/health_list.goStep 2: Enhance proposals view with selection
Enhance
ViewSuggestfrom a read-only list to an interactive selection view:Spacetoggles individual proposalsmkey to modify input before launchingskey to skip/dismiss proposalsFiles:
internal/tui/suggest_list.go,internal/tui/suggest_detail.goStep 3: DAG preview renderer
Text-based DAG showing pipeline execution order in the suggest detail pane:
For parallel groups:
Build on existing
compose_detail.gowhich already renders artifact compatibility.Files:
internal/tui/suggest_detail.go(new DAG rendering function)Step 4: Wire SequenceExecutor to TUI
Connect
SequenceExecutor(internal/pipeline/sequence.go) to the TUI launcher:pipeline_launcher.gosubprocess launchLaunchSequence(names []string, input string)to pipeline launcher that invokeswave compose runor equivalentSequenceExecutor.ExecutePlan()withStage{Parallel: true}— wire to TUI launchFor sequences, each pipeline appears as a separate tracked run, linked by a sequence grouping.
Files:
internal/tui/pipeline_launcher.go,internal/tui/compose.goStep 5: Fleet view improvements
Enhance the Pipelines view for monitoring:
Files:
internal/tui/pipeline_list.go,internal/tui/pipeline_detail.goStep 6: View transitions and keybindings
Update the state machine for guided flow:
qto quit,Tabto skip)j/knavigate,Enterlaunch,Spacetoggle,mmodify,sskip,Tabfleet,qquitj/knavigate,Enterattach,nnew,p/Tabproposals,ccancel,/filter,qquitEscdetach,ccancel,qquitFiles:
internal/tui/app.go,internal/tui/views.goAcceptance Criteria
waveopens to visible health check progress (not a pipeline list)SequenceExecutorwith artifact handoff between pipelinesgo test -race ./...passeswave run <pipeline>unchanged (no regression on single-pipeline mode)Dependencies
All infrastructure exists in the codebase. No new packages needed:
internal/tui/health_list.go+health_provider.go— 6 async health checks (git, adapter, database, config, tools, skills)internal/tui/suggest_list.go+suggest_provider.go— pipeline suggestion/proposal interfaceinternal/tui/compose.go+compose_list.go+compose_detail.go— interactive sequence builder with artifact compatibilityinternal/tui/pipeline_launcher.go— detached subprocess pipeline execution with SQLite trackinginternal/tui/live_output.go— structured event stream rendering for running pipelinesinternal/pipeline/sequence.go—SequenceExecutorwith sequential and parallel (ExecutePlan) execution + artifact handoffinternal/tui/content.go— split-pane layout, list/detail renderinginternal/display/— terminal rendering (dashboard, progress, formatter)Context
wave run wave) — codebase-aware pipeline portal with health analysis and proposal engine #184wave run wave) with health checks, parallel execution, and guided workflow proposals #245 (implementation plan comment), feat(tui): extend interactive UI for multi-pipeline sequence selection and DAG preview #209 (TUI selection), feat(pipeline): cross-pipeline parallelism — orchestrate multiple independent pipeline runs concurrently #210 (parallelism)Changes since original
internal/tui/mission/(deleted) to currentinternal/tui/flat structure (e.g.,app.go,health_list.go,suggest_list.go,pipeline_launcher.go,live_output.go)internal/meta/package (does not exist on main):meta.HealthChecker,meta.ProposalEngine,meta.SequenceExecutor,meta.Installerreplaced with actual locationsSequenceExecutorreferences tointernal/pipeline/sequence.go(where it actually lives), includingExecutePlan()for parallel stage supportinternal/display/render.go(does not exist); updated to actual display files (dashboard.go,progress.go,formatter.go)pipeline_launcher.go,live_output.go,health_provider.go,suggest_provider.go)