Skip to content

fix(dashboard): remove unfiltered storyboard fallback on probe failure#4262

Draft
bokelley wants to merge 1 commit intomainfrom
claude/issue-4254-storyboard-fallback-filter
Draft

fix(dashboard): remove unfiltered storyboard fallback on probe failure#4262
bokelley wants to merge 1 commit intomainfrom
claude/issue-4254-storyboard-fallback-filter

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

@bokelley bokelley commented May 8, 2026

Closes #4254

When the capability probe fails for a registered agent, the Test view's renderStoryboardPicker() was falling back to GET /api/storyboards — the full unfiltered catalog — and rendering 20+ storyboards regardless of the agent's declared capabilities. A signals-only agent would see get-media-buys-pagination-integrity, list_creatives pagination storyboards, and other media-buy tests it would never be required to pass. The "Showing all available storyboards:" subheading was not sufficient to prevent confusion; members were clicking Run against a still-unreachable agent and getting a second error.

Non-breaking justification: this is a UI-only change inside server/public/dashboard-agents.html; it removes a misleading fallback fetch and replaces it with structured error messages. No API surface, schema, or protocol contract is changed.

What changed:

  1. Removed the /api/storyboards fallback — when the probe fails with a non-classified 500/504, no storyboard list is shown. The member needs to fix their agent first.

  2. Added specialism_parent_protocol_missing branch — was previously falling through to the generic error path (and then the fallback). Now shows "Capabilities misconfigured. Specialism X requires Y in supported_protocols. Add Y to your get_adcp_capabilities response."

  3. Added per-reason guidance using the existing reason enum the server already returns (network | tls | timeout | protocol | unknown) — gives the member a one-sentence actionable hint matched to the failure mode instead of a raw (network) tag appended to the error string.

  4. Mapped HTTP 504 explicitly to the timeout hint — the server returns { error: "Connection timeout" } with no reason field on 504, so res.status === 504 check ensures the right guidance rather than falling to the generic fallback.

Pre-PR review:

  • code-reviewer: approved — no blockers; XSS handling correct throughout; nit: add explicit unknown key to reasonHints map for self-documentation
  • internal-tools-strategist: approved — right UX decision; nits: (1) move specialism_parent_protocol_missing check before unknown_specialism for logical priority order; (2) tls hint copy is descriptive rather than imperative ("Renew or replace..." fits the register better); (3) fallback string in specialism_parent_protocol_missing branch re-uses errBody.error which includes "misconfigured" twice — use specialism/parent_protocol fields directly

Triage-managed PR. This bot does not currently iterate on
review comments or PR conversation threads (only on the source
issue). To unblock:

  • Push fixup commits directly: gh pr checkout <num>
    fix → push.
  • Or re-trigger: comment /triage execute on the source
    issue.

See #3121
for context.

Session: https://claude.ai/code/session_011RjJrMxXuaEQXgg6HJMWqA


Generated by Claude Code

When the capability probe fails for an agent, the Test view was falling
back to GET /api/storyboards (the full unfiltered catalog), showing 20+
storyboards regardless of the agent's declared capabilities. Members with
signals-only agents were seeing media-buy storyboards they will never be
tested on.

Fix: remove the fallback entirely and replace with per-reason actionable
guidance using the existing `reason` enum already returned by the server.
Also adds explicit handling for `specialism_parent_protocol_missing` (which
was falling through to the old fallback path) and maps HTTP 504 to the
timeout hint when the server omits the `reason` field.

Closes #4254

https://claude.ai/code/session_011RjJrMxXuaEQXgg6HJMWqA
@bokelley bokelley added the claude-triaged Issue has been triaged by the Claude Code triage routine. Remove to re-triage. label May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude-triaged Issue has been triaged by the Claude Code triage routine. Remove to re-triage.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dashboard storyboard list not filtered by agent's declared capabilities

2 participants