Day 45 of 49 · Tuesday · Learning

Auto-update is a claim, not a guaranteeCapability

Your install says auto-updates are enabled and hasn't attempted one in twelve days. Both are true. You're on 2.1.221; the current release is 2.1.233 — and one of the versions you skipped fixes a bug that hits your headless crons directly.

Catch-up progress
45/49
Why this matters to you

Release 2.1.233 fixed bundled skill aliases like /review reporting 'Unknown command' in -p mode when a user or project skill shadows them. Your CLAUDE.md deliberately shadows /review with gstack's version, and every scheduled job runs headless via `claude -p`. That fix is sitting in a version you haven't installed.

'Auto-updates: enabled' describes a mechanism, not an outcome. It means the updater is permitted to run. Whether it has run, whether it succeeded, and how far behind you are as a result are three separate questions, and the status line answers none of them. `claude doctor` reports the last attempt — yours reads 'success → 2.1.221 (2026-08-04)'. Success twelve days ago, and nothing since.

Version drift is invisible in a way that outages aren't. Nothing breaks when you skip a release; you just don't get the fixes. So the cost shows up as unexplained friction — a headless job that fails on a shadowed slash command, an MCP OAuth handshake that won't complete — and you debug it as if it were your bug, because you have no reason to suspect the version. That is expensive in exactly the way a loud failure is not.

This is the same lesson as yesterday's settings.json from the other direction. Yesterday: a mechanism you believed was protecting you had been dead for days. Today: a mechanism you believe is maintaining you hasn't run in twelve. Both were discoverable in one command. Neither was discovered, because nothing in your system asks.

Worked example

Find out where you actually are, then close the gap:

# What doctor knows about your install
claude doctor | head -12

# What's on disk — every version you've ever installed
ls ~/.local/share/claude/versions/

# Update, then verify the version actually moved
claude update
claude doctor | grep -i running

# The fix that matters to you, in 2.1.233:
#   "Fixed bundled skill aliases like /checkup and /review reporting
#    'Unknown command' in -p mode or with plugins/MCP loaded when a
#    user or project skill shadows the bundled skill"
▶ Do it now
  1. Run `claude doctor | head -12` and note the Running version and the Last update attempt date.
  2. Run `claude update`, then `claude doctor` again and confirm the Running line moved. If it didn't, the message will say why — read it rather than retrying.
  3. Skim the changelog from 2.1.222 to current at https://code.claude.com/docs/en/changelog, looking only for entries mentioning -p, headless, skills, or MCP OAuth.
  4. Add a version-age line to your daily brief or a monthly reminder. The goal isn't to chase every release; it's to never again be twelve days behind without knowing it.

Gotchas

Go deeper: Claude Code changelog
One-card takeaway

Enabled is not the same as ran. Check the version number, not the setting that promises to check it for you.