Daily timed Python exercises and OpenAI Agents SDK recall drills. The commit history is the evidence: every rung is committed when the timer ends, green or not, so the timestamps show what was done live.
- 25 minutes on a timer (45 from rung R3). Editor, pytest and docs.python.org only. No AI during the timer.
- When the timer ends, commit on branch
rN/<name>whether or not the tests are green. - Then, and only then, a 15-minute Claude Code review of the diff. That review is the day's AI-dev block.
- Function bodies are always written by hand. Claude Code generates the folder (README, data, signatures, tests, empty LOG.md) and never the bodies.
| Rung | Folder | Topic | Timer | Status |
|---|---|---|---|---|
| R0 | R0-tickets-basics/ |
Plain Python over a JSON list of support tickets: load, count, filter, sum | 25 min | done, 5 tests green |
| R1 | defined when the rung is generated | 25 min | planned | |
| R2 | defined when the rung is generated | 25 min | planned | |
| R3 | defined when the rung is generated | 45 min | planned | |
| R4 | defined when the rung is generated | 45 min | planned | |
| R5 | defined when the rung is generated | 45 min | planned | |
| R6 | defined when the rung is generated | 45 min | planned |
The rungs share the tickets/policies dataset with production-agent-platform on purpose: the reps feed the platform.
RN-<name>/
README.md what, rules, steps, data, hints
data/ input files
src/ function signatures with docstrings (bodies written during the timer)
tests/ complete, given up front
LOG.md start time, time to first pytest, time to green, the one thing looked up
start: 2026-10-14 19:00
first pytest run: 19:04
green: 19:21 (or: not green at timer end; N/5 passing)
looked up: dict.get default argument
drills/sdk-recall/: OpenAI Agents SDK primitives rebuilt from memory and diffed against the source.
cd R0-tickets-basics && uv run --with pytest pytest -q