Skip to content

fix: never replay the launcher's own Claude channel flags on resume - #31

Merged
SergioTCG merged 1 commit into
mainfrom
fix/claude-stale-channel-flags
Oct 14, 2026
Merged

SergioTCG merged 1 commit into
mainfrom
fix/claude-stale-channel-flags

Conversation

@SergioTCG

Copy link
Copy Markdown
Owner

Summary

After a power outage, a Claude session failed to wake twice with "The provider process did not initialize". This was a regression from #30.

Root cause

  • The session's stored launch flags still contained --dangerously-load-development-channels server:slack-bridge, recorded under the pre-September launcher.
  • displayFlagsFor() strips only --resume and --continue, so resumeArgsFor() replayed that flag.
  • The launcher adds it again since fix: load SAB's Claude channel as a development channel again #30, so Claude rendered Channels: server:slack-bridge, server:slack-bridge (verified on 2.1.296).
  • The consent helper confirms only a list that is exactly SAB's channel, so the prompt waited for a human and SessionStart never arrived. While the launcher used --channels, the old blind-Enter helper had hidden the stale flag.

Fix

  • displayFlagsFor() drops the launcher-owned --mcp-config, --channels and --dangerously-load-development-channels (with their values or = forms) from stored Claude flags. Resume arguments and flag display never repeat them.
  • claude-consent.sh also accepts a list made only of server:slack-bridge entries. Any other entry still waits for a human.

Tests

  • Claude resume never replays the launcher's own channel and MCP flags, built from the exact stored flags of the failing session. Codex keeps its own flags.
  • The consent helper accepts SAB's channel listed twice, and still ignores any other channel.
  • Removing either change turns them red. npm test: 593 pass. check, audit, node --check and shellcheck all pass.

Deployment notes

  • A daemon restart is needed for the resume-argument change; the helper is read on each launch.
  • Only one stored session was affected. It wakes on the owner's next message.

🤖 Generated with Claude Code

https://claude.ai/code/session_011Xs8AVBVrTGfpzUMiCQp2R

After a power outage, one Claude session failed to wake twice with "The
provider process did not initialize". Its stored launch flags still carried
--dangerously-load-development-channels server:slack-bridge, recorded under
the pre-September launcher. displayFlagsFor() strips only --resume and
--continue, so resumeArgsFor() replayed that flag. Since the launcher adds
it again, Claude listed the channel twice:

  Channels: server:slack-bridge, server:slack-bridge

The consent helper confirms only a list that is exactly SAB's channel, so
the development-channel prompt waited for a human and SessionStart never
came. While the launcher used --channels, the old helper's blind Enter had
hidden the stale flag.

- displayFlagsFor() now drops the launcher-owned --mcp-config, --channels
  and --dangerously-load-development-channels (with their values or `=`
  forms) from stored Claude flags. Resume arguments and flag display
  therefore never repeat them.
- The consent helper also accepts a channel list made only of
  server:slack-bridge. Any other entry still waits for a human.

Only that one session had such stored flags. Restoring either behaviour
turns the new tests red. Full suite: 593 pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Xs8AVBVrTGfpzUMiCQp2R
@SergioTCG
SergioTCG merged commit b547a6a into main Oct 14, 2026
3 checks passed
@SergioTCG
SergioTCG deleted the fix/claude-stale-channel-flags branch October 25, 2026 21:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants