Welcome banner shows another model's name ("Opus 4.7") for model id claude-fable-5[1m]; statusline JSON reports the correct id
Environment
- Claude Code version: 2.1.158 (Windows 10, native installer)
~/.claude/settings.json:"model": "claude-fable-5[1m]","effortLevel": "xhigh"- Plan: Claude Max
Bug
With claude-fable-5[1m] configured, the welcome banner renders a different model's display name:
▐▛███▜▌ Claude Code v2.1.158
▝▜█████▛▘ Opus 4.7 with xhigh effort · Claude Max
The session itself runs on the configured model — the statusline stdin JSON reports the raw id correctly:
"model": { "id": "claude-fable-5[1m]", "display_name": "claude-fable-5[1m]" },
"context_window": { "context_window_size": 1000000 }
So only the banner's id→display-name mapping is wrong: for an id it doesn't recognize, it falls back to another real model's label ("Opus 4.7") instead of showing the raw id.
Why it matters
A banner showing a different real model's name is indistinguishable from a silent model downgrade. Users who pin a model (e.g. to detect quota-related downgrades) can't trust the banner — we had to capture the statusline JSON to verify nothing had actually drifted.
Expected
If the display-name mapping doesn't know the model id, fall back to the raw id (as the statusline JSON already does) — never to another model's alias.
Steps to reproduce
- Set
"model": "claude-fable-5[1m]"(presumably any id newer than the CLI's display-name table) in~/.claude/settings.json - Start
claude - Banner shows "Opus 4.7" instead of the configured model id