Skip to content

Commit 78e8bf7

Browse files
authored
Merge pull request #113 from flypythoncom/fix/lesson-claim-instructions
fix(courses): instruct explicit --attest for reflection checkpoints in all seven tool courses
2 parents ff5b4e2 + e58a4be commit 78e8bf7

51 files changed

Lines changed: 552 additions & 328 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎content-manifest.json‎

Lines changed: 100 additions & 100 deletions
Large diffs are not rendered by default.

‎courses/hands-on-python-with-claude-code/COURSE.md‎

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: Hands-on Python with Claude Code
55
summary: An agent-taught course that takes you from a cloned folder to a tested, verified Python report tool using Claude Code — including the task contract, the bounded change, and the objective pass/fail evidence.
66
lang: en-US
7-
content_version: 3
7+
content_version: 4
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
badge:
1111
id: course-claude-code
1212
name_en: Reproduce the failure
@@ -64,12 +64,20 @@ If you are the coding agent teaching this course, follow these rules:
6464
- **When to stop:** a lesson is done when its checkpoint command runs and the
6565
learner can say, in their own words, what failed and why. If the learner
6666
cannot, re-teach from the failing test, not from the solution.
67-
- **How to use `verify.py`:** the learner's command is plain
68-
`python verify.py` — it runs the suites, prints per-checkpoint status
69-
and earned claim codes, and exits non-zero while the gated checkpoints
70-
(l03, l04) are still open. `starter --expect-failure` and `solution`
71-
remain maintainer checks. "Done" means the default command shows every
72-
gate `[passed]` after the learner's bounded change.- **Honesty rules:** say what you did not verify. Do not claim the code is
67+
- **How to use `verify.py`:** `python verify.py` runs the suites and prints
68+
per-checkpoint status and earned claim codes. L03/L04 become `[passed]`
69+
and emit codes when their tests pass; the default command does not emit
70+
self-report codes for L01/L02/L05. After the learner answers a reflection's
71+
questions, explicitly add `--attest l01`, `--attest l02`, or `--attest l05`
72+
for that completed reflection; never attest automatically. Attestations
73+
are not persisted between runs, so repeat the flags for every completed
74+
reflection on later runs. The command exits 1 while any objective
75+
checkpoint is open or any self-report checkpoint is pending. "Done" means
76+
L03/L04 are `[passed]` and L01/L02/L05 are `[attested]`, for example with
77+
`python verify.py --attest l01 --attest l02 --attest l05` after all three
78+
reflections and the bounded change are complete. `starter --expect-failure`
79+
and `solution` remain maintainer checks.
80+
- **Honesty rules:** say what you did not verify. Do not claim the code is
7381
production-ready. Do not promise learning or career outcomes.
7482

7583
## What this course does NOT cover

‎courses/hands-on-python-with-claude-code/COURSE_cn.md‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: 用 Claude Code 实战 Python
55
summary: 一门由 Agent 授课的课程:从下载课程文件夹到交付一个经过测试与验证的 Python 报表工具——包括任务契约、最小变更和客观的通过/失败证据。
66
lang: zh-CN
7-
content_version: 3
7+
content_version: 4
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
badge:
1111
id: course-claude-code
1212
name_en: Reproduce the failure
@@ -57,10 +57,17 @@ course_id: course-claude-code
5757
- **何时停止:** 当检查点命令运行通过、且学习者能用自己的话说清"什么
5858
失败了、为什么"时,一课才算完成。说不出来就基于失败的测试重新讲,
5959
而不是直接看答案。
60-
- **如何使用 `verify.py`:** 学员命令就是 `python verify.py`——它跑套件、
61-
打印逐检查点状态与已获认领码,在门控检查点(l03、l04)未全通过时以
62-
非零退出。`starter --expect-failure` 与 `solution` 留作维护者检查。
63-
「完成」指学习者做完有界改动后,默认命令把所有门显示为 `[passed]`。- **诚实规则:** 说明哪些内容没有验证过。不要宣称代码已达到生产可用。
60+
- **如何使用 `verify.py`:** `python verify.py` 跑套件,打印逐检查点状态与
61+
已获认领码。L03/L04 的测试通过后显示为 `[passed]` 并打印码;默认命令
62+
不会打印 L01/L02/L05 的自报认领码。学习者回答某个反思检查点的问题后,
63+
才显式添加对应的 `--attest l01`、`--attest l02` 或 `--attest l05`;
64+
不要自动确认反思。自报确认不会在多次运行之间保存,因此后续每次运行都要
65+
重复添加所有已完成反思的旗标。只要任一客观检查点仍未通过,或任一自报
66+
检查点仍待确认,命令就以退出码 1 结束。「完成」指 L03/L04 为 `[passed]`、
67+
L01/L02/L05 为 `[attested]`;例如,完成三个反思与有界改动后运行
68+
`python verify.py --attest l01 --attest l02 --attest l05`。
69+
`starter --expect-failure` 与 `solution` 留作维护者检查。
70+
- **诚实规则:** 说明哪些内容没有验证过。不要宣称代码已达到生产可用。
6471
不承诺任何学习或职业结果。
6572

