[BUG] Safety-classifier fallback silently switches whole session to Opus 4.8; switchModelsOnFlag:false is ignored
What's Wrong?
While doing routine, authorized IT fleet administration (managing our own office PCs: remote screenshots, lock-screen setup, background monitoring scripts, RADIUS config), Fable 5.1's safety classifier repeatedly flags assistant turns as [cyber]. On each flag Claude Code writes a model_refusal_fallback entry ("Switched to Opus 4.8") and the WHOLE session silently continues on claude-opus-4-8 — in one session 255 consecutive messages (~2 hours), in the previous session it fired 3 times (857 messages on Opus 4.8 vs 803 on Fable).
On the switch, prior thinking blocks are dropped with reason: model_mismatch (13 blocks / 11 turns in one case), so the session visibly loses context. To the user this presents as "Claude got dumb and forgets" with no indication anywhere in the UI that the model changed.
Three distinct problems:
- False positives: standard sysadmin work on machines we own/manage is flagged as
[cyber]repeatedly; the only per-flag recourse is/feedback. "switchModelsOnFlag": falsedoes not prevent the switch (it was already set in settings.json before the incident). The binary appears to have asilentAttempt/refusalFallbackSilentArm*path that bypasses the opt-out and the confirmation dialog entirely.- The downgrade is silent and sticky — no banner, and the session stays on Opus 4.8 until the user manually runs
/model.
What Should Happen?
switchModelsOnFlag: falseshould be honored — no model switch without the user's consent.- Any fallback switch must be visibly announced in the UI and should be per-turn, not session-sticky.
- A model switch should not silently drop prior thinking blocks and destroy context.
- Legitimate IT-administration work on self-managed machines should not be classified as
[cyber].
Error Messages/Logs
system entry: model_refusal_fallback — "Switched to Opus 4.8" (flag category: cyber)
subsequent assistant messages: "model":"claude-opus-4-8"
dropped thinking blocks: reason: model_mismatch
Steps to Reproduce
- Set
"switchModelsOnFlag": falsein settings.json and start a session onclaude-fable-5-1. - Do legitimate fleet-admin work in the conversation (e.g. discuss/implement remote screenshot capture and a background monitoring watcher for office PCs you manage).
- Eventually an assistant turn gets flagged
[cyber]→ transcript shows amodel_refusal_fallbackentry. - Observe: no visible notice, every subsequent message runs on
claude-opus-4-8, prior thinking blocks dropped withmodel_mismatch, and the session never returns to Fable until/modelis run manually.
Workaround found
env.CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1 in settings.json disables the whole fallback feature (flagged requests then refuse on Fable and the user re-prompts, instead of a silent multi-hour downgrade). This env var is undocumented.
Environment
- Claude Model:
claude-fable-5-1 - Claude Code Version: 2.1.285 (Claude Code)
- Regression: unsure — first verified on 2.1.285 (also present in a session two days prior on the same version)
- Platform: Claude subscription (Max)
- OS: Linux (Ubuntu, kernel 6.17)
- Terminal: bash over ssh/tmux