4.3 KiB
4.3 KiB
Delegation intent: workspace panel action model
Classification
implementation-ready as the first implementation slice after design approval.
The design ticket is closed and approved. The first pass should implement a simple, testable UI/action model that the existing multi-Pod dashboard can consume before we tune layout details.
Intent
Add a thin workspace panel ViewModel/action model for Ticket-centric display and prioritization. This should be a render/action-dispatch contract, not a new Ticket backend, scheduler, or UI-owned state machine.
The panel should be local-file-first for display:
- read Ticket records from
.yoi/tickets/through the Rust Ticket backend/config APIs; - combine with existing Pod list data for related/background Pod status where practical;
- keep socket/client operations out of the model layer.
Worktree / branch
- worktree:
/home/hare/Projects/yoi/.worktree/workspace-panel-action-model - branch:
work/workspace-panel-action-model
This ticket may edit tracked .yoi/tickets records for implementation reports if needed. Do not read or edit .yoi/memory/.
Requirements
- Define plain UI/data model types for the workspace panel, for example:
WorkspacePanelViewModel;PanelRow/ row key;TicketPanelEntry;- action priority / next user action;
- optional timeline/dependency lane structs if useful for the first slice.
- Keep the model independent from terminal rendering and from live socket I/O.
- Add an adapter that builds Ticket/action rows from local Ticket backend state.
- Reuse existing
PodList/multi-Pod data as lower-priority background rows where practical, without replacing or duplicating Pod registry logic. - Prioritize rows roughly as:
- Intake/user reply/approval needed;
- Ticket ready for Go;
- review/close decision required;
- blocked/action-required;
- active implementation/review/background work;
- passive Pod/session information.
- Use simple heuristics from current Ticket records/thread roles; do not invent a full scheduler or hidden state machine.
- Preserve human authorization boundaries: a displayed Go/Review/Close action is an affordance, not automatic implementation authorization.
- Integrate enough with the current
--multidashboard to display action-prioritized Ticket rows above passive Pod rows, while keeping current Pod attach/direct-send behavior intact as much as possible. - Follow existing TUI visual conventions; do not spend this ticket on fine layout tuning.
Non-goals
- Final layout polish or detailed display tuning.
- Orchestrator restore/spawn lifecycle implementation.
- Composer target switching / New Intake send path.
- Intake -> Orchestrator handoff contract.
- Scheduler/lease/queue automation.
- Replacing the normal single-Pod TUI.
Current code map
crates/tui/src/multi_pod.rs- Current
--multidashboard state, reload, sections, rendering, direct send/open behavior. - Integrate only enough to show Ticket/action rows and preserve existing behavior.
- Current
crates/tui/src/pod_list.rs- Existing plain Pod list model. Reuse rather than duplicating live/stored Pod discovery semantics.
crates/tui/src/lib.rs/crates/tui/src/single_pod.rs- Current
LaunchMode::Multipath enterssingle_pod::run_multi(...).
- Current
crates/ticket/src/lib.rs,crates/ticket/src/config.rs- Local Ticket backend/config API for reading
.yoi/tickets/.
- Local Ticket backend/config API for reading
crates/yoi/src/ticket_cli.rs- Examples of backend listing/status formatting; do not shell out.
- Design artifact:
.yoi/tickets/closed/20260605-210704-workspace-orchestration-panel-design/artifacts/workspace-panel-ui-design.md
Validation
Run at least:
cargo test -p tui multior targeted TUI tests covering the new model/render integration;cargo test -p ticketif Ticket backend API usage changes;cargo test -p yoi ticketif CLI/config interactions change;cargo check --workspace --all-targets;cargo fmt --check;git diff --check;cargo build -p yoi;target/debug/yoi ticket doctor.
Run nix build .#yoi --no-link if feasible.
Completion report
Report:
- worktree path / branch;
- commit hash;
- model/types added;
- how Ticket rows are derived and prioritized;
- how Pod rows are preserved as secondary/background information;
- tests updated/added;
- validation results;
- known follow-up layout/display tuning items.