6673
## 本课程不涉及的内容

‎courses/hands-on-python-with-claude-code/lessons/L01.md‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: "Lesson 1: Set up Claude Code, install the FlyPython Skill, fetch the course"
55
summary: "Get Claude Code running, install the FlyPython Skill with network access approved, and let the agent fetch this course's files — you download nothing. Then make the starter's failure objective."
66
lang: en-US
7-
content_version: 2
7+
content_version: 3
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
hints:
1111
- title: "What this checkpoint tests"
1212
body: "That you can reproduce the failure before fixing it: `python verify.py` must show l03 and l04 as `[open]` (`starter --expect-failure` prints the named tests). The checkpoint is seeing the failure objectively, not repairing it."
@@ -143,8 +143,18 @@ can answer, without looking:
143143
3. What does the row you found in the exercise do to the starter — crash,
144144
isolate, or silently pass?
145145

146-
This checkpoint's claim code is already in the default command's output —
147-
submit it only once you can answer the questions.
146+
The default command shows `l01` as `[pending]` and prints no claim code for
147+
it. Only after doing the exercise and answering the questions yourself, run:
148+
149+
```bash
150+
python verify.py --attest l01
151+
```
152+
153+
The `l01` row now shows `[attested]` and its claim code; submit that code.
154+
The command still exits with status 1 while other checkpoints remain open or
155+
pending — this does not invalidate the `l01` code. Attestations apply only to
156+
this run: repeat `--attest l01` on later checks, alongside flags for any other
157+
reflection checkpoints you have actually completed. Keep both command outputs.
148158

149159
## Expected evidence
150160

‎courses/hands-on-python-with-claude-code/lessons/L01_cn.md‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: "第 1 课:装好 Claude Code、装上 FlyPython Skill、让 Agent 取回课程"
55
summary: "先把 Claude Code 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。"
66
lang: zh-CN
7-
content_version: 2
7+
content_version: 3
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
hints:
1111
- title: "这个检查点考什么"
1212
body: "考你能不能先复现故障再谈修复:`python verify.py starter --expect-failure` 必须打印出那组具名失败测试。重点是让失败变成客观证据,而不是修好它。"
@@ -127,8 +127,17 @@ python verify.py starter --expect-failure
127127
3. 你在练习里找到的那一行会让 starter 崩溃、被隔离,还是悄悄
128128
通过?
129129

130-
本检查点的认领码已经在默认命令的输出里——能回答这些问题之后再
131-
提交。
130+
默认命令将 `l01` 显示为 `[pending]`,不会为它输出认领码。只有在你
131+
亲自完成练习并能回答上述问题后,才运行:
132+
133+
```bash
134+
python verify.py --attest l01
135+
```
136+
137+
此时 `l01` 行显示 `[attested]` 和认领码,提交该码即可。其他检查点仍
138+
未通过或未确认时,命令的退出码仍为 1,不影响 `l01` 认领码的有效性。
139+
确认只对本次运行有效:以后检查时仍需带上 `--attest l01`,并为其他
140+
确实完成的反思关卡重复添加对应参数。保存默认命令和确认命令的输出。
132141

133142
## 预期证据
134143

‎courses/hands-on-python-with-claude-code/lessons/L02.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: "Lesson 2: Write the task contract before the change"
55
summary: 'Turn "make it better" into a bounded, testable contract — the single highest-leverage skill for working with coding agents.'
66
lang: en-US
7-
content_version: 1
7+
content_version: 2
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
hints:
1111
- title: "What this checkpoint tests"
1212
body: "That you can read `TASK.md` as testable statements, not prose. Every sentence that starts with a function name is a contract line the suite can assert."
@@ -75,7 +75,7 @@ ambiguities, not add features.
7575
Show your four lines to the agent and ask: "Which of these could you satisfy
7676
by cheating — passing the test without the behavior?" If neither of you can
7777
find a cheat path, your contract is concrete enough. Fix any line that fails
78-
this test.
78+
this test, then claim this checkpoint with `python verify.py --attest l02`.
7979

8080
## Expected evidence
8181

‎courses/hands-on-python-with-claude-code/lessons/L02_cn.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: "第 2 课:动手之前先写任务契约"
55
summary: 把"优化一下"变成有边界、可测试的契约——这是与编码 Agent 协作杠杆最大的一项技能。
66
lang: zh-CN
7-
content_version: 1
7+
content_version: 2
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
hints:
1111
- title: "这个检查点考什么"
1212
body: "考你能不能把 `TASK.md` 读成可测试的语句而不是散文。每个以函数名开头的句子都是套件能断言的契约行。"
@@ -67,7 +67,8 @@ hints:
6767

