Repository navigation
fix: load SAB's Claude channel as a development channel again - #30
Merged
Merged
Conversation
Claude Code 2.1.296 registers channel notifications from a server: entry only when it is loaded with --dangerously-load-development-channels. Passed through --channels, its channel gate skips the server as "not on the approved channels allowlist", and every session's MCP log records "Channel notifications skipped". Every running Claude session was affected. Slack prompts still arrived through tmux paste. The MCP channel fallback and the Slack permission relay, however, were silently disabled. SAB switched to --channels on 2 September because Claude 2.1.258's development-channel confirmation stranded headless starts. Claude 2.1.296 shows that confirmation on every launch, so the existing consent helper now answers it as strictly as it answers the workspace-trust dialog: - it confirms only when the dialog lists exactly server:slack-bridge; - it confirms only once "I am using this for local development" is visibly selected, and moves off a preselected "Exit" first; - any other or additional development channel is left for a human; - the helper now watches for 60 s, up from 30. The same helper already runs for daemon-driven spawns and resumes (autoConsent), so new starts, resumes and provider switches are all covered. Verified against real Claude Code 2.1.296 with a fake daemon behind SAB's channel server: - with --channels, the message was not delivered; - with this launch, both a new and a resumed session received it as <channel source="slack-bridge">. Tests: - argv: the runner passes the development-channel flag and not --channels; - the consent helper confirms only SAB's channel on the affirmative row, moves off a default of Exit, and ignores other or extra channels. Restoring --channels, the blind Enter, or a dropped channel guard each turns them red. Full suite: 592 pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Xs8AVBVrTGfpzUMiCQp2R
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.
Summary
Claude Code 2.1.296 silently stopped delivering SAB's MCP channel events. Its channel gate skips a
server:entry passed through--channels. Each running session's MCP log records:Every running Claude session was affected. Slack prompts kept arriving through tmux paste, but the MCP channel fallback and the Slack permission relay were off.
Root cause
--dangerously-load-development-channelsto--channels server:slack-bridge. Claude 2.1.258's development-channel confirmation stranded headless starts.Iyt), for aserver:entry:register;skip … not on the approved channels allowlist.DevChannelsDialog("WARNING: Loading development channels") appears on every launch that loads a development channel, with no persisted acceptance.Fix
scripts/run-session.shloads SAB's private server with--dangerously-load-development-channels server:slack-bridge, the pathCLAUDE.mdprescribes.scripts/claude-consent.shanswers that dialog as strictly as the workspace-trust dialog:server:slack-bridge;autoConsent), so new starts, resumes and provider switches are all covered.Verification against real Claude Code 2.1.296
The rendered dialog:
The test used a fake daemon behind SAB's real channel server, with only its daemon address redirected:
--channels server:slack-bridge(before)<channel source="slack-bridge" via="slack">…</channel>--resumeOne cosmetic startup line remains:
server:slack-bridge · no MCP server configured with that name. The CLI's display check only looks at settings-file MCP scopes, not--mcp-config, and the gate does not consult it.Tests
Claude runner loads its private channel server as a development channel: the runner passes the development-channel flag and not--channels.Claude consent helper confirms the development channel only for SAB's own server:Enter;Up, Enter;Each mutation was applied on its own:
--channelsEnterValidation
npm test: 592 pass.npm run check,npm run audit(0),node --check, Pi extension andshellcheckall pass.Deployment notes
/sab-restart, the/sab-update claude-codeidle sweep, or a resume.🤖 Generated with Claude Code
https://claude.ai/code/session_011Xs8AVBVrTGfpzUMiCQp2R