Skip to content

Commit 547c74b

Browse files
committed
fix(courses): L01 hints and evidence sections follow the explicit --attest flow
1 parent 78e8bf7 commit 547c74b

22 files changed

Lines changed: 154 additions & 62 deletions

File tree

‎content-manifest.json‎

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@
211211
{
212212
"id": "course-claude-code-l01",
213213
"type": "course",
214-
"content_version": 3,
214+
"content_version": 4,
215215
"status": "reviewed",
216216
"reviewed_on": "2026-11-04",
217217
"locales": [
@@ -220,14 +220,14 @@
220220
"path": "courses/hands-on-python-with-claude-code/lessons/L01.md",
221221
"title": "Lesson 1: Set up Claude Code, install the FlyPython Skill, fetch the course",
222222
"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.",
223-
"sha256": "a036d4d0bfd9480b78fd45436ac5ff9b00fb7e1bef3b2e4323f55a63c92e42e0"
223+
"sha256": "55e4db16a6d16aa2e399fdc7f40420a1c394d7f60bae91f1b42e683f2aadf90a"
224224
},
225225
{
226226
"lang": "zh-CN",
227227
"path": "courses/hands-on-python-with-claude-code/lessons/L01_cn.md",
228228
"title": "第 1 课:装好 Claude Code、装上 FlyPython Skill、让 Agent 取回课程",
229229
"summary": "先把 Claude Code 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
230-
"sha256": "905c5b7f1213f280bc9a33315ff1d409b2a2cc2c0573acf45d9ee7a41077e8c9"
230+
"sha256": "11b353ef3b4535e1ceaba803dd16487602263c22c84a5f40bf6dc14849e70aed"
231231
}
232232
]
233233
},
@@ -349,7 +349,7 @@
349349
{
350350
"id": "course-codex-cli-l01",
351351
"type": "course",
352-
"content_version": 4,
352+
"content_version": 5,
353353
"status": "reviewed",
354354
"reviewed_on": "2026-11-04",
355355
"locales": [
@@ -358,14 +358,14 @@
358358
"path": "courses/hands-on-with-openai-codex/lessons/L01.md",
359359
"title": "Lesson 1: Set up the Codex app, install the FlyPython Skill, fetch the course",
360360
"summary": "Get the Codex app 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.",
361-
"sha256": "5728ef63d565d56d7c13c17b8f0e1d17f8adf766e7a7cfda5a92ce523e208e68"
361+
"sha256": "df128789e9d7fdec752ade2dfab80757f6e40b76ca7cf4a46dc689ca63723273"
362362
},
363363
{
364364
"lang": "zh-CN",
365365
"path": "courses/hands-on-with-openai-codex/lessons/L01_cn.md",
366366
"title": "第 1 课:装好 the Codex app、装上 FlyPython Skill、让 Agent 取回课程",
367367
"summary": "先把 the Codex app 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
368-
"sha256": "66794c6306ec46f22b1adbcac7ffe35ca14d220316879b510f5d6a15bb548410"
368+
"sha256": "8253df825eab2768c8a70322a6d48d41ee370148879f8294d396dce22fd61e3c"
369369
}
370370
]
371371
},
@@ -487,7 +487,7 @@
487487
{
488488
"id": "course-cursor-l01",
489489
"type": "course",
490-
"content_version": 3,
490+
"content_version": 4,
491491
"status": "reviewed",
492492
"reviewed_on": "2026-11-04",
493493
"locales": [
@@ -496,14 +496,14 @@
496496
"path": "courses/hands-on-with-cursor/lessons/L01.md",
497497
"title": "Lesson 1: Set up Cursor, install the FlyPython Skill, fetch the course",
498498
"summary": "Get Cursor 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.",
499-
"sha256": "1d99c229a40e82e4eab86324af45cdc19e1cc07ce343978122d02b695e79c653"
499+
"sha256": "042274be016406d6fb6c1df0757b2898904b7052c89c4833cb5b3659884f5be8"
500500
},
501501
{
502502
"lang": "zh-CN",
503503
"path": "courses/hands-on-with-cursor/lessons/L01_cn.md",
504504
"title": "第 1 课:装好 Cursor、装上 FlyPython Skill、让 Agent 取回课程",
505505
"summary": "先把 Cursor 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
506-
"sha256": "298bc1497bfa810ecdb0aadf5df6e597fb7bb2a7c7dd387d3e7d0f7a25461379"
506+
"sha256": "84433a77faa23b29e3d87ca408654c4e5b9842e4089028d1dda91480a348b2cb"
507507
}
508508
]
509509
},
@@ -1039,7 +1039,7 @@
10391039
{
10401040
"id": "course-deepseek-harness-l01",
10411041
"type": "course",
1042-
"content_version": 3,
1042+
"content_version": 4,
10431043
"status": "reviewed",
10441044
"reviewed_on": "2026-11-04",
10451045
"locales": [
@@ -1048,14 +1048,14 @@
10481048
"path": "courses/hands-on-with-deepseek-harness/lessons/L01.md",
10491049
"title": "Lesson 1: Set up DeepSeek Harness, install the FlyPython Skill, fetch the course",
10501050
"summary": "Get DeepSeek Harness 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.",
1051-
"sha256": "70ed2156deb6179f1006967becc23c67fdfef03b56d0f7fb742239b0fbcc3cc0"
1051+
"sha256": "04af9cbe95c4e9685d09ab6dce05b74e8b4ec86936a1fdd850878777aac519d8"
10521052
},
10531053
{
10541054
"lang": "zh-CN",
10551055
"path": "courses/hands-on-with-deepseek-harness/lessons/L01_cn.md",
10561056
"title": "第 1 课:装好 DeepSeek Harness、装上 FlyPython Skill、让 Agent 取回课程",
10571057
"summary": "先把 DeepSeek Harness 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
1058-
"sha256": "1c6fdc233cb4f1e0c3ece502fc1507ef7d62b8184ef4c41df2778c848bbc6bc3"
1058+
"sha256": "5a60b6db927d296433c1172972d31753f4dd73ac7009d38e41977b9b967f9d7c"
10591059
}
10601060
]
10611061
},
@@ -1177,23 +1177,23 @@
11771177
{
11781178
"id": "course-github-copilot-l01",
11791179
"type": "course",
1180-
"content_version": 1,
1180+
"content_version": 2,
11811181
"status": "reviewed",
1182-
"reviewed_on": "2026-10-11",
1182+
"reviewed_on": "2026-11-04",
11831183
"locales": [
11841184
{
11851185
"lang": "en-US",
11861186
"path": "courses/hands-on-with-github-copilot/lessons/L01.md",
11871187
"title": "Lesson 1: Set up Copilot in VS Code, install the FlyPython Skill, fetch the course",
11881188
"summary": "Get GitHub Copilot running in VS Code with the Agent role and Manual permissions, optionally install the FlyPython Skill, and let the agent fetch this course's files — you download nothing. Then make the starter's failure objective.",
1189-
"sha256": "c8da93c48af23c9e9bfe8d6c1c750be357a21511e42d5751046697fd6b6ba998"
1189+
"sha256": "285f3cfb48a97e82dfbad2a191de45e07cfcff1978b318ba01a8d0a0a19ee2e2"
11901190
},
11911191
{
11921192
"lang": "zh-CN",
11931193
"path": "courses/hands-on-with-github-copilot/lessons/L01_cn.md",
11941194
"title": "第 1 课:在 VS Code 里装好 Copilot、装上 FlyPython Skill、让 Agent 取回课程",
11951195
"summary": "让 GitHub Copilot 在 VS Code 里以 Agent 角色、Manual permissions 跑起来,(可选)装好 FlyPython Skill,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
1196-
"sha256": "6fc5c71d4c2b3c0953be4e4972e51a407524198a6d1b9c18536b0f6bd5d740b3"
1196+
"sha256": "b2df5d3cbcf56b0e1852b89117fc0d4173b27312dbb61294aaf2d13257d6bb5a"
11971197
}
11981198
]
11991199
},
@@ -1315,7 +1315,7 @@
13151315
{
13161316
"id": "course-kimi-code-l01",
13171317
"type": "course",
1318-
"content_version": 3,
1318+
"content_version": 4,
13191319
"status": "reviewed",
13201320
"reviewed_on": "2026-11-04",
13211321
"locales": [
@@ -1324,14 +1324,14 @@
13241324
"path": "courses/hands-on-with-kimi-code/lessons/L01.md",
13251325
"title": "Lesson 1: Set up Kimi Code, install the FlyPython Skill, fetch the course",
13261326
"summary": "Get Kimi 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.",
1327-
"sha256": "d31b6b75d7087ef3afbc7b12b89c1637f72b24182f7de8d49c8fc300ed6fd361"
1327+
"sha256": "23b85c7aaf80babb1f5bfb17a0af4bf417a6900235159db8ad5e504fec51281a"
13281328
},
13291329
{
13301330
"lang": "zh-CN",
13311331
"path": "courses/hands-on-with-kimi-code/lessons/L01_cn.md",
13321332
"title": "第 1 课:装好 Kimi Code、装上 FlyPython Skill、让 Agent 取回课程",
13331333
"summary": "先把 Kimi Code 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
1334-
"sha256": "f4305ff5ae8d8cc89b0b0fb3672eaf402cf4273a7aad160e3e85066f5475a369"
1334+
"sha256": "0ba99ed27c0b360804bc0d4766d4a0cfc7e014f067074afebe2295cca8edd75e"
13351335
}
13361336
]
13371337
},
@@ -2005,7 +2005,7 @@
20052005
{
20062006
"id": "course-zcode-l01",
20072007
"type": "course",
2008-
"content_version": 3,
2008+
"content_version": 4,
20092009
"status": "reviewed",
20102010
"reviewed_on": "2026-11-04",
20112011
"locales": [
@@ -2014,14 +2014,14 @@
20142014
"path": "courses/hands-on-with-zcode/lessons/L01.md",
20152015
"title": "Lesson 1: Set up ZCode, install the FlyPython Skill, fetch the course",
20162016
"summary": "Get ZCode 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.",
2017-
"sha256": "30af915aa95d866709d3cb21526d8d402d9b1e8f57659b1841a0e3665c038f55"
2017+
"sha256": "f650e6593f5322a117dd3a14294f4293e667a04ed98982b744c95b54311e6b2b"
20182018
},
20192019
{
20202020
"lang": "zh-CN",
20212021
"path": "courses/hands-on-with-zcode/lessons/L01_cn.md",
20222022
"title": "第 1 课:装好 ZCode、装上 FlyPython Skill、让 Agent 取回课程",
20232023
"summary": "先把 ZCode 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。",
2024-
"sha256": "db097d7a74a989b4781c1272758d10f55e9532bb3971e7a037a58084dc57605d"
2024+
"sha256": "0162553953d5e4622737daa475a4d465a1c5d83747299dee37e34b79c7322212"
20252025
}
20262026
]
20272027
},

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,19 @@
3737
same official documentation as the course; **not yet exercised inside
3838
the tool** — the pending live run-through below still stands.
3939

