LEARN · PHASE 18 · LESSON 119

Keeping Up — Claude Code Ships Weekly

You can sort your own notes into the part that won't change and the part that

Type
Learn
Prerequisites
Lesson 118, What Breaks in Production; Lesson 20, Model
Time
~30 minutes

Learning Objectives

  • Sort a claim about Claude Code into surface, mechanism, or model — by how fast it decays
  • Keep a claims ledger with a URL, a date, and a version on every entry that can drift
  • Build a SessionStart hook that prints the version at the top of every session
  • Re-check the surface tier on a trigger, not on a habit of reading everything

The Problem

This course once stated a [ref] addressing syntax as documented fact. It isn't in the docs. Nobody was harmed — the sentence was just wrong, and it would have failed for whichever reader tried it first. The agent had used the syntax before, remembered it, and said it.

The same shape costs more elsewhere. Write a model ID into a config because it worked in March, and by autumn sonnet points somewhere else while your file still names the old thing — valid, current, and no longer what you chose. Nothing errors. Your setup just quietly stopped being the setup you think you have.

Two failure surfaces, one cause: notes with no date on them. You cannot tell a sentence that is still true from one that was true when you wrote it, so you either re-read everything or trust everything. Both are expensive.


The Concept

Every claim you hold about Claude Code sits in one of three tiers. They decay at wildly different rates, and that difference is the whole method.

flowchart LR
    N["Your notes<br/>about Claude Code"] --> M["Mechanism<br/>the loop, the window,<br/>isolation, the graph"]
    N --> S["Surface<br/>commands, flags, events,<br/>keys, defaults"]
    N --> D["Model<br/>aliases, effort, limits,<br/>capability"]
    M --> M2["Teach it. Bet on it."]
    S --> S2["Link it. Date it.<br/>Re-check on a version bump."]
    D --> D2["Use the alias.<br/>Never pin a version into prose."]
Mermaid source — renders as a diagram where mermaid.js is available
TierExamplesDecayWhat you do with it
MechanismThe agentic loop, the context window, compaction, isolation, nodes and edgesEffectively neverTeach it, build on it. These are why the course is 119 lessons and not a changelog
SurfaceSlash commands, CLI flags, hook event names, settings keys, defaults, file locationsWeeksLink the page, write the date, re-check on a version change
ModelModel aliases, effort levels, context limits, capability per taskEvery releaseUse the alias; if you must name a version, name it as a version

The tiers exist so that a release changes your checklist and not your understanding. When a flag moves, you have one page to re-read. When the loop is still the loop, the twentieth lesson you wrote about it is still true.

One index, one log, one definition

  • The index — https://code.claude.com/docs/llms.txt. Titles and URLs for every page. Answers "does a page exist" without a search engine.
  • The log — https://code.claude.com/docs/en/changelog.md. Where a change becomes dated and attributed to a version.
  • The definitions — https://code.claude.com/docs/en/glossary.md. One word, one meaning, so your notes and the docs agree on what a term is.

The ledger

Surface claims go in a file — DRIFT.md — with four columns. Not in your head, where they cannot be recounted.

ClaimSourceCheckedVersion
SessionStart fires when a session starts…/en/hooks.md2026-10-15—
the settings key for a hook matcher is spelled this way…/en/hooks.md2026-10-15—

The column that matters is Version. A row with a version and no version bump since is a fact. A row whose version is older than yours is a question.

The trigger, not the feed

Reading every release note is a job, and it is not your job. Instead:

  • re-check the surface rows whose component you actually use — your hooks, your plugin, your settings keys — when the version changes;
  • read the changelog filtered by those components, not end to end;
  • re-check unconfirmed rows from Lesson 117 whenever the version changes at all, because they were never on solid ground to begin with.

A ledger turns "keep up with Claude Code" from an ambient anxiety into a diff with two sides.

Verified against the pages linked above on 2026-10-15. Page URLs, flags and version gates age; the three-tier split does not.

The reframe: keeping up is not reading every release note — it is knowing

which of your sentences are about the harness and which are about a version,

and only the second kind ever needs re-checking.


Build It

1. Sort ten of your own claims

Take the claims you harvested in Lesson 117. Label each one mechanism, surface, or model.

✅ You pass when the mechanism rows outnumber the surface rows, and you can say why that ratio is the reason this course exists.

2. Start the ledger

Create DRIFT.md with the four columns. One row per surface claim.

✅ You pass when every surface row has a URL and a date, and no row says "somewhere in the docs."

3. Print the version at the top of every session

A SessionStart hook that runs a command and injects its output turns the trigger into something you cannot miss.

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          { "type": "command", "command": "echo \"claude $(claude --version) — surface claims due for re-check\"" }
        ]
      }
    ]
  }
}

Confirm the event name, the matcher, and the settings key against https://code.claude.com/docs/en/hooks.md before you trust that block — hook config is surface tier, which is this lesson's entire point. Lesson 57 has the script shape; Lesson 34 has the settings file that wins.

✅ You pass when a new session prints your line, and you can say which settings file you put it in and why that one won.

4. Find the version bump

claude --version

Check it against the changelog. Find one entry — any entry — that touches something in your ledger.

✅ You pass when you can name the component, the version, and the ledger row it invalidates or confirms.

5. Alias the models

Replace any dated model ID in your config or notes with the alias.

✅ You pass when grep for a dated ID in your build returns nothing, and the build still runs.

6. Set the re-check trigger

Write, in DRIFT.md, the one thing that starts a re-check: a version change, a failed preflight, or the changelog mentioning a component you use. Not a calendar reminder to "read the notes."

✅ You pass when the trigger is a condition you can evaluate in one command, not an intention.


Use It

