UAT: agents lsp list shows Capabilities column instead of spec-required Bound column #2137

Open
opened 2026-04-03 04:21:37 +00:00 by freemo · 1 comment
Owner

Metadata

  • Branch: fix/lsp-list-bound-column
  • Commit Message: fix(cli): replace Capabilities column with Bound column in agents lsp list output
  • Milestone: v3.6.0
  • Parent Epic: #824

Background and Context

During UAT testing of the LSP integration feature, the agents lsp list command was found to render a Capabilities column (showing the count of capabilities per server) instead of the Bound column required by the specification. The specification explicitly defines the Bound column as showing the number of actors currently bound to each LSP server, which is a fundamentally different piece of information.

This discrepancy means users cannot determine actor binding counts from the list view, which is a key operational concern when managing LSP servers in a multi-actor environment.

Spec reference: docs/specification.md, section "agents lsp list", example output table.

Current Behavior

┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Name          ┃ Command            ┃ Languages ┃ Capabilities ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ local/pyright │ pyright-langserver │ python    │            0 │

The Capabilities column shows the count of capabilities (e.g., 0), but the spec requires a Bound column showing how many actors are currently bound to this LSP server.

Code location: src/cleveragents/cli/commands/lsp.py, list_servers() function, around the table.add_column("Capabilities", ...) call:

table.add_column("Capabilities", justify="right")
...
table.add_row(
    server.name,
    server.command,
    ", ".join(server.languages) or "(none)",
    str(len(server.capabilities)),
)

Expected Behavior

Per docs/specification.md, the agents lsp list output must show a Bound column with the count of actors currently bound to each LSP server:

╭─ LSP Registry (3 servers) ───────────────────────────────────────────────────────╮
│ Name                     │ Languages            │ Command                      │ Bound │
│────────────────────────│──────────────────────│────────────────────────────│───────│
│ local/pyright           │ python               │ pyright-langserver --stdio  │   3   │
│ local/ts-server         │ typescript, jsx, tsx │ typescript-language-server  │   2   │
│ local/gopls             │ go                   │ gopls serve                 │   1   │
╰──────────────────────────────────────────────────────────────────────────────────╯

Note: The Bound count requires integration with the actor registry to count how many actors reference each LSP server. This may require additional infrastructure work beyond a simple column rename — the data source must change from len(server.capabilities) to a live query of actor bindings.

Steps to Reproduce

  1. Register one or more LSP servers: agents lsp add --config pyright.yaml
  2. Run: agents lsp list
  3. Observe the table — shows Capabilities column instead of Bound column

Acceptance Criteria

  • agents lsp list renders a Bound column (not Capabilities) in all output formats (rich, table, plain, json, yaml)
  • The Bound value reflects the number of actors currently referencing each LSP server (queried from the actor registry)
  • When no actors are bound, the Bound column shows 0
  • The column header and data match the spec example exactly
  • All existing agents lsp list BDD scenarios are updated to assert the Bound column
  • New BDD scenarios cover: zero bound actors, one bound actor, multiple bound actors

Supporting Information

  • Severity: Medium — column name and data are wrong per spec; users cannot see actor binding counts from the list view
  • Spec reference: docs/specification.md, section "agents lsp list"
  • Code location: src/cleveragents/cli/commands/lsp.pylist_servers() function, table.add_column("Capabilities", ...) and the corresponding table.add_row(...) call
  • Parent Epic: #824 (Epic: LSP Functional Runtime)

Subtasks

  • Identify the actor registry query needed to count bound actors per LSP server
  • Update list_servers() in src/cleveragents/cli/commands/lsp.py to replace Capabilities column with Bound column
  • Replace str(len(server.capabilities)) with a live actor-registry binding count
  • Update all output format renderers (rich, table, plain, json, yaml) to use bound instead of capabilities
  • Tests (Behave): Update existing agents lsp list scenarios to assert Bound column header and values
  • Tests (Behave): Add new scenarios for zero, one, and multiple bound actors
  • Tests (Robot): Add/update integration test for agents lsp list output format
  • 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.
  • A Git commit is created where the first line of the commit message matches the Commit Message in Metadata exactly (fix(cli): replace Capabilities column with Bound column in agents lsp list output), 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 (fix/lsp-list-bound-column).
  • 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-new-issue-creator

