UAT: agents lsp list table format deviates from spec — wrong title and missing "Bound" column #5094

Open
opened 2026-04-09 01:00:43 +00:00 by HAL9000 · 1 comment
Owner

Bug Report

Feature Area: LSP Registry / agents lsp list
Severity: Medium
Discovered by: UAT Testing (uat-pool-1, worker: Provider Registry and LSP Integration)


What Was Tested

Tested the agents lsp list command's Rich output format against the spec.

Expected Behavior (from spec §agents lsp list, line 8900)

The spec shows the list table with:

  1. Title: LSP Registry (3 servers) — uses "LSP Registry" and "servers" (plural)
  2. Columns: Name, Languages, Command, Bound — the "Bound" column shows the number of actors currently bound to each server
  3. Filtered title: LSP Registry (1 server, filtered: language=python) — includes filter info
╭─ 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   │
╰──────────────────────────────────────────────────────────────────────────────────────╯

Actual Behavior

The implementation (src/cleveragents/cli/commands/lsp.py, lines 294-308) shows:

  1. Title: LSP Servers (N total) — wrong, should be LSP Registry (N servers)
  2. Columns: Name, Command, Languages, Capabilities — wrong, shows capability count instead of bound actor count
  3. No filter info in title when --language or --namespace is used
table = Table(title=f"LSP Servers ({len(servers)} total)", show_header=True)
table.add_column("Name", style="cyan")
table.add_column("Command")
table.add_column("Languages")
table.add_column("Capabilities", justify="right")  # Wrong: should be "Bound"

for server in servers:
    table.add_row(
        server.name,
        server.command,
        ", ".join(server.languages) or "(none)",
        str(len(server.capabilities)),  # Wrong: should be bound actor count
    )

Steps to Reproduce

$ agents lsp add --config pyright.yaml
$ agents lsp list
# Shows: "LSP Servers (1 total)" with "Capabilities" column
# Expected: "LSP Registry (1 server)" with "Bound" column

Impact

  • The table title doesn't match the spec's "LSP Registry" branding
  • The "Bound" column (number of actors using each server) is missing — this is useful operational information
  • The "Capabilities" count column is not in the spec and provides less useful information than "Bound"
  • Filter context is not shown in the title when --language or --namespace is used

Suggested Fix

# Fix title
filter_parts = []
if namespace:
    filter_parts.append(f"namespace={namespace}")
if language:
    filter_parts.append(f"language={language}")
filter_suffix = f", filtered: {', '.join(filter_parts)}" if filter_parts else ""
count_word = "server" if len(servers) == 1 else "servers"
title = f"LSP Registry ({len(servers)} {count_word}{filter_suffix})"

table = Table(title=title, show_header=True)
table.add_column("Name", style="cyan")
table.add_column("Languages")
table.add_column("Command")
table.add_column("Bound", justify="right")  # Requires bound actor count from registry

for server in servers:
    bound_count = registry.get_bound_actor_count(server.name)  # Needs implementation
    table.add_row(
        server.name,
        ", ".join(server.languages) or "(none)",
        server.command,
        str(bound_count),
    )

Note: The "Bound" column requires the registry to track actor-to-LSP-server bindings, which is part of the broader persistence work (see related issue #5091).


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

## Bug Report **Feature Area:** LSP Registry / `agents lsp list` **Severity:** Medium **Discovered by:** UAT Testing (uat-pool-1, worker: Provider Registry and LSP Integration) --- ## What Was Tested Tested the `agents lsp list` command's Rich output format against the spec. ## Expected Behavior (from spec §agents lsp list, line 8900) The spec shows the list table with: 1. **Title**: `LSP Registry (3 servers)` — uses "LSP Registry" and "servers" (plural) 2. **Columns**: `Name`, `Languages`, `Command`, **`Bound`** — the "Bound" column shows the number of actors currently bound to each server 3. **Filtered title**: `LSP Registry (1 server, filtered: language=python)` — includes filter info ``` ╭─ 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 │ ╰──────────────────────────────────────────────────────────────────────────────────────╯ ``` ## Actual Behavior The implementation (`src/cleveragents/cli/commands/lsp.py`, lines 294-308) shows: 1. **Title**: `LSP Servers (N total)` — wrong, should be `LSP Registry (N servers)` 2. **Columns**: `Name`, `Command`, `Languages`, **`Capabilities`** — wrong, shows capability count instead of bound actor count 3. **No filter info** in title when `--language` or `--namespace` is used ```python table = Table(title=f"LSP Servers ({len(servers)} total)", show_header=True) table.add_column("Name", style="cyan") table.add_column("Command") table.add_column("Languages") table.add_column("Capabilities", justify="right") # Wrong: should be "Bound" for server in servers: table.add_row( server.name, server.command, ", ".join(server.languages) or "(none)", str(len(server.capabilities)), # Wrong: should be bound actor count ) ``` ## Steps to Reproduce ```bash $ agents lsp add --config pyright.yaml $ agents lsp list # Shows: "LSP Servers (1 total)" with "Capabilities" column # Expected: "LSP Registry (1 server)" with "Bound" column ``` ## Impact - The table title doesn't match the spec's "LSP Registry" branding - The "Bound" column (number of actors using each server) is missing — this is useful operational information - The "Capabilities" count column is not in the spec and provides less useful information than "Bound" - Filter context is not shown in the title when `--language` or `--namespace` is used ## Suggested Fix ```python # Fix title filter_parts = [] if namespace: filter_parts.append(f"namespace={namespace}") if language: filter_parts.append(f"language={language}") filter_suffix = f", filtered: {', '.join(filter_parts)}" if filter_parts else "" count_word = "server" if len(servers) == 1 else "servers" title = f"LSP Registry ({len(servers)} {count_word}{filter_suffix})" table = Table(title=title, show_header=True) table.add_column("Name", style="cyan") table.add_column("Languages") table.add_column("Command") table.add_column("Bound", justify="right") # Requires bound actor count from registry for server in servers: bound_count = registry.get_bound_actor_count(server.name) # Needs implementation table.add_row( server.name, ", ".join(server.languages) or "(none)", server.command, str(bound_count), ) ``` Note: The "Bound" column requires the registry to track actor-to-LSP-server bindings, which is part of the broader persistence work (see related issue #5091). --- **Automated by CleverAgents Bot** Supervisor: UAT Testing | Agent: uat-tester
HAL9000 added this to the v3.2.0 milestone 2026-04-09 01:11:04 +00:00
Author
Owner

Issue triaged by project owner: Verified as valid spec compliance bug. Priority: Medium. Milestone: v3.2.0.


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

Issue triaged by project owner: Verified as valid spec compliance bug. Priority: Medium. Milestone: v3.2.0. --- **Automated by CleverAgents Bot** Supervisor: Project Owner | Agent: 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.

Dependencies

No dependencies set.

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