34 KiB
作成
LocalTicketBackend によって作成されました。
Intake summary
Panel 表示・操作改善 Ticket を作成した。Ctrl+T はトップ行/actionbar/help text から削除し、target switching は Tab に変更する。Tab は completion が active な場合 completion を優先し、completion がない Panel 状態では target switching として扱う。Panel composer は通常チャット UI composer と低レベル InputBuffer は共有しているが key handling が分岐しているため、Panel 専用の ad-hoc 実装を増やさず、composer editing keymap/action model を共有または抽象化して互換性を維持する。
State changed
要件・binding decisions・受け入れ条件が揃ったため、Orchestrator が routing できる ready 状態にする。
Decision
Refinement: composer status line and mixed operation model
User clarified an additional UX issue in the Panel composer area:
- The line above the composer currently showing text like
composer Companion · ticket ready · Editis redundant and does not make the available action clear. - Panel currently mixes two interaction models in the same visual/control area:
- when the composer is empty, row selection with Up/Down plus Enter dispatches the selected Ticket action/open behavior;
- when the composer has text, Enter sends the text to the selected composer target, either Companion or new Ticket Intake.
- The implementation should make this separation visible and understandable instead of presenting row action state and composer target/edit state as one ambiguous status line.
Additional requirements:
- Rework the composer-adjacent status line so it does not redundantly restate
composer, target name, Ticket state, andEditwithout explaining the action. - Clearly distinguish selected-row action context from text-composer target context.
- The UI should make the empty-composer Enter behavior and non-empty-composer Enter behavior understandable at a glance.
- If the implementation keeps both behaviors, the display should communicate the mode/priority without making it look like the selected Ticket is the composer destination.
- If the implementation introduces a more explicit focus/mode model, it must preserve the binding decisions already recorded: no bare letter shortcuts,
Tabtarget switching with completion priority, and shared composer key handling with the normal chat UI.
Reviewer focus:
- Verify that the final Panel display does not conflate selected Ticket actions with Companion/Intake text submission.
- Verify that the composer status/help text answers “what will Enter do now?” rather than only listing internal state labels.
Decision
Refinement: selected Ticket while composer has text
Clarified current behavior and resulting UX invariant:
- In the current Panel implementation, a selected Ticket only drives
Enteractions when the composer is blank. - If the composer has text and the target is
Companion,Entersends the text to the workspace Companion; the selected Ticket is not used as the message destination or action target. - If the composer has text and the target is
TicketIntake,Enterlaunches a new pre-ticket Intake from the typed text; the selected Ticket is not used. Existing-Ticket Intake for a selectedClarifyaction is currently reached only from the blank-composer selected-row action path. - Therefore, “composer has text while a Ticket row is selected” currently has no actionable selected-Ticket semantics. The selected row may still be visible/navigation state, but it should not be displayed as if the typed text will act on that Ticket.
Additional requirement:
- The Panel display should avoid suggesting that typed composer text is scoped to or sent to the selected Ticket unless the implementation explicitly adds such a feature.
- If text composer mode is active, selected-row Ticket action hints should be de-emphasized, hidden, or explicitly separated from the composer destination/action.
- If the future design wants typed text to refine a selected Ticket, that must be an explicit product decision and not implied by the current mixed UI.
Comment
UX exploration note: contextual input instead of always-visible ambiguous composer
User raised a broader display/operation concern:
- The always-visible bottom composer may be intrinsically ambiguous in the Panel because it is not obvious what the box is for at any moment.
- The current UI mixes selected-list-item actions with global text submission. Even if labels are improved, a fixed bottom box can still look like it applies to the selected Ticket/Pod when it may actually send to Companion or launch new Intake.
- A potentially clearer direction is to show an input box contextually for the selected list item/action, rather than keeping one always-visible global box whose meaning changes.
Potential design direction for implementation consideration:
- Default Panel state emphasizes list navigation and selected-row actions; no ambiguous always-active global input is required.
- Immediate row actions can remain
Enter-driven when no text is needed. - Actions that need text open a contextual input box attached to, or clearly associated with, the selected row/action.
- Global text destinations such as workspace Companion or new Ticket Intake should be explicit actions/targets, not visually conflated with the selected Ticket action state.
- If a persistent bottom input remains, it should have one unambiguous purpose, such as “Ask Companion”, and selected Ticket action hints should be visually separate from it.
This is not yet a final binding redesign decision. Treat it as reviewer/orchestrator context for the same Ticket: the implementation should prioritize making the input box’s scope and destination obvious, and should avoid relying only on denser status labels to explain a mixed interaction model.
Plan
Refinement: explicit focus model for row actions vs global composer
User clarified a more concrete interaction model to reduce the ambiguity between selected list actions and global text submission.
Desired direction:
- The Panel should distinguish at least two visible interaction states:
- row/list focus: the user is hovering/selecting a Ticket/Pod/list item and can inspect or choose actions for that item;
- global composer focus/no selection: the bottom composer is used to send text to a global target such as Companion or new Ticket Intake.
Escshould be able to clear the current row/item selection or action focus and return to the global composer/no-selection state.- When selection is cleared, the bottom composer can be used for Companion or new Intake target submission without implying that text applies to a selected Ticket.
- For a selected Ticket/list item, Left/Right should navigate into or out of the item’s available actions.
- Pressing Right while hovering a Ticket should expand or focus the available actions for that item.
- The action-focused display should make available actions selectable, such as text-related actions,
Queue, or other valid item actions. - Up/Down should continue to navigate list items in list focus; when action focus is active, implementation may define whether Up/Down changes focused action or returns to item navigation, but the resulting behavior must be visible and predictable.
- Text submission for a selected item should be explicit through an item/action-focused UI. Typed text in the global bottom composer should not silently apply to a selected Ticket.
Implications / reviewer focus:
- Avoid a mixed state where a Ticket is visually selected, a bottom composer has text, and the UI does not clearly say whether Enter affects the selected Ticket or the global target.
- The display should make focus explicit: selected item, selected item action, or global composer target.
Escbehavior must be specified carefully because current Panel usesEscas quit. A reasonable implementation may makeEscclear action/list focus first and reserve quit forCtrl+C/Ctrl+D, or quit only when already in no-selection/global state, but the chosen behavior must be clear and tested.Tabremains the target-switching key for global composer targets, with completion priority if completion is active.- Bare letter shortcuts must not be reintroduced.
This refinement supersedes the earlier weaker idea of only improving labels around an always-visible ambiguous composer. The preferred UX direction is an explicit focus/action model: list hover -> Right opens item actions -> choose action; Esc backs out to global composer/no-selection; global composer sends only to explicit global target.
Decision
Decision: Panel quit key and Esc focus behavior
User decided that Panel quit should be available through Ctrl+C.
Binding decision update:
Ctrl+Cis the Panel quit key.Escshould not be the primary quit action in the redesigned Panel interaction model.Escshould be available for backing out of UI focus states, such as item action focus or selected-row focus, toward the no-selection / global composer state.- If the implementation preserves any
Escquit behavior for compatibility, it must not conflict with the new focus-clear/back-out behavior and must be clearly justified in the implementation report.
Reviewer focus:
- Verify that
Escdoes not unexpectedly exit the Panel when the user is trying to leave item/action focus. - Verify that
Ctrl+Cexits reliably from the redesigned Panel states.
State changed
Ticket を workspace-panel が queued にしました。
Decision
Routing decision: waiting_capacity_parallelism
This Ticket remains queued for now.
Reason:
00001KTNVGT8Gis being accepted as the active core tool execution API migration.- This Ticket is TUI panel/composer UX work and is implementation-ready, but it is better sequenced after the core tool API migration to keep review/validation focused and avoid broad parallel changes.
State decision:
- Leave this Ticket
queued. - Do not create a worktree or spawn a coder yet.
Next action:
- Re-read this Ticket after the ToolExecutionContext API migration lands, or earlier if explicitly prioritized.
State changed
Accepted queued implementation under the updated parallel-capacity policy. This Ticket is TUI panel/composer UX work and is independent from the active ToolExecutionContext migration except for normal workspace validation. It can run in a separate worktree with separate write scope.
Decision
Routing decision: implementation_ready_parallel
Updated user instruction: prefer parallel work when Tickets are independent or expected conflicts are small/manageable.
Reason:
- This Ticket is focused on TUI panel display/composer key handling.
- It is independent from the active ToolExecutionContext API migration and the TicketList output work, aside from normal shared validation.
- It can run in a separate worktree with a separate Coder scope.
IntentPacket:
Intent:
- Improve Panel display and composer key handling so global composer text entry, selected-row actions, target switching, and focus states are explicit and less ambiguous.
Binding decisions / invariants:
- Remove
Ctrl+Tfrom Panel top line/actionbar/help and stop using it for Panel target switching. - Use
Tabfor Panel target switching, but completion state has priority when active. - Preserve no bare-letter shortcuts; normal typed letters go to composer text.
- Share or abstract composer editing/key handling rather than adding ad-hoc Panel-only editing behavior.
- Support normal composer editing operations including cursor movement, line start/end, deletion, history, and
Ctrl+Left/Ctrl+Rightwhere terminal events make that possible. - Make focus/model explicit: selected row, item action focus, or global composer target.
- Global composer text must not imply it applies to a selected Ticket unless such a feature is explicitly added.
Escbacks out of action/list focus toward global composer/no-selection;Ctrl+Cis the reliable quit key.
Reviewer focus:
- Verify the UI answers “what will Enter do now?” in selected-row/action/global-composer states.
- Verify target switching/completion
Tabpriority. - Verify composer key handling is shared/compatible with normal TUI where practical.
- Verify no bare-letter shortcuts are reintroduced.
Validation:
- Focused TUI/panel key handling/display tests where feasible.
- Manual or test evidence for top/actionbar
Ctrl+Tremoval andTabtarget switch. cargo fmt --check,git diff --check,cargo run -q -p yoi -- ticket doctor,cargo check --workspace,nix build .#yoi.
Implementation report
Implementation routing started in parallel with the active ToolExecutionContext and TicketList work.
Worktree/branch:
- Worktree:
.worktree/panel-display-composer-keys - Branch:
panel-display-composer-keys - Base/routing commit:
d95b3ff ticket: route parallel ticketlist and panel work
Spawned sibling Coder Pod:
coder-panel-display-composer-keys- Scope: non-recursive read on parent workspace root plus recursive write limited to the child worktree.
Parallel-routing rationale:
- User asked to prefer parallel work when conflicts are absent or expected small.
- This Ticket is primarily TUI panel/composer UX and is independent from the core ToolExecutionContext migration and TicketList output shaping.
- Coder was instructed to avoid Ticket backend/tool output changes unless necessary.
Implementation report
Implemented panel display/composer key handling updates on branch panel-display-composer-keys.
Summary:
- Added shared
composer_keyskeymap for readline-style composer editing and reused it from both normal TUI input handling and workspace panel input handling. - Removed Panel
Ctrl+Ttarget switching; Panel now usesTabfor global composer target switching.Ctrl+Tis no longer a Panel target shortcut. - Kept bare letters as composer text and added focused tests for
j/k/o/rtext entry. - Added explicit Panel focus state (
global composer,selected row,item action) and status/actionbar/title wording that distinguishes global composer target from selected rows. Escclears Panel selection/focus back to the global composer target;Ctrl+Cremains quit.- Added shared key handling coverage for word motion/delete and Panel focus/target transitions.
Files changed:
crates/tui/src/composer_keys.rscrates/tui/src/lib.rscrates/tui/src/multi_pod.rscrates/tui/src/single_pod.rscrates/tui/src/workspace_panel.rs
Validation:
cargo test -p tui composer_keys— passedcargo test -p tui multi_composer— passedcargo test -p tui multi_ctrl_t_does_not_switch_composer_target— passedcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blank— passedcargo test -p tui multi_esc_clears_panel_focus_without_quitting— passedcargo fmt --check— passedgit diff --check— passedcargo run -q -p yoi -- ticket doctor— passed (doctor: ok)cargo check --workspace— passednix build .#yoi— passed
Commit: 20f06b3 (tui: clarify panel focus and composer keys).
Reviewer notes:
- The workspace panel does not currently expose an active completion popup/source; the Tab handling path is now isolated as the target-switch path, with completion ownership documented in the shared key handling boundary for future completion integration.
- Row Enter behavior is preserved for dispatch/open, while Right marks item-action focus and status text makes that model explicit.
Implementation report
Coder implementation completed and is ready for sibling review.
Coder Pod:
coder-panel-display-composer-keys- Commit:
20f06b3 tui: clarify panel focus and composer keys - Worktree status before review: clean branch
panel-display-composer-keys - Stopped after collecting output to reclaim delegated worktree scope.
UI/key handling design:
- Panel target switching moved from
Ctrl+TtoTab. Ctrl+Tno longer switches targets in Panel.- Bare letters such as
j/k/o/rremain composer text, not shortcuts. - Panel focus is explicit: global composer, selected row, or item action.
- Composer send target is displayed as global composer target and does not imply selected Ticket target.
Escclears Panel selection/focus toward global composer/no-selection;Ctrl+Cremains quit.Rightcan move into item action focus while rowEnterbehavior is preserved.
Implementation summary:
- Added shared
composer_keyskeymap used by normal TUI and workspace panel. - Shared editing covers insert, Alt+Enter newline, backspace/delete, left/right, word left/right, word delete, Home/End; caller keeps Up/Down history/list/completion context.
- Updated Panel help/top/actionbar wording to remove
Ctrl+Tand ambiguous empty Enter wording. - Added/updated Panel tests for Tab switching, Ctrl+T non-switching, bare-letter regression, shared word motion/delete, Esc focus clear, and Ctrl+C quit.
Changed files:
crates/tui/src/composer_keys.rscrates/tui/src/lib.rscrates/tui/src/multi_pod.rscrates/tui/src/single_pod.rscrates/tui/src/workspace_panel.rs
Coder validation reported passed:
cargo test -p tui composer_keyscargo test -p tui multi_composercargo test -p tui multi_ctrl_t_does_not_switch_composer_targetcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blankcargo test -p tui multi_esc_clears_panel_focus_without_quittingcargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctorcargo check --workspacenix build .#yoi
Residual note:
- Panel currently has no active completion popup/source, so completion-priority for
Tabis expressed as the caller consuming Tab before target switching when completion exists.
Review: request changes
Review result: request changes
The implementation satisfies several mechanical invariants, but I found a remaining Panel display/focus ambiguity that is in scope for this Ticket.
Blocking issue
When a Ticket/action row is selected and the global composer contains text, Enter no longer dispatches the selected row action; it sends/launches through the global composer target. That behavior is encoded in MultiPodApp::handle_key by requiring composer_is_blank() before selected-ticket actions and falling through to the composer target for non-empty input. However, the rendered actionbar still prioritizes selected_open_disabled_reason() whenever a row is selected, without checking whether the composer is non-empty. This can still tell the user the selected Ticket row action is what Enter does while Enter actually uses the global composer target.
Relevant evidence:
crates/tui/src/multi_pod.rs: selected-ticket actions are Enter-only whenself.input.is_blank().crates/tui/src/multi_pod.rs:draw_actionbarchoosesselected_open_disabled_reason()before the generic target hint and does not account for non-empty composer text.crates/tui/src/multi_pod.rs:draw_target_statusshows both selected-row focus and composer target, but it still does not make the non-empty-composer Enter behavior authoritative enough to override the selected row action hint.
This leaves the exact mixed state the Ticket called out: selected Ticket row + bottom composer text + unclear/contradictory Enter semantics. Please either make typing/non-empty composer shift focus/display to the global composer, or make the actionbar/target status explicitly prioritize the composer-target Enter action whenever the composer is non-empty, with a regression test for the selected-row + non-empty-composer case.
Focused checks that passed
Ctrl+Tno longer appears to be a Panel target switch in the changed Panel key path;Tabhandles Panel target switching.- Bare panel letters go through the shared composer key handling path rather than row shortcuts.
- Shared
composer_keysis used by both normal TUI and the workspace panel for cursor movement, deletion, word movement/deletion, and newline insertion where supported. - Changed files are limited to TUI files; I did not find broad Ticket backend/schema/tool changes.
Validation run
Passed:
cargo test -p tui composer_keyscargo test -p tui multi_composercargo test -p tui multi_ctrl_t_does_not_switch_composer_targetcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blankcargo test -p tui multi_esc_clears_panel_focus_without_quittingcargo fmt --checkgit diff --check HEAD^..HEADcargo check --workspacenix build .#yoicargo run -q -p yoi -- ticket doctor
Also ran broader cargo test -p tui, which failed in existing Panel tests (ticket_queue_notification_message_carries_routing_contract, panel_ticket_rows_use_aligned_columns_before_title, panel_ticket_title_truncates_after_stable_columns). These do not appear to be the new focused composer-key tests, but the package test suite is not fully green at this commit and should be classified before merge.
Review: request changes
Review result: request_changes
Blocking issue:
- UI/actionbar can still be ambiguous when a Ticket row is selected and the global composer contains text.
- In
crates/tui/src/multi_pod.rs, selected Ticket action dispatch only happens whencomposer_is_blank(). - If composer text is non-empty,
Enteracts on the global composer target (Companion send / Ticket Intake launch), not the selected row. - However,
draw_actionbarstill prioritizes selected row action/disabled reason and does not consider whether composer text is non-empty. - This can show a row-action hint while actual
Entersubmits composer text to the global target, violating the requirement that global composer text must not imply it applies to a selected Ticket and that display/focus messaging answers what Enter does now.
Required fix:
- Make actionbar/target status prioritize the global composer Enter behavior when composer text is non-empty, or move focus/display to global composer/no-selection when text entry begins.
- Add a regression test for the state: selected Ticket row + non-empty composer text => actionbar/status describes composer-target Enter behavior, not row action.
Validation evidence from reviewer:
- Passed:
cargo test -p tui composer_keyscargo test -p tui multi_composercargo test -p tui multi_ctrl_t_does_not_switch_composer_targetcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blankcargo test -p tui multi_esc_clears_panel_focus_without_quittingcargo fmt --checkgit diff --check HEAD^..HEADcargo check --workspacenix build .#yoicargo run -q -p yoi -- ticket doctor
- Additional full
cargo test -p tuiwas attempted and failed in 3 broader panel tests. These failures are not clearly from the new composer-key focused tests, but should be classified before merge if relevant:multi_pod::tests::ticket_queue_notification_message_carries_routing_contractmulti_pod::tests::panel_ticket_rows_use_aligned_columns_before_titlemulti_pod::tests::panel_ticket_title_truncates_after_stable_columns
Implementation report
Coder fix-loop completed and is ready for re-review.
Coder Pod:
coder-panel-display-composer-keys- New fix commit:
573b02fbfc258d9cdce01955a9e11fd2998fbcfd tui: clarify panel composer enter hints - Branch status after fix: clean
- Stopped after collecting output to reclaim delegated worktree scope.
Fix summary:
- When a Ticket row is selected but the global composer contains non-empty text, actionbar / target status now prioritizes the composer target
Enterbehavior instead of row action hints. - Added regression test
selected_ticket_row_with_non_empty_composer_shows_composer_enter_behavior. - Updated branch-local panel row / queue notification tests to the current canonical Ticket ID display/wording.
Classification of reviewer-noted full TUI failures:
ticket_queue_notification_message_carries_routing_contract: branch-local expectation drift from canonical Ticket id + title / planning return wording; fixed.panel_ticket_rows_use_aligned_columns_before_title: branch-local expectation drift from canonical ID display; fixed while preserving stable-column assertion.panel_ticket_title_truncates_after_stable_columns: same canonical-ID display expectation drift; fixed.
Coder validation reported passed:
cargo test -p tui composer_keyscargo test -p tui multi_composercargo test -p tui multi_ctrl_t_does_not_switch_composer_targetcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blankcargo test -p tui multi_esc_clears_panel_focus_without_quittingcargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behaviorcargo test -p tui ticket_queue_notification_message_carries_routing_contractcargo test -p tui panel_ticket_rows_use_aligned_columns_before_titlecargo test -p tui panel_ticket_title_truncates_after_stable_columnscargo test -p tuicargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctorcargo check --workspacenix build .#yoi
Coder reports no remaining risks.
Review: approve
Re-review result: approve
The request-changes blocker is fixed. In the selected Ticket row + non-empty global composer state, Panel display now prioritizes the composer target Enter behavior instead of selected-row action hints.
Evidence:
crates/tui/src/multi_pod.rshandle_keystill gates selected Ticket row actions oncomposer_is_blank(), so non-empty composer text enters the global composer submission path.target_status_linenow returns an explicitfocus global composer · composer <target> · Enter <composer behavior>line before selected-row status whenever the composer is non-blank.actionbar_left_textnow checks!app.composer_is_blank()beforeselected_open_disabled_reason(), so non-empty composer text showsCompanion target: Enter sends/keeps draft...orTicket Intake target: Enter launches Intake...instead of row action text.- Regression test
selected_ticket_row_with_non_empty_composer_shows_composer_enter_behaviorcovers a selected Queue row plus non-empty Companion draft and asserts the actionbar/status describe composer Enter behavior and omit the row action.
Other requirements re-checked:
Ctrl+Tis not a Panel target switch and no Panel top/actionbar/help literal advertises it; only normal single-Pod handling and the regression test name/path remain.Tabis the Panel target switch path; the shared composer keymap leavesTabfor caller-level completion/target handling, and the Panel has no active completion source to exercise beyond this boundary.- Bare letters remain composer text, not Panel row shortcuts.
- Shared
composer_keysis used by both normal TUI and Panel composer editing. Escclears Panel focus toward the global composer;Ctrl+C/Ctrl+Dquit.- Changed source scope remains TUI-only; I did not find Ticket backend/schema/tool changes.
Validation run from /home/hare/Projects/yoi/.worktree/panel-display-composer-keys:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behavior— passedcargo test -p tui multi_ctrl_t_does_not_switch_composer_target— passedcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blank— passedcargo test -p tui multi_esc_clears_panel_focus_without_quitting— passedcargo test -p tui ticket_queue_notification_message_carries_routing_contract— passedcargo test -p tui panel_ticket_rows_use_aligned_columns_before_title— passedcargo test -p tui panel_ticket_title_truncates_after_stable_columns— passedcargo test -p tui— passed (291 passed)cargo fmt --check— passedgit diff --check— passedcargo run -q -p yoi -- ticket doctor— passed (doctor: ok)cargo check --workspace— passednix build .#yoi— passed
Residual risks:
- No blocking residual risks found. Completion-priority for Panel
Tabcould not be runtime-tested because the current Panel does not expose an active completion popup/source; the implementation leaves that priority boundary with the caller as intended.
Review: approve
Review result: approve
Evidence:
handle_keystill dispatches selected Ticket row actions only whencomposer_is_blank().- With non-empty composer text,
target_status_linereturnsfocus global composer · composer <target> · Enter <composer behavior>before selected-row action status, so Enter behavior is described as composer-target submission. actionbar_left_textchecks!app.composer_is_blank()before selected-row disabled/action reasons, so selected Ticket row + non-empty composer does not show row-action hints.- Regression test
selected_ticket_row_with_non_empty_composer_shows_composer_enter_behaviorverifies selected Queue row + non-empty Companion draft displays composer Enter behavior and does not display row action. Ctrl+Tremains removed from Panel target switching/help/actionbar and is not a Panel target switch.Tabremains Panel target switch path. Since Panel currently has no active completion source, runtime completion priority is confirmed at the boundary design level: shared composer keymap leaves Tab to caller-level handling.- Bare letter shortcuts are not restored;
j/k/o/rare composer text. composer_keysis shared by normal TUI and Panel composer editing.Escreturns focus toward global composer/no-selection;Ctrl+C/Ctrl+Dquit.- Changes are limited to TUI source; no Ticket backend/schema/tool changes.
Reviewer validation:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behaviorcargo test -p tui multi_ctrl_t_does_not_switch_composer_targetcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blankcargo test -p tui multi_esc_clears_panel_focus_without_quittingcargo test -p tui ticket_queue_notification_message_carries_routing_contractcargo test -p tui panel_ticket_rows_use_aligned_columns_before_titlecargo test -p tui panel_ticket_title_truncates_after_stable_columnscargo test -p tui(291 passed)cargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctorcargo check --workspacenix build .#yoi
Residual risk: no blocking risk. Panel has no active completion popup/source yet, so Tab completion priority remains verified at the caller-boundary design level rather than by an active completion UI scenario.
State changed
Ticket を closed にしました。
完了
Implemented, reviewed, merged, and validated.
Summary:
- Clarified Panel focus and composer key handling.
- Moved Panel target switching from
Ctrl+TtoTab;Ctrl+Tno longer switches Panel targets or appears in Panel help/actionbar as target switch. - Added shared
composer_keyshandling used by normal TUI and workspace panel composer editing. - Preserved bare-letter typing behavior; letters such as
j/k/o/renter composer text rather than acting as shortcuts. - Made focus/Enter behavior clearer for global composer, selected row, and item action states.
- Fixed selected Ticket row + non-empty global composer ambiguity: actionbar/status now describes composer-target Enter behavior rather than row action.
- Added regression tests and updated Panel canonical-ID display tests.
Implementation:
- Coder commits:
20f06b3 tui: clarify panel focus and composer keys,573b02f tui: clarify panel composer enter hints - Reviewer approved after fix loop.
- Merge commit:
57ed405 merge: improve panel composer keys
Validation after merge:
cargo test -p tui selected_ticket_row_with_non_empty_composer_shows_composer_enter_behaviorcargo test -p tui multi_ctrl_t_does_not_switch_composer_targetcargo test -p tui multi_bare_panel_letters_append_to_composer_and_arrows_select_when_blankcargo test -p tui multi_esc_clears_panel_focus_without_quittingcargo test -p tui ticket_queue_notification_message_carries_routing_contractcargo test -p tui panel_ticket_rows_use_aligned_columns_before_titlecargo test -p tui panel_ticket_title_truncates_after_stable_columnscargo test -p tui(291 passed)cargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctorcargo check --workspacenix build .#yoi