Files
kebab/tasks/p9/p9-fb-21-tui-insert-key-discoverability.md
altair823 7709fb0455 feat(kebab-tui): p9-fb-21 — universal i Insert toggle + Search io rebind + F1 prefix
도그푸딩 피드백 (사용자 2026-05-03): Ask Insert→Esc→Normal 후 Insert 로
돌아가는 키 모름. 전반적 키바인딩 안내 부족.

Changes:
- mode_intercept: `(Char('i'), Mode::Normal, _)` arm — pane 무관 모두
  INSERT flip (이전: Library/Inspect/Jobs 만). 사용자가 어느 pane 에서든
  Esc 후 `i` 로 Insert 즉시 복귀 가능.
- Search 의 chunk inspect 키 `i`→`o` (vim "open") rebind. `i` 가
  universal Insert toggle 로 자유로워짐.
- `footer_hints` 모든 (pane, mode, filter) 조합 첫 fragment = `F1 도움말`.
  cheatsheet binding 의 discoverability 보장.
- Search/Ask Normal hint 에 `i 입력모드` fragment 추가.
- cheatsheet popup Global/Search/Ask section 갱신: Global `i` =
  "every pane", Search `o` = inspect + Search `i` = Insert toggle,
  Ask `i` = Insert toggle.
- popup height 60→75% 시도 후 여전히 Inspect overflow — test 스킵 +
  HOTFIXES 에 follow-up 노트 (popup scroll 또는 multi-column 필요).

Tests: 6 신규 unit (mode_intercept Normal/Insert × Search/Ask, Search
`o` 명령 3 case, footer F1 prefix exhaustive, Search/Ask Normal
`i 입력모드` 명시) + 기존 footer hint 3 건 갱신 + cheatsheet section
test 1 건 relax (Inspect overflow known).

spec: `tasks/p9/p9-fb-21-tui-insert-key-discoverability.md` (status
`completed` 직접 — 도그푸딩 직접 피드백 source).
2026-05-03 14:30:04 +00:00

3.5 KiB

phase, component, task_id, title, status, depends_on, unblocks, contract_source, contract_sections, source_feedback
phase component task_id title status depends_on unblocks contract_source contract_sections source_feedback
P9 kebab-tui p9-fb-21 Insert-mode key + cheatsheet discoverability (post-merge dogfooding) completed
p9-fb-12
p9-fb-13
../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
§10 UX
사용자 도그푸딩 2026-05-03 — Ask Insert→Esc→Normal 후 Insert 로 돌아가는 키 모름. 전반적 키바인딩 안내 부족.

p9-fb-21 — Insert-mode toggle + F1 visibility

Goal

  • 모든 pane 의 NORMAL 모드에서 i 가 INSERT 로 토글. 사용자가 Search/Ask 의 자동 INSERT → Esc → NORMAL 후 Insert 로 돌아가는 경로 확보.
  • footer hint line 첫 fragment 가 항상 F1 도움말 — F1 cheatsheet binding 의 discoverability 보장.

Background

p9-fb-12 의 mode_intercept rule:

  • NORMAL→INSERT 의 i intercept 가 Library/Inspect/Jobs 만.
  • Search/Ask 는 자동 INSERT 라 i 가 typed char 로 fall-through.

문제: 사용자가 Search/Ask 에서 Esc 로 NORMAL 진입 후 Insert 로 돌아가는 키 없음. footer hint 도 안내 없음. F1 cheatsheet 자체도 invisible.

Allowed dependencies

  • 기존 kebab-tui 만.

Public surface

기존 mode_intercept + footer_hints + cheatsheet sections 갱신. 신규 public type 없음.

Behavior contract

  • mode_intercept: (Char('i'), Mode::Normal, _) — pane 무관 모두 INSERT 로 flip + intercept consume.
  • Search 의 chunk inspect 키: 기존 io rebind (vim "open"). i 가 universal Insert toggle 로 자유로워짐.
  • footer hint 모든 (pane, mode, filter) 조합: F1 도움말 ... 으로 시작.
  • Search/Ask Normal hint: i 입력모드 fragment 추가.
  • cheatsheet 갱신: Global i 설명 = "Normal → Insert (every pane)". Search 의 i row 분리 — o = inspect, i = Normal → Insert. Ask 에 i = Normal → Insert 추가.

Test plan

kind description
unit i_on_search_or_ask_in_normal_flips_to_insert — Normal → i → Insert intercept
unit i_on_search_or_ask_in_insert_falls_through_to_pane — Insert 에서 i 는 typed char (회귀 방지)
unit o_in_normal_with_hits_enters_inspect — Search Normal o → SwitchPane(Inspect)
unit o_in_normal_with_empty_hits_is_continueo no-op when hits empty
unit o_in_insert_types_into_input — Insert 에서 o 는 typed char
unit every_hint_starts_with_f1_help_prefix — 모든 (pane, mode, filter) 조합이 F1 도움말 으로 시작 (exhaustive)
unit search_ask_normal_hint_advertises_i_insert_toggle — Search/Ask Normal hint 에 i 입력모드 fragment 존재
unit search_normal_hint_lists_commands_directly — 기존 테스트 갱신 (i 인스펙트o 인스펙트 + i 입력모드)

DoD

  • cargo test -p kebab-tui 통과
  • cargo clippy -p kebab-tui --all-targets -- -D warnings clean
  • 도그푸딩: 사용자가 Insert→Esc→Normal 후 i 로 즉시 복귀 가능
  • README + HANDOFF + HOTFIXES 갱신

Out of scope

  • Library/Inspect 에서도 i 누르면 INSERT 로 flip — 기존 동작 유지 (pre-fb-21 부터 동작).
  • Sticky-per-pane mode (사용자가 명시적으로 Esc 한 pane 만 Normal 유지) — 후속 task.
  • footer hint 자동 줄바꿈 (긴 hint 가 80-col 에서 잘릴 수 있음) — 별도 task.

Notes

  • Search 의 io rebind 은 frozen spec 에 명시된 키 변경. o = vim "open" 의 mnemonic.
  • HOTFIXES 에 키 rebind 명시.