diff --git a/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/delegation-intent.md b/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/delegation-intent.md new file mode 100644 index 00000000..b52cc284 --- /dev/null +++ b/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/artifacts/delegation-intent.md @@ -0,0 +1,120 @@ +# Delegation intent: Ticket Intake -> Orchestrator handoff + +## Classification + +`implementation-ready` after Orchestrator lifecycle and composer target slices. + +`yoi panel` now opens the workspace panel, ensures a workspace Orchestrator for Ticket-enabled workspaces, and can launch a Ticket Intake Pod from the composer. This ticket connects those pieces with an explicit handoff contract. + +## Intent + +When the panel launches a Ticket Intake Pod, provide the workspace Orchestrator as the Intake's notification/handoff target so the Intake can report clarified Ticket readiness to the Orchestrator. The handoff must be visible in the destination Pod's committed input/history or durable peer metadata, not hidden context. + +The handoff should not authorize implementation automatically. It only tells Intake where to report readiness or follow-up state after Intake has clarified and materialized/agreed a Ticket. + +## Worktree / branch + +- worktree: `/home/hare/Projects/yoi/.worktree/ticket-intake-orchestrator-handoff` +- branch: `work/ticket-intake-orchestrator-handoff` + +This ticket may read tracked `.yoi/tickets` records/design artifacts. Do not read or edit `.yoi/memory/`. + +## Requirements + +- Define a simple handoff contract from workspace panel to Intake. + - Include Orchestrator Pod name. + - Include that Intake should notify/report to the Orchestrator when it has enough information for routing/preflight. + - State clearly that implementation must not start automatically; human Go / Orchestrator routing gates still apply. +- Carry the handoff through the existing Ticket role launch path where practical. + - Prefer adding explicit fields/options to `TicketRoleLaunchContext` or equivalent over ad hoc string assembly in TUI. + - Do not duplicate role prompt/profile construction in TUI. +- Register Intake and Orchestrator as peers when both are live/reachable if existing `RegisterPeer` semantics make this feasible. + - Registration failure should be a bounded diagnostic/warning, not a reason to lose the Intake launch if the launch itself succeeded. + - Do not rely only on an LLM-internal instruction if a durable peer metadata path is available. +- Include the handoff instruction in the Intake launch input/history so the Intake can explain why it may notify the Orchestrator in later turns. + - Do not inject hidden context only. + - Do not append the Intake request to Companion/current Pod history. +- Add panel success/failure diagnostics for handoff setup separately from Intake launch success. +- No-Ticket workspace must not expose this path. +- Keep Orchestrator as background coordinator; do not make it foreground composer target by default. +- Keep the contract small and typed enough to test, but do not build a scheduler/queue. + +## Suggested contract shape + +A small data type is preferred over freeform string construction in the panel: + +```rust +TicketIntakeHandoff { + orchestrator_pod: String, + workspace_label: String, +} +``` + +The role launcher can render this into the Intake `user_instruction` as an explicit section, for example: + +```text +Panel handoff: +- Workspace Orchestrator Pod: +- When Intake has clarified the request and created/updated the Ticket, notify/report readiness to this Orchestrator. +- Do not start implementation automatically; wait for Orchestrator routing/preflight and human Go gates. +``` + +If peer registration is implemented, Intake should also receive durable peer metadata for the Orchestrator using the existing Pod peer registration path. + +## Non-goals + +- Automatic implementation scheduling. +- Queue/lease system. +- Full Ticket action model refinement. +- Final layout/display tuning. +- Generic arbitrary handoff routing. +- Reintroducing `--multi`. + +## Current code map + +- `crates/tui/src/multi_pod.rs` + - Panel composer target handling and Intake launch path. +- `crates/tui/src/workspace_panel.rs` + - Orchestrator state/name and composer target view state. +- `crates/client/src/ticket_role.rs` + - Role launch context and prompt/input assembly; preferred place for typed handoff fields. +- `crates/protocol/src/lib.rs` + - `Method::RegisterPeer` / `Event::PeerRegistered` semantics. +- `crates/pod/src/controller.rs` + - Peer registration handling for reference. +- `crates/tui/src/socket.rs` / existing client helpers + - Reuse existing socket/method helpers where practical; do not hand-roll protocol loops unnecessarily. + +## Validation + +Run at least: + +- targeted tests for role launch input rendering with handoff; +- targeted tests for panel Intake launch including handoff data; +- targeted tests for peer registration success/failure behavior if implemented; +- `cargo test -p client ticket_role`; +- `cargo test -p tui workspace_panel`; +- `cargo test -p tui multi_pod` or updated panel test names; +- `cargo test -p yoi panel`; +- `cargo check --workspace --all-targets`; +- `cargo fmt --check`; +- `git diff --check`; +- `cargo build -p yoi`; +- `target/debug/yoi ticket doctor`. + +Run `nix build .#yoi --no-link` if feasible. + +## Completion report + +Report: + +- worktree path / branch; +- commit hash; +- final handoff contract/data type; +- how Orchestrator target is included in Intake input/history; +- whether/how peer registration is performed; +- launch vs handoff diagnostic behavior; +- proof no Companion/current Pod history mutation is used for Intake body; +- tests updated/added; +- validation results; +- known follow-up layout/display tuning items. diff --git a/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md b/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md index 6eb1807e..f89bd046 100644 --- a/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md +++ b/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/item.md @@ -7,7 +7,7 @@ kind: task priority: P1 labels: [ticket, intake, orchestrator, handoff] created_at: 2026-06-05T21:07:04Z -updated_at: 2026-06-05T21:07:04Z +updated_at: 2026-06-06T04:49:16Z assignee: null legacy_ticket: null --- diff --git a/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md b/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md index 37beabef..3d209f0c 100644 --- a/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md +++ b/.yoi/tickets/open/20260605-210704-ticket-intake-orchestrator-handoff/thread.md @@ -4,4 +4,17 @@ Created by LocalTicketBackend create. +--- + + + +## Plan + +Preflight result: `implementation-ready` after Orchestrator lifecycle and composer target slices. + +This ticket should connect panel-launched Intake Pods to the workspace Orchestrator with an explicit, auditable handoff target. The handoff should be carried through the existing Ticket role launch path, preferably as a typed launch-context field rendered into the Intake first-run input/history, and peer metadata should be registered when feasible. It must not authorize automatic implementation. + +Detailed delegation intent is recorded in `artifacts/delegation-intent.md`. + + ---