diff --git a/work-items/open/20260605-210703-workspace-orchestration-panel/artifacts/.gitkeep b/work-items/open/20260605-210703-workspace-orchestration-panel/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/work-items/open/20260605-210703-workspace-orchestration-panel/item.md b/work-items/open/20260605-210703-workspace-orchestration-panel/item.md new file mode 100644 index 00000000..256c56ba --- /dev/null +++ b/work-items/open/20260605-210703-workspace-orchestration-panel/item.md @@ -0,0 +1,71 @@ +--- +id: 20260605-210703-workspace-orchestration-panel +slug: workspace-orchestration-panel +title: Workspace orchestration panel +status: open +kind: task +priority: P1 +labels: [tui, ticket, orchestration, panel] +created_at: 2026-06-05T21:07:03Z +updated_at: 2026-06-05T21:09:19Z +assignee: null +legacy_ticket: null +--- + +## Background + +The current TUI Ticket role commands are a command-driven MVP. They prove that TUI can launch fixed Ticket-role Pods through the client launcher, but they do not provide the desired workspace orchestration experience. + +The desired panel is a workspace-scoped orchestration UI, closer to an improved `--multi` surface, but organized around Ticket/Intake/Orchestrator action state rather than raw Pod idle/working state. + +## Goal + +Build a workspace orchestration panel where the user can: + +- chat with a Companion management interface; +- send new requests directly to Ticket Intake without putting them into the Companion/current Pod session; +- have a workspace Orchestrator restored/spawned in the background when the panel opens; +- see user-action-required Intake/Ticket states before generic Pod status; +- give a simple Go signal once an Intake-prepared Ticket is fixed and understood by the human. + +## Target model + +- Panel is workspace-scoped. +- Companion is the foreground management chat target. +- Orchestrator is a background coordinator Pod named from the workspace directory, e.g. `-orchestrator`. +- Intake is spawned per user request from the composer target. +- Intake receives Orchestrator handoff/notification target at launch. +- Panel close does not stop Orchestrator. +- The primary list is an action model, not a Pod status list. + +## Child tickets + +1. `workspace-orchestration-panel-design` + - Produce the detailed architecture/design artifact for the panel. + +2. `workspace-panel-orchestrator-lifecycle` + - Restore/spawn workspace Orchestrator when the panel opens; leave it running on panel close. + +3. `workspace-panel-composer-targets` + - Add composer targets for Companion vs Ticket Intake; Intake sends the composer body directly to a new Intake Pod. + +4. `ticket-intake-orchestrator-handoff` + - Define and implement Intake -> Orchestrator handoff/notification contract. + +5. `workspace-panel-action-model` + - Display user-action-required Intake/Ticket states ahead of raw Pod status and support Go/Defer/Edit-style decisions. + +## Non-goals + +- Generic scheduler/lease/queue automation. +- Arbitrary role registry. +- Replacing the single-Pod TUI. +- Stopping background Orchestrator on panel close. +- Bypassing Ticket Intake / Routing / Preflight / Review gates. + +## Acceptance criteria + +- Child tickets are created and sequenced. +- The design ticket fixes the panel responsibility boundary before implementation tickets proceed. +- Implementation child tickets use existing Ticket tools/config/launcher where possible. +- The command-driven `:ticket ...` path remains available as a low-level fallback, but the panel design does not depend on users typing commands for the main flow. diff --git a/work-items/open/20260605-210703-workspace-orchestration-panel/thread.md b/work-items/open/20260605-210703-workspace-orchestration-panel/thread.md new file mode 100644 index 00000000..ce252d9d --- /dev/null +++ b/work-items/open/20260605-210703-workspace-orchestration-panel/thread.md @@ -0,0 +1,34 @@ + + +## Created + +Created by LocalTicketBackend create. + +--- + + + +## Plan + +Plan: design the workspace orchestration panel before implementation. + +The panel is not a `:ticket` command extension. It is a workspace-scoped orchestration surface with: + +- Companion foreground management chat; +- Ticket Intake composer target that sends user input directly to Intake, not Companion history; +- background workspace Orchestrator restored/spawned as `-orchestrator`; +- Intake -> Orchestrator handoff; +- an action model prioritizing human-required Ticket/Intake decisions over raw Pod idle state. + +Implementation is split into child tickets: + +1. `workspace-orchestration-panel-design` +2. `workspace-panel-orchestrator-lifecycle` +3. `workspace-panel-composer-targets` +4. `ticket-intake-orchestrator-handoff` +5. `workspace-panel-action-model` + +Existing `:ticket ...` commands remain as low-level fallback, not the main UX. + + +--- diff --git a/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/.gitkeep b/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md b/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md new file mode 100644 index 00000000..6eb1807e --- /dev/null +++ b/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md @@ -0,0 +1,46 @@ +--- +id: 20260605-210704-ticket-intake-orchestrator-handoff +slug: ticket-intake-orchestrator-handoff +title: Ticket intake to orchestrator handoff +status: open +kind: task +priority: P1 +labels: [ticket, intake, orchestrator, handoff] +created_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-05T21:07:04Z +assignee: null +legacy_ticket: null +--- + +## Background + +Intake can create or refine Tickets, but the next Orchestrator routing step is currently manual. The workspace panel needs a safe handoff from Intake to the workspace Orchestrator. + +## Requirements + +- Define a machine-readable handoff contract from Intake to Orchestrator. +- Handoff should include: + - created/updated Ticket id or slug; + - readiness; + - needs_preflight; + - risk flags when available; + - whether user Go/approval is required; + - summary of the Intake result. +- Intake launch should receive the Orchestrator notification target in its initial input or durable metadata, not hidden context. +- Orchestrator should be notified through an existing durable/observable channel where possible. +- Handoff should not automatically start implementation. +- The panel should be able to show a Ticket-ready-for-Go or routing-needed state after Intake. + +## Non-goals + +- Full scheduler/queue/lease. +- Automatic coder/reviewer spawn. +- Generic notification bus redesign. +- External tracker integration. + +## Acceptance criteria + +- Intake can hand off a newly created/refined Ticket to the workspace Orchestrator without the user manually retyping the Ticket id. +- Handoff is visible/auditable in history or Ticket records. +- Orchestrator routing is triggered or queued only within the agreed Go/authorization boundary. +- Tests or fixtures cover handoff payload parsing/formatting where practical. diff --git a/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md b/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md new file mode 100644 index 00000000..37beabef --- /dev/null +++ b/work-items/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md @@ -0,0 +1,7 @@ + + +## Created + +Created by LocalTicketBackend create. + +--- diff --git a/work-items/open/20260605-210704-workspace-orchestration-panel-design/artifacts/.gitkeep b/work-items/open/20260605-210704-workspace-orchestration-panel-design/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/work-items/open/20260605-210704-workspace-orchestration-panel-design/item.md b/work-items/open/20260605-210704-workspace-orchestration-panel-design/item.md new file mode 100644 index 00000000..2f0534a1 --- /dev/null +++ b/work-items/open/20260605-210704-workspace-orchestration-panel-design/item.md @@ -0,0 +1,56 @@ +--- +id: 20260605-210704-workspace-orchestration-panel-design +slug: workspace-orchestration-panel-design +title: Workspace orchestration panel design +status: open +kind: task +priority: P1 +labels: [tui, design, orchestration, panel] +created_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-05T21:07:04Z +assignee: null +legacy_ticket: null +--- + +## Background + +The next TUI should not be another small `:` command extension. The desired feature is a workspace-scoped orchestration panel with explicit Companion/Intake composer targets, background Orchestrator lifecycle, Intake handoff, and a user-action-oriented model. + +## Requirements + +Produce a design artifact that fixes: + +- panel entrypoint and relation to current `--multi`; +- Companion lifecycle and identity; +- workspace Orchestrator lifecycle and naming rule (`-orchestrator`); +- composer target model: + - Companion; + - Ticket Intake; +- how Intake launch avoids writing the user request into the Companion/current Pod history; +- how Intake receives Orchestrator notification/handoff target; +- action model priorities: + - user response required; + - Intake draft ready; + - Ticket ready for Go; + - blocked/action-required; + - review/close/preflight decisions; + - active background work; + - informational Pod status; +- Go semantics for a fixed Ticket; +- relationship to existing `:ticket ...` command fallback; +- failure/diagnostic behavior; +- implementation sequence. + +## Non-goals + +- Code implementation. +- Generic scheduler/lease/queue. +- Automatic implementation without Go/authorization. +- Replacing Ticket workflows. + +## Acceptance criteria + +- A design artifact exists under this Ticket's `artifacts/` directory. +- The artifact defines the state/action model and responsibility boundaries clearly enough to implement child tickets. +- The artifact explicitly preserves history/context rules: dynamic messages are committed to the destination Pod history, not injected into hidden context. +- Reviewer or parent approves the design before implementation child tickets proceed. diff --git a/work-items/open/20260605-210704-workspace-orchestration-panel-design/thread.md b/work-items/open/20260605-210704-workspace-orchestration-panel-design/thread.md new file mode 100644 index 00000000..37beabef --- /dev/null +++ b/work-items/open/20260605-210704-workspace-orchestration-panel-design/thread.md @@ -0,0 +1,7 @@ + + +## Created + +Created by LocalTicketBackend create. + +--- diff --git a/work-items/open/20260605-210704-workspace-panel-action-model/artifacts/.gitkeep b/work-items/open/20260605-210704-workspace-panel-action-model/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/work-items/open/20260605-210704-workspace-panel-action-model/item.md b/work-items/open/20260605-210704-workspace-panel-action-model/item.md new file mode 100644 index 00000000..f82b2849 --- /dev/null +++ b/work-items/open/20260605-210704-workspace-panel-action-model/item.md @@ -0,0 +1,49 @@ +--- +id: 20260605-210704-workspace-panel-action-model +slug: workspace-panel-action-model +title: Workspace panel action model +status: open +kind: task +priority: P1 +labels: [tui, ticket, orchestration, panel] +created_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-05T21:07:04Z +assignee: null +legacy_ticket: null +--- + +## Background + +The workspace panel should not be a plain Pod idle/working list. It should prioritize the items where the user needs to decide, respond, approve, or inspect evidence. + +## Requirements + +- Define and implement a workspace action model that can rank/display: + - Intake needs user reply; + - Intake draft ready; + - Ticket ready for Go; + - requirements sync needed; + - preflight needed; + - spike needed/running; + - implementation running; + - review needed; + - blocked/action-required; + - close-ready; + - background informational Pod status. +- Prefer Ticket/routing/intake state over raw Pod idle state. +- Provide Go/Defer/Edit-style actions where supported by preceding tickets. +- Preserve explicit human authorization boundaries. +- Do not treat Pod completion notifications as authority; verify Ticket/Pod/output state. + +## Non-goals + +- Scheduler/lease/queue automation. +- Full implementation of all role actions if earlier handoff/lifecycle tickets are not landed. +- Generic issue tracker UI. + +## Acceptance criteria + +- Panel displays user-action-required items above passive background Pods. +- Ticket-ready Go action is easy to trigger but does not bypass Orchestrator routing/preflight gates. +- Action model is testable as plain data independent of terminal rendering. +- Existing multi-Pod status data can still be shown as lower-priority background information. diff --git a/work-items/open/20260605-210704-workspace-panel-action-model/thread.md b/work-items/open/20260605-210704-workspace-panel-action-model/thread.md new file mode 100644 index 00000000..37beabef --- /dev/null +++ b/work-items/open/20260605-210704-workspace-panel-action-model/thread.md @@ -0,0 +1,7 @@ + + +## Created + +Created by LocalTicketBackend create. + +--- diff --git a/work-items/open/20260605-210704-workspace-panel-composer-targets/artifacts/.gitkeep b/work-items/open/20260605-210704-workspace-panel-composer-targets/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/work-items/open/20260605-210704-workspace-panel-composer-targets/item.md b/work-items/open/20260605-210704-workspace-panel-composer-targets/item.md new file mode 100644 index 00000000..a241443c --- /dev/null +++ b/work-items/open/20260605-210704-workspace-panel-composer-targets/item.md @@ -0,0 +1,46 @@ +--- +id: 20260605-210704-workspace-panel-composer-targets +slug: workspace-panel-composer-targets +title: Workspace panel composer targets +status: open +kind: task +priority: P1 +labels: [tui, composer, intake, panel] +created_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-05T21:07:04Z +assignee: null +legacy_ticket: null +--- + +## Background + +The workspace panel composer must let users choose whether a message goes to the Companion management chat or directly to Ticket Intake. + +The key UX requirement is that a request sent to Intake must not be appended to the Companion/current Pod session history. + +## Requirements + +- Add a composer target model for the workspace panel: + - Companion; + - Ticket Intake. +- Companion target sends normal messages to the Companion Pod/session. +- Intake target launches a new Intake role Pod and sends the composer body as its first `Method::Run` input. +- Intake target must not send the body to Companion/current Pod history. +- Empty Intake messages are rejected. +- The UI clearly shows the active composer target. +- User can switch/cancel target without losing typed text where practical. +- Use Ticket role launcher rather than constructing spawn/profile/workflow prompt content inside UI. + +## Non-goals + +- Generic arbitrary target routing. +- Scheduler/queue. +- Intake -> Orchestrator handoff implementation. +- Action queue display. + +## Acceptance criteria + +- User can choose Companion or Intake before pressing Enter. +- Intake path creates a new Intake role launch with the typed body as dynamic run input. +- Existing Companion history does not receive the Intake body. +- Tests cover target switching and Enter behavior for both targets where practical. diff --git a/work-items/open/20260605-210704-workspace-panel-composer-targets/thread.md b/work-items/open/20260605-210704-workspace-panel-composer-targets/thread.md new file mode 100644 index 00000000..37beabef --- /dev/null +++ b/work-items/open/20260605-210704-workspace-panel-composer-targets/thread.md @@ -0,0 +1,7 @@ + + +## Created + +Created by LocalTicketBackend create. + +--- diff --git a/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/.gitkeep b/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md b/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md new file mode 100644 index 00000000..be0e1225 --- /dev/null +++ b/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/item.md @@ -0,0 +1,43 @@ +--- +id: 20260605-210704-workspace-panel-orchestrator-lifecycle +slug: workspace-panel-orchestrator-lifecycle +title: Workspace panel orchestrator lifecycle +status: open +kind: task +priority: P1 +labels: [tui, pod, orchestrator, panel] +created_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-05T21:07:04Z +assignee: null +legacy_ticket: null +--- + +## Background + +The workspace orchestration panel needs a background Orchestrator Pod that is restored or spawned when the panel opens and remains alive after the panel closes. + +## Requirements + +- Derive Orchestrator Pod name from workspace directory, e.g. `-orchestrator`. +- On panel open: + - restore if restorable; + - attach/observe if already live; + - spawn if missing and permitted. +- Use `.yoi/ticket.config.toml` role profile for `orchestrator`. +- Use the Ticket role launcher where practical. +- Panel close must not stop the Orchestrator. +- Surface lifecycle diagnostics in the panel. +- Do not make Orchestrator the foreground composer target by default; Companion remains foreground management chat. + +## Non-goals + +- Full panel UI layout. +- Intake handoff contract. +- Scheduler/lease/queue. +- Automatic coder/reviewer spawning. + +## Acceptance criteria + +- Workspace panel startup can ensure an Orchestrator Pod exists or report why it cannot. +- Orchestrator lifecycle uses existing Pod restore/spawn semantics and does not duplicate registry logic. +- Tests cover name derivation and restore/spawn decision logic where practical. diff --git a/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md b/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md new file mode 100644 index 00000000..37beabef --- /dev/null +++ b/work-items/open/20260605-210704-workspace-panel-orchestrator-lifecycle/thread.md @@ -0,0 +1,7 @@ + + +## Created + +Created by LocalTicketBackend create. + +---