2.6 KiB
2.6 KiB
Implemented explicit Ticket workflow state.
Final frontmatter fields:
workflow_state: intake | ready | queued | inprogress | doneattention_required: null | "..."queued_by: null | "..."queued_at: null | "..."
State/default behavior:
- Closed Tickets default/derive to
donewhere appropriate. - Existing non-closed Tickets without explicit workflow state use conservative defaults without treating labels/title/thread heuristics as workflow-state authority.
- Transient activity such as reviewing/reworking/validating is not persisted in frontmatter.
Workflow transition APIs/tools:
mark_intake_ready/TicketIntakeReadyperformsintake -> ready, appending typedintake_summaryandstate_changedevents.queue_readyremains the dedicated panel Queue path forready -> queued, sets queued metadata, and appends typedstate_changed.set_workflow_state/TicketWorkflowStateis bounded to role-side transitionsqueued -> inprogressandinprogress -> done.- Generic
set_state_field(..., "workflow_state", ...)is rejected to prevent bypass. - Backward/skip transitions such as
ready -> inprogress,queued -> done, anddone -> intakeare rejected.
Panel changes:
- Panel rows display explicit workflow state directly.
- Ticket rows are simplified to state + slug/id + title.
- Pod rows are simplified to pod-state + pod-name.
- Row operations move to selected-row actionbar/key hints instead of permanent action/status/phase columns.
- Queue replaces the previous Go/ApproveIntake wording and is only valid for current
workflow_state == ready. - Queue notifies Orchestrator when reachable; notification failure does not roll back a successful Ticket transition.
- No-Ticket Pod-centric panel behavior is preserved.
Role prompt/tool behavior:
- Intake/Orchestrator role text now uses
workflow_state/Queuevocabulary. - Intake is instructed to set
workflow_state = readythrough typed Ticket tools after materializing a Ticket. - Orchestrator treats
queuedas schedulable and moves toinprogresswhen starting.
Validation after merge:
cargo test -p ticket workflow --libcargo test -p ticketcargo test -p tui workspace_panel --libcargo test -p tui multi_pod --libcargo test -p yoi panelcargo test -p yoi ticketcargo test -p pod ticket --libcargo test -p client ticket_rolecargo check --workspace --all-targetscargo fmt --checkgit diff --check HEAD~1..HEADcargo build -p yoitarget/debug/yoi ticket doctornix build .#yoi --no-link --print-out-paths
External review approved after transition-graph enforcement was added.