diff --git a/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/delegation-intent.md b/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/delegation-intent.md new file mode 100644 index 00000000..be0a8893 --- /dev/null +++ b/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/delegation-intent.md @@ -0,0 +1,96 @@ +# Delegation intent: workspace panel orchestrator lifecycle + +## Classification + +`implementation-ready` after the first action-model slice. + +The action model slice added `yoi panel`, removed `--multi` as a user-facing launch route, and established no-Ticket behavior: if workspace Ticket config is absent, the panel suppresses Ticket UI and behaves as a Pod-centric dashboard. This lifecycle ticket should respect that boundary. + +## Intent + +When `yoi panel` opens in a Ticket-enabled workspace, ensure a workspace Orchestrator Pod exists or surface a bounded diagnostic explaining why it cannot be restored/spawned. The Orchestrator remains a background coordinator; closing the panel must not stop it, and Companion remains the foreground management target. + +In a no-Ticket workspace, do not spawn/restore an Orchestrator and do not show Orchestrator/Ticket workflow affordances. The panel should remain equivalent to the old Pod-centric `--multi` behavior. + +## Worktree / branch + +- worktree: `/home/hare/Projects/yoi/.worktree/workspace-panel-orchestrator-lifecycle` +- branch: `work/workspace-panel-orchestrator-lifecycle` + +This ticket may read tracked `.yoi/tickets` records/design artifacts. Do not read or edit `.yoi/memory/`. + +## Requirements + +- Derive the workspace Orchestrator Pod name from the workspace directory, e.g. `-orchestrator`. + - Use a safe/stable Pod-name normalization compatible with existing Pod name constraints. + - Add tests for common workspace names and edge cases. +- On `yoi panel` open in a Ticket-enabled workspace: + - if Orchestrator is already live, observe/report it as live; + - if restorable, restore it through existing Pod restore semantics; + - if missing and permitted, spawn it; + - if restore/spawn is not possible, surface a bounded panel diagnostic. +- Gate Orchestrator lifecycle on explicit Ticket config availability/usability. + - If `.yoi/ticket.config.toml` is absent, skip Orchestrator lifecycle and show Pod-centric panel only. + - If config exists but is malformed/unusable, surface a diagnostic rather than silently behaving as no-Ticket if practical in this slice. +- Use existing Ticket role/profile configuration and role launcher where practical; do not hand-build role prompts/profiles inside TUI. +- Preserve current Pod registry/restore/spawn semantics; do not duplicate registry logic. +- Panel close must not stop the Orchestrator. +- Do not make Orchestrator the foreground composer target by default. +- Keep layout changes minimal; final display tuning is later. + +## Non-goals + +- Composer target switching / New Intake send. +- Intake -> Orchestrator handoff payload. +- Scheduler/lease/queue. +- Automatic coder/reviewer spawning. +- Final layout/display tuning. +- Reintroducing `--multi`. + +## Current code map + +- `crates/tui/src/lib.rs` + - `LaunchMode::Panel` path. +- `crates/tui/src/single_pod.rs` + - `run_panel(...)` loop around the panel/dashboard and nested Pod open behavior. +- `crates/tui/src/multi_pod.rs` + - current panel substrate, snapshot loading, rows/rendering/actions. +- `crates/tui/src/workspace_panel.rs` + - thin panel ViewModel / Ticket row model. Extend header/diagnostics as needed without making it a runtime authority. +- `crates/client/src/ticket_role.rs` + - Ticket role launcher path; prefer this for spawning role Pods if it fits panel lifecycle. +- `crates/ticket/src/config.rs` + - Ticket config detection/loading; use this to gate Ticket-enabled vs no-Ticket mode. +- Existing Pod restore/list/spawn client APIs used by picker/multi/role launcher. + +## Validation + +Run at least: + +- targeted TUI tests for name derivation and lifecycle decision logic; +- `cargo test -p tui workspace_panel`; +- `cargo test -p tui multi` or updated panel test names; +- `cargo test -p client ticket_role` if role launcher code changes; +- `cargo test -p yoi panel`; +- `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; +- final Orchestrator Pod naming rule; +- lifecycle decision behavior for live/restorable/missing/unavailable; +- no-Ticket workspace behavior; +- role launcher/profile usage; +- diagnostics surfaced; +- tests updated/added; +- validation results; +- known follow-up layout/display tuning items. diff --git a/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md b/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md index be0e1225..0f45cb4a 100644 --- a/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md +++ b/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md @@ -7,7 +7,7 @@ kind: task priority: P1 labels: [tui, pod, orchestrator, panel] created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-05T23:32:34Z assignee: null legacy_ticket: null --- diff --git a/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md b/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md index 37beabef..86a1465b 100644 --- a/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md +++ b/.yoi/tickets/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md @@ -4,4 +4,19 @@ Created by LocalTicketBackend create. +--- + + + +## Plan + +Preflight result: `implementation-ready` after the first action-model slice. + +This ticket should add the workspace Orchestrator lifecycle to `yoi panel` only for Ticket-enabled workspaces. If `.yoi/ticket.config.toml` is absent, the panel should skip Orchestrator lifecycle and remain Pod-centric, matching the old `--multi` behavior. + +Implementation should use existing Pod restore/spawn semantics and the Ticket role launcher/profile configuration where practical, surface bounded diagnostics, and leave final layout tuning for later. + +Detailed delegation intent is recorded in `artifacts/delegation-intent.md`. + + ---