---
title: 'Panel Ticket / Intake Pod row の視覚階層を改善する'
state: 'done'
created_at: '2026-06-15T06:32:21Z'
updated_at: '2026-06-15T07:09:01Z'
assignee: null
readiness: 'implementation_ready'
risk_flags: ['panel-ux', 'tui-layout', 'accessibility', 'row-selection']
queued_by: 'workspace-panel'
queued_at: '2026-06-15T06:37:02Z'
---

## Background

Workspace Panel では、Ticket row が2行表示になり、Ticket に関連する Intake Pod row も Ticket の隣接 row として表示されるようになっている。

しかし現状では、以下の視覚的な区別が弱く、一覧として読んだときに情報の優先順位が掴みにくい。

- Ticket 本体の primary line と detail/gate line の強弱。
- Ticket row と associated Intake Pod row の親子関係。
- canonical state/title、gate/action/reason、Intake Pod status/open 導線の重要度差。
- 選択中 row/group と非選択 row/group の境界。

今回の作業は Panel 表示の visual hierarchy / readability 改善に限定する。Ticket lifecycle、local role/session registry、claim semantics、automatic launch/spawn policy は変更しない。

## Request snapshot

> 前やった Panel の2行レイアウトと、IntakePod の関連表示の件、表示の強弱がついてなくて見辛いから、改善したい。

Panel handoff:

- workspace: `yoi`
- workspace_orchestrator_pod: `yoi-orchestrator`

## Requirements

- Workspace Panel の Ticket 2行 row に視覚的な強弱を付ける。
  - 1行目の canonical state + title は primary 情報として読みやすくする。
  - 2行目の Ticket id / Gate / Action / reason は secondary 情報として、必要な時に読めるが主情報を邪魔しない表示にする。
- Ticket-associated Intake Pod row が、その Ticket の子/関連 row であると視覚的に分かるようにする。
  - indentation、prefix、dim style、role/status chip、group marker など、既存 Panel UI と整合する方法でよい。
- 選択状態では、Ticket 2行 + associated Intake row の関係が崩れない。
  - どの logical row / child row が選択されているかが分かる。
  - Ticket 本体と Intake Pod row の操作対象が混同されない。
- live / restorable / stale など Intake Pod status の表示は残しつつ、Ticket title/gate より過剰に目立たないようにする。
- narrow terminal / short panel area でも破綻しない。
  - truncate / ellipsis / bounded rendering を維持する。
- 色だけに依存しない表示にする。
  - terminal theme や monochrome 環境でも、indentation / marker / text label で最低限の関係が分かる。

## Acceptance criteria

- Ticket 2行 row で、primary line と secondary line の視覚的な強弱が確認できる。
- Ticket-associated Intake Pod row が、隣接する Ticket の関連/子 row として認識できる。
- Intake Pod row が Ticket 本体や別 Ticket に見えない。
- selected Ticket row / selected Intake Pod row の見え方が明確で、操作対象が混同されない。
- `ready`, `planning`, `queued/inprogress`, `done/closed`, `ready+waiting` の Ticket row で可読性が維持される。
- Intake Pod の `live` / `restorable` / `stale` status が確認できる。
- pre-Ticket Intake Pod を誤って特定 Ticket の child row のように表示しない。
- mouse click / keyboard selection の既存 semantics を壊さない。
- Focused tests で row rendering contract または ViewModel/row ordering/selection contract が確認される。

## Binding decisions / invariants

- Ticket lifecycle state / relation gate semantics は変更しない。
- persisted `waiting` state や新しい Ticket schema は追加しない。
- local Pod assignment / Pod name / socket / claim state / runtime status を git-tracked Ticket metadata/frontmatter/thread に保存しない。
- automatic polling / automatic Intake spawn は追加しない。
- Ticket と Intake Pod の関係を 1:1 と仮定しない。
- selected arbitrary Pod direct-send UX を復活させない。
- 表示改善のために lifecycle action の authority boundary を緩めない。

## Implementation latitude

- exact な UI 表現は実装側判断でよい。
  - dim / bold / color / prefix / indentation / separator / role chip / status chip など。
- 既存 `PanelRowKind::Ticket` / `PanelRowKind::TicketIntakePod` の rendering を調整してもよい。
- 必要なら shared row style helper を整理してよい。
- 色を使う場合でも、marker / label / indentation など非色要素で関係性が分かるようにする。
- Very small terminal で情報を減らす場合、primary state/title と action safety を優先する。

## Readiness

- readiness: implementation_ready
- risk_flags: [panel-ux, tui-layout, accessibility, row-selection]
- blocking open questions: none

## Escalation conditions

- Panel の selection model / keyboard semantics を大きく変える必要が出た場合。
- Ticket row と Intake Pod row の action identity が曖昧になり、誤操作リスクが出る場合。
- 色/装飾だけでは accessibility / terminal theme 上の問題を避けられない場合。
- Row rendering のために local role/session registry や Ticket schema の変更が必要になりそうな場合。
- bounded row rendering を維持できず、大量 Ticket/Pod で一覧が読みにくくなる場合。

## Validation

- `cargo test -p tui workspace_panel --lib`
- 関連箇所を触る場合:
  - `cargo test -p tui multi_pod --lib`
  - `cargo test -p tui row_hit_testing --lib`
  - `cargo test -p tui mouse_click --lib`
- `cargo fmt --check`
- `git diff --check`
- 可能なら実際の `yoi panel` / PTY で目視確認、または既存 Panel E2E の更新。

## Related work

- `00001KV12W2RT` — Panel Ticket rows を2行表示にして gate 情報を分離する
- `00001KV09WYC6` — Workspace panel: show Ticket-associated Intake Pods adjacent to Ticket rows
- `00001KV3A5CNH` — Panel: invalid Ticket があっても Ticket 機能全体を無効化しない

Code areas:

- `crates/tui/src/workspace_panel.rs`
- `crates/tui/src/multi_pod.rs`
- `crates/tui/src/role_session_registry.rs`
