ticket: use base32 project record ids
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# Implementation report: ticket-role-pod-launcher
|
||||
|
||||
## Worktree / branch
|
||||
|
||||
- Worktree: `/home/hare/Projects/yoi/.worktree/ticket-role-pod-launcher`
|
||||
- Branch: `work/ticket-role-pod-launcher`
|
||||
|
||||
## Commits
|
||||
|
||||
- `4bf0e27 feat: add ticket role pod launcher`
|
||||
- `dd70517 fix: harden ticket role launch execution`
|
||||
|
||||
## Summary
|
||||
|
||||
Added a reusable Ticket role Pod launcher in the `client` crate so TUI/future CLI surfaces can build and execute fixed Ticket-role Pod launches without depending on `pod` internals or duplicating role/profile/workflow prompt construction.
|
||||
|
||||
The launcher uses `.yoi/ticket.config.toml` role configuration, preserves Profile ownership of durable system/role behavior, and sends concrete Ticket/action context as the first committed `Method::Run` input.
|
||||
|
||||
## Final module/API layout
|
||||
|
||||
- `crates/client/src/ticket_role.rs`
|
||||
- `TicketRef`
|
||||
- `TicketRoleLaunchContext`
|
||||
- `TicketRoleLaunchPlan`
|
||||
- `TicketRoleLaunchResult`
|
||||
- `TicketRoleLaunchError`
|
||||
- `plan_ticket_role_launch(...)`
|
||||
- `plan_ticket_role_launch_with_config(...)`
|
||||
- `launch_ticket_role_pod(...)`
|
||||
- `crates/client/src/lib.rs`
|
||||
- re-exports the Ticket role launcher API.
|
||||
|
||||
## Behavior
|
||||
|
||||
Supported roles come from `ticket::config::TicketRole`:
|
||||
|
||||
- `intake`
|
||||
- `orchestrator`
|
||||
- `coder`
|
||||
- `reviewer`
|
||||
- `investigator`
|
||||
|
||||
The launcher:
|
||||
|
||||
- loads `.yoi/ticket.config.toml` with `TicketConfig`;
|
||||
- reads role `profile`, `workflow`, and optional `launch_prompt`;
|
||||
- creates a deterministic launch plan;
|
||||
- generates first-run input as `Segment::WorkflowInvoke { slug }` plus `Segment::Text { content }`;
|
||||
- exposes unresolved `launch_prompt` refs as launch-plan/text metadata rather than treating them as system instruction;
|
||||
- can execute concrete top-level profile launches with `spawn_pod`, `PodClient`, and `Method::Run`.
|
||||
|
||||
`profile = "inherit"` remains valid in launch planning but is rejected for top-level client execution with a bounded `UnsupportedInheritProfile` error, because top-level `--profile inherit` does not have child SpawnPod inheritance semantics.
|
||||
|
||||
`launch_ticket_role_pod(...)` waits for first-run acceptance evidence after sending `Method::Run`:
|
||||
|
||||
- accepts matching `Event::UserMessage`;
|
||||
- accepts `Event::InvokeStart { kind: UserSend }`;
|
||||
- accepts `Event::TurnStart`;
|
||||
- reports `Event::Error`, stream close, and timeout as errors.
|
||||
|
||||
## Changed files
|
||||
|
||||
- `Cargo.lock`
|
||||
- `crates/client/Cargo.toml`
|
||||
- `crates/client/src/lib.rs`
|
||||
- `crates/client/src/spawn.rs`
|
||||
- `crates/client/src/ticket_role.rs`
|
||||
- `package.nix`
|
||||
|
||||
## Review status
|
||||
|
||||
External sibling review initially requested changes with two blockers:
|
||||
|
||||
1. Default `profile = "inherit"` was being passed through top-level `--profile inherit`.
|
||||
2. `launch_ticket_role_pod` returned success after writing `Method::Run` without acceptance evidence.
|
||||
|
||||
Both blockers were fixed in `dd70517`, and re-review approved with no blockers.
|
||||
|
||||
Remaining non-blocker follow-ups:
|
||||
|
||||
- Add fake-socket/client execution tests for acceptance/rejection/close/timeout behavior.
|
||||
- Add an aggregate prompt/list cap; current implementation bounds individual fields but not the number of validation/report list entries.
|
||||
- Future TUI/CLI integration must surface `UnsupportedInheritProfile` clearly or require concrete role profiles until an inheritance-aware launch path exists.
|
||||
|
||||
## Validation
|
||||
|
||||
Coder-reported validation for the initial implementation passed:
|
||||
|
||||
- `cargo test -p client ticket`
|
||||
- `cargo test -p ticket`
|
||||
- `cargo check --workspace --all-targets`
|
||||
- `cargo fmt --check`
|
||||
- `git diff --check`
|
||||
- `./tickets.sh doctor`
|
||||
- `nix build .#yoi --no-link`
|
||||
|
||||
Coder-reported validation for blocker fixes passed:
|
||||
|
||||
- `cargo test -p client ticket`
|
||||
- `cargo check --workspace --all-targets`
|
||||
- `cargo fmt --check`
|
||||
- `git diff --check`
|
||||
- `./tickets.sh doctor`
|
||||
- `nix build .#yoi --no-link`
|
||||
|
||||
## Ready for merge
|
||||
|
||||
Yes.
|
||||
|
||||
This clears the launcher prerequisite for `tui-ticket-role-actions`.
|
||||
Reference in New Issue
Block a user