UAT: SlashCommandOverlay and ReferencePickerOverlay missing show(), hide(), and escape dismiss behavior #4147

Open
opened 2026-04-06 10:58:05 +00:00 by freemo · 1 comment
Owner

Metadata

  • Branch: fix/tui-overlay-show-hide-escape
  • Commit Message: fix(tui): add show/hide/escape dismiss behavior to SlashCommandOverlay and ReferencePickerOverlay
  • Milestone: (none — backlog)
  • Parent Epic: #868

Backlog note: This issue was discovered during autonomous operation
on milestone v3.6.0. It does not block milestone completion and has been
placed in the backlog for human review and future milestone assignment.

Bug Report

What Was Tested

Code-level analysis of:

  • src/cleveragents/tui/widgets/slash_command_overlay.py
  • src/cleveragents/tui/widgets/reference_picker.py

Expected Behavior (from spec)

The specification defines the following behavior for overlays (TUI Key Bindings section, lines ~30371–30373 and ~30352–30363):

Slash Command Overlay:

| / (at position 0) | Open Slash Command overlay |
| tab | Auto-complete command name |
| escape | Dismiss overlay |

Reference Picker Overlay:

| @ | Search reference candidates |
| enter | Submit prompt with references |
| escape | Dismiss picker, remove @ trigger character |

The HelpPanelOverlay (which IS correctly implemented) provides a reference implementation with show_context(), hide(), and toggle() methods, plus a visible property.

Actual Behavior

SlashCommandOverlay (src/cleveragents/tui/widgets/slash_command_overlay.py) only has set_commands():

class SlashCommandOverlay(_StaticBase):
    def set_commands(self, query: str, commands: list[str]) -> None:
        # renders filtered command list
        ...
    # NO hide(), show(), toggle(), visible property, or escape handling

ReferencePickerOverlay (src/cleveragents/tui/widgets/reference_picker.py) only has set_suggestions():

class ReferencePickerOverlay(_StaticBase):
    def set_suggestions(self, query: str, suggestions: list[str]) -> None:
        # renders suggestions
        ...
    # NO hide(), show(), toggle(), visible property, or escape handling

Neither overlay has:

  1. A visible property to track display state
  2. A hide() method to dismiss the overlay
  3. A show() method to display the overlay
  4. An escape key handler to dismiss the overlay
  5. Logic to auto-show when / or @ is typed at position 0

The HelpPanelOverlay correctly implements all of these (it has visible, show_context(), hide(), and toggle()), but the other two overlays do not follow the same pattern.

Code Locations

  • src/cleveragents/tui/widgets/slash_command_overlay.py — missing hide(), show(), visible
  • src/cleveragents/tui/widgets/reference_picker.py — missing hide(), show(), visible
  • src/cleveragents/tui/app.pyon_input_submitted() does not auto-show/hide overlays based on input prefix

Subtasks

  • Add visible property, show(), and hide() methods to SlashCommandOverlay (following HelpPanelOverlay pattern)
  • Add visible property, show(), and hide() methods to ReferencePickerOverlay
  • Update app.py on_input_submitted() to auto-show SlashCommandOverlay when input starts with / and hide it otherwise
  • Update app.py on_input_submitted() to auto-show ReferencePickerOverlay when input contains @ and hide it otherwise
  • Add escape key handling in the app to dismiss the active overlay
  • Add BDD scenarios for overlay show/hide/escape behavior
  • Verify with nox -e unit_tests

Definition of Done

  • SlashCommandOverlay and ReferencePickerOverlay have visible, show(), and hide() methods
  • Overlays auto-show/hide based on prompt input content
  • escape dismisses the active overlay
  • nox -e unit_tests passes

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

