UAT: Loading states not implemented — no spinner/throbber widget, no async progress display during operations #6357

Closed
opened 2026-04-09 20:16:07 +00:00 by HAL9000 · 0 comments
Owner

Bug Report

Feature Area: TUI Implementation
Spec Reference: §TUI — Loading States (v3.7.0 deliverable #17)
Milestone: v3.7.0

Summary

The loading states (spinner/throbber) specified in §TUI — Loading States are entirely absent from the TUI. No spinner widget, no throbber, and no async progress display exists. The spec requires a 1-row loading indicator at the top of the screen with two configurable styles (rainbow and quotes), but the implementation has no such widget.

Spec Requirements

Per §TUI — Loading States:

  • Two throbber styles, configurable via ui.throbber setting:
    • rainbow (default): Animated horizontal bar cycling through 12 colors at 15fps
    • quotes: Displays shuffled quotes from ~200 entry collection, rotating every 3 seconds
  • Both styles occupy 1 row at the top of the screen and collapse to zero height when idle
  • Shown during async operations (plan execution, actor turns, etc.)

Per the acceptance criteria (§TUI — Acceptance Criteria, deliverable #17):

"Spinner shown during plan execution; progress updates streamed"

Per §TUI — Notification System (related):

Flash notification bar (also absent, tracked in #5972) and throbber work together for async feedback

What Was Found

Code location: /app/src/cleveragents/tui/app.py

  1. The compose() method (lines ~96–116) yields the following widgets:

    yield _Header(show_clock=True)
    with _Vertical(id="main-column"):
        yield _Static("CleverAgents TUI", id="conversation")
        yield HelpPanelOverlay(id="help-panel")
        yield ReferencePickerOverlay(id="reference-picker")
        yield SlashCommandOverlay(id="slash-overlay")
        yield ActorSelectionOverlay(id="actor-selection")
        yield PromptInput(...)
        yield PersonaBar(id="persona-bar")
    yield _Footer()
    

    No Throbber, LoadingIndicator, ProgressBar, or equivalent widget is present.

  2. on_input_submitted() (lines ~157–192) processes input synchronously (no async def, no await, no worker decorator). There is no mechanism to show a loading state while an actor turn or plan operation is in progress.

  3. No ThrobberWidget, RainbowThrobber, QuotesThrobber, or any loading widget exists under src/cleveragents/tui/widgets/.

  4. The cleveragents.tcss stylesheet has no styles for loading indicators.

  5. ui.throbber setting is defined in the spec schema but cannot be set (since SettingsScreen is also absent — see issue #6347), and is never read anywhere.

Expected Behaviour

  • A 1-row throbber widget appears at the top of the screen when an async operation is running
  • Default style rainbow: animated horizontal bar cycling through 12 colors at 15fps
  • Alternative style quotes: rotating text quotes from ~200 science-fiction references, every 3 seconds
  • The throbber collapses to zero height when no operation is in progress (idle state)
  • Style is configurable via ui.throbber setting in SettingsScreen

Actual Behaviour

  • No loading indicator of any kind exists
  • TUI freezes visually during synchronous processing with no user feedback
  • No async operation pipeline exists to drive a loading indicator even if one were added

Steps to Reproduce

  1. Launch agents tui
  2. Submit any prompt that triggers a slash command or shell execution
  3. Observe: no spinner, no throbber, no loading indicator appears at any point

Impact

This is a v3.7.0 deliverable #17. Users receive no visual feedback during async operations. Long-running operations (plan execution, actor turns) will appear as UI freezes with no progress indication.


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

## Bug Report **Feature Area**: TUI Implementation **Spec Reference**: §TUI — Loading States (v3.7.0 deliverable #17) **Milestone**: v3.7.0 ### Summary The loading states (spinner/throbber) specified in §TUI — Loading States are entirely absent from the TUI. No spinner widget, no throbber, and no async progress display exists. The spec requires a 1-row loading indicator at the top of the screen with two configurable styles (`rainbow` and `quotes`), but the implementation has no such widget. ### Spec Requirements Per §TUI — Loading States: - Two throbber styles, configurable via `ui.throbber` setting: - `rainbow` (default): Animated horizontal bar cycling through 12 colors at 15fps - `quotes`: Displays shuffled quotes from ~200 entry collection, rotating every 3 seconds - Both styles occupy **1 row at the top of the screen** and **collapse to zero height when idle** - Shown during async operations (plan execution, actor turns, etc.) Per the acceptance criteria (§TUI — Acceptance Criteria, deliverable #17): > "Spinner shown during plan execution; progress updates streamed" Per §TUI — Notification System (related): > Flash notification bar (also absent, tracked in #5972) and throbber work together for async feedback ### What Was Found **Code location**: `/app/src/cleveragents/tui/app.py` 1. The `compose()` method (lines ~96–116) yields the following widgets: ```python yield _Header(show_clock=True) with _Vertical(id="main-column"): yield _Static("CleverAgents TUI", id="conversation") yield HelpPanelOverlay(id="help-panel") yield ReferencePickerOverlay(id="reference-picker") yield SlashCommandOverlay(id="slash-overlay") yield ActorSelectionOverlay(id="actor-selection") yield PromptInput(...) yield PersonaBar(id="persona-bar") yield _Footer() ``` No `Throbber`, `LoadingIndicator`, `ProgressBar`, or equivalent widget is present. 2. `on_input_submitted()` (lines ~157–192) processes input synchronously (no `async def`, no `await`, no `worker` decorator). There is no mechanism to show a loading state while an actor turn or plan operation is in progress. 3. No `ThrobberWidget`, `RainbowThrobber`, `QuotesThrobber`, or any loading widget exists under `src/cleveragents/tui/widgets/`. 4. The `cleveragents.tcss` stylesheet has no styles for loading indicators. 5. `ui.throbber` setting is defined in the spec schema but cannot be set (since `SettingsScreen` is also absent — see issue #6347), and is never read anywhere. ### Expected Behaviour - A 1-row throbber widget appears at the top of the screen when an async operation is running - Default style `rainbow`: animated horizontal bar cycling through 12 colors at 15fps - Alternative style `quotes`: rotating text quotes from ~200 science-fiction references, every 3 seconds - The throbber collapses to zero height when no operation is in progress (idle state) - Style is configurable via `ui.throbber` setting in `SettingsScreen` ### Actual Behaviour - No loading indicator of any kind exists - TUI freezes visually during synchronous processing with no user feedback - No `async` operation pipeline exists to drive a loading indicator even if one were added ### Steps to Reproduce 1. Launch `agents tui` 2. Submit any prompt that triggers a slash command or shell execution 3. Observe: no spinner, no throbber, no loading indicator appears at any point ### Impact This is a **v3.7.0 deliverable #17**. Users receive no visual feedback during async operations. Long-running operations (plan execution, actor turns) will appear as UI freezes with no progress indication. --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
HAL9000 added this to the v3.2.0 milestone 2026-04-09 21:09:28 +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#6357
No description provided.