本页目标
上一页已经为 Python TODO CLI 完成了done <序号> 功能,并补上基础测试。
现在先不提交、不推送,而是把“看起来完成”的改动变成一份有证据、可审查、可回滚的候选交付。
本页继续使用同一个项目:
done 的契约如下:
- 命令是
python todo.py done <序号>。 - 序号从
1开始,与list的显示一致。 - 合法序号只删除对应待办,并打印被删除的内容。
- 非数字、缺参、
0、负数和越界不得产生 traceback。 - 不引入第三方依赖,不改变已有
add、list行为。
Codex 命令、菜单和权限文案可能随版本变化。先运行
codex --help,并以本机界面和官方文档为准。一、冻结范围并保存基线
1. 确认环境
在项目根目录执行:pwd 换成 Get-Location。
预期类似:
- 当前目录确实是
todo-cli。 - 当前分支不是受保护的
main,或团队明确允许在此工作。 - 待审改动只包含预期文件。
- Python 与 Codex CLI 均可启动。
.env、数据库、日志或未知文件,先停止:
2. 保存修复前补丁
把当前源码和测试差异保存到仓库外:0。
若为 0 字节,说明目标文件相对 HEAD 没有差异,空文件不能作为备份。
3. 明确非目标
把边界直接交给 Codex:二、建立测试矩阵
测试矩阵把需求、风险、验证层和证据连起来,避免只测正常路径。1. 功能与边界
优先级含义:
- P0:崩溃、误删或命令契约破坏,失败即禁止交付。
- P1:重要回归或约束失守,修复后才能进入发布准备。
- P2:可维护性建议,可记录但不得冒充阻断缺陷。
2. 验证层级
先让 Codex 只读补漏:
- Python 支持负索引,
0 - 1等于-1,可能误删末项。 done缺参时直接访问sys.argv[2]可能触发IndexError。
pytest、数据库或重写参数解析,回复:
三、运行修复前基线
1. 空白、语法和全量测试
0。
测试理想输出类似:
0、负数和缺参用例,绿色只说明已有断言通过。
若语法检查出现:
2. CLI 冒烟
示例程序的TODOS 只存在于当前进程,不能用两次独立命令证明“先添加再删除”。
CLI 冒烟只检查参数路由、输出与不崩溃;状态变化交给同进程单元测试。
- 输出用法或友好错误。
- 不出现
Traceback (most recent call last)。 - 不静默成功。
- 不访问网络或外部文件。
python todo.py done 抛 IndexError,这是确定性产品缺陷,不是环境问题。
记录完整命令和首个异常位置。
四、分类失败
看到红色先分类,不要立刻改业务代码。
每个失败记录为:
五、先补会变红的回归测试
假设确认两个缺陷:- F-01:
done 0误删最后一项。 - F-02:
done缺参抛IndexError。
六、让 Codex 做只读审查
在项目根目录启动:- 是否由当前 diff 引入,或会被当前交付影响?
- 能否用命令、测试或代码路径复现?
- 修复是否突破本轮范围?
七、分五层读 diff
第 1 层:范围
todo.py 与 test_todo.py。
出现 AGENTS.md、锁文件或生成物时先查原因,范围异常本身就是阻断项。
第 2 层:结构
第 3 层:逻辑
int() 失败受控、显式拒绝 < 1、删除前检查上界、失败路径保持列表不变、成功只删除目标项。
第 4 层:测试
sys.argv 与标准输出;测试不能复制错误实现逻辑,也不能删除旧用例换取绿色。
第 5 层:安全与卫生
八、最小修复与回归
给 Codex:1. 定向回归
2. 邻近边界与全量回归
OK,其余命令无输出且退出码为 0。
用例数以实际文件为准,不要为匹配示例硬凑数量。
最后重跑 CLI 冒烟:
九、质量门禁
“Ran 0 tests”不是通过:
HEAD 建基线:
十、证据记录
“我跑过了”不是证据。最小记录应包含时间、HEAD、环境、命令、退出码和摘要。
记录环境与差异指纹:
十一、失败分支与停止条件
无法复现
要求 Codex 使用同一目录、命令和版本:需要真实凭据或生产数据
立即停止,改用内存替身、脱敏夹具或专用测试账号。 无法安全验证时标记BLOCKED,写明所需授权与隔离条件,不要把真实密钥贴进会话。
修复开始扩张
以下情况应停止:- 为两个边界判断引入新框架。
- 改变公开命令格式。
- 修改无关的
add、list。 - 删除测试、降低断言或跳过失败用例。
- 新增网络、数据库或文件副作用。
十二、回滚
回滚前先区分本轮改动与用户原有工作,禁止使用git restore . 或 git reset --hard。
先检查补丁适用方向:
git revert,更不要改写历史。
十三、安全验收
进入下一页前,由人逐项确认:- 当前目录、分支和身份正确。
- diff 只包含批准文件。
- 修复前回归测试确实变红。
- 修复后定向测试与全量测试通过,且不是 0 个用例。
-
py_compile与git diff --check通过。 - 缺参、非数字、0、负数和越界均无 traceback。
-
add、list行为未改变。 - Codex
/review无未处理 P0/P1。 - 人工按范围、结构、逻辑、测试、安全五层读过 diff。
- 无真实凭据、个人数据、生产地址和本机绝对路径。
- 无新增网络、第三方依赖和外部数据副作用。
- 已记录命令、环境、结果、失败分类和残余风险。
- 已准备仓库外补丁或明确的逐块回滚方法。
- 未提交、未推送、未创建 PR、未合并、未发布。
BLOCKED 或 PARTIAL,并写清缺少的证据。
最终通过标准
合格结论应类似:小结
本页用四个问题收口:- 证明什么:矩阵覆盖正常、边界、回归和安全风险。
- 失败说明什么:区分产品、测试、环境、偶发、范围外与安全阻断。
- 改动是否可信:Codex 只读审查,人按五层 diff 复核。
- 能否进入下一阶段:定向与全量回归、门禁、证据和回滚全部到位。
0 被负索引解释成末项,以及缺参直接崩溃。
先让回归测试稳定变红,再用最小修复变绿,最后证明没有破坏相邻行为。
下一页进入 Git 提交、发布与复盘。此时仍保持未提交、未推送,并带上本页的测试证据和安全验收清单。
参考资料:参考/codex/34-capstone.md、参考/codex/14-workflows.md、参考/codex/26-git-github.md。动态信息以本地 --help 与官方文档为准。