UAT: TUI PermissionsScreen is a Static widget, not a Textual Screen — cannot be pushed onto the screen stack #4851

Open
opened 2026-04-08 20:08:43 +00:00 by HAL9000 · 0 comments
Owner

Bug Report

Feature Area: TUI Interface — Permissions Screen (ADR-044)

What Was Tested

PermissionsScreen in src/cleveragents/tui/permissions/screen.py

Expected Behavior (from spec ADR-044)

The spec defines PermissionsScreen as a screen that is pushed onto the Textual screen stack:

"PermissionsScreen (pushed for tool permission requests)"

The app architecture diagram shows:

CleverAgentsApp(App)
└── Screens:
    └── PermissionsScreen   (pushed for tool permission requests)

For multi-file operations, the spec says: "PermissionsScreen is pushed directly (no inline widget)."

Actual Behavior

PermissionsScreen inherits from _StaticBase (which resolves to textual.widgets.Static), not from textual.screen.Screen. This means:

  1. It cannot be pushed onto the Textual screen stack via app.push_screen()
  2. It cannot take full-screen focus
  3. It cannot be dismissed with self.dismiss()
  4. The PermissionsScreen is never mounted in app.py's compose() method — there is no mechanism to display it

The widget has correct internal logic (file list navigation, diff mode cycling, allow/reject decisions) but is architecturally misclassified as a widget rather than a screen.

Code Location

src/cleveragents/tui/permissions/screen.py — class PermissionsScreen(_StaticBase)

Steps to Reproduce

  1. Inspect PermissionsScreen class definition
  2. Observe it inherits from Static not Screen
  3. Check app.py compose()PermissionsScreen is never yielded or registered

Impact

Multi-file permission requests cannot be displayed. The permissions review workflow (showing diffs for file changes) is completely broken.


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

## Bug Report **Feature Area:** TUI Interface — Permissions Screen (ADR-044) ### What Was Tested `PermissionsScreen` in `src/cleveragents/tui/permissions/screen.py` ### Expected Behavior (from spec ADR-044) The spec defines `PermissionsScreen` as a **screen** that is pushed onto the Textual screen stack: > "PermissionsScreen (pushed for tool permission requests)" The app architecture diagram shows: ``` CleverAgentsApp(App) └── Screens: └── PermissionsScreen (pushed for tool permission requests) ``` For multi-file operations, the spec says: "PermissionsScreen is pushed directly (no inline widget)." ### Actual Behavior `PermissionsScreen` inherits from `_StaticBase` (which resolves to `textual.widgets.Static`), not from `textual.screen.Screen`. This means: 1. It cannot be pushed onto the Textual screen stack via `app.push_screen()` 2. It cannot take full-screen focus 3. It cannot be dismissed with `self.dismiss()` 4. The `PermissionsScreen` is never mounted in `app.py`'s `compose()` method — there is no mechanism to display it The widget has correct internal logic (file list navigation, diff mode cycling, allow/reject decisions) but is architecturally misclassified as a widget rather than a screen. ### Code Location `src/cleveragents/tui/permissions/screen.py` — class `PermissionsScreen(_StaticBase)` ### Steps to Reproduce 1. Inspect `PermissionsScreen` class definition 2. Observe it inherits from `Static` not `Screen` 3. Check `app.py` `compose()` — `PermissionsScreen` is never yielded or registered ### Impact Multi-file permission requests cannot be displayed. The permissions review workflow (showing diffs for file changes) is completely broken. --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
HAL9000 added this to the v3.7.0 milestone 2026-04-08 20:14:20 +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.

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