展开本页目录
开始前准备什么
- 把现有购物车金额练习解压到独立目录,保留原包、test_app.py与参考目录。
- 记录自己的OpenCode主版本与完整版本;本页界面步骤按V1官方文档,不把历史1.2.15记录当作你的版本。
- 已有模型接入需核对provider、协议与准确ID;运行Python原测试不需要API Key,模型过程可能计费。
- 确认版本与失败
- Plan解释
- Build受限修改
- 检查真实diff
- 独立复跑原测试
- 区分参考结果
- 核对全部请求
原创输入、可运行脚本、预期对照、截图原始 HTML 与验证记录。
对应本页任务与验证范围。
固定输入、修改范围与验收目标。
用于 diff 对照,非模型运行产物。
执行 before/fixed,并故意破坏临时副本验证失败。
真实 unittest 输出与退出码。
只在解压目录 before 内初始化 Git。
1. 先确认版本,再复现固定失败
这份操作按OpenCode V1官方文档组织。先在自己的环境记录命令路径与opencode --version;已有模型环境就直接使用,不为修一次测试盲目覆盖安装。V1与V2默认都叫opencode,不能据命令名判断版本。
将练习解压到独立目录,读before/app.py与test_app.py。在尚未交给模型之前运行原测试,保存真实失败与退出码。若你实际使用V2,先读下方独立版本教程,再回到本题的金额合同。
sh
opencode --version
cd before
python3 -m unittest -v2. 在V1 Plan中读实现和原测试
从当前before练习目录启动已配置的OpenCode V1,核对目标provider/model,再按V1界面用Tab选择Plan,显式附上@app.py和@test_app.py。先让它解释0.10+0.20为何不应按二进制float验收。
Plan不应被理解为所有命令绝不执行:shell仍受实际权限配置控制。基线测试可以先在外部终端运行;会话需要运行命令时,逐项核对工作目录和命令。
3. 给出只改实现的金额合同
让Plan先列出失败原因和最小修改,再切到V1 Build实施。任务只针对app.py中的subtotal;固定测试、公开接口与输入数据保持原样。
不要将reference.patch直接交给模型作为“它已修复”的证明。若上下文或权限不足,保留该次失败,处理原因后再决定是否继续,而不是删掉失败记录。
text
读取app.py与test_app.py,先说明失败原因和最小修改。
只修app.py中的subtotal,不要改测试或公开接口。
金额字符串按Decimal计算;空列表返回Decimal("0.00"),总额保留两位小数。
方案确认后再修改,并运行原测试,返回真实工具输出与diff。4. 核对真正写入了哪个文件
查看会话中的文件编辑工具结果,再检查源码diff。允许的源码变化只有app.py中的必要实现;如果测试被改、接口被扩大或模型只贴了代码但没有写入,先纠正这一项。
若按包内说明初始化过独立练习仓库,可用Git检查;没有Git基线时,对照下载原件检查test_app.py逐字未变。不要在任务结束后才初始化Git,再把空diff当成未改动证明。
sh
git diff --name-only
git diff -- app.py test_app.py5. 在自己的实现上独立复跑原测试
回到模型实际修改的before工作目录运行同一份test_app.py。逐项核对0.10+0.20得到Decimal("0.30")、空列表得到Decimal("0.00")、3.45+2.10得到Decimal("5.55")。这些是原测试的三组断言。
结果须来自自己的文件和实际退出码;不要用fixed目录或下载的run-log.json替代。原测试通过后仍审查diff,确认没有删除断言、改输入或放宽条件。
sh
python3 -m unittest -v6. 参考校验只在未修改的原教材副本运行
第5步在你修好的before工作目录独立运行原测试,才是本次修复的验收。教材verify.py位于解压根目录,并要求未修复的before仍失败、fixed通过;修好before/app.py后再拿它验收,反而会触发预期不符。
如需复核作者教材,将原lesson.zip另行解压到一个全新的参考目录,保持before与fixed原样,再从这个参考目录根目录运行下方命令。不要在当前已修改的before目录运行,也不要为使verify.py通过而把自己的修复改回去。
下图和已有run-log.json只证明原教材参考文件的检查,不证明OpenCode已执行模型工具任务。工作副本的真实diff、原测试退出码和模型记录单独保存。
sh
# 仅在重新解压且未修改的参考教材根目录
# 当前目录应同时有 verify.py、before/ 和 fixed/
python3 verify.py7. 保存全部尝试、验收与费用状态
保存实际OpenCode主版本/完整版本、provider/model、Plan与Build的工具事件、基线失败、修复diff和独立复跑结果。缺少文件写入或工具执行记录时,只能说得到代码建议,不能说客户端已完成任务。
Plan、Build、重试与失败都可能产生模型请求。记录完整usage并对照自己的控制台实扣;没有账单匹配就留空。本页既有记录验证的是教材参考实现,不是这次新增的在线任务。
text
实际OpenCode版本 / provider / model:
原测试是否保持不变:
基线失败 / 修复后退出码:
源码diff与实际工具结果:
全部尝试与请求ID:
总usage / 控制台实扣:未匹配时留空卡在哪一步,就先处理哪一层
| 现象 | 先查什么 | 何时继续任务 |
|---|---|---|
| 找不到opencode命令或主版本不对 | 安装来源、命令路径与V1/V2冲突 | 确认目标二进制,不靠重充值修安装 |
| 模型列表有型号但请求失败 | provider/model、最终协议与脱敏错误 | 最小文本链路有真实响应 |
| 能聊天却没有读写或测试结果 | 模型工具能力、实际权限与工具响应 | 目标文件确实写入、测试命令真实执行 |
| 模型说通过但自己复跑失败 | 工作目录、测试是否被修改、是否跑了fixed参考 | 同一工作副本与原测试得到一致结果 |
- 现象
- 找不到opencode命令或主版本不对
- 先查什么
- 安装来源、命令路径与V1/V2冲突
- 何时继续任务
- 确认目标二进制,不靠重充值修安装
- 现象
- 模型列表有型号但请求失败
- 先查什么
- provider/model、最终协议与脱敏错误
- 何时继续任务
- 最小文本链路有真实响应
- 现象
- 能聊天却没有读写或测试结果
- 先查什么
- 模型工具能力、实际权限与工具响应
- 何时继续任务
- 目标文件确实写入、测试命令真实执行
- 现象
- 模型说通过但自己复跑失败
- 先查什么
- 工作目录、测试是否被修改、是否跑了fixed参考
- 何时继续任务
- 同一工作副本与原测试得到一致结果
怎样确认已经完成
- 只修改subtotal所在实现,不改测试和公开接口。
- 同一组购物车金额及精度边界在自己的修改上通过。
- 保留基线失败、修复diff和实际退出码;参考结果与模型会话分开。
- 实际主版本和对应界面入口明确,Plan中的shell行为按权限检查。
- 三组Decimal断言在自己的实现与未改原测试上通过,全部失败尝试保留。
- 本批未新增OpenCode模型或工具会话实测,不将教材运行记录冒充客户端结果。
常见问题
离线测试通过代表 AI 工具已经执行了吗?
不代表。参考补丁是人工编写,测试在本机真实运行;自己的 OpenCode 模型会话需按操作步骤另行执行。
如何判断工具偷偷扩大修改范围?
查看 git diff --name-only 与逐文件 diff;把测试和只读输入恢复到下载原版,再运行同一检查。
这份Tab切Plan/Build的步骤适用于哪个版本?
这里按OpenCode V1官方文档组织。当前V2使用另一组入口,且默认命令与V1冲突。先记录实际版本;V2新手请走独立安装与首次修改教程,不混用字段和快捷键。
Plan模式一定不会执行终端命令吗?
不能这样判断。当前V1官方Agents文档仍按权限控制shell命令。你可以先在外部终端保存失败基线;在模型会话中只批准完成此练习需要的命令,检查真实工具结果。
为什么模型说测试通过,我还要再运行一次?
需要确认通过的是未改过的原测试和自己的实现,而不是fixed教材或被删减的断言。独立复跑、检查退出码,再对比测试文件与下载原件。
这次修复到底花了多少钱?
本页没有新增在线OpenCode任务。自己的费用应包含Plan、Build、失败和重试的全部请求;有控制台实扣再填写金额,用量估算与真实账单分开。

