UAT: Block cursor ConversationWindow widget not implemented in master — only a Static placeholder exists #1343

Open
opened 2026-04-02 16:56:26 +00:00 by freemo · 0 comments
Owner

Bug Report: [tui] — Block cursor ConversationWindow widget not implemented in master

Severity Assessment

  • Impact: Critical. The entire block cursor navigation feature is absent from the production codebase. Users cannot navigate between message blocks, select blocks, or interact with conversation history via keyboard.
  • Likelihood: 100% reproducible — the feature simply does not exist in master.
  • Priority: High

Location

  • File: src/cleveragents/tui/app.py — line 108
  • Missing file: src/cleveragents/tui/widgets/conversation.py (does not exist in master)
  • Missing file: src/cleveragents/tui/screens/main_screen.py (does not exist in master)

Description

The specification (§ "Block Cursor and Context Menu", §"Conversation Stream") requires a dedicated Conversation widget that implements a 2-column grid layout with a 1-character-wide cursor column (left) and a content stream (right). The block cursor ( gutter indicator) must be navigable via alt+up/alt+down.

In the current master branch, the conversation area is implemented as a plain _Static widget with the text "CleverAgents TUI":

# src/cleveragents/tui/app.py, line 108
yield _Static("CleverAgents TUI", id="conversation")

This is a placeholder with no block cursor, no 2-column grid, no message blocks, and no navigation capability.

