- Environment: Linux x86_64, Python 3.12.3, standard library only.
- The scenario recordings (
scenario/*/recordings.json) are hand-written fixtures that imitate common reply failures (Markdown fences, invented categories, string priorities, prose, out-of-allowlist tool calls). They were not captured from any model, and no model API was called while authoring or verifying this course. - Commands and results:
-
python verify.py starter --expect-failure— exit 0; the twelve expected failure names reproduced; three tests pass on the starter. -
python verify.py solution— exit 0; 15/15 tests pass. -
python verify.py— exit 1 on the shipped starter; l03/l04[open], l01/l02/l05[pending]with no code. -
Solution eval CLI:
Skin Output Exit shop-supportaccuracy=0.750 correct=6/8 fallbacks=1 min_accuracy=0.8001 it-helpdeskaccuracy=0.833 correct=5/6 fallbacks=1 min_accuracy=0.8000 saas-feedbackaccuracy=0.800 correct=4/5 fallbacks=0 min_accuracy=0.8000 The starter prints
accuracy=1.000 correct=5/6onit-helpdesk, the contradiction Lesson 1 is built on. -
Lesson 3's failing-count table (12 → 9 → 7 → 3 → 0) was measured by swapping the solution's functions into a scratch copy of the starter one group at a time;
test_tool_result_is_fed_back_to_the_modelturns red after the parser group, as the lesson says. -
The Lesson 3 exercise one-liner prints the retry feedback message after the
triageturn. -
python tools/verify_courses.py— contract satisfied.
-
- One full agent-taught run-through ("start lesson 1" through the Lesson 5
checkpoint) in a named coding agent and version, recording observed
deviations from
COURSE.mdhere. The course is tool-agnostic; no agent-taught session has happened yet. - Lesson 5 asks learners to apply the pattern to their own model-backed feature with a real provider. Whether the contract transfers cleanly to a provider's native structured-output or tool-calling API is unverified here.
- Agent: a Cursor Cloud Agent subagent (Claude Opus 5.5), Linux, Python 3.12.3, standard library only.
- Method: worked in a copy of the course with
solution/and this file removed; implementedstarter/ticket_triage.pyfromTASK.mdand the tests only, without access to the reference solution. - Result: green after one implementation pass (14/14 on the revision it was given); the eval CLI printed the same three lines as the solution table above.
- Observed deviations and the changes they triggered:
TASK.mddid not defineattemptsin the fallback; the agent inferred "number of rejected replies" from a test.TASK.md/TASK_cn.mdnow state it.TASK.mddid not say whether a tool call beyondmax_tool_callsruns, or whether refused calls count astool_calls, and no test exercised the budget. The contract now says only calls that ran are counted and the over-budget call is not run; the newtest_tool_call_budget_ends_in_the_fallbackenforces it (suite 14 → 15 tests, starter failures 11 → 12, lessons updated). The agent's implementation passes the new test unchanged.COURSE.mdsaid plainpython verify.pyexits non-zero "while l03 and l04 are open"; it actually exits non-zero until l01/l02/l05 are also attested. Wording corrected inCOURSE.md/COURSE_cn.md.
- Limitations: challenge-mode run (TASK.md → tests), not the taught COURSE.md walkthrough; teaching quality remains pending. The agent implemented all four functions in one pass, so it did not walk Lesson 3's per-turn sequence (that sequence was measured mechanically, above).