## Metadata - **Branch**: `fix/lsp-list-bound-column` - **Commit Message**: `fix(cli): replace Capabilities column with Bound column in agents lsp list output` - **Milestone**: v3.6.0 - **Parent Epic**: #824 ## Background and Context During UAT testing of the LSP integration feature, the `agents lsp list` command was found to render a `Capabilities` column (showing the count of capabilities per server) instead of the `Bound` column required by the specification. The specification explicitly defines the `Bound` column as showing the number of actors currently bound to each LSP server, which is a fundamentally different piece of information. This discrepancy means users cannot determine actor binding counts from the list view, which is a key operational concern when managing LSP servers in a multi-actor environment. **Spec reference:** `docs/specification.md`, section "agents lsp list", example output table. ## Current Behavior ``` ┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━┓ ┃ Name ┃ Command ┃ Languages ┃ Capabilities ┃ ┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━┩ │ local/pyright │ pyright-langserver │ python │ 0 │ ``` The `Capabilities` column shows the count of capabilities (e.g., `0`), but the spec requires a `Bound` column showing how many actors are currently bound to this LSP server. **Code location:** `src/cleveragents/cli/commands/lsp.py`, `list_servers()` function, around the `table.add_column("Capabilities", ...)` call: ```python table.add_column("Capabilities", justify="right") ... table.add_row( server.name, server.command, ", ".join(server.languages) or "(none)", str(len(server.capabilities)), ) ``` ## Expected Behavior Per `docs/specification.md`, the `agents lsp list` output must show a `Bound` column with the count of actors currently bound to each LSP server: ``` ╭─ LSP Registry (3 servers) ───────────────────────────────────────────────────────╮ │ Name │ Languages │ Command │ Bound │ │────────────────────────│──────────────────────│────────────────────────────│───────│ │ local/pyright │ python │ pyright-langserver --stdio │ 3 │ │ local/ts-server │ typescript, jsx, tsx │ typescript-language-server │ 2 │ │ local/gopls │ go │ gopls serve │ 1 │ ╰──────────────────────────────────────────────────────────────────────────────────╯ ``` **Note:** The `Bound` count requires integration with the actor registry to count how many actors reference each LSP server. This may require additional infrastructure work beyond a simple column rename — the data source must change from `len(server.capabilities)` to a live query of actor bindings. ## Steps to Reproduce 1. Register one or more LSP servers: `agents lsp add --config pyright.yaml` 2. Run: `agents lsp list` 3. Observe the table — shows `Capabilities` column instead of `Bound` column ## Acceptance Criteria - [ ] `agents lsp list` renders a `Bound` column (not `Capabilities`) in all output formats (rich, table, plain, json, yaml) - [ ] The `Bound` value reflects the number of actors currently referencing each LSP server (queried from the actor registry) - [ ] When no actors are bound, the `Bound` column shows `0` - [ ] The column header and data match the spec example exactly - [ ] All existing `agents lsp list` BDD scenarios are updated to assert the `Bound` column - [ ] New BDD scenarios cover: zero bound actors, one bound actor, multiple bound actors ## Supporting Information - **Severity:** Medium — column name and data are wrong per spec; users cannot see actor binding counts from the list view - **Spec reference:** `docs/specification.md`, section "agents lsp list" - **Code location:** `src/cleveragents/cli/commands/lsp.py` → `list_servers()` function, `table.add_column("Capabilities", ...)` and the corresponding `table.add_row(...)` call - **Parent Epic:** #824 (Epic: LSP Functional Runtime) ## Subtasks - [ ] Identify the actor registry query needed to count bound actors per LSP server - [ ] Update `list_servers()` in `src/cleveragents/cli/commands/lsp.py` to replace `Capabilities` column with `Bound` column - [ ] Replace `str(len(server.capabilities))` with a live actor-registry binding count - [ ] Update all output format renderers (rich, table, plain, json, yaml) to use `bound` instead of `capabilities` - [ ] Tests (Behave): Update existing `agents lsp list` scenarios to assert `Bound` column header and values - [ ] Tests (Behave): Add new scenarios for zero, one, and multiple bound actors - [ ] Tests (Robot): Add/update integration test for `agents lsp list` output format - [ ] 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. - A Git commit is created where the **first line** of the commit message matches the Commit Message in Metadata exactly (`fix(cli): replace Capabilities column with Bound column in agents lsp list output`), 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 (`fix/lsp-list-bound-column`). - 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-new-issue-creator
freemo added this to the v3.6.0 milestone 2026-04-03 04:21:42 +00:00
Author
Owner

Issue triaged by project owner:

  • State: Verified
  • Priority: Medium
  • Milestone: v3.6.0
  • MoSCoW: Should Have — agents lsp list column naming should match the spec; this is a UI contract issue
  • Parent Epic: #824 (LSP Functional Runtime)

Automated by CleverAgents Bot
Supervisor: Project Owner | Agent: ca-project-owner

Issue triaged by project owner: - **State**: Verified - **Priority**: Medium - **Milestone**: v3.6.0 - **MoSCoW**: Should Have — `agents lsp list` column naming should match the spec; this is a UI contract issue - **Parent Epic**: #824 (LSP Functional Runtime) --- **Automated by CleverAgents Bot** Supervisor: Project Owner | Agent: ca-project-owner
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
#824 Epic: LSP Functional Runtime
cleveragents/cleveragents-core
Reference
cleveragents/cleveragents-core#2137
No description provided.