ticket: plan workspace orchestration panel

This commit is contained in:
Keisuke Hirata 2026-06-06 06:09:27 +09:00
parent ec525a3d70
commit a618a52d03
No known key found for this signature in database
18 changed files with 380 additions and 0 deletions

View File

@ -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. `<dir-name>-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.

View File

@ -0,0 +1,34 @@
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:03Z -->
## Created
Created by LocalTicketBackend create.
---
<!-- event: plan author: hare at: 2026-06-05T21:09:19Z -->
## 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 `<dir-name>-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.
---

View File

@ -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.

View File

@ -0,0 +1,7 @@
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
## Created
Created by LocalTicketBackend create.
---

View File

@ -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 (`<dir-name>-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.

View File

@ -0,0 +1,7 @@
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
## Created
Created by LocalTicketBackend create.
---

View File

@ -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.

View File

@ -0,0 +1,7 @@
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
## Created
Created by LocalTicketBackend create.
---

View File

@ -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.

View File

@ -0,0 +1,7 @@
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
## Created
Created by LocalTicketBackend create.
---

View File

@ -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. `<dir-name>-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.

View File

@ -0,0 +1,7 @@
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
## Created
Created by LocalTicketBackend create.
---