UAT: TUI multi-session tabs lack independent A2A bindings — new/close session actions are stubs and ctrl+[/ctrl+] navigation missing #3352

Closed
opened 2026-04-05 10:30:46 +00:00 by freemo · 1 comment
Owner

Metadata

  • Branch: bugfix/m8-tui-multi-session-a2a-bindings
  • Commit Message: fix(tui): implement multi-session tabs with independent A2A bindings and navigation
  • Milestone: None (Backlog — see note below)
  • Parent Epic: #868

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

Background and Context

Per ADR-044 (TUI Architecture and Framework), the MainScreen must support multiple concurrent sessions, each with an independent persona, conversation history, and A2A Task binding. This was inspected in PR #1302 (branch: feature/m8-tui-mainscreen) at src/cleveragents/tui/screens/main_screen.py and src/cleveragents/tui/widgets/session_tabs.py.

The multi-session tab feature is entirely non-functional. Users cannot create multiple concurrent sessions, cannot navigate between tabs, and each session does not have an independent A2A binding. This is a core feature of the v3.7.0 milestone scope.

Current Behavior

In PR #1302 (feature/m8-tui-mainscreen):

  1. action_new_session() is a stub that only calls _show_flash("New session created") — no actual session is created, no A2A binding is established
  2. action_close_session() is a stub that only calls _show_flash("Session closed") — no actual session is closed
  3. ctrl+[ and ctrl+] keybindings are NOT in the BINDINGS list — tab navigation is not implemented
  4. No A2A Task binding per session tab exists anywhere in the codebase
  5. No per-session TuiMaterializer instantiation logic exists
  6. Session state indicators (, , plain) are not implemented in SessionTabs widget

Expected Behavior (from spec / ADR-044)

Per ADR-044 (TUI Architecture and Framework), multi-session tabs must:

  • Support multiple concurrent sessions, each with an independent persona, conversation history, and A2A Task binding
  • ctrl+n creates a new session tab with the current persona
  • ctrl+w closes the current session tab (with confirmation if unsaved)
  • ctrl+[ / ctrl+] navigates between session tabs
  • Session tabs show state indicators: (actor working), (awaiting user input), plain (idle)
  • Each session tab gets its own TuiMaterializer instance with an independent widget map
  • Session state is persisted; ctrl+r resumes a previous session from the sessions screen

Steps to Reproduce

  1. Checkout branch feature/m8-tui-mainscreen
  2. Inspect src/cleveragents/tui/screens/main_screen.py
  3. Check BINDINGS list — ctrl+[ and ctrl+] are absent
  4. Check action_new_session() — only shows flash message, no session creation
  5. Check action_close_session() — only shows flash message, no session closure
  6. Confirm no A2A binding code exists in any TUI source file

Code Location

  • src/cleveragents/tui/screens/main_screen.py (branch: feature/m8-tui-mainscreen)
    • action_new_session(): stub (line ~140)
    • action_close_session(): stub (line ~144)
    • BINDINGS: missing ctrl+[ and ctrl+] entries
  • src/cleveragents/tui/widgets/session_tabs.py — no A2A binding or state indicator logic

Subtasks

  • Implement action_new_session() to create a real session tab with its own TuiMaterializer instance and A2A Task binding
  • Implement action_close_session() to close the current session tab with a confirmation dialog if there is unsaved content
  • Add ctrl+[ and ctrl+] keybindings to BINDINGS in MainScreen for session tab navigation
  • Implement session tab navigation logic (previous/next tab) wired to the new keybindings
  • Implement session state indicators ( working, awaiting input, plain idle) in SessionTabs widget
  • Ensure each session tab maintains an independent conversation history and persona
  • Establish A2A Task binding per session tab at creation time
  • Tests (Behave): Add scenarios for multi-session tab creation, navigation, and closure
  • Tests (Behave): Add scenarios for per-session A2A binding and state indicators
  • Tests (Robot): Add integration test for multi-session tab workflow
  • Verify coverage ≥97% via nox -s coverage_report
  • Run nox (all default sessions), fix any errors

Definition of Done

This issue is complete when:

  • All subtasks above are completed and checked off.
  • ctrl+n creates a real new session tab with its own TuiMaterializer instance and A2A binding.
  • ctrl+w closes the current session tab with confirmation dialog if unsaved.
  • ctrl+[ and ctrl+] navigate between session tabs (present in BINDINGS).
  • Session tabs display state indicators: (working), (awaiting input), plain (idle).
  • Each session tab has an independent conversation history and persona.
  • A2A Task binding is established per session tab.
  • A Git commit is created where the first line of the commit message matches the Commit Message in Metadata exactly, followed by a blank line, then additional lines providing relevant details about the implementation.
  • The commit is pushed to the remote on the branch matching the Branch in Metadata exactly.
  • The commit is submitted as a pull request to master, reviewed, and merged before this issue is marked done.
  • All nox stages pass.
  • Coverage ≥ 97%.

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