40+
## 2026-11-04 — claim-instruction accuracy fix (mechanical re-verify)
41+
42+
- Lesson and hint text corrected to match the shipped verifier: the default
43+
`python verify.py` prints no claim code for reflection checkpoints
44+
(l01/l02/l05); the code appears only after the explicit
45+
`--attest ID` flag for a completed reflection. L02/L05 checkpoints now
46+
name the command; L01 hint 3 no longer promises a code from the default
47+
run; evidence sections keep both command transcripts.
48+
- Verification: clean-copy runs of `verify.py check --json` with partial
49+
and full `--attest` sets reproduced the documented states; repository
50+
gates (`make check`) green at this change. No live Claude Code 2.x agent run —
51+
the pending live run-through below still stands.
52+
4053
## Deviation log
4154

4255
### 2026-09-13 — agent solvability run (challenge mode, not taught mode)

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ 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: 3
7+
content_version: 4
88
status: reviewed
99
reviewed_on: 2026-11-04
1010
hints:
@@ -13,7 +13,7 @@ hints:
1313
- title: "Read the failure names as a contract"
1414
body: "Each failing test name maps to one line in `TASK.md` — e.g. `test_non_numeric_amount_is_invalid` is the contract's 'a non-numeric numeric_field value'. If a name maps to no contract line, that drift is worth noticing."
1515
- title: "When you are done"
16-
body: "You can say out loud which nine behaviors the suite proves and why the starter cannot fake them. `python verify.py` then shows this checkpoint's claim code."
16+
body: "You can say out loud which nine behaviors the suite proves and why the starter cannot fake them. `python verify.py --attest l01` then shows this checkpoint's claim code."
1717
---
1818