## Metadata - **Branch**: `fix/tui-overlay-show-hide-escape` - **Commit Message**: `fix(tui): add show/hide/escape dismiss behavior to SlashCommandOverlay and ReferencePickerOverlay` - **Milestone**: *(none — backlog)* - **Parent Epic**: #868 > **Backlog note:** This issue was discovered during autonomous operation > on milestone v3.6.0. It does not block milestone completion and has been > placed in the backlog for human review and future milestone assignment. ## Bug Report ### What Was Tested Code-level analysis of: - `src/cleveragents/tui/widgets/slash_command_overlay.py` - `src/cleveragents/tui/widgets/reference_picker.py` ### Expected Behavior (from spec) The specification defines the following behavior for overlays (TUI Key Bindings section, lines ~30371–30373 and ~30352–30363): **Slash Command Overlay:** > | `/` (at position 0) | Open Slash Command overlay | > | `tab` | Auto-complete command name | > | `escape` | Dismiss overlay | **Reference Picker Overlay:** > | `@` | Search reference candidates | > | `enter` | Submit prompt with references | > | `escape` | Dismiss picker, remove `@` trigger character | The `HelpPanelOverlay` (which IS correctly implemented) provides a reference implementation with `show_context()`, `hide()`, and `toggle()` methods, plus a `visible` property. ### Actual Behavior **`SlashCommandOverlay`** (`src/cleveragents/tui/widgets/slash_command_overlay.py`) only has `set_commands()`: ```python class SlashCommandOverlay(_StaticBase): def set_commands(self, query: str, commands: list[str]) -> None: # renders filtered command list ... # NO hide(), show(), toggle(), visible property, or escape handling ``` **`ReferencePickerOverlay`** (`src/cleveragents/tui/widgets/reference_picker.py`) only has `set_suggestions()`: ```python class ReferencePickerOverlay(_StaticBase): def set_suggestions(self, query: str, suggestions: list[str]) -> None: # renders suggestions ... # NO hide(), show(), toggle(), visible property, or escape handling ``` Neither overlay has: 1. A `visible` property to track display state 2. A `hide()` method to dismiss the overlay 3. A `show()` method to display the overlay 4. An `escape` key handler to dismiss the overlay 5. Logic to auto-show when `/` or `@` is typed at position 0 The `HelpPanelOverlay` correctly implements all of these (it has `visible`, `show_context()`, `hide()`, and `toggle()`), but the other two overlays do not follow the same pattern. ### Code Locations - `src/cleveragents/tui/widgets/slash_command_overlay.py` — missing `hide()`, `show()`, `visible` - `src/cleveragents/tui/widgets/reference_picker.py` — missing `hide()`, `show()`, `visible` - `src/cleveragents/tui/app.py` — `on_input_submitted()` does not auto-show/hide overlays based on input prefix ## Subtasks - [ ] Add `visible` property, `show()`, and `hide()` methods to `SlashCommandOverlay` (following `HelpPanelOverlay` pattern) - [ ] Add `visible` property, `show()`, and `hide()` methods to `ReferencePickerOverlay` - [ ] Update `app.py` `on_input_submitted()` to auto-show `SlashCommandOverlay` when input starts with `/` and hide it otherwise - [ ] Update `app.py` `on_input_submitted()` to auto-show `ReferencePickerOverlay` when input contains `@` and hide it otherwise - [ ] Add `escape` key handling in the app to dismiss the active overlay - [ ] Add BDD scenarios for overlay show/hide/escape behavior - [ ] Verify with `nox -e unit_tests` ## Definition of Done - `SlashCommandOverlay` and `ReferencePickerOverlay` have `visible`, `show()`, and `hide()` methods - Overlays auto-show/hide based on prompt input content - `escape` dismisses the active overlay - `nox -e unit_tests` passes --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: ca-new-issue-creator
freemo added this to the v3.6.0 milestone 2026-04-06 18:07:46 +00:00
Author
Owner

Milestone Triage Decision: Moved to Backlog (Defer to M8)

This TUI behavior issue has been moved out of v3.6.0 during aggressive milestone triage. TUI overlay behavior belongs in M8 (v3.7.0), not in Advanced Concepts.

Reasoning:

  • v3.6.0 focus: Advanced concepts that extend beyond core MVP but do NOT require TUI or Server
  • This issue: TUI overlay behavior - belongs in M8 TUI milestone
  • Impact: User interface behavior, not advanced conceptual capability

Will be addressed in M8 (v3.7.0) TUI milestone as part of comprehensive TUI implementation.

**Milestone Triage Decision: Moved to Backlog (Defer to M8)** This TUI behavior issue has been moved out of v3.6.0 during aggressive milestone triage. TUI overlay behavior belongs in M8 (v3.7.0), not in Advanced Concepts. **Reasoning:** - v3.6.0 focus: Advanced concepts that extend beyond core MVP but do NOT require TUI or Server - This issue: TUI overlay behavior - belongs in M8 TUI milestone - Impact: User interface behavior, not advanced conceptual capability Will be addressed in M8 (v3.7.0) TUI milestone as part of comprehensive TUI implementation.
freemo removed this from the v3.6.0 milestone 2026-04-06 20:39:55 +00:00
HAL9000 added this to the v3.5.0 milestone 2026-04-09 03:10:38 +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#4147
No description provided.