5.3 KiB
| id | slug | title | status | kind | priority | labels | created_at | updated_at | assignee | legacy_ticket | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 20260605-190330-ticket-role-pod-launcher | ticket-role-pod-launcher | Ticket role Pod launcher | open | task | P1 |
|
2026-06-05T19:03:30Z | 2026-06-05T19:06:16Z | null | null |
Background
Ticket orchestration now has:
- typed Ticket backend and tools;
- Ticket Intake and Orchestrator Routing workflows;
- fixed Ticket role config in
.yoi/ticket.config.toml.
TUI and future CLI/orchestration UI should not construct role-specific Pod launch requests by hand. Before adding TUI Ticket role actions, introduce a reusable launcher layer that turns a fixed Ticket role plus context into a Pod spawn/run request.
This layer should keep the Profile/SystemInstruction boundary intact: the selected Profile owns durable role/system behavior, while the launcher creates the first committed user/task message for a concrete Ticket/action and includes the workflow reference as explicit model-visible input.
Goal
Add a reusable Ticket role Pod launcher API that can be used by TUI and later CLI/orchestrator surfaces.
MVP should construct and optionally execute host-side Pod launches for fixed Ticket roles using .yoi/ticket.config.toml, selected Profile selector, workflow ref, and generated initial task prompt.
Requirements
- Support fixed Ticket roles only:
intakeorchestratorcoderreviewerinvestigator
- Load
.yoi/ticket.config.tomlthroughticket::config::TicketConfig. - Use role
profileselector as the child Pod profile selector. - Use role
workflowref as a model-visible workflow invocation / workflow instruction in the firstMethod::Run. - Generate a first committed user/task message from a typed launch context.
- Keep Profile-owned system instruction separate from the generated launch prompt.
- Do not add a role-level
system_instructionoverride. - Do not perform hidden context injection; everything dynamic must be sent as
Method::Runinput. - Provide a launch planning API usable by TUI without depending on
podcrate internals. - Prefer placing the launcher in
clientif that keeps TUI dependency direction clean:tui -> client -> ticket/protocol/manifest;- avoid
tui -> pod.
- If implementing actual launch execution, use existing
client::spawn_podandclient::PodClient/protocol::Method::Runwhere appropriate. - Generate stable, testable Pod names or accept caller-provided names.
- Keep launch prompt text bounded and deterministic enough for tests.
- Include enough context for each role without over-scoping:
- target Ticket id/slug;
- user instruction or routing/action summary;
- workflow slug;
- optional intent packet;
- optional worktree path / branch;
- optional validation/report expectations.
Launch prompt / workflow semantics
The first run should separate content like this:
- Profile supplies the system/role behavior.
- Workflow ref supplies the procedural flow to follow.
- Generated launch prompt supplies this specific Ticket/action context.
Prefer Method::Run with typed Segment::WorkflowInvoke { slug } plus Segment::Text { content } when practical. If a workflow segment is not viable in the immediate integration point, include the workflow slug explicitly in the generated text and document the limitation.
Configured launch_prompt refs may remain unresolved in the MVP if prompt-resource resolution is not available below pod; they should be exposed in the launch plan for future resolution and not silently treated as system instruction.
Non-goals
- TUI action UI.
- Arbitrary role registry.
- Scheduler/lease/queue automation.
- Stateful workflow engine.
- Phase-specific tool gating.
- Role-level
system_instructionsupport. - Changing Profile resolution semantics.
- Changing
SpawnPodtool semantics inside thepodcrate. - Implementing coder/reviewer worktree creation policy.
- Broad Pod registry/metadata redesign.
Acceptance criteria
- A reusable launch plan/API exists for fixed Ticket roles.
- The launcher reads
.yoi/ticket.config.tomldefaults and configured role profile/workflow/launch_prompt refs. - Profile selector selected for the role is available for spawn config.
- Dynamic task content is represented as first-run input, not hidden system/context injection.
- Workflow slug is included as a typed workflow segment or explicit model-visible instruction.
- TUI can consume the API without depending on
podinternals. - Tests cover:
- default config role launch plan;
- configured role profile/workflow/launch_prompt refs;
- generated prompt content for at least intake/orchestrator/reviewer;
- caller-provided Pod name;
- missing/malformed Ticket config error surfacing;
- no
system_instructionhandling.
cargo test -p clientor chosen crate tests pass.cargo test -p ticketpasses if touched.cargo check --workspace --all-targets,cargo fmt --check,git diff --check, and./tickets.sh doctorpass.
Follow-up tickets
tui-ticket-role-actions: expose fixed Ticket role actions in TUI using this launcher.- Prompt resolution follow-up: resolve
launch_promptrefs into first-run content once a suitable prompt-resource API exists below/available to the launcher. - Workflow-state follow-up: persist phase/state and commit phase prompts to history before model use.