21 KiB
作成
LocalTicketBackend によって作成されました。
Intake summary
Panel focus UX の不満を yoi panel 専用の concrete Ticket として整理した。合意済み方針は、user-visible focus model を増やさず、composer target を送信先、selected row を空 composer 時の navigation / Enter 対象として扱い、item action focus を user-visible focus から外すこと。既存 Ticket / Pod authority と composer 入力保護は維持する。
State changed
Intake clarified the panel focus request and recorded an implementation-ready concrete Ticket. Human can queue it from the panel when ready.
State changed
Ticket を workspace-panel が queued にしました。
Decision
Routing decision: implementation_ready
Reason:
- Ticket body は
yoi panelに範囲を限定し、composer target を送信先、row selection を空 composer 時の navigation / Enter 対象として扱う方針を明確に記録している。 item action focusを user-visible focus model から外すこと、composer 入力保護、既存 Ticket / Pod authority の維持、single-Pod TUI navigation を範囲外にすることが binding invariant として記録済みである。- risk flags は
tui-ux/input-safetyだが、bounded context check の結果、具体的な未決定 product/API/authority 判断は残っていない。残る不確実性はcrates/tui/src/multi_pod.rs周辺の local tactic / focused tests に閉じている。 - Relation blocker はなく、OrchestrationPlan に accepted plan
orch-plan-20260612-144501-1を記録済み。現在 inprogress Ticket / child Pod はなく、Orchestrator worktree は clean。
Evidence checked:
- Ticket body / thread: requirements, acceptance criteria, binding decisions, implementation latitude, escalation conditions, validation, intake summary,
ready -> queuedevent を確認。 - Related design Ticket:
00001KSKBPPMRは broad planning context であり、本 Ticket が panel-specific concrete implementation unit であることを確認。 - TicketRelationQuery: outgoing/incoming relation なし、blocker なし。
- TicketOrchestrationPlanQuery: 既存 record なし、今回 accepted plan を記録。
- Code map:
crates/tui/src/multi_pod.rsにPanelFocus::ItemAction,focus_item_action,Right action focushints, focus/status/actionbar rendering, key handling, focused tests があることを確認。 - Workspace/Pod state: Orchestrator worktree
orchestration/yoi-orchestratorは clean、visible child Pod なし、inprogress Ticket なし。 - Durable context: Panel composer target は selected rows とは別の送信先で、Panel は authority/backend ではなく local view/controller に留める既存方針に一致する。
IntentPacket:
Intent:
yoi panelの user-visible focus model を composer target と row selection に整理し、実際の Enter/矢印/Esc/Tab 挙動と status/actionbar/key hints を一致させる。item action focus/Right action focusが user-visible focus として見える状態を削除または実際に意味のある表示に変える。
Binding decisions / invariants:
- 対象は
yoi panelのみ。single-Pod TUI transcript / block navigation は範囲外。 - composer に文字がある場合は通常入力と composer draft 保護を最優先する。
- composer target は focus ではなく送信先である。
- row selection は空 composer 時の navigation / Enter 対象である。
item action focusを user-visible focus model から外す。- Panel は durable state authority にならず、Ticket / Pod authority と
ready -> queued等の明示 user action semantics を変えない。
Requirements / acceptance criteria:
- Panel 上で composer target と selected row の意味が分かりやすく表示される。
global composer/selected row/item actionのように実際の操作以上の focus 状態を見せない。- 空 composer と非空 composer で Enter が何をするか、status/actionbar から誤解しにくい。
↑/↓,Left,Right,Esc,Tab,Enterの key hints が実装と一致する。Right action focusが残る場合は user-visible focus ではなく意味ある操作として説明する。不要なら削除・無効化する。- composer 入力保護を維持する。
- Ticket action dispatch / Pod open / Intake launch / Companion send の安全性を落とさない。
Implementation latitude:
PanelFocusの状態名・数・遷移は変更してよい。ItemAction相当の状態は削除してよい。Right/Leftは削除、no-op、案内表示のいずれでもよいが、hints と一致させる。Escの詳細挙動は input safety を満たす範囲で調整してよい。- UX 改善は最小実装でよく、フル navigation mode / vim-like 操作体系は不要。
Escalate if:
- composer 入力保護と row navigation の優先順位について記録済み invariant を超える判断が必要になった場合。
- Ticket lifecycle action の明示性や authority boundary を変える必要が出た場合。
- single-Pod TUI navigation model 変更が必要だと判明した場合。
Validation:
crates/tui/src/multi_pod.rs周辺の focused tests を追加・更新する。- focus/key handling/status/actionbar の unit tests を通す。
cargo test -p tui multi_またはより focused な同等テスト。cargo fmt --check。git diff --check。./result/bin/yoi ticket doctorまたは同等。nix build .#yoi。
Current code map:
- 主対象:
crates/tui/src/multi_pod.rs。 - 既存確認点:
PanelFocus,focus_item_action,effective_focus, key handling aroundUp/Down/Left/Right/Enter/Tab/Esc, status/actionbar rendering, row hints, tests aroundmulti_.
Critical risks / reviewer focus:
- composer draft を誤って submit / clear / row action dispatch しないこと。
- key hints と実装がずれないこと。
Right action focus/item action表示が残留して UX を曖昧にしないこと。- Ticket action dispatch、Pod open、Intake launch、Companion send の authority semantics が変わっていないこと。
- broad
00001KSKBPPMRの single-Pod transcript/block navigation scope に踏み込んでいないこと。
Next action:
queued -> inprogressを記録してから、branchticket/panel-focus-composer-row-selection/ worktree/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selectionを作成し、sibling coder に narrow write scope で実装を委譲する。Reviewer は coder evidence 後に read-only で起動する。
State changed
Routing accepted for implementation. Ticket body/thread, related broad design Ticket, relation blockers, orchestration plan, code map, current Orchestrator workspace state, in-progress Ticket state, and visible Pods were rechecked. No unresolved blocker or missing planning decision remains. Implementation side effects will start only after this accepted queued -> inprogress transition is recorded, using accepted plan orch-plan-20260612-144501-1.
Plan
Implementation worktree created for multi-agent handoff.
- Ticket:
00001KTVJFT6F - Branch:
ticket/panel-focus-composer-row-selection - Worktree:
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection - Base: Orchestrator workspace HEAD
f13ab294(orchestration/yoi-orchestrator), including the accepted routing record andqueued -> inprogresstransition. - Scope rule: implementation work happens only in this child worktree. Root/original workspace must not be read, written, validated, merged, cleaned, or used for git operations.
- Next: spawn sibling coder with narrow write scope to the implementation worktree. Reviewer will be started after coder evidence is available.
Plan
Coder delegated.
- Coder Pod:
yoi-coder-panel-focus-model - Worktree:
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection - Branch:
ticket/panel-focus-composer-row-selection - Scope: write
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection; read child worktree plus minimal non-recursive runtime-root read required by spawn validation. - Task: simplify Panel focus model around composer target and row selection, remove/neutralize user-visible
item action focus/Right action focus, align key hints/status/actionbar with actual behavior, add focused tests, validate with focused TUI tests andnix build .#yoi. - Constraint: coder was instructed not to use root/original workspace for decision evidence or git/validation/cleanup, and not to create generated memory/local/runtime/log/lock/secret-like
.yoipaths.
Implementation report
Coder completed implementation.
Coder Pod:
yoi-coder-panel-focus-model
Implementation branch/worktree:
- Branch:
ticket/panel-focus-composer-row-selection - Worktree:
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection - Commit:
c5ef6f79 tui: clarify panel composer target and row selection - Worktree status: clean
Changed surfaces:
crates/tui/src/multi_pod.rscrates/tui/src/workspace_panel.rs
Implementation summary:
- Removed user-visible
PanelFocus/ItemActionstyle focus model. Tabswitches composer target without clearing selected row.Escclears row selection while preserving composer draft and target.- Non-empty composer prioritizes draft/text input and
Entertargets composer send. - Blank composer uses selected row as
Entertarget for Ticket action / Pod open. - Title/status/actionbar/row hints no longer expose
global composer,item action, orRight action focusas focus states. Left/Rightare presented as composer cursor movement, not Panel focus switching.
Orchestrator-verified evidence from child worktree:
git status --short --branch: clean onticket/panel-focus-composer-row-selection- Focused changed tests passed individually:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behaviorcargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draftcargo test -p tui multi_composer_target_switch_preserves_typed_textcargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input
cargo fmt --check: passgit diff --check: passcargo run -p yoi -- ticket doctor:doctor: oknix build .#yoi: pass
Known unrelated validation failure:
cargo test -p tui multi_ --libfails one test:multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace.- The same focused failing test also fails on current Orchestrator branch before this implementation is merged, with
context.workspace_root/repo/yoivs expected/repo/yoi/.worktree/orchestration/yoi-orchestrator. - The failure is not in the changed focus/composer/row-selection path, but reviewer should still confirm it is unrelated and not introduced by this Ticket.
Next:
- Spawn read-only sibling reviewer against the recorded intent, binding decisions/invariants, acceptance criteria, commit
c5ef6f79, diff, focused validation evidence,nix buildevidence, and the known pre-existing unrelatedmulti_failure.
Plan
Reviewer delegated.
- Reviewer Pod:
yoi-reviewer-panel-focus-model - Target branch/worktree:
ticket/panel-focus-composer-row-selectionat/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection - Commit under review:
c5ef6f79 tui: clarify panel composer target and row selection - Scope: read-only child worktree plus minimal non-recursive runtime-root read required by spawn validation.
- Review basis: recorded IntentPacket, binding decisions/invariants, acceptance criteria, implementation summary, diff, focused validation evidence,
nix buildevidence, and known pre-existing unrelatedmulti_failure evidence. - Reviewer focus: composer input protection, blank/non-blank Enter behavior, status/actionbar/key hint consistency, removal of user-visible
item action/Right action focus, Ticket/Pod authority preservation, and staying within Panel scope.
Review: approve
Approve.
Review target:
- Worktree:
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection - Commit:
c5ef6f79 tui: clarify panel composer target and row selection
Evidence:
- 差分は
crates/tui/src/multi_pod.rsとcrates/tui/src/workspace_panel.rsに限定され、single-Pod TUI transcript/block navigation は変更していない。 Right action focus/global composer/item action/PanelFocus/ItemActionは現行ツリー上で user-visible 文言・型として残っていない。- 非空 composer の
Enterは composer target 送信 / Intake 起動に向き、row selection の Ticket action / Pod open は待機扱いになる。 - 空 composer では selected row が
Enter対象になり、既存 Ticket action dispatch / Pod open 経路を使う。 Tabは composer target の切替のみで selected row と draft を保持する。Escは row selection を解除し、composer draft と target は保持する。Left/Rightは Panel focus 切替ではなく composer cursor 操作として扱われる。- Ticket action dispatch は従来通り stale/current authority re-check 経路を通り、
ready -> queuedなどの明示 action semantics は弱められていない。 - Companion send は workspace Companion 宛て固定の安全確認を維持し、selected Pod へ誤送信する形にはなっていない。
Reviewer-run validation:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behavior: passcargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft: passcargo test -p tui multi_composer_target_switch_preserves_typed_text: passcargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input: passcargo fmt --check: passgit diff --check orchestration/yoi-orchestrator...HEAD: pass
Known broad failure:
cargo test -p tui multi_ --libfails onlymulti_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace.- The failure is the same
/repo/yoivs/repo/yoi/.worktree/orchestration/yoi-orchestratormismatch already confirmed on the current Orchestrator branch, and this implementation does not change that launch-context path. It is pre-existing and not a blocker for this Ticket.
Non-blocking risks:
- None identified. The added tests directly cover key boundaries, draft protection, and target/row-selection display without brittle full UI snapshots.
Implementation report
Integration completed in the Orchestrator workspace.
Integrated implementation:
- Ticket:
00001KTVJFT6F - Implementation branch:
ticket/panel-focus-composer-row-selection - Implementation commit:
c5ef6f79 tui: clarify panel composer target and row selection - Reviewer result: approve, no blockers
- Orchestrator merge commit:
d6166c72 merge: panel focus composer row selection - Integration target:
orchestration/yoi-orchestrator
Post-integration validation from Orchestrator worktree:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behavior: passcargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft: passcargo test -p tui multi_composer_target_switch_preserves_typed_text: passcargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input: passcargo fmt --check: passgit diff --check HEAD~1..HEAD: pass./result/bin/yoi ticket doctor:doctor: oknix build .#yoi: pass
Known unrelated validation failure remains:
cargo test -p tui multi_ --libstill includes pre-existing failuremulti_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace; this was verified on the Orchestrator branch before merge and reviewed as unrelated to this Ticket.
Remaining risks:
- None identified by reviewer for this Ticket.
State changed
Implementation was merged into the Orchestrator branch, reviewer approved with no blockers, and post-integration validation passed. Cleanup and closure will be recorded next.
Implementation report
Cleanup completed.
- Stopped coder Pod:
yoi-coder-panel-focus-model - Stopped reviewer Pod:
yoi-reviewer-panel-focus-model - Removed child worktree:
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selection - Deleted implementation branch:
ticket/panel-focus-composer-row-selection - Orchestrator worktree status after cleanup: clean
Cleanup was limited to child implementation worktree/branch and related child Pods. Root/original workspace was not touched.
State changed
Ticket を closed にしました。
完了
Workspace panel の focus model を composer target と row selection に整理した。
実装概要:
yoi panelの user-visible focus 表示からitem action focus/Right action focus/global composer/PanelFocus/ItemAction系の不要な focus model を除去した。- composer target は送信先、row selection は空 composer 時の navigation / Enter 対象として扱う表示・挙動へ整理した。
- 非空 composer では composer draft / target を優先し、
Enterは composer send / Intake 起動に向く。 - 空 composer では selected row が
Enter対象になり、既存 Ticket action dispatch / Pod open 経路を使う。 Tabは composer target の切替のみで selected row と draft を保持する。Escは row selection を解除し、composer draft と target は保持する。Left/Rightは Panel focus 切替ではなく composer cursor 操作として扱う。- Ticket action dispatch、Pod open、Intake launch、Companion send の authority / safety semantics は維持した。
Review / integration:
- Implementation commit:
c5ef6f79 tui: clarify panel composer target and row selection - Reviewer:
yoi-reviewer-panel-focus-modelが approve。 - Orchestrator merge commit:
d6166c72 merge: panel focus composer row selection - Ticket completion commit:
e330685e ticket: mark panel focus done
Validation:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behavior: passcargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft: passcargo test -p tui multi_composer_target_switch_preserves_typed_text: passcargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input: passcargo fmt --check: passgit diff --check HEAD~1..HEAD: pass./result/bin/yoi ticket doctor:doctor: oknix build .#yoi: pass
Known unrelated validation failure:
cargo test -p tui multi_ --libstill includes pre-existing failuremulti_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace; this was verified on the Orchestrator branch before merge and reviewed as unrelated to this Ticket.
Cleanup:
- coder/reviewer Pods stopped。
- child worktree
/home/hare/Projects/yoi/.worktree/panel-focus-composer-row-selectionremoved。 - branch
ticket/panel-focus-composer-row-selectiondeleted。
Non-blocking risks:
- Reviewer found none for this Ticket.