fix(dashboard): remove unfiltered storyboard fallback on probe failure#4262
Draft
fix(dashboard): remove unfiltered storyboard fallback on probe failure#4262
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #4254
When the capability probe fails for a registered agent, the Test view's
renderStoryboardPicker()was falling back toGET /api/storyboards— the full unfiltered catalog — and rendering 20+ storyboards regardless of the agent's declared capabilities. A signals-only agent would seeget-media-buys-pagination-integrity,list_creativespagination 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:
Removed the
/api/storyboardsfallback — when the probe fails with a non-classified 500/504, no storyboard list is shown. The member needs to fix their agent first.Added
specialism_parent_protocol_missingbranch — was previously falling through to the generic error path (and then the fallback). Now shows "Capabilities misconfigured. SpecialismXrequiresYinsupported_protocols. AddYto yourget_adcp_capabilitiesresponse."Added per-reason guidance using the existing
reasonenum 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.Mapped HTTP 504 explicitly to the timeout hint — the server returns
{ error: "Connection timeout" }with noreasonfield on 504, sores.status === 504check ensures the right guidance rather than falling to the generic fallback.Pre-PR review:
unknownkey toreasonHintsmap for self-documentationspecialism_parent_protocol_missingcheck beforeunknown_specialismfor logical priority order; (2)tlshint copy is descriptive rather than imperative ("Renew or replace..." fits the register better); (3) fallback string inspecialism_parent_protocol_missingbranch re-useserrBody.errorwhich includes "misconfigured" twice — use specialism/parent_protocol fields directlySession: https://claude.ai/code/session_011RjJrMxXuaEQXgg6HJMWqA
Generated by Claude Code