idd-workspace — The UI is where the owner directs the work, from an intent to its next move
One screen of the UI, /ui/idd, starts from an intent and shows its milestones, their issues with status and blockers, the waves the dependencies allow and the dependency graph, each entity a link to its inspector, and every ready issue one click from the move that starts it; delivery and the live channel follow as the capabilities beneath them land.
DONE 6 of 6 issues done
- ready
- 0
- blocked
- 0
- active
- 0
- verify
- 0
- done
- 6
- cancelled
- 0
Problem
On 2026-10-16 the owner asked to stop orchestrating development by pasting prompts into terminals and to direct it from the UI instead: intent, milestones, issues, waves, execution, evidence and delivery, navigable and actionable. Every one of those answers exists as a capability, and the UI draws most of them on separate screens — the Roadmap, Issues, the PR Drain — while the waves have no screen on master and the moves that start an issue exist only on the Cockpit's issue page.
Outcome
One screen of the UI, /ui/idd, starts from an intent and shows its milestones, their issues with status and blockers, the waves the dependencies allow and the dependency graph, each entity a link to its inspector, and every ready issue one click from the move that starts it; delivery and the live channel follow as the capabilities beneath them land.
Current state
No /ui/idd. Intents, milestones and issues are read on the Roadmap and Issues screens; plan.waves is read by no /ui screen; plan.transition is offered on /cockpit/plan/issues/<id> only.
Desired state
/ui/idd composes intents.list, plan.roadmap, plan.issues and plan.waves for a chosen intent, with the selection rule printed (I2780). Each further slice — the moves offered in the workspace itself, the inferred delivery once I2740 lands, the live overlay over /events — is recorded with the criterion it serves and the test that proves it when it starts.
Scope
- apps/majordomus-cli/src/ui
- share/ui
- docs/UI.md
- .ai/repo/project
- test/cases
Out of scope
- A second plan engine, wave allocator or status vocabulary
- Mutation from the published site
- Provider-assisted plan authoring
Acceptance criteria
- /ui/idd renders a chosen intent's milestones, issues, waves and graph from the plan's capabilities alone, with the selection rule shown
- An issue added to the plan appears in the workspace with no other edit
- Every ready issue leads to the move that starts it
Validation
- majordomus plan validate
- majordomus intent validate
- cargo test --lib ui::
Risks
- #1184 (/ui/waves) and #1302 (roadmap reads delivery) touch ui/mod.rs's screen list; each lands as a textual neighbour and needs one merge.
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I2780 | DONE | 0 | — | The UI has an intent workspace: an intent, its milestones, issues, waves and graph on one screen |
| I2781 | DONE | 1 | I2780 | An issue is started, verified and finished from the intent workspace |
| I2783 | DONE | 2 | I2781 | The intent workspace reads itself again when a move ends on its server |
| I2789 | DONE | 3 | I2783 | The intent workspace shows why an intent stands where it stands and every move made on its issues |
| I2812 | DONE | 4 | I2789 | The IDD loop is accepted end to end in a real browser on one commit |
| I2900 | DONE | 5 | I2812 | Every issue id on the intent workspace is a link, the shared-scope pairs are one folded line, and no missing library is asked for |
The graph
flowchart LR
I2780["I2780<br/>The UI has an intent workspace: an intent, its milestones, issues, waves and graph on one screen"]:::done
I2781["I2781<br/>An issue is started, verified and finished from the intent workspace"]:::done
I2783["I2783<br/>The intent workspace reads itself again when a move ends on its server"]:::done
I2789["I2789<br/>The intent workspace shows why an intent stands where it stands and every move made on its issues"]:::done
I2812["I2812<br/>The IDD loop is accepted end to end in a real browser on one commit"]:::done
I2900["I2900<br/>Every issue id on the intent workspace is a link, the shared-scope pairs are one folded line, and no missing library is asked for"]:::done
I2780 --> I2781
I2781 --> I2783
I2783 --> I2789
I2789 --> I2812
I2812 --> I2900
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (6)
- I2780 The UI has an intent workspace: an intent, its milestones, issues, waves and graph on one screen
- I2781 An issue is started, verified and finished from the intent workspace
- I2783 The intent workspace reads itself again when a move ends on its server
- I2789 The intent workspace shows why an intent stands where it stands and every move made on its issues
- I2812 The IDD loop is accepted end to end in a real browser on one commit
- I2900 Every issue id on the intent workspace is a link, the shared-scope pairs are one folded line, and no missing library is asked for
Canonical record: .ai/repo/project/milestones/idd-workspace.yaml. Read it back with majordomus plan show idd-workspace.