A Conversation widget with basic cursor navigation exists in the unmerged PR branch feature/m8-tui-mainscreen (PR #1302), but it has not been merged into master and is therefore not available to users.

Spec Requirements Not Met (master branch)

Per docs/specification.md §"Block Cursor and Context Menu":

Requirement Status
2-column grid: 1-char cursor column + content stream Missing
Block cursor gutter indicator Missing
alt+up — move cursor to previous block Missing
alt+down — move cursor to next block Missing
space — expand/collapse focused block Missing
enter — open context menu for focused block Missing
escape — clear cursor, return focus to prompt Missing
Click on block — position cursor on clicked block Missing
ConversationBlock types: Welcome, UserInput, ActorResponse, ActorThought, ToolCall, PlanProgress, DiffView, TerminalEmbed, ShellResult, Note Missing

Evidence

Current master (src/cleveragents/tui/app.py, line 108):

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

Spec requirement (docs/specification.md, line 29658):

The conversation uses a 2-column grid: a 1-character-wide cursor column on the left and the content stream on the right. The block cursor (a gutter indicator) is navigated with alt+up/alt+down and provides keyboard-driven interaction with message blocks.

App BINDINGS (src/cleveragents/tui/app.py, lines 90–93) — no alt+up or alt+down:

BINDINGS: ClassVar[list[tuple[str, str, str]]] = [
    ("ctrl+q", "quit", "Quit"),
    ("f1", "help", "Help"),
    ("ctrl+t", "cycle_preset", "Cycle Preset"),
]

Steps to Reproduce

  1. Run the TUI app (agents tui or equivalent)
  2. Observe the conversation area — it shows a static text placeholder
  3. Press alt+up or alt+down — no cursor navigation occurs
  4. No message blocks are rendered; no gutter indicator is visible

Expected Behavior

The conversation area should render message blocks in a 2-column grid with a cursor indicator in the left column. alt+up/alt+down should move the cursor between blocks.

Actual Behavior

A static text placeholder "CleverAgents TUI" is shown. No block cursor exists. No navigation is possible.

Note on PR #1302

PR #1302 (feature/m8-tui-mainscreen) contains a partial implementation of the Conversation widget with basic move_cursor_up/move_cursor_down methods and alt+up/alt+down bindings. However, this PR is not yet merged and is itself missing several spec-required features (context menu, space/enter handling, key passthrough, ExpandProtocol). See related UAT bugs filed separately.

Category

tui / block-cursor / uat


Metadata

  • Branch: fix/tui-block-cursor-conversation-widget-missing
  • Commit Message: feat(tui): implement ConversationWindow widget with block cursor navigation
  • Milestone: v3.7.0
  • Parent Epic: #694

Subtasks

  • Merge or rebase PR #1302 (feature/m8-tui-mainscreen) which contains the initial Conversation widget implementation
  • Verify the merged Conversation widget implements the full 2-column grid layout with gutter indicator
  • Add alt+up and alt+down bindings to the app/screen BINDINGS
  • Write Behave BDD scenarios covering: cursor navigation up/down, cursor display, block rendering for all 10 block types
  • Run nox -e typecheck to confirm no type regressions
  • Run nox -e unit_tests to confirm all Behave tests pass
  • Run nox -e coverage_report to confirm coverage remains ≥ 97%

Definition of Done

  • Conversation widget exists in src/cleveragents/tui/widgets/conversation.py
  • Widget renders a 2-column grid with cursor indicator
  • alt+up / alt+down navigate between blocks
  • All 10 block types (Welcome, UserInput, ActorResponse, ActorThought, ToolCall, PlanProgress, DiffView, TerminalEmbed, ShellResult, Note) are supported
  • BDD scenarios cover all navigation behaviors
  • All nox stages pass (nox -e lint, nox -e typecheck, nox -e unit_tests, nox -e coverage_report)
  • Coverage ≥ 97%
## Bug Report: [tui] — Block cursor ConversationWindow widget not implemented in master ### Severity Assessment - **Impact**: Critical. The entire block cursor navigation feature is absent from the production codebase. Users cannot navigate between message blocks, select blocks, or interact with conversation history via keyboard. - **Likelihood**: 100% reproducible — the feature simply does not exist in master. - **Priority**: High ### Location - **File**: `src/cleveragents/tui/app.py` — line 108 - **Missing file**: `src/cleveragents/tui/widgets/conversation.py` (does not exist in master) - **Missing file**: `src/cleveragents/tui/screens/main_screen.py` (does not exist in master) ### Description The specification (§ "Block Cursor and Context Menu", §"Conversation Stream") requires a dedicated `Conversation` widget that implements a **2-column grid layout** with a 1-character-wide cursor column (left) and a content stream (right). The block cursor (`▌` gutter indicator) must be navigable via `alt+up`/`alt+down`. In the current master branch, the conversation area is implemented as a plain `_Static` widget with the text `"CleverAgents TUI"`: ```python # src/cleveragents/tui/app.py, line 108 yield _Static("CleverAgents TUI", id="conversation") ``` This is a placeholder with no block cursor, no 2-column grid, no message blocks, and no navigation capability. A `Conversation` widget with basic cursor navigation exists in the unmerged PR branch `feature/m8-tui-mainscreen` (PR #1302), but it has not been merged into master and is therefore not available to users. ### Spec Requirements Not Met (master branch) Per `docs/specification.md` §"Block Cursor and Context Menu": | Requirement | Status | |---|---| | 2-column grid: 1-char cursor column + content stream | ❌ Missing | | Block cursor `▌` gutter indicator | ❌ Missing | | `alt+up` — move cursor to previous block | ❌ Missing | | `alt+down` — move cursor to next block | ❌ Missing | | `space` — expand/collapse focused block | ❌ Missing | | `enter` — open context menu for focused block | ❌ Missing | | `escape` — clear cursor, return focus to prompt | ❌ Missing | | Click on block — position cursor on clicked block | ❌ Missing | | `ConversationBlock` types: Welcome, UserInput, ActorResponse, ActorThought, ToolCall, PlanProgress, DiffView, TerminalEmbed, ShellResult, Note | ❌ Missing | ### Evidence **Current master** (`src/cleveragents/tui/app.py`, line 108): ```python yield _Static("CleverAgents TUI", id="conversation") ``` **Spec requirement** (`docs/specification.md`, line 29658): > The conversation uses a 2-column grid: a 1-character-wide cursor column on the left and the content stream on the right. The block cursor (a `▌` gutter indicator) is navigated with `alt+up`/`alt+down` and provides keyboard-driven interaction with message blocks. **App BINDINGS** (`src/cleveragents/tui/app.py`, lines 90–93) — no `alt+up` or `alt+down`: ```python BINDINGS: ClassVar[list[tuple[str, str, str]]] = [ ("ctrl+q", "quit", "Quit"), ("f1", "help", "Help"), ("ctrl+t", "cycle_preset", "Cycle Preset"), ] ``` ### Steps to Reproduce 1. Run the TUI app (`agents tui` or equivalent) 2. Observe the conversation area — it shows a static text placeholder 3. Press `alt+up` or `alt+down` — no cursor navigation occurs 4. No message blocks are rendered; no gutter indicator is visible ### Expected Behavior The conversation area should render message blocks in a 2-column grid with a `▌` cursor indicator in the left column. `alt+up`/`alt+down` should move the cursor between blocks. ### Actual Behavior A static text placeholder `"CleverAgents TUI"` is shown. No block cursor exists. No navigation is possible. ### Note on PR #1302 PR #1302 (`feature/m8-tui-mainscreen`) contains a partial implementation of the `Conversation` widget with basic `move_cursor_up`/`move_cursor_down` methods and `alt+up`/`alt+down` bindings. However, this PR is not yet merged and is itself missing several spec-required features (context menu, space/enter handling, key passthrough, ExpandProtocol). See related UAT bugs filed separately. ### Category tui / block-cursor / uat --- ## Metadata - **Branch**: `fix/tui-block-cursor-conversation-widget-missing` - **Commit Message**: `feat(tui): implement ConversationWindow widget with block cursor navigation` - **Milestone**: v3.7.0 - **Parent Epic**: #694 ## Subtasks - [ ] Merge or rebase PR #1302 (`feature/m8-tui-mainscreen`) which contains the initial `Conversation` widget implementation - [ ] Verify the merged `Conversation` widget implements the full 2-column grid layout with `▌` gutter indicator - [ ] Add `alt+up` and `alt+down` bindings to the app/screen BINDINGS - [ ] Write Behave BDD scenarios covering: cursor navigation up/down, cursor display, block rendering for all 10 block types - [ ] Run `nox -e typecheck` to confirm no type regressions - [ ] Run `nox -e unit_tests` to confirm all Behave tests pass - [ ] Run `nox -e coverage_report` to confirm coverage remains ≥ 97% ## Definition of Done - [ ] `Conversation` widget exists in `src/cleveragents/tui/widgets/conversation.py` - [ ] Widget renders a 2-column grid with `▌` cursor indicator - [ ] `alt+up` / `alt+down` navigate between blocks - [ ] All 10 block types (Welcome, UserInput, ActorResponse, ActorThought, ToolCall, PlanProgress, DiffView, TerminalEmbed, ShellResult, Note) are supported - [ ] BDD scenarios cover all navigation behaviors - [ ] All nox stages pass (`nox -e lint`, `nox -e typecheck`, `nox -e unit_tests`, `nox -e coverage_report`) - [ ] Coverage ≥ 97%
freemo self-assigned this 2026-04-02 18:45:21 +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.

Dependencies

No dependencies set.

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