ticket: plan workspace orchestration panel
This commit is contained in:
parent
ec525a3d70
commit
a618a52d03
|
|
@ -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.
|
||||||
|
|
@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
|
||||||
|
|
||||||
|
## Created
|
||||||
|
|
||||||
|
Created by LocalTicketBackend create.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
|
||||||
|
|
||||||
|
## Created
|
||||||
|
|
||||||
|
Created by LocalTicketBackend create.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
|
||||||
|
|
||||||
|
## Created
|
||||||
|
|
||||||
|
Created by LocalTicketBackend create.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
|
||||||
|
|
||||||
|
## Created
|
||||||
|
|
||||||
|
Created by LocalTicketBackend create.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!-- event: create author: yoi ticket at: 2026-06-05T21:07:04Z -->
|
||||||
|
|
||||||
|
## Created
|
||||||
|
|
||||||
|
Created by LocalTicketBackend create.
|
||||||
|
|
||||||
|
---
|
||||||
Loading…
Reference in New Issue
Block a user