UAT: TUI block cursor navigation not implemented — conversation stream is a plain Static widget #3314

Open
opened 2026-04-05 09:40:02 +00:00 by freemo · 1 comment
Owner

Metadata

  • Branch: fix/tui-block-cursor-navigation
  • Commit Message: fix(tui): implement ADR-044 block cursor navigation for conversation stream
  • Milestone: v3.7.0
  • Parent Epic: #868

Summary

The block cursor navigation system specified in ADR-044 is completely absent. The conversation area in app.py is a plain _Static widget displaying text, not a 2-column grid with a navigable block cursor column.

Expected Behavior (from ADR-044)

The conversation uses a 2-column grid:

  • Left column: 1-character-wide cursor column with a block cursor navigable via alt+up / alt+down
  • Right column: Content stream with typed message blocks (Welcome, UserInput, ActorResponse, ToolCall, etc.)

The block cursor provides keyboard-driven message navigation:

  • alt+up / alt+down moves the cursor between message blocks
  • enter or space on a block expands/collapses it

Actual Behavior

The _TextualCleverAgentsTuiApp.compose() method in src/cleveragents/tui/app.py (lines 102-112) yields a _Static widget with id="conversation" as the conversation area. This is a plain text display widget with no cursor column, no block navigation, and no expand/collapse functionality.

The BINDINGS list (lines 84-89) contains only:

  • ctrl+q → quit
  • f1 → help
  • ctrl+t → cycle_preset

There are no alt+up, alt+down, enter, or space bindings for block cursor navigation.

Code Location

  • src/cleveragents/tui/app.pycompose() method (lines 102-112): _Static used instead of a 2-column grid
  • src/cleveragents/tui/app.pyBINDINGS (lines 84-89): missing alt+up, alt+down bindings

Steps to Reproduce

  1. Inspect src/cleveragents/tui/app.py
  2. Review compose() — conversation is _Static("CleverAgents TUI", id="conversation")
  3. Review BINDINGS — no alt+up/alt+down bindings
  4. ADR-044 specifies the 2-column grid with block cursor as a core conversation stream feature

Impact

This is a critical gap that blocks v3.7.0 milestone acceptance. The block cursor is the primary keyboard navigation mechanism for the conversation stream. Without it, users cannot navigate between messages, expand/collapse tool calls, or interact with conversation blocks via keyboard — violating the ADR-044 requirement that "all TUI functionality must be accessible via keyboard alone."

Subtasks

  • Replace _Static widget in compose() with a 2-column Grid layout (1-char cursor column + content column)
  • Implement BlockCursorColumn widget with visual block cursor indicator
  • Implement typed message block widgets: WelcomeBlock, UserInputBlock, ActorResponseBlock, ToolCallBlock
  • Add alt+up / alt+down BINDINGS and action handlers for cursor movement between blocks
  • Add enter / space BINDINGS and action handlers for expand/collapse of focused block
  • Wire conversation stream events to append new message blocks to the right column
  • Write unit tests for cursor navigation logic (move up/down, wrap behaviour)
  • Write unit tests for expand/collapse toggle on each block type

Definition of Done

  • compose() yields a 2-column grid matching ADR-044 specification
  • alt+up / alt+down move the block cursor between message blocks
  • enter / space expand/collapse the focused block
  • All five message block types (Welcome, UserInput, ActorResponse, ToolCall, and at least one more) are implemented
  • All TUI functionality is accessible via keyboard alone (ADR-044 compliance)
  • All nox stages pass
  • Coverage >= 97%

Automated by CleverAgents Bot
Supervisor: UAT Testing | Agent: ca-new-issue-creator

