7.0 KiB
Created
Created by LocalTicketBackend create.
Plan
Created from design discussion about removing inferred panel Ticket state.
Decision recorded:
- stop treating panel heuristics from labels/title/thread events as authoritative workflow state;
- add an explicit durable Ticket workflow state:
intake -> ready -> queued -> inprogress -> done; intake -> readyis completed through Intake Pod conversation/materialization;ready -> queuedis the normal human panel action, replacing the currentGoaction withQueue;- review/rework stay inside
inprogress; - blocked/user-attention is an overlay such as
attention_required, not a workflow state; - transient activity should be derived from live Pod/session/thread state and not persisted in Ticket frontmatter.
Decision
Updated per user direction:
- Ticket row should not expose priority/action/status/phase as separate permanent columns; they are redundant once explicit workflow state exists.
- Ticket rows should be essentially
state + slug/id + title. - Pod rows should likewise be essentially
pod-state + pod-name. - Operations such as Queue/Defer/Open/Send should move to selected-row actionbar/key hints instead of row columns.
- Composer/status bar should be kept concise; verbose target/help/diagnostic text should move to actionbar or detail/diagnostic areas.
Decision
Updated based on thread/event-log discussion and split out companion work.
Decision:
- Do not delete Ticket threads.
- Do not use threads as freeform AI conversation dumps.
- Use
item.mdfrontmatter for current workflow state,item.mdbody for the current Ticket snapshot,thread.mdas a concise typed append-only event log, and Pod/session logs for full conversations. - Workflow state transitions should eventually update frontmatter and append a
state_changedevent as one logical backend operation. - Intake should write a bounded
intake_summarywhen materializing/marking a Ticket ready, not copy the full Intake conversation.
Created companion ticket typed-ticket-thread-event-log for the typed thread event model/API so explicit-ticket-workflow-state can stay focused on current-state fields and panel semantics.
Plan
Preflight result: implementation-ready after typed-ticket-thread-event-log.
This ticket should add explicit durable Ticket workflow fields and update the panel to stop using inferred state/action/status columns. The core workflow is intake -> ready -> queued -> inprogress -> done; ready -> queued is the normal human panel action and should be shown as Queue, not Go.
Implementation should use the newly-added typed thread event APIs for state transitions where practical, simplify panel rows to state + identity/title, and keep transient Pod activity out of Ticket frontmatter.
Detailed delegation intent is recorded in artifacts/delegation-intent.md.
Review: approve
External reviewer approved current HEAD after two requested-changes cycles.
Review summary:
- Explicit workflow fields and panel display are implemented.
- Ticket rows are state + id/title oriented and no longer use inferred priority/action/status/phase as main-list authority.
- Queue re-checks current state and transitions ready -> queued through the dedicated backend path.
- Typed tools expose bounded Intake and Orchestrator workflow transitions.
- Workflow transition graph is centrally enforced:
- IntakeReady only permits intake -> ready.
- Queue path owns ready -> queued.
- Role-side TicketWorkflowState permits queued -> inprogress and inprogress -> done.
- Backward/skip/bypass transitions are rejected.
- Handoff prompt uses workflow_state / Queue vocabulary instead of old readiness/Go wording.
- No transient activity is persisted in frontmatter.
State changed
Ticket closed; workflow_state set to done.
Closed
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.