1919
# Lesson 1: Set up Claude Code, install the FlyPython Skill, fetch the course
@@ -158,5 +158,5 @@ reflection checkpoints you have actually completed. Keep both command outputs.
158158

159159
## Expected evidence
160160

161-
The transcript of the default command, and your three answers. Keep them; Lesson 4
161+
Transcripts of both the default command and the attest command, plus your three answers. Keep them; Lesson 4
162162
will ask for them again.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ 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: 3
7+
content_version: 4
88
status: reviewed
99
reviewed_on: 2026-11-04
1010
hints:
@@ -141,5 +141,5 @@ python verify.py --attest l01
141141

142142
## 预期证据
143143

144-
两条命令的输出记录,加上你对三个问题的回答。保存好,第 4 课会再次
144+
默认命令与确认命令两条输出记录,加上你对三个问题的回答。保存好,第 4 课会再次
145145
用到。

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,19 @@
3939
- Whether a free Cursor plan's Agent quota lasts the whole course is
4040
unverified.
4141

42+
## 2026-11-04 — claim-instruction accuracy fix (mechanical re-verify)
43+
44+
- Lesson and hint text corrected to match the shipped verifier: the default
45+
`python verify.py` prints no claim code for reflection checkpoints
46+
(l01/l02/l05); the code appears only after the explicit
47+
`--attest ID` flag for a completed reflection. L02/L05 checkpoints now
48+
name the command; L01 hint 3 no longer promises a code from the default
49+
run; evidence sections keep both command transcripts.
50+
- Verification: clean-copy runs of `verify.py check --json` with partial
51+
and full `--attest` sets reproduced the documented states; repository
52+
gates (`make check`) green at this change. No live Cursor agent run —
53+
the pending live run-through below still stands.
54+
4255
## Deviation log
4356