## Metadata - **Branch**: `fix/tui-block-cursor-navigation` - **Commit Message**: `fix(tui): implement ADR-044 block cursor navigation for conversation stream` - **Milestone**: v3.7.0 - **Parent Epic**: #868 ## Summary The block cursor navigation system specified in ADR-044 is completely absent. The conversation area in `app.py` is a plain `_Static` widget displaying text, not a 2-column grid with a navigable block cursor column. ## Expected Behavior (from ADR-044) The conversation uses a 2-column grid: - **Left column**: 1-character-wide cursor column with a block cursor navigable via `alt+up` / `alt+down` - **Right column**: Content stream with typed message blocks (Welcome, UserInput, ActorResponse, ToolCall, etc.) The block cursor provides keyboard-driven message navigation: - `alt+up` / `alt+down` moves the cursor between message blocks - `enter` or `space` on a block expands/collapses it ## Actual Behavior The `_TextualCleverAgentsTuiApp.compose()` method in `src/cleveragents/tui/app.py` (lines 102-112) yields a `_Static` widget with `id="conversation"` as the conversation area. This is a plain text display widget with no cursor column, no block navigation, and no expand/collapse functionality. The `BINDINGS` list (lines 84-89) contains only: - `ctrl+q` → quit - `f1` → help - `ctrl+t` → cycle_preset There are no `alt+up`, `alt+down`, `enter`, or `space` bindings for block cursor navigation. ## Code Location - `src/cleveragents/tui/app.py` — `compose()` method (lines 102-112): `_Static` used instead of a 2-column grid - `src/cleveragents/tui/app.py` — `BINDINGS` (lines 84-89): missing `alt+up`, `alt+down` bindings ## Steps to Reproduce 1. Inspect `src/cleveragents/tui/app.py` 2. Review `compose()` — conversation is `_Static("CleverAgents TUI", id="conversation")` 3. Review `BINDINGS` — no alt+up/alt+down bindings 4. ADR-044 specifies the 2-column grid with block cursor as a core conversation stream feature ## Impact This is a critical gap that blocks v3.7.0 milestone acceptance. The block cursor is the primary keyboard navigation mechanism for the conversation stream. Without it, users cannot navigate between messages, expand/collapse tool calls, or interact with conversation blocks via keyboard — violating the ADR-044 requirement that "all TUI functionality must be accessible via keyboard alone." ## Subtasks - [ ] Replace `_Static` widget in `compose()` with a 2-column `Grid` layout (1-char cursor column + content column) - [ ] Implement `BlockCursorColumn` widget with visual block cursor indicator - [ ] Implement typed message block widgets: `WelcomeBlock`, `UserInputBlock`, `ActorResponseBlock`, `ToolCallBlock` - [ ] Add `alt+up` / `alt+down` BINDINGS and action handlers for cursor movement between blocks - [ ] Add `enter` / `space` BINDINGS and action handlers for expand/collapse of focused block - [ ] Wire conversation stream events to append new message blocks to the right column - [ ] Write unit tests for cursor navigation logic (move up/down, wrap behaviour) - [ ] Write unit tests for expand/collapse toggle on each block type ## Definition of Done - [ ] `compose()` yields a 2-column grid matching ADR-044 specification - [ ] `alt+up` / `alt+down` move the block cursor between message blocks - [ ] `enter` / `space` expand/collapse the focused block - [ ] All five message block types (Welcome, UserInput, ActorResponse, ToolCall, and at least one more) are implemented - [ ] All TUI functionality is accessible via keyboard alone (ADR-044 compliance) - [ ] All nox stages pass - [ ] Coverage >= 97% --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: ca-new-issue-creator
freemo added this to the v3.7.0 milestone 2026-04-05 09:42:06 +00:00
Author
Owner

Issue triaged by project owner:

  • State: Verified
  • Priority: Critical (retained — TUI block cursor navigation is a core v3.7.0 feature)
  • Milestone: v3.7.0 (already assigned — correct)
  • MoSCoW: Should Have — while block cursor navigation is specified for the TUI, v3.7.0 has no deadline and is lower priority than the overdue M3-M6 milestones. The TUI can function without block cursor navigation initially.

Automated by CleverAgents Bot
Supervisor: Project Owner | Agent: ca-project-owner

Issue triaged by project owner: - **State**: Verified - **Priority**: Critical (retained — TUI block cursor navigation is a core v3.7.0 feature) - **Milestone**: v3.7.0 (already assigned — correct) - **MoSCoW**: Should Have — while block cursor navigation is specified for the TUI, v3.7.0 has no deadline and is lower priority than the overdue M3-M6 milestones. The TUI can function without block cursor navigation initially. --- **Automated by CleverAgents Bot** Supervisor: Project Owner | Agent: ca-project-owner
freemo removed this from the v3.7.0 milestone 2026-04-07 00:00:11 +00:00
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.

Blocks
Reference
cleveragents/cleveragents-core#3314
No description provided.