6868
把你的四行内容给 Agent 看,问:"这几条里哪一条你能靠作弊满足——测试
6969
过了但行为没做到?"如果你们都找不到作弊路径,契约就足够具体。修掉
70-
任何没通过这一关的行。
70+
任何没通过这一关的行,然后用 `python verify.py --attest l02` 认领本
71+
检查点。
7172

7273
## 预期证据
7374

‎courses/hands-on-python-with-claude-code/lessons/L05.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: "Lesson 5: Apply this to your own project"
55
summary: "Port the workflow — not the code — to one script you own: contract, isolation, rounding, atomic writes, and an honest verification record."
66
lang: en-US
7-
content_version: 1
7+
content_version: 2
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
hints:
1111
- title: "What this checkpoint tests"
1212
body: "That you port the workflow — not the code — to one script you own: a task contract, an isolated run, and an honest record."
@@ -81,7 +81,8 @@ the excuse.
8181

8282
Your project now has: a written contract, one test that used to fail and now
8383
passes, a single command that demonstrates both, and a three-line verification
84-
record. That is the whole course, compressed into your codebase.
84+
record. That is the whole course, compressed into your codebase. Claim this
85+
checkpoint with `python verify.py --attest l05`.
8586

8687
## Expected evidence
8788

‎courses/hands-on-python-with-claude-code/lessons/L05_cn.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: "第 5 课:把这套方法带回你自己的项目"
55
summary: 迁移工作流——而不是代码——到你拥有的一个脚本上:契约、错误隔离、舍入、原子写入,以及一份诚实的验证记录。
66
lang: zh-CN
7-
content_version: 1
7+
content_version: 2
88
status: reviewed
9-
reviewed_on: 2026-09-12
9+
reviewed_on: 2026-11-04
1010
hints:
1111
- title: "这个检查点考什么"
1212
body: "考你能不能把这套工作流——而不是代码——搬到你自己一个脚本上:任务契约、隔离运行、诚实记录。"
@@ -76,7 +76,7 @@ hints:
7676

7777
你的项目现在拥有:一份书面契约、一个曾经失败现在通过的测试、一条
7878
能同时演示两者的命令、一份三行验证记录。这就是整门课程压缩进你
79-
代码库的样子。
79+
代码库的样子。用 `python verify.py --attest l05` 认领本检查点。
8080

8181
## 预期证据
8282

‎courses/hands-on-with-cursor/COURSE.md‎

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ type: course
44
title: Hands-on with Cursor
55
summary: The verified Python workflow — task contract, bounded change, objective verify.py evidence — taught hands-on in Cursor, where Agent mode runs the loop and you supervise diffs and project rules.
66
lang: en-US
7-
content_version: 2
7+
content_version: 3
88
status: reviewed
9-
reviewed_on: 2026-09-13
9+
reviewed_on: 2026-11-04
1010
badge:
1111
id: course-cursor
1212
name_en: Reproduce with Cursor in the loop
@@ -69,12 +69,20 @@ If you are the Cursor agent teaching this course, follow these rules:
6969
- **When to stop:** a lesson is done when its checkpoint command runs and
7070
the learner can say, in their own words, what failed and why. If the
7171
learner cannot, re-teach from the failing test, not from the solution.
72-
- **How to use `verify.py`:** the learner's command is plain
73-
`python verify.py` — it runs the suites, prints per-checkpoint status
74-
and earned claim codes, and exits non-zero while the gated checkpoints
75-
(l03, l04) are still open. `starter --expect-failure` and `solution`
76-
remain maintainer checks. "Done" means the default command shows every
77-
gate `[passed]` after the learner's bounded change.- **Honesty rules:** say what you did not verify. Do not claim the code is
72+
- **How to use `verify.py`:** `python verify.py` runs the suites and prints
73+
per-checkpoint status and earned claim codes. L03/L04 become `[passed]`
74+
and emit codes when their tests pass; the default command does not emit
75+
self-report codes for L01/L02/L05. After the learner answers a reflection's
76+
questions, explicitly add `--attest l01`, `--attest l02`, or `--attest l05`
77+
for that completed reflection; never attest automatically. Attestations
78+
are not persisted between runs, so repeat the flags for every completed
79+
reflection on later runs. The command exits 1 while any objective
80+
checkpoint is open or any self-report checkpoint is pending. "Done" means
81+
L03/L04 are `[passed]` and L01/L02/L05 are `[attested]`, for example with
82+
`python verify.py --attest l01 --attest l02 --attest l05` after all three
83+
reflections and the bounded change are complete. `starter --expect-failure`
84+
and `solution` remain maintainer checks.
85+
- **Honesty rules:** say what you did not verify. Do not claim the code is
7886
production-ready. Do not promise learning or career outcomes.
7987

8088
## What this course does NOT cover

0 commit comments

Comments
 (0)