## Metadata - **Branch**: `bugfix/m8-tui-multi-session-a2a-bindings` - **Commit Message**: `fix(tui): implement multi-session tabs with independent A2A bindings and navigation` - **Milestone**: None (Backlog — see note below) - **Parent Epic**: #868 > **Backlog note:** This issue was discovered during autonomous operation > on milestone v3.7.0. It does not block milestone completion and has been > placed in the backlog for human review and future milestone assignment. ## Background and Context Per ADR-044 (TUI Architecture and Framework), the `MainScreen` must support multiple concurrent sessions, each with an independent persona, conversation history, and A2A Task binding. This was inspected in PR #1302 (branch: `feature/m8-tui-mainscreen`) at `src/cleveragents/tui/screens/main_screen.py` and `src/cleveragents/tui/widgets/session_tabs.py`. The multi-session tab feature is entirely non-functional. Users cannot create multiple concurrent sessions, cannot navigate between tabs, and each session does not have an independent A2A binding. This is a core feature of the v3.7.0 milestone scope. ## Current Behavior In PR #1302 (`feature/m8-tui-mainscreen`): 1. `action_new_session()` is a stub that only calls `_show_flash("New session created")` — no actual session is created, no A2A binding is established 2. `action_close_session()` is a stub that only calls `_show_flash("Session closed")` — no actual session is closed 3. `ctrl+[` and `ctrl+]` keybindings are **NOT** in the `BINDINGS` list — tab navigation is not implemented 4. No A2A Task binding per session tab exists anywhere in the codebase 5. No per-session `TuiMaterializer` instantiation logic exists 6. Session state indicators (`⚙`, `⬯`, plain) are not implemented in `SessionTabs` widget ## Expected Behavior (from spec / ADR-044) Per ADR-044 (TUI Architecture and Framework), multi-session tabs must: - Support multiple concurrent sessions, each with an independent persona, conversation history, and A2A Task binding - `ctrl+n` creates a new session tab with the current persona - `ctrl+w` closes the current session tab (with confirmation if unsaved) - `ctrl+[` / `ctrl+]` navigates between session tabs - Session tabs show state indicators: `⚙` (actor working), `⬯` (awaiting user input), plain (idle) - Each session tab gets its own `TuiMaterializer` instance with an independent widget map - Session state is persisted; `ctrl+r` resumes a previous session from the sessions screen ## Steps to Reproduce 1. Checkout branch `feature/m8-tui-mainscreen` 2. Inspect `src/cleveragents/tui/screens/main_screen.py` 3. Check `BINDINGS` list — `ctrl+[` and `ctrl+]` are absent 4. Check `action_new_session()` — only shows flash message, no session creation 5. Check `action_close_session()` — only shows flash message, no session closure 6. Confirm no A2A binding code exists in any TUI source file ## Code Location - `src/cleveragents/tui/screens/main_screen.py` (branch: `feature/m8-tui-mainscreen`) - `action_new_session()`: stub (line ~140) - `action_close_session()`: stub (line ~144) - `BINDINGS`: missing `ctrl+[` and `ctrl+]` entries - `src/cleveragents/tui/widgets/session_tabs.py` — no A2A binding or state indicator logic ## Subtasks - [ ] Implement `action_new_session()` to create a real session tab with its own `TuiMaterializer` instance and A2A Task binding - [ ] Implement `action_close_session()` to close the current session tab with a confirmation dialog if there is unsaved content - [ ] Add `ctrl+[` and `ctrl+]` keybindings to `BINDINGS` in `MainScreen` for session tab navigation - [ ] Implement session tab navigation logic (previous/next tab) wired to the new keybindings - [ ] Implement session state indicators (`⚙` working, `⬯` awaiting input, plain idle) in `SessionTabs` widget - [ ] Ensure each session tab maintains an independent conversation history and persona - [ ] Establish A2A Task binding per session tab at creation time - [ ] Tests (Behave): Add scenarios for multi-session tab creation, navigation, and closure - [ ] Tests (Behave): Add scenarios for per-session A2A binding and state indicators - [ ] Tests (Robot): Add integration test for multi-session tab workflow - [ ] Verify coverage ≥97% via `nox -s coverage_report` - [ ] Run `nox` (all default sessions), fix any errors ## Definition of Done This issue is complete when: - All subtasks above are completed and checked off. - `ctrl+n` creates a real new session tab with its own `TuiMaterializer` instance and A2A binding. - `ctrl+w` closes the current session tab with confirmation dialog if unsaved. - `ctrl+[` and `ctrl+]` navigate between session tabs (present in `BINDINGS`). - Session tabs display state indicators: `⚙` (working), `⬯` (awaiting input), plain (idle). - Each session tab has an independent conversation history and persona. - A2A Task binding is established per session tab. - A Git commit is created where the **first line** of the commit message matches the Commit Message in Metadata exactly, followed by a blank line, then additional lines providing relevant details about the implementation. - The commit is pushed to the remote on the branch matching the **Branch** in Metadata exactly. - The commit is submitted as a **pull request** to `master`, reviewed, and **merged** before this issue is marked done. - All nox stages pass. - Coverage ≥ 97%. --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: ca-uat-tester
Author
Owner

Closing as duplicate of #3349. Both issues have identical titles, descriptions, and metadata (same branch name, commit message, and parent epic). #3349 was created first and will be retained as the canonical issue.


Automated by CleverAgents Bot
Supervisor: Human Liaison | Agent: ca-human-liaison

Closing as duplicate of #3349. Both issues have identical titles, descriptions, and metadata (same branch name, commit message, and parent epic). #3349 was created first and will be retained as the canonical issue. --- **Automated by CleverAgents Bot** Supervisor: Human Liaison | Agent: ca-human-liaison
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#3352
No description provided.