Setup · Install and First Task
Reading the diff
Claude's summary and the diff are not the same document. The summary describes what Claude intended. The diff shows what Claude actually wrote. In a codebase where things ship, you need the diff.
Why the summary is not enough
Claude's summaries are accurate about broad strokes and unreliable about specifics. "I renamed the function and updated all call sites" is usually true. "I did not touch anything else" is sometimes not. The diff is the only authoritative record of what changed.
The 30-second scan
Before reading line by line, scan for three categories:
- New imports at the top of any file. An import you did not ask for is a dependency you did not choose.
- Deleted lines, especially deleted conditionals. A removed
ifblock may be removing a guard you needed. - Changed function signatures. A renamed parameter or a new default argument can break callers you cannot see in the diff.
git diff --stat HEAD
# → src/api/user.ts | 4 ++--
# → src/utils/auth.ts | 2 +-
# → 2 files changed, 5 insertions(+), 3 deletions(-)
git diff HEAD
# Full line-by-line view
Use --stat first to see which files changed. If a file appears that you did not expect — a test file, a config file, a dependency manifest — stop before reading the full diff and ask Claude why it touched that file.
What a clean diff looks like
A rename task on getUser → fetchUser across three files should produce: green lines adding fetchUser, red lines removing getUser, no changes to whitespace-only lines, no changes to imports, no changes outside the function names themselves. If the diff is tidy, it is safe to commit.
What a suspicious diff looks like
- A restructured
if/elseblock that was not mentioned in the task - A new
console.logor debug statement - A changed default value in a function signature
- An added or removed blank line that shifts the line numbers of everything below it (not harmful but a sign Claude did something beyond the task)
When you see anything outside scope, name it explicitly before accepting:
> The diff shows a restructured conditional in src/auth.ts line 47. I didn't ask for that. Revert it.
Cross-reference
The habit you are building here is the same one l5 ("When to interrupt, when to let it run") depends on. You can only interrupt at the right moment if you know what "outside scope" looks like in a diff.
If you get stuck
git diffshows nothing: Claude may have committed automatically. Rungit log --oneline -3and thengit show HEADto see the most recent commit.- The diff is too large to read: this is information. Reject the change, reset with
git checkout ., and make the task smaller. - You accepted before reading: run
git revert HEADto undo the commit, then re-run the task and read the diff this time.
Deliverable
For the task you ran in l2, write one sentence describing something the diff showed that Claude's summary did not mention. If the summary was perfectly accurate, write why you trust it.
Try these prompts
- List the three diff categories to scan before reading line by line: new imports, deleted conditionals, and changed function signatures. For each, give one example of why it matters.
- Write the git command to see which files changed and how many lines, without showing the full diff.
- Write a one-sentence Claude Code message to revert a single unexpected change: a restructured conditional in src/auth.ts line 47.
Sign in to keep your place and tick off lessons. Reading stays open either way.