5.6 KiB
5.6 KiB
| title | state | created_at | updated_at | assignee | readiness | risk_flags | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Panel Ticket rows を2行表示にして gate 情報を分離する | ready | 2026-06-13T18:10:57Z | 2026-06-13T18:11:44Z | null | implementation_ready |
|
Background
Workspace Panel の Ticket row は現在 1 行に state / title / status / action を圧縮している。これにより、canonical state と relation / queue blocker から導出される execution gate が混ざりやすい。
例: state: ready かつ unresolved depends_on がある Ticket は、正本としては ready のままでよい。しかし Panel では queue 可能ではなく、Gate: waiting として見せる必要がある。現在の実装では relation blocker が PanelRowKind::Blocked / red / Edit に寄り、正常な依存待ちが error や人間入力要求のように見える。
Panel の Ticket 表示を default 2 行にして、1 行目に正本 state/title、2 行目に Ticket id と derived gate/action/reason を表示する。選択状態は三角 ▶ ではなく、複数行をまとめる左罫線 | で示す。
Target layout
Default Ticket row is two visual lines:
ready Extend pod::feature API for external protocol-backed capability providers
00001KTR81P9X | Gate: waiting · depends_on 00001KV0SP0TY
Selected Ticket row uses a left vertical marker instead of a triangle so the two lines read as one selected item:
| ready Extend pod::feature API for external protocol-backed capability providers
| 00001KTR81P9X | Gate: waiting · depends_on 00001KV0SP0TY
Queueable ready Ticket example:
ready Remove feature-layer HostAuthority model
00001KV0SP0TY | Gate: queueable · Action: Queue
Planning Ticket example:
planning Some unclear work item
00001XXXXXXX | Gate: needs planning · Action: Clarify
Requirements
- Ticket rows in Workspace Panel render as two visual lines by default.
- Line 1: canonical workflow state + title.
- Line 2: ticket id + derived gate/action/reason summary.
- Preserve the Ticket schema model.
- Do not add a persisted
waitingstate. - Continue treating
stateas canonical lifecycle state. - Derive gate/waiting/queueable from relations and current Panel context.
- Do not add a persisted
- Relation blockers should be displayed as execution gate information, not as canonical state replacement.
state: readywith unresolveddepends_onshowsreadyon line 1.- Line 2 shows
Gate: waiting · depends_on <id>. - Queue action is disabled/not offered while blockers are unresolved.
- Normal dependency wait should not use red/error styling or
Editas the primary action.
- Keep truly problematic states visually distinct.
- Invalid/corrupt/unusable Ticket data or user-decision-required blockers may still use stronger warning styling.
- Normal relation ordering waits should use a waiting/amber/dim style rather than red.
- Replace selected-row triangle marker with a multi-line grouping marker.
- Selected Ticket row uses
|on each visual line. - Non-selected Ticket row uses leading spaces aligned with the selected marker.
- Pod rows may keep existing one-line marker behavior unless changing them is necessary for layout consistency.
- Selected Ticket row uses
- Update list selection and scrolling to account for multi-line Ticket rows.
- Selection remains one logical Ticket per two visual lines.
- Keyboard up/down moves by logical row, not visual line.
- Mouse click on either visual line selects the same Ticket and does not dispatch the action.
- Mouse wheel behavior remains intact.
- Keep row layout robust for narrow terminals.
- Truncate title and gate summary with ellipsis.
- Avoid brittle fixed-width column alignment beyond small state/id labels.
- Update target/action status line wording as needed.
- Selected ready/waiting Ticket should communicate
queue disabledorwaiting for <blocker>instead of simplyready · Enter Edit.
- Selected ready/waiting Ticket should communicate
Acceptance criteria
- Workspace Panel unit tests cover two-line Ticket row rendering for at least queueable ready, ready+waiting, planning, queued/inprogress, and done/closed cases where practical.
- A ready Ticket with unresolved
depends_onrenders line 1 withreadyand line 2 withGate: waitingplus blocker identity. - The same ready+waiting Ticket does not have
NextUserAction::Queueand does not useNextUserAction::Editmerely because of a normal dependency wait. - The ready+waiting Ticket is not rendered with the red/UserReply priority used for human-error/user-reply states.
- Selected Ticket rows use
|on all visual lines belonging to that Ticket; no▶triangle is used for those multi-line rows. - Mouse click on either visual line selects the same logical Ticket without dispatching its action.
- Existing mouse wheel behavior continues to scroll/select as before.
- Existing Panel E2E expectations are updated or extended if they depend on one-line rows or triangle markers.
- Validation: focused
tuitests, affected E2E if practical,cargo build -p yoi, andnix build .#yoi.
Non-goals
- Adding a persisted
waitingTicket state. - Redesigning the whole Panel into full cards or a detail pane.
- Changing Ticket lifecycle transition rules.
- Reworking Pod row layout unless required for shared rendering primitives.
Related work
- Ready Ticket blocked by dependency example:
00001KTR81P9Xdepends on00001KV0SP0TY. - Ticket relation blockers are already surfaced by
TicketShowandWorkspacePanelViewModel. - Mouse selection / wheel behavior follow-up E2E:
00001KV10SN02.