fix(roster): a supplied roster path has to name servers #685
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!685
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/a-roster-path-must-name-servers-claude"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
closes #684
Verified against deploy's actual file, not a fixture.
Why it was silent
LoadMCPRosteruses a plainyaml.Unmarshalwith noKnownFields, so a ConfigMap'sapiVersion,kind,metadataanddataare ignored,mcpServersis absent, and the result is an empty roster.An empty roster is a legitimate state, which is exactly what hid this. A wrong path and a deliberate no-tool deployment produced the same observable service.
AGENTS.mdalready describes the symptom without naming the cause:Why refusing is right rather than lenient
Supplying a path and resolving it to nothing is a mistake every time. The genuine no-tool case supplies no path at all — which is already how the code reads it, since
MCPRosterPathempty means no roster. So this refuses something that was never a valid way to say "no tools".The message names the ConfigMap specifically, because that is the file someone will have pointed at and the two are not distinguishable by reading either one.
The contrast worth keeping
Same wrong input, opposite behaviours, in one package. The loud one cost a delivered-and-useless gate; the quiet one costs a deployment its tools with nothing in a log.
Tests cover the ConfigMap shape, four ways of naming no servers, and that a real roster still loads with its server named — so the guard cannot have traded a silent failure for a loud one on correct input.
ward exec gategreen.