UAT: Block cursor navigation missing — conversation uses Static widget instead of ContentsGrid per ADR-044 #5962

Open
opened 2026-04-09 12:20:37 +00:00 by HAL9000 · 1 comment
Owner

Bug Report

Feature Area: TUI Main Screen — Block Cursor Navigation
Severity: Critical — blocks v3.7.0 milestone acceptance
Spec Reference: ADR-044 §Conversation Stream Architecture
Found by: UAT Testing Pool (uat-pool-1), worker: tui-main-screen


What Was Tested

Code-level analysis of src/cleveragents/tui/app.py and src/cleveragents/tui/widgets/ for conversation stream and block cursor implementation.

Expected Behavior (from spec/ADR-044)

ADR-044 §Conversation Stream Architecture defines:

"The conversation uses a 2-column grid: a 1-character-wide cursor column (left) with a block cursor navigable via alt+up/alt+down, and the content stream (right). The block cursor provides keyboard-driven message navigation — pressing enter or space on a block expands/collapses it."

The ContentsGrid layout:

┌─ ContentsGrid ─────────────────────────────────┐
│ Cursor │ Contents stream                       │
│  (1ch) │  - Welcome / UserInput / ActorResponse│
│        │  - ToolCall / PlanProgress / DiffView │
│        │  - TerminalEmbed / Note / Warning     │
└────────┴───────────────────────────────────────┘

Required bindings:

  • alt+up / alt+down — navigate block cursor between message blocks
  • enter / space — expand/collapse the focused block

Required conversation block types (from spec):

  • Welcome, UserInput, ActorResponse, ActorThought
  • ToolCall, PlanProgress, DiffView
  • TerminalEmbed, ShellResult, Note

Actual Behavior

The conversation in app.py is a plain _Static widget:

yield _Static("CleverAgents TUI", id="conversation")

And updates are done with raw text:

conversation = self.query_one("#conversation", _Static)
conversation.update(result.command_result or "")

No ContentsGrid widget exists. No block cursor. No alt+up/alt+down bindings. No typed message block widgets (no UserInput, ActorResponse, ToolCall, etc. widgets).

The widgets/ directory has no conversation.py file. The widgets/__init__.py does not export any conversation stream widgets.

Steps to Reproduce

grep -r "ContentsGrid\|block.cursor\|alt.up\|alt.down\|UserInput\|ActorResponse\|ToolCall\|PlanProgress" src/cleveragents/tui/ --include="*.py"
# No matches

ls src/cleveragents/tui/widgets/
# No conversation.py

Impact

Block cursor navigation is explicitly listed in the v3.7.0 milestone scope:

"Dracula theme, block cursor navigation, notification system"

Without the ContentsGrid and block cursor:

  • Users cannot keyboard-navigate between message blocks
  • Tool call results cannot be expanded/collapsed
  • The conversation is a flat text dump, not an interactive stream
  • The TUI provides no advantage over the CLI for conversation review

Code Location

  • src/cleveragents/tui/app.py — line 112 (yield _Static("CleverAgents TUI", id="conversation"))
  • src/cleveragents/tui/widgets/ — no conversation.py

Automated by CleverAgents Bot
Supervisor: UAT Testing | Agent: uat-tester

## Bug Report **Feature Area:** TUI Main Screen — Block Cursor Navigation **Severity:** Critical — blocks v3.7.0 milestone acceptance **Spec Reference:** ADR-044 §Conversation Stream Architecture **Found by:** UAT Testing Pool (uat-pool-1), worker: tui-main-screen --- ## What Was Tested Code-level analysis of `src/cleveragents/tui/app.py` and `src/cleveragents/tui/widgets/` for conversation stream and block cursor implementation. ## Expected Behavior (from spec/ADR-044) ADR-044 §Conversation Stream Architecture defines: > "The conversation uses a 2-column grid: a 1-character-wide cursor column (left) with a block cursor navigable via `alt+up`/`alt+down`, and the content stream (right). The block cursor provides keyboard-driven message navigation — pressing `enter` or `space` on a block expands/collapses it." The `ContentsGrid` layout: ``` ┌─ ContentsGrid ─────────────────────────────────┐ │ Cursor │ Contents stream │ │ (1ch) │ - Welcome / UserInput / ActorResponse│ │ │ - ToolCall / PlanProgress / DiffView │ │ │ - TerminalEmbed / Note / Warning │ └────────┴───────────────────────────────────────┘ ``` Required bindings: - `alt+up` / `alt+down` — navigate block cursor between message blocks - `enter` / `space` — expand/collapse the focused block Required conversation block types (from spec): - `Welcome`, `UserInput`, `ActorResponse`, `ActorThought` - `ToolCall`, `PlanProgress`, `DiffView` - `TerminalEmbed`, `ShellResult`, `Note` ## Actual Behavior The conversation in `app.py` is a plain `_Static` widget: ```python yield _Static("CleverAgents TUI", id="conversation") ``` And updates are done with raw text: ```python conversation = self.query_one("#conversation", _Static) conversation.update(result.command_result or "") ``` No `ContentsGrid` widget exists. No block cursor. No `alt+up`/`alt+down` bindings. No typed message block widgets (no `UserInput`, `ActorResponse`, `ToolCall`, etc. widgets). The `widgets/` directory has no `conversation.py` file. The `widgets/__init__.py` does not export any conversation stream widgets. ## Steps to Reproduce ```bash grep -r "ContentsGrid\|block.cursor\|alt.up\|alt.down\|UserInput\|ActorResponse\|ToolCall\|PlanProgress" src/cleveragents/tui/ --include="*.py" # No matches ls src/cleveragents/tui/widgets/ # No conversation.py ``` ## Impact Block cursor navigation is explicitly listed in the v3.7.0 milestone scope: > "Dracula theme, block cursor navigation, notification system" Without the `ContentsGrid` and block cursor: - Users cannot keyboard-navigate between message blocks - Tool call results cannot be expanded/collapsed - The conversation is a flat text dump, not an interactive stream - The TUI provides no advantage over the CLI for conversation review ## Code Location - `src/cleveragents/tui/app.py` — line 112 (`yield _Static("CleverAgents TUI", id="conversation")`) - `src/cleveragents/tui/widgets/` — no `conversation.py` --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
HAL9000 added this to the v3.7.0 milestone 2026-04-09 12:31:31 +00:00
Author
Owner

Hierarchical Compliance Fix: This issue was detected as an orphan (no parent Epic).

Solution: Linked to Epic #4963 (TUI Core Layout & Navigation — MainScreen, Sidebar, Hotkeys) as block cursor navigation is part of the TUI core layout scope.

Hierarchy: Issue #5962 → Epic #4963 → Legendary #4946


Automated by CleverAgents Bot
Supervisor: Epic Planning | Agent: epic-planner

**Hierarchical Compliance Fix**: This issue was detected as an orphan (no parent Epic). **Solution**: Linked to Epic #4963 (TUI Core Layout & Navigation — MainScreen, Sidebar, Hotkeys) as block cursor navigation is part of the TUI core layout scope. **Hierarchy**: Issue #5962 → Epic #4963 → Legendary #4946 --- **Automated by CleverAgents Bot** Supervisor: Epic Planning | Agent: epic-planner
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.

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