4457
(none yet — no live run has happened)

‎courses/hands-on-with-cursor/lessons/L01.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ type: course
44
title: "Lesson 1: Set up Cursor, install the FlyPython Skill, fetch the course"
55
summary: "Get Cursor 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: 3
7+
content_version: 4
88
status: reviewed
99
reviewed_on: 2026-11-04
1010
hints:
@@ -13,7 +13,7 @@ hints:
1313
- title: "Ask vs Agent"
1414
body: "Ask mode answers questions without touching files; Agent mode reads, edits, and runs commands. This lesson only needs the Agent to read — tell it not to change anything."
1515
- title: "When you are done"
16-
body: "You can say which nine behaviors the suite proves and why the starter cannot fake them. `python verify.py` then shows this checkpoint's claim code."
16+
body: "You can say which nine behaviors the suite proves and why the starter cannot fake them. `python verify.py --attest l01` then shows this checkpoint's claim code."
1717
---
1818

1919
# Lesson 1: Set up Cursor, install the FlyPython Skill, fetch the course
@@ -158,5 +158,5 @@ reflection checkpoints you have actually completed. Keep both command outputs.
158158

159159
## Expected evidence
160160

161-
The transcript of the default command, and your three answers. Keep them;
161+
Transcripts of both the default command and the attest command, plus your three answers. Keep them;
162162
Lesson 4 will ask for them again.

