365 lines
21 KiB
Markdown
365 lines
21 KiB
Markdown
<!-- event: create author: LocalTicketBackend at: 2026-06-11T14:48:26Z -->
|
|
|
|
## 作成
|
|
|
|
LocalTicketBackend によって作成されました。
|
|
|
|
---
|
|
|
|
<!-- event: intake_summary author: intake at: 2026-06-11T14:48:31Z -->
|
|
|
|
## 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 入力保護は維持する。
|
|
|
|
---
|
|
|
|
<!-- event: state_changed author: intake at: 2026-06-11T14:48:31Z from: planning to: ready reason: intake_ready field: state -->
|
|
|
|
## State changed
|
|
|
|
Intake clarified the panel focus request and recorded an implementation-ready concrete Ticket. Human can queue it from the panel when ready.
|
|
|
|
---
|
|
|
|
<!-- event: state_changed author: workspace-panel at: 2026-06-12T14:44:16Z from: ready to: queued reason: queued field: state -->
|
|
|
|
## State changed
|
|
|
|
Ticket を `workspace-panel` が queued にしました。
|
|
|
|
|
|
---
|
|
|
|
<!-- event: decision author: orchestrator at: 2026-06-12T14:45:35Z -->
|
|
|
|
## 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 -> queued` event を確認。
|
|
- 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 focus` hints, 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 around `Up/Down/Left/Right/Enter/Tab/Esc`, status/actionbar rendering, row hints, tests around `multi_`.
|
|
|
|
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` を記録してから、branch `ticket/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 で起動する。
|
|
|
|
---
|
|
|
|
<!-- event: state_changed author: orchestrator at: 2026-06-12T14:45:41Z from: queued to: inprogress reason: orchestrator_acceptance field: state -->
|
|
|
|
## 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`.
|
|
|
|
---
|
|
|
|
<!-- event: plan author: orchestrator at: 2026-06-12T14:46:00Z -->
|
|
|
|
## 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 and `queued -> inprogress` transition.
|
|
- 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.
|
|
|
|
---
|
|
|
|
<!-- event: plan author: orchestrator at: 2026-06-12T14:46:41Z -->
|
|
|
|
## 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 and `nix 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 `.yoi` paths.
|
|
|
|
---
|
|
|
|
<!-- event: implementation_report author: orchestrator at: 2026-06-12T15:01:02Z -->
|
|
|
|
## 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.rs`
|
|
- `crates/tui/src/workspace_panel.rs`
|
|
|
|
Implementation summary:
|
|
- Removed user-visible `PanelFocus` / `ItemAction` style focus model.
|
|
- `Tab` switches composer target without clearing selected row.
|
|
- `Esc` clears row selection while preserving composer draft and target.
|
|
- Non-empty composer prioritizes draft/text input and `Enter` targets composer send.
|
|
- Blank composer uses selected row as `Enter` target for Ticket action / Pod open.
|
|
- Title/status/actionbar/row hints no longer expose `global composer`, `item action`, or `Right action focus` as focus states.
|
|
- `Left` / `Right` are presented as composer cursor movement, not Panel focus switching.
|
|
|
|
Orchestrator-verified evidence from child worktree:
|
|
- `git status --short --branch`: clean on `ticket/panel-focus-composer-row-selection`
|
|
- Focused changed tests passed individually:
|
|
- `cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behavior`
|
|
- `cargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft`
|
|
- `cargo test -p tui multi_composer_target_switch_preserves_typed_text`
|
|
- `cargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input`
|
|
- `cargo fmt --check`: pass
|
|
- `git diff --check`: pass
|
|
- `cargo run -p yoi -- ticket doctor`: `doctor: ok`
|
|
- `nix build .#yoi`: pass
|
|
|
|
Known unrelated validation failure:
|
|
- `cargo test -p tui multi_ --lib` fails 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/yoi` vs 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 build` evidence, and the known pre-existing unrelated `multi_` failure.
|
|
|
|
---
|
|
|
|
<!-- event: plan author: orchestrator at: 2026-06-12T15:01:54Z -->
|
|
|
|
## Plan
|
|
|
|
Reviewer delegated.
|
|
|
|
- Reviewer Pod: `yoi-reviewer-panel-focus-model`
|
|
- Target branch/worktree: `ticket/panel-focus-composer-row-selection` at `/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 build` evidence, and known pre-existing unrelated `multi_` 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.
|
|
|
|
---
|
|
|
|
<!-- event: review author: reviewer:yoi-reviewer-panel-focus-model at: 2026-06-12T15:07:09Z status: approve -->
|
|
|
|
## 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`: pass
|
|
- `cargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft`: pass
|
|
- `cargo test -p tui multi_composer_target_switch_preserves_typed_text`: pass
|
|
- `cargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input`: pass
|
|
- `cargo fmt --check`: pass
|
|
- `git diff --check orchestration/yoi-orchestrator...HEAD`: pass
|
|
|
|
Known broad failure:
|
|
- `cargo test -p tui multi_ --lib` fails only `multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace`.
|
|
- The failure is the same `/repo/yoi` vs `/repo/yoi/.worktree/orchestration/yoi-orchestrator` mismatch 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.
|
|
|
|
---
|
|
|
|
<!-- event: implementation_report author: orchestrator at: 2026-06-12T15:08:05Z -->
|
|
|
|
## 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`: pass
|
|
- `cargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft`: pass
|
|
- `cargo test -p tui multi_composer_target_switch_preserves_typed_text`: pass
|
|
- `cargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input`: pass
|
|
- `cargo fmt --check`: pass
|
|
- `git diff --check HEAD~1..HEAD`: pass
|
|
- `./result/bin/yoi ticket doctor`: `doctor: ok`
|
|
- `nix build .#yoi`: pass
|
|
|
|
Known unrelated validation failure remains:
|
|
- `cargo test -p tui multi_ --lib` still includes pre-existing failure `multi_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.
|
|
|
|
---
|
|
|
|
<!-- event: state_changed author: orchestrator at: 2026-06-12T15:08:11Z from: inprogress to: done reason: implementation_merged_and_validated field: state -->
|
|
|
|
## 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.
|
|
|
|
---
|
|
|
|
<!-- event: implementation_report author: orchestrator at: 2026-06-12T15:08:59Z -->
|
|
|
|
## 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.
|
|
|
|
---
|
|
|
|
<!-- event: state_changed author: hare at: 2026-06-12T15:09:15Z from: done to: closed reason: closed field: state -->
|
|
|
|
## State changed
|
|
|
|
Ticket を closed にしました。
|
|
|
|
|
|
---
|
|
|
|
<!-- event: close author: hare at: 2026-06-12T15:09:15Z status: 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`: pass
|
|
- `cargo test -p tui multi_esc_clears_row_selection_without_quitting_and_preserves_draft`: pass
|
|
- `cargo test -p tui multi_composer_target_switch_preserves_typed_text`: pass
|
|
- `cargo test -p tui multi_blank_ticket_intake_enter_uses_selected_row_and_preserves_input`: pass
|
|
- `cargo fmt --check`: pass
|
|
- `git diff --check HEAD~1..HEAD`: pass
|
|
- `./result/bin/yoi ticket doctor`: `doctor: ok`
|
|
- `nix build .#yoi`: pass
|
|
|
|
Known unrelated validation failure:
|
|
- `cargo test -p tui multi_ --lib` still includes pre-existing failure `multi_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-selection` removed。
|
|
- branch `ticket/panel-focus-composer-row-selection` deleted。
|
|
|
|
Non-blocking risks:
|
|
- Reviewer found none for this Ticket.
|
|
|
|
---
|