Lesson 3: The bounded change, audited from the trajectory
Objective
The starter passes all nine tests through a sequence of bounded changes,
the trajectory proves nothing else was touched, and you can explain every
edit without reading the solution first.
Why this lesson exists
This is the lesson people skip — and the one that builds the actual skill.
Letting an agent rewrite the file in one shot teaches you nothing and
leaves you a change you cannot honestly review. Supervising small steps,
each pinned to a contract line, is how the code stays yours. DeepSeek
Harness makes the supervision auditable: the session trajectory is
append-only, so what the agent did is a record you inspect — not a claim
you trust.
The lesson
Start a fresh session and say:
“Work through TASK.md against starter/report_tool.py. One failing test
group at a time: JSON loading, then validation isolation, then rounding,
then atomic writes, then the end-to-end tests. After each group, run
python verify.py starter and stop for my review.”
Hold it to the contract’s boundaries:
- Only
starter/report_tool.py changes. If the trajectory shows a write
to tests/, solution/, or scenario/, stop the session and fork from
before that step.
- No new imports outside the standard library.
- Each change should move toward one contract line. Reject drive-by
refactors.
- If the agent wants to change a test, the answer is no. Tests are the
contract; the code moves.
Use the harness’s strengths deliberately:
- Inspect the trajectory after each step. Did it run the command it
claimed? Did it touch only the file it said?
- Fork instead of argue. If a step went wrong, fork the session from
the last good step rather than stacking corrections on a bad state.
- Read the diff, not the summary. The trajectory shows the actual
edit; the agent’s summary is its own narration. When they disagree, the
trajectory wins.
Expect the failing count to drop group by group: 7 → 5 → 4 → 3 → 2 → 0.
Exercise
Pick one edit the agent made — ideally the validation-isolation change —
and find it in the trajectory. Explain it back: “this edit does X; that
satisfies contract line Y.” If you cannot, ask the agent to walk you
through that trajectory step before continuing.
Checkpoint
Run python verify.py. This checkpoint’s code appears only when
the starter suite is green. You pass the lesson when you can answer:
- How many steps did the bounded change take, and what made each step
bounded?
- Which trajectory entry did you reject or fork away from, and why?
- Point at the edit that implements “isolate invalid rows with reasons”
— which trajectory step is it?
Expected evidence
A green python verify.py starter run, plus the trajectory steps showing
each bounded edit and the verify runs between them.