8.9 KiB
作成
LocalTicketBackend によって作成されました。
Intake summary
ユーザーが draft 内容を確認し、Ticket 00001KVWPW3KX を ready にするよう明示した。Ticket 本文には implementation_ready、blocking open questions なし、対象範囲・invariants・validation が記録済みで、Orchestrator が implementation routing を判断できる。
State changed
ユーザー確認済みのため planning から ready へ移行する。blocking open questions はなく、Orchestrator は通常の routing 判断に進める。
State changed
Ticket を workspace-panel が queued にしました。
Decision
Routing decision: implementation_ready
Reason:
- Dashboard Queue により人間が Orchestrator routing を許可した queued Ticket として確認した。
- Ticket body は TUI Console の連続 Thinking block を render-time で一つの表示 group にまとめる目的、non-goals、binding invariants、validation を具体的に列挙している。
TicketRelationQueryは blocking relation 0 件、TicketOrchestrationPlanQueryは既存 plan 0 件だった。- risk flags は TUI rendering / reasoning-display / block-aggregation / text-selection だが、protocol / pod / persistence 変更をしない、source block sequence を保持する、turn boundary / non-Thinking block を跨がない、selection behavior を壊さない、という invariant が明示されている。risk は reviewer focus として扱えばよく、planning return 理由にはならない。
- 同時 queued Ticket
00001KVWPVHFJは Pod/session storage cleanup CLI で code surface が別。conflict risk は低く、別 worktree/branch で並列開始可能。
Evidence checked:
- Ticket body / thread:
item.md,thread.md。thread は create、planning->ready、ready->queued のみで未解決 blocker は記録されていない。 - Relations / orchestration plan: relation 0 件、routing 前 plan 0 件。accepted plan
orch-plan-20260624-120242-1を記録済み。 - Code map: Grep で
ThinkingStart/ThinkingDelta/ThinkingStop/thinking周辺を確認し、primary filescrates/tui/src/block.rs,crates/tui/src/app.rs,crates/tui/src/ui.rs,crates/tui/src/tool.rsが妥当。 - Workspace state:
/home/hare/Projects/yoi/.worktree/orchestrationは clean。active inprogress Ticket は 0 件。
IntentPacket:
Intent:
- TUI Console の transcript rendering で、assistant turn 内に連続する
Thinkingblocks を一つの表示 group として描画し、reasoning が細切れに見える UX を改善する。
Binding decisions / invariants:
- これは render-time aggregation。history / protocol / persistence / block sequence は変更しない。
- turn boundary を跨いで group 化しない。
- non-Thinking block を跨いで group 化しない。
- streaming / incomplete thinking を隠さない。
- Thinking を selectable/copyable transcript text に変える UX 変更はしない。
- Dashboard / Panel / web UI は対象外。
Requirements / acceptance criteria:
- 連続 Thinking blocks が Console 表示で一つのまとまりとして見える。
- 既存の
Readaggregation / tool rendering と同様に、rendering helper が consumed count 等でcompute_historyの走査を壊さない。 - 単独 Thinking block の表示は regress しない。
- Detail mode / collapsed mode / streaming state が破綻しない。
- focused unit tests で consecutive Thinking, non-Thinking separator, turn boundary, incomplete/streaming case を確認する。
Implementation latitude:
render_thinkingを単体 renderer として残し、必要なら aggregate renderer/helper を追加してよい。- Header 文言、elapsed 表示、detail mode の separator/index/blank line は既存 UX に沿って実装判断してよい。
compute_historyの構造に合わせ、最小変更で実装してよい。
Escalate if:
- protocol / pod / persistence 層の変更が必要になる。
- Thinking を text selection/copy target にする必要が出る。
- Provider-specific reasoning metadata の意味づけ変更が必要になる。
- Console 以外の UI surface に範囲が広がる。
- broad TUI rendering rewrite が必要になる。
Validation:
cargo test -p tuiまたは focusedcargo test -p tui thinking/ rendering tests。cargo fmt --check。git diff --check。- 必要に応じて
cargo check -p tui。
Current code map:
- Primary:
crates/tui/src/block.rs,crates/tui/src/app.rs,crates/tui/src/ui.rs,crates/tui/src/tool.rs。 - Avoid: protocol/history/persistence, Dashboard/Panel/web UI, broad TUI rewrite。
Critical risks / reviewer focus:
- source blocks/history を変更してしまうこと。
- non-Thinking block や turn boundary を跨いだ誤 grouping。
- streaming/incomplete thinking state の欠落。
- text selection/copy semantics の accidental change。
Next action:
queued -> inprogressを記録してから worktree-workflow で dedicated worktree を作成し、Coder/Reviewer sibling loop に進める。
State changed
Orchestrator acceptance: queued -> inprogress
- 直前確認で
TicketShowは statequeued、blocking relation は 0 件、accepted planorch-plan-20260624-120242-1を確認した。 - 同時 queued Ticket
00001KVWPVHFJは disjoint code surface のため別 worktree/branch で並列開始可能と判断した。 - routing decision と IntentPacket は Ticket thread に記録済み。
- これ以降に worktree-workflow で
/home/hare/Projects/yoi/.worktree/00001KVWPW3KX-thinking-groupを作成し、multi-agent-workflow に接続する。
Implementation report
実装報告: Ticket 00001KVWPW3KX / TUI Console: 連続した Thinking block を一つの表示グループにまとめる
変更内容:
crates/tui/src/ui.rscompute_historyの render-time 処理で、連続するBlock::Thinkingだけをまとめて消費するrender_thinking_aggregateを追加しました。- 単一の Thinking block は既存
render_thinkingへ委譲し、単体表示の互換性を維持しました。 - 複数 Thinking group は
Normal/Overviewでは 1 つのヘッダーとして表示し、Detailでは各 Thinking block の状態ヘッダーと本文を下位項目として読めるようにしました。 - streaming 中の group は
Thinking...と最新 streaming tail preview を表示し、incomplete が含まれる場合はヘッダーにinterruptedを含めるようにしました。 - group 行は
compute_history側で selectable=false のまま扱い、Thinking を選択・コピー可能な transcript text にしていません。 - 連続 Thinking、非 Thinking separator、turn boundary、streaming/incomplete、単一 Thinking、tool 表示回帰の単体テストを追加しました。
crates/tui/src/dashboard/tests.rscargo test -p tuiの validation を通すため、既存 dashboard test fixture のTicketRoleLaunchResultに現行必須 fieldacceptance_evidenceを補いました。
保持した不変条件:
- history / session / protocol / reasoning persistence / source block sequence は変更していません。
- group 化は Console TUI の render-time のみです。
Block::Thinkingが連続している場合だけ group 化し、非 Thinking block やTurnHeaderを跨ぎません。- streaming/incomplete 状態はヘッダーと preview/detail で見えるままにしています。
検証結果:
cargo test -p tui thinking -- --nocapture: PASS(6 tests)cargo test -p tui tool -- --nocapture: PASS(2 tests)cargo test -p tui: PASS(382 tests)cargo fmt --check: PASScargo check -p tui: PASSgit diff --check: PASS
実装 commit:
0b2ce6ca1f7ae44bc43bbf5afb440e35e69c705b(tui: group consecutive thinking blocks)
残リスク:
- 実端末での目視確認は行っていません。テストは
compute_historyの行テキスト・selectable 属性を中心に確認しています。 - group header の文言は既存 Console 表示に合わせて英語にしています。将来 UI 文言を整理する場合は別途調整してください。