ThingWhen you reach for it
llms.txt index"Does a page about this exist?" — the first move, always
ChangelogWhen behaviour and the page disagree, or a version just changed
GlossaryWhen two people are using one word three ways
claude --versionBeside every surface claim, in the ledger and at session start
Mechanism tierAnything you are about to teach someone else
Surface tierAnything you are about to type into a config
Model tierAnything with a name that could route somewhere else next month
Alias over IDEvery note, every config, every lesson
The version columnThe single column that tells you which rows are now questions
Re-check triggerWhen a version changes — not when you remember

Exercises

  1. Write a short how-to for a teammate that involves one Claude Code command. Make it survive the next release. ✅ You pass when a reader with a newer version can recover the correct command from your link alone, without asking you.
  1. Take a claim that lives only in your head — a flag, an event name, a field — and resolve it against the docs today. ✅ You pass when it has a state (from Lesson 117) and a row in DRIFT.md, or you have removed it from your build.
  1. Add the SessionStart version line, then update Claude Code and start a session. ✅ You pass when the printed version changes and your ledger's surface rows are now visibly older than the session you are sitting in.
  1. Find one lesson in this course, or one note of your own, that is now wrong. Fix it in place and date the fix. ✅ You pass when the corrected text carries the date and the page you checked, so the next reader knows how old it is.

Key Terms

TermWhat people sayWhat it actually means
mechanism"the concepts"Part of the harness that doesn't decay: the loop, the window, isolation, the graph. Bet on these.
surface"the syntax"Commands, flags, events, keys, defaults. True this release; re-check on a version bump.
model tier"which model"Aliases, effort, limits, capability. Route by alias; a version in prose is a claim with an expiry date.
claims ledger"my notes"DRIFT.md: claim, source, date checked, version. The version column is what makes it usable.
version gate"it needs a newer version"A behaviour that only exists from some version on. Useless without your version beside it.
alias"the model name"sonnet, opus — a route, not a version. What you write when you want it to keep working.
trigger"staying up to date"A condition you can test in one command that starts a re-check. Not a resolution to read more.
drift"the docs changed"Your note silently stopped being true. Nothing errored, which is what makes it expensive.

What this lesson skipped

Deprecation windows. How long a deprecated flag keeps working is a product decision; the changelog dates each one when it happens. Read it there rather than trusting a number in this lesson.

Plugin dependency ranges. ^1.2, and what an update does to a pin, is a Phase 09 concern — the plugin dependencies page.

The Agent SDK's cadence. A separate surface with its own versioning (Lesson 112). Come back to it when you ship an SDK-based runner.

Enterprise release channels. Managed settings can hold a fleet on a version (Lesson 115). One machine does not need a rollout plan; a team does.

Check yourself

3 questions. Answer before you reveal — recognising the right option is not the same as being able to produce it.

  1. A teammate asks how to keep their own notes from going stale the way yours did. What is the durable instruction?

    1. Re-read the docs from the top every few weeks so nothing gets missed
    2. Sort each note into mechanism, surface, or model; date and link the surface ones; re-check them when the version changes
    3. Only write down things you have personally tested, since tested behaviour can't go stale
    4. Copy commands verbatim from the docs so the wording can never be wrong
    Show answer

    B. Sort each note into mechanism, surface, or model; date and link the surface ones; re-check them when the version changes

    The three tiers tell you what to spend attention on: mechanism notes are permanent, model notes should be aliases, and surface notes are the only ones worth a date and a link. Re-checking happens on a version change, not on a calendar. A is the tempting one because it sounds thorough, and it is exactly the job nobody sustains — you either drown or stop, and both leave you trusting undated notes. C fails on precision: something tested and working on one version is the definition of a version-gated claim, not a durable one. D fixes the wording while the command itself moves under it, so the quote stays accurate and the instruction stops working.

  2. A new release adds a flag and renames a settings key you use. You have a ledger of about forty claims. What does the release actually obligate you to do?

    1. Re-verify all forty, since any of them could have changed
    2. Re-check the surface rows, especially the renamed key, and leave the mechanism rows alone
    3. Update the two things you know about and re-check the rest only if something breaks
    4. Nothing — the ledger is a record, and records are corrected when you next read them
    Show answer

    B. Re-check the surface rows, especially the renamed key, and leave the mechanism rows alone

    A rename is a surface change, so it invalidates a surface row and nothing else — the loop still loops, the window still fills, the graph is still a graph. That is the payoff of having sorted the claims in the first place. A is the tempting one because a ledger looks like a to-do list, but a changelog entry names its components, so you can diff it against the rows that mention them. C is the opt-in version of the same mistake: 'breaks' is how surface changes present, and you will find out on a teammate's machine. D treats the ledger as archaeology rather than an instrument, which is what makes notes rot silently.

  3. A hook has run correctly for eight months. Today it fires with a payload shape you didn't expect, and nothing in your repo changed. Where is the fault most likely, and what is the first move?

    1. Your repository — something changed the input; bisect the commits
    2. The surface layer — the event's payload changed in a release; check the hooks reference and the changelog for the version
    3. The model — it produced a differently-shaped payload this time
    4. Nothing is wrong; the payload was always like that and you misremembered
    Show answer

    B. The surface layer — the event's payload changed in a release; check the hooks reference and the changelog for the version

    A hook payload is surface: the event fires from the harness, not from your repo and not from the model, so the first suspect is a release that moved the shape. The reference page tells you the current shape; the changelog dates the change and names the version. A is tempting because 'what changed on my side' is the usual debugging instinct, and here your side is unchanged — eight months of stability is evidence the fault is upstream. C misplaces the origin: the harness calls the hook and hands it its arguments. D is the failure mode this whole lesson is about — deciding your memory is right and the system is lying, without opening the page.