diff --git a/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/artifacts/delegation-intent.md b/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/artifacts/delegation-intent.md new file mode 100644 index 00000000..1781d7be --- /dev/null +++ b/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/artifacts/delegation-intent.md @@ -0,0 +1,100 @@ +# Delegation intent: workspace panel composer targets + +## Classification + +`implementation-ready` after action model and Orchestrator lifecycle slices. + +The panel now has `yoi panel`, Ticket-config-gated Ticket UI, Pod-centric no-Ticket behavior, and Ticket-enabled Orchestrator lifecycle. This ticket adds the first composer target split so users can send either to the Companion/selected Pod path or directly to a new Intake role Pod. + +## Intent + +Add workspace panel composer target selection with two first-class targets: + +- `Companion` / current Pod-centric send path; +- `Ticket Intake` / launch a new Intake role Pod with the composer body as its first run input. + +The Intake path must not append the message to Companion/current Pod history. It should go only to the launched Intake Pod's initial `Method::Run` input/history through the existing Ticket role launcher path. + +## Worktree / branch + +- worktree: `/home/hare/Projects/yoi/.worktree/workspace-panel-composer-targets` +- branch: `work/workspace-panel-composer-targets` + +This ticket may read tracked `.yoi/tickets` records/design artifacts. Do not read or edit `.yoi/memory/`. + +## Requirements + +- Add a workspace panel composer target model with at least: + - `Companion` / existing selected-Pod send behavior; + - `Ticket Intake`. +- The UI must clearly show the active composer target using existing TUI visual conventions. +- Add a simple keybinding or command path to switch targets without losing typed text where practical. +- `Companion` target should preserve existing panel/Pod-centric send behavior. + - In no-Ticket workspace, this should be the only available target and should behave like the current Pod dashboard send. +- `Ticket Intake` target should be available only when Ticket config is defined/usable. +- Empty Intake messages must be rejected with a bounded diagnostic/actionbar-style message. +- Intake target must call the existing Ticket role launcher (`TicketRole::Intake`) rather than constructing spawn/profile/workflow prompt content inside TUI. +- The composer body must become dynamic user instruction/run input for the Intake launch. +- The Intake body must not be sent to Companion/current Pod history or to any selected Pod. +- After a successful Intake launch, clear the composer and surface a bounded success notice including the launched Pod name. +- On launch failure, keep the composer text and surface a bounded diagnostic. +- Do not implement Intake -> Orchestrator handoff payload in this ticket; that is the next child ticket. +- Do not reintroduce `--multi`. +- Keep layout changes minimal; final display tuning is later. + +## Non-goals + +- Intake -> Orchestrator handoff contract. +- Generic arbitrary target routing. +- Scheduler/queue. +- Ticket action queue display. +- Final layout/display tuning. +- Companion Pod/session creation beyond preserving existing panel send behavior. + +## Current code map + +- `crates/tui/src/multi_pod.rs` + - Current panel substrate, composer handling, selected Pod send/open behavior, notices/diagnostics. +- `crates/tui/src/workspace_panel.rs` + - ViewModel/header/diagnostics. Extend with composer target view state only if useful; keep it thin. +- `crates/client/src/ticket_role.rs` + - `TicketRoleLaunchContext`, `TicketRole::Intake`, and `launch_ticket_role_pod(...)`. Use this path for Intake launch. +- `crates/tui/src/command.rs` + - Existing `:ticket intake ...` route for reference only; do not duplicate prompt/profile construction in TUI. +- `crates/tui/src/app.rs` + - Normal composer/history semantics for reference; ensure Intake target does not mutate the wrong history. + +## Validation + +Run at least: + +- targeted TUI tests for composer target switching and Enter behavior; +- a test that Intake target rejects empty input; +- a test that Intake target calls/constructs a Ticket role launch request without sending to selected Pod path; +- a test that no-Ticket workspace exposes only Companion/Pod-centric send; +- `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; +- composer target model/keybinding; +- no-Ticket target behavior; +- Intake launch path and how the typed body is routed; +- proof that Intake body does not go to Companion/current Pod history; +- diagnostics/success notices; +- tests updated/added; +- validation results; +- known follow-up layout/display tuning items. diff --git a/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/item.md b/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/item.md index a241443c..4278b4e9 100644 --- a/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/item.md +++ b/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/item.md @@ -7,7 +7,7 @@ kind: task priority: P1 labels: [tui, composer, intake, panel] created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-06T04:24:53Z assignee: null legacy_ticket: null --- diff --git a/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/thread.md b/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/thread.md index 37beabef..179c4d4d 100644 --- a/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/thread.md +++ b/.yoi/tickets/open/20260605-210704-workspace-panel-composer-targets/thread.md @@ -4,4 +4,19 @@ Created by LocalTicketBackend create. +--- + + + +## Plan + +Preflight result: `implementation-ready` after action model and Orchestrator lifecycle. + +This ticket should add the first composer target split for `yoi panel`: preserve the Companion/selected-Pod send path, and add a Ticket Intake target that launches an Intake role Pod with the composer body as the initial user instruction. The Intake body must not be appended to Companion/current Pod history or sent to the selected Pod. + +Ticket Intake target is available only when Ticket config is defined/usable. No-Ticket workspaces remain Pod-centric and expose only the existing send behavior. + +Detailed delegation intent is recorded in `artifacts/delegation-intent.md`. + + ---