第 4 课:像评审者一样验证,别当观众
目标
两个套件都通过,你手握一份书面记录:说清绿色运行证明了什么、没 证明什么——外加一份你敢向同事辩护的 diff。
为什么有这节课
「测试全过」是大多数 AI 辅助工作停下的地方——也是大多数隐性 bug 开始的地方。套件只证明它断言过的契约行;没人写过测试的行, 它一概不担保。验证是你写的一份报告,不是一种感觉。ZCode 把验证 放在工作旁边:同一个工作区里有 Git 状态、任务列表和终端输出—— 远程控制还能让你在手机上查状态、发指令,桌面端继续跑活。
本课内容
在工作区终端里跑完整的一对命令:
python verify.py starter # 你监督出来的实现
python verify.py solution # 评审过的参考实现
双全绿意味着契约按字面被满足。现在做套件替不了你的评审:
- 走完一个皮肤。 挑一个
scenario/<skin>/文件夹,用工具跑 它:python starter/report_tool.py scenario/<skin>。对照输入 文件读产出的报告——亲手重算一个分组总计。 - 审累积的 diff。 工作区 Git 状态展示整个目标落地的每个 hunk。从头读到尾。每个 hunk 都应能对上你在第 2 课点名的契约 行。对不上的就是范围蔓延——回退或让它解释。
- 检查测试没钉的边界。 喂给工具一个空 CSV、一个全是无效行 的 CSV、一个不存在的文件。契约没钉这些——你的判断钉。记下 它的行为。
练习
为这次改动写三行证据记录:
- 已验证: 你跑过的命令和它们证明了什么。
- 未验证: 没有测试钉住的输入与行为。
- 已知局限: 你看到的、契约从未承诺过的东西。
写得诚实——「未验证」是一份事实清单,不是忏悔书。
检查点
运行 python verify.py。本检查点的码只在两个套件都过
时打印。不看材料能回答即算通过:
- 你手工重算的分组总计结果如何?
- 说出一个套件没钉的输入,以及工具对它的实际行为。
- 哪个 hunk(如果有)你会请同事来解释?
预期证据
两次全绿运行、你的三行证据记录、diff 评审笔记。
提示
卡住了?逐条打开。
提示 1 —— 本检查点考察什么
starter 和 solution 双双通过——verify.py 只在两个套件都绿时打印本检查点的码。门槛是一对结果,不是一次运行。
提示 2 —— 审增量,不凭感觉
工作区 Git 状态把整份累积改动放在一处——通过远程控制甚至能在手机上看。按评审者的方式读:每个 hunk 对上一条契约行、没有多余挪动、没有测试被放松。
提示 3 —— 完成的标志
你已写下三行证据——已验证 / 未验证 / 已知局限——并且能在代码评审里为这次改动辩护。
提交
做完了?记录它。
提交 python verify.py 为本检查点打印的 8 位认领码。自报关卡要先完成课后问题,再运行 python verify.py --attest l04。
提交认领码
只有记录积分和徽章才需要账号——读题和解题永远免费。
让 Agent 解题并自动提交
把这题交给它(悬停出现复制按钮)——解题、验证、提交全程自动:
请完成 FlyPython 挑战课程「上手 ZCode」(course id course-zcode)的检查点 l04。
机读简报:https://flypython.com/api/challenges/hands-on-with-zcode
打开课程文件夹,先读 TASK.md——它就是契约。
规则:最小变更、不新增依赖、绝不修改 tests/ 或 solution/。
用 python verify.py 检查 starter/;自报关卡先让我回答课后问题,再运行 --attest ID 取得码。
目标:只做检查点 l04 这一道题,完成后立即提交。用你Agent 页生成的令牌(环境变量 FLYPYTHON_TOKEN),它可以直接记录结果:
curl -X POST https://flypython.com/api/claims \
-H "Authorization: Bearer $FLYPYTHON_TOKEN" \
-H "Content-Type: application/json" \
-d '{"claims":[{"course":"hands-on-with-zcode","checkpoint":"l04","code":"<8-char code>"}]}'或一次性安装完整的 FlyPython Agent Skill,连粘贴都省了。
starter 与验证器
解题在你的机器上运行——Agent 通过 /api/challenges/hands-on-with-zcode/files 自己取回课程文件,你无需手动下载。想直接读源码?在 GitHub 上查看文件夹 ↗