You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
🤖 CoderMCPServer: decide whether an unresolved group blocks removing old access #313
When a new generation of a CoderMCPServer names a group in spec.access.groups that does not exist in Coder, the apply step of #307 stops with GroupNotFound before it changes anything. That follows the plan's fail-static rule (#155 plan 4.8 item 3: "If a name does not resolve, the controller changes nothing and reports GroupNotFound").
A consequence: if the earlier generation allowed a broader group (for example Everyone), that group keeps access to the enabled config until the new group exists. This also holds when the same generation sets enabled: false or changes the URL, because the config PATCH is not sent either. The object reports Stalled with GroupNotFound.
The kind is not registered, so no install is affected today.
Decision needed before activation (M9)
Option A: keep fail static, as the plan says now, and document it in the how-to.
Option B: on GroupNotFound, still run the remove-only pass by name from the ACL answer (Coder returns each group's name), and send enabled: false when the new generation disables the server. Then add the groups once they resolve.
Found by the Codex normal and security reviews of #307 (threads 4266502717 and 4266511679).
When a group in access.groups does not resolve in Coder (GroupNotFound), the controller must still remove the old ACL entries that the new spec no longer lists, by name from Coder's ACL answer. If the same generation disables the server, it must also send enabled: false. It adds the missing groups once they exist. It must never widen access while a group is missing.
Reason: this matches the fail-closed rule that M6c (#330) and M6e (#360) use for consent and opt-in withdrawal. It only removes access, so it cannot expose a config to more users.
Gate: before M9 (CoderMCPServer activation). The how-to must describe the behavior.
Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: medium
Activity
ThomasK33 commentedon Oct 14, 2026
Maintainer decision: Option B (fail closed).
When a group in
access.groupsdoes not resolve in Coder (GroupNotFound), the controller must still remove the old ACL entries that the new spec no longer lists, by name from Coder's ACL answer. If the same generation disables the server, it must also sendenabled: false. It adds the missing groups once they exist. It must never widen access while a group is missing.Reason: this matches the fail-closed rule that M6c (#330) and M6e (#360) use for consent and opt-in withdrawal. It only removes access, so it cannot expose a config to more users.
Gate: before M9 (
CoderMCPServeractivation). The how-to must describe the behavior.Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:medium