UAT: TUI MainScreen missing shift+tab, ctrl+b, ctrl+s, tab, ctrl+tab keyboard bindings #1330

Closed
opened 2026-04-02 16:52:14 +00:00 by freemo · 0 comments
Owner

Bug Report: [tui] — Multiple required keyboard bindings are missing from MainScreen

Severity Assessment

  • Impact: High. Users cannot use the TUI keyboard-first interface as specified. Core navigation shortcuts are absent, making the TUI non-functional per spec.
  • Likelihood: 100% reproducible.
  • Priority: High

Location

  • File: src/cleveragents/tui/app.pyBINDINGS class variable (lines 90–93)

Description

The spec defines a comprehensive set of keyboard bindings for the MainScreen. The current implementation only registers 3 bindings:

BINDINGS: ClassVar[list[tuple[str, str, str]]] = [
    ("ctrl+q", "quit", "Quit"),
    ("f1", "help", "Help"),
    ("ctrl+t", "cycle_preset", "Cycle Preset"),  # Wrong key — spec says ctrl+tab
]

Missing Bindings (from spec §Keyboard Reference)

Key Required Action Status
shift+tab Cycle sidebar: hidden → visible → fullscreen Missing
tab Cycle to next persona Missing
ctrl+tab Cycle to next argument preset Wrong key (uses ctrl+t instead)
ctrl+s Open Sessions screen Missing
ctrl+n Create new session tab Missing
ctrl+w Close current session tab Missing
ctrl+[ Switch to previous session tab Missing
ctrl+] Switch to next session tab Missing
ctrl+b Focus sidebar (when visible) Missing
escape Close overlay / modal / sidebar toward main screen Missing
ctrl+c Interrupt actor / double-tap to quit Missing
F2 / ctrl+, Open settings Missing

Specific Discrepancy: ctrl+t vs ctrl+tab

The spec (§MainScreen — Prompt Focused) states:

ctrl+tab — Cycle to next argument preset

The implementation uses ctrl+t instead:

("ctrl+t", "cycle_preset", "Cycle Preset"),

This is also documented in issue #1290 (UAT: TUI help panel key bindings are inconsistent with actual app bindings), which notes the help panel documents ctrl+tab but the app uses ctrl+t.

The spec shows the footer as:

F1 Help │ shift+tab Sidebar │ tab Persona │ ctrl+tab Preset │ ctrl+s Sessions │ ctrl+q Quit

The actual footer (from Textual's _Footer) will only show the 3 registered bindings, not the 12+ required by spec.

Steps to Reproduce

  1. Run the TUI
  2. Press shift+tab — no sidebar cycling occurs
  3. Press tab — no persona cycling occurs
  4. Press ctrl+tab — no preset cycling occurs (only ctrl+t works)
  5. Press ctrl+s — no Sessions screen opens
  6. Press ctrl+b — no sidebar focus occurs
  • #694 (feat(tui): Textual MainScreen with sidebar states and Dracula theme)
  • #1290 (UAT: TUI help panel key bindings are inconsistent with actual app bindings)
  • #1315 (Refactor TUI to Align with ADR-44 and ADR-45)

References

  • Spec §Keyboard Reference — Global
  • Spec §MainScreen — Prompt Focused
  • Spec §Sidebar — Visible (Partial)
  • Spec §Sidebar — Fullscreen
## Bug Report: [tui] — Multiple required keyboard bindings are missing from MainScreen ### Severity Assessment - **Impact**: High. Users cannot use the TUI keyboard-first interface as specified. Core navigation shortcuts are absent, making the TUI non-functional per spec. - **Likelihood**: 100% reproducible. - **Priority**: High ### Location - **File**: `src/cleveragents/tui/app.py` — `BINDINGS` class variable (lines 90–93) ### Description The spec defines a comprehensive set of keyboard bindings for the MainScreen. The current implementation only registers 3 bindings: ```python BINDINGS: ClassVar[list[tuple[str, str, str]]] = [ ("ctrl+q", "quit", "Quit"), ("f1", "help", "Help"), ("ctrl+t", "cycle_preset", "Cycle Preset"), # Wrong key — spec says ctrl+tab ] ``` ### Missing Bindings (from spec §Keyboard Reference) | Key | Required Action | Status | |-----|----------------|--------| | `shift+tab` | Cycle sidebar: hidden → visible → fullscreen | ❌ Missing | | `tab` | Cycle to next persona | ❌ Missing | | `ctrl+tab` | Cycle to next argument preset | ❌ Wrong key (uses `ctrl+t` instead) | | `ctrl+s` | Open Sessions screen | ❌ Missing | | `ctrl+n` | Create new session tab | ❌ Missing | | `ctrl+w` | Close current session tab | ❌ Missing | | `ctrl+[` | Switch to previous session tab | ❌ Missing | | `ctrl+]` | Switch to next session tab | ❌ Missing | | `ctrl+b` | Focus sidebar (when visible) | ❌ Missing | | `escape` | Close overlay / modal / sidebar toward main screen | ❌ Missing | | `ctrl+c` | Interrupt actor / double-tap to quit | ❌ Missing | | `F2` / `ctrl+,` | Open settings | ❌ Missing | ### Specific Discrepancy: `ctrl+t` vs `ctrl+tab` The spec (§MainScreen — Prompt Focused) states: > `ctrl+tab` — Cycle to next argument preset The implementation uses `ctrl+t` instead: ```python ("ctrl+t", "cycle_preset", "Cycle Preset"), ``` This is also documented in issue #1290 (UAT: TUI help panel key bindings are inconsistent with actual app bindings), which notes the help panel documents `ctrl+tab` but the app uses `ctrl+t`. ### Footer Discrepancy The spec shows the footer as: ``` F1 Help │ shift+tab Sidebar │ tab Persona │ ctrl+tab Preset │ ctrl+s Sessions │ ctrl+q Quit ``` The actual footer (from Textual's `_Footer`) will only show the 3 registered bindings, not the 12+ required by spec. ### Steps to Reproduce 1. Run the TUI 2. Press `shift+tab` — no sidebar cycling occurs 3. Press `tab` — no persona cycling occurs 4. Press `ctrl+tab` — no preset cycling occurs (only `ctrl+t` works) 5. Press `ctrl+s` — no Sessions screen opens 6. Press `ctrl+b` — no sidebar focus occurs ### Related Issues - #694 (feat(tui): Textual MainScreen with sidebar states and Dracula theme) - #1290 (UAT: TUI help panel key bindings are inconsistent with actual app bindings) - #1315 (Refactor TUI to Align with ADR-44 and ADR-45) ### References - Spec §Keyboard Reference — Global - Spec §MainScreen — Prompt Focused - Spec §Sidebar — Visible (Partial) - Spec §Sidebar — Fullscreen
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core#1330
No description provided.