上手 Cursor · 第 04 题 · English

第 4 课:像评审者一样验证,别当观众

检查点 l0410 分测试套件判定Cursor(Agent 模式)

测试全绿是地板不是天花板——两个套件都跑、三个皮肤都走一遍、按评审同事的标准审这份累积 diff。

六门 Agent 工具课共用同一道题。Cursor(Agent 模式) 专属步骤仍在补写——补齐并通过审核前,本页 canonical 指向主课程的对应题目

在用 Agent 做题?一句话开始整门课程:

Read https://flypython.com/skills/flypython/SKILL.md and start the FlyPython course `hands-on-with-cursor`.

第 4 课:像评审者一样验证,别当观众

目标

两个套件都通过,你手握一份书面记录:说清绿色运行证明了什么、没 证明什么——外加一份你敢向同事辩护的 diff。

为什么有这节课

「测试全过」是大多数 AI 辅助工作停下的地方——也是大多数隐性 bug 开始的地方。套件只证明它断言过的契约行;没人写过测试的行, 它一概不担保。验证是你写的一份报告,不是一种感觉。

本课内容

在集成终端里跑完整的一对命令:

python verify.py starter     # 你监督出来的实现
python verify.py solution    # 评审过的参考实现

双全绿意味着契约按字面被满足。现在做套件替不了你的评审:

  1. 走完一个皮肤。 挑一个 scenario/<skin>/ 文件夹,用工具跑 它:python starter/report_tool.py scenario/<skin>。对照输入 文件读产出的报告——亲手重算一个分组总计。
  2. 审累积的 diff。 git diff(或 Cursor 的源代码管理面板) 展示整个会话落地的每个 hunk。从头读到尾。每个 hunk 都应能对 上你在第 2 课点名的契约行。对不上的就是范围蔓延——回退或让 它解释。
  3. 检查测试没钉的边界。 喂给工具一个空 CSV、一个全是无效行 的 CSV、一个不存在的文件。契约没钉这些——你的判断钉。记下 它的行为。

练习

为这次改动写三行证据记录:

  • 已验证: 你跑过的命令和它们证明了什么。
  • 未验证: 没有测试钉住的输入与行为。
  • 已知局限: 你看到的、契约从未承诺过的东西。

写得诚实——「未验证」是一份事实清单,不是忏悔书。

检查点

运行 python verify.py。本检查点的码只在两个套件都过 时打印。不看材料能回答即算通过:

  1. 你手工重算的分组总计结果如何?
  2. 说出一个套件没钉的输入,以及工具对它的实际行为。
  3. 哪个 hunk(如果有)你会请同事来解释?

预期证据

两次全绿运行、你的三行证据记录、diff 评审笔记。

提示

卡住了?逐条打开。

提示 1 —— 本检查点考察什么

starter 和 solution 双双通过——verify.py 只在两个套件都绿时打印本检查点的码。门槛是一对结果,不是一次运行。

提示 2 —— 审增量,不凭感觉

Git 工作区 diff 展示整个会话累积的改动。按评审者的方式读:每个 hunk 对上一条契约行、没有多余挪动、没有测试被放松。

提示 3 —— 完成的标志

你已写下三行证据——已验证 / 未验证 / 已知局限——并且能在代码评审里为这次改动辩护。

提交

做完了?记录它。

提交 verify.py progress 为本检查点打印的 8 位认领码——浏览器里交,或让你的 Agent 直接交。

浏览器

提交认领码

你的 Agent自动提交

让 Agent 解题并自动提交

把这题交给它(悬停出现复制按钮)——解题、验证、提交全程自动:

请完成 FlyPython 挑战课程「上手 Cursor」(course id course-cursor)的检查点 l04。
机读简报:https://flypython.com/api/challenges/hands-on-with-cursor
打开课程文件夹,先读 TASK.md——它就是契约。
规则:最小变更、不新增依赖、绝不修改 tests/ 或 solution/。
用 python verify.py 检查直到门控通过,把每个认领码告诉我。
目标:只做检查点 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-cursor","checkpoint":"l04","code":"<8-char code>"}]}'

或一次性安装完整的 FlyPython Agent Skill,连粘贴都省了。

文件

starter 与验证器

解题在你的机器上运行——Agent 通过 /api/challenges/hands-on-with-cursor/files 自己取回课程文件,你无需手动下载。想直接读源码?在 GitHub 上查看文件夹 ↗