‎courses/hands-on-with-cursor/lessons/L01_cn.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ type: course
44
title: "第 1 课:装好 Cursor、装上 FlyPython Skill、让 Agent 取回课程"
55
summary: "先把 Cursor 跑起来,装好 FlyPython Skill 并打开联网权限,让 Agent 取回本课文件——你不下载任何东西,然后让 starter 的失败变得客观。"
66
lang: zh-CN
7-
content_version: 3
7+
content_version: 4
88
status: reviewed
99
reviewed_on: 2026-11-04
1010
hints:
@@ -13,7 +13,7 @@ hints:
1313
- title: "Ask 与 Agent 的区别"
1414
body: "Ask 模式只回答问题、不碰文件;Agent 模式会读文件、改代码、跑命令。本课只需要 Agent 读——明确告诉它不要改任何文件。"
1515
- title: "完成的标志"
16-
body: "你能说出套件证明了哪九种行为、为什么 starter 伪造不出来。`python verify.py` 随即显示本检查点的认领码。"
16+
body: "你能说出套件证明了哪九种行为、为什么 starter 伪造不出来。`python verify.py --attest l01` 随即显示本检查点的认领码。"
1717
---
1818

1919
# 第 1 课:装好 Cursor、装上 FlyPython Skill、让 Agent 取回课程
@@ -143,5 +143,5 @@ python verify.py --attest l01
143143

144144
## 预期证据
145145

146-
默认命令的完整输出记录,加你的三个答案。保留好——第 4 课还会
146+
默认命令与确认命令两条输出记录,加你的三个答案。保留好——第 4 课还会
147147
用到。

‎courses/hands-on-with-deepseek-harness/REVIEW.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,19 @@
4040
deviations from `COURSE.md` here — including the exact `cordis.yml` used
4141
and the model plugin configured.
4242

43+
## 2026-11-04 — claim-instruction accuracy fix (mechanical re-verify)
44+
45+
- Lesson and hint text corrected to match the shipped verifier: the default
46+
`python verify.py` prints no claim code for reflection checkpoints
47+
(l01/l02/l05); the code appears only after the explicit
48+
`--attest ID` flag for a completed reflection. L02/L05 checkpoints now
49+
name the command; L01 hint 3 no longer promises a code from the default
50+
run; evidence sections keep both command transcripts.
51+
- Verification: clean-copy runs of `verify.py check --json` with partial
52+
and full `--attest` sets reproduced the documented states; repository
53+
gates (`make check`) green at this change. No live DeepSeek Harness agent run —
54+
the pending live run-through below still stands.
55+
4356
## Deviation log
4457

4558
(none yet — no live run has happened)

‎courses/hands-on-with-deepseek-harness/lessons/L01.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ type: course
44
title: "Lesson 1: Set up DeepSeek Harness, install the FlyPython Skill, fetch the course"
55
summary: "Get DeepSeek Harness 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: 3
7+
content_version: 4
88
status: reviewed
99
reviewed_on: 2026-11-04
1010
hints:
@@ -15,7 +15,7 @@ hints:
1515
- title: "The trajectory is your record"
1616
body: "Every step lands in an append-only session/trajectory log you can inspect later. Reading it back is how you verify what the agent actually did — not what it said it did."
1717
- title: "When you are done"
18-
body: "You can say which nine behaviors the suite proves and why the starter cannot fake them. `python verify.py` then shows this checkpoint's claim code."
18+
body: "You can say which nine behaviors the suite proves and why the starter cannot fake them. `python verify.py --attest l01` then shows this checkpoint's claim code."
1919
---
2020

2121
# Lesson 1: Set up DeepSeek Harness, install the FlyPython Skill, fetch the course

0 commit comments

Comments
 (0)