浏览 AI使用教程

Codex首次任务:完成小改动、验证与回滚

第一次让 Codex 改已有项目,先别急着让它动手。把目标文件、不能碰的改动、验证命令和撤销办法说清楚,一个小改动才适合作为起点。

沿完整工作流推进

前一阶段的可检查结果,是下一阶段的输入;中间证据不足时停在当前阶段。

  1. 01第一次交给 Codex 的任务,最好小到半小时内能验收
  2. 02先确认这次任务的起点、边界和交付
  3. 03从“创建独立练习仓库”走到“只撤销练习改动”
  4. 04两个测试通过只证明这次字符串改动
  5. 05完成后的版本记录、小改动 diff、测试与回滚证据
沿同一任务走到交付

第一次交给 Codex 的任务,最好小到半小时内能验收

教学任务:在一个练习仓库里,将搜索空状态从“暂无数据”改为“没有找到结果”,并补上断言。另一个文件 src/pay.mjs 有未提交改动,本次必须原样保留。

本页是可复现的教学练习,不是客户运行记录。安装不在本文重复,先完成本站 Codex 安装页;Node.js 仅用于本练习的测试,不代表所有 Codex 任务都需要 Node。

  • 改动前后 `git status` 已保存
  • diff 只包含授权文件
  • 验证命令与回滚路径可执行
本例材料

先确认这次任务的起点、边界和交付

需要确认本例内容
现有材料Windows PowerShell、Git、Node.js 20+;Codex 已可启动并完成登录。本页下方给出可手建的文件;只修改 src/search/empty.mjs 与 tests/empty.test.mjs。
不能越过的边界不碰已有支付改动,不安装新依赖,不提交和部署;修改前记录版本与状态,测试失败就保留现场。
要交付的结果版本记录、小改动 diff、测试与回滚证据
处理记录

从“创建独立练习仓库”走到“只撤销练习改动”

当前阶段实际处理
创建独立练习仓库新建一个未使用的目录,按下方文件建立 src/search、tests。运行 git init,再仅提交本例三个文件作为练习基线;不要在已有业务仓库执行这些初始化步骤。
制造并记录无关改动提交基线后,把 src/pay.mjs 中 demo-1 改成 demo-2。保存 git diff -- src/pay.mjs 的输出;本轮 Codex 任务禁止修改这个文件。
给出窄任务使用下方任务卡,只改文案与对应断言。先让 Codex 阅读文件、规则和 Git 状态,再动手。
验证并比较运行 node --test tests/empty.test.mjs;查看 git diff -- src/search/empty.mjs tests/empty.test.mjs,并与动手前的 pay.mjs 差异比较。退出码零只覆盖这两项断言。
只撤销练习改动确认两个允许文件在基线提交后没有其他人的改动,再执行 git restore --worktree -- src/search/empty.mjs tests/empty.test.mjs。不要运行全仓 restore;再次测试并检查 pay.mjs 的差异仍保留。
练习输入

先保存这三个完整文件

src/search/empty.mjs

待改文案

export function emptyLabel(count) {
  return count === 0 ? '暂无数据' : `找到 ${count} 条结果`;
}
tests/empty.test.mjs

基线测试

import test from 'node:test';
import assert from 'node:assert/strict';
import { emptyLabel } from '../src/search/empty.mjs';
test('空结果', () => assert.equal(emptyLabel(0), '暂无数据'));
test('非空结果不变', () => assert.equal(emptyLabel(2), '找到 2 条结果'));
src/pay.mjs

模拟别人的改动

export const paymentLabel = 'demo-1';

在独立练习目录运行 git add -- src/search/empty.mjs tests/empty.test.mjs src/pay.mjs 与 git commit -m "lesson baseline";若 Git 身份未配置,按本机规则设置或改用目录副本,不临时修改全局身份。

交给 Codex

文案与断言必须同步,别人的文件必须保留

任务卡

首次修改

当前练习仓库已有 src/pay.mjs 的未提交改动,禁止修改它。
只允许修改 src/search/empty.mjs 和 tests/empty.test.mjs。
把 count === 0 的提示改为“没有找到结果”,同步空结果断言;非空结果保持原样。
先报告当前 Git 状态和预计 diff。完成后运行 node --test tests/empty.test.mjs,展示命令、退出码和 diff。不安装依赖,不提交、不部署。
如果文件路径与本文不一致或基线测试失败,先说明差异,不猜测后继续。
结果核对

两个测试通过只证明这次字符串改动

检查预期不符合时
emptyLabel(0)没有找到结果检查修改的是源模块而非测试里的预期值单独变化
emptyLabel(2)找到 2 条结果恢复非空分支
src/pay.mjs动手前后的 diff 相同停止交付,恢复本轮误改而保留已有改动
局部撤销后空结果恢复暂无数据;基线测试通过核对恢复的文件及当前目录
AI 介入点

第一次给 Codex 派活,可以直接使用这份任务说明

先把目标文件、现有脏改动和验证命令写清楚,再允许Agent动手。

可复制使用

第一次给 Codex 派活,可以直接使用这份任务说明

请先把下面这项小任务变成一份可执行、可撤销的 Codex 任务卡;这一轮只读,不修改文件。

项目目录/当前分支【】;git status【】;想修复的具体行为与复现方式【】;允许修改范围【】;禁止操作【】;已知测试命令【】。

任务卡要明确:目标行为、允许读取/修改的路径、已有脏改动如何保护、验收测试和停止条件。仓库规则或路径未确认时列问题,不要猜。完成后列出预期触及文件与回滚边界,等我检查任务卡再动手。

使用范围:先把目标文件、现有脏改动和验证命令写清楚,再允许Agent动手。不要覆盖工作区已有改动,不升级依赖,不修改任务外文件。

预期交付

完成后的版本记录、小改动 diff、测试与回滚证据

预期:修改后 node --test tests/empty.test.mjs 的两项断言通过;git diff 只新增搜索文案和断言的改动,src/pay.mjs 的既有差异与动手前完全一致。随后仅恢复这两个练习文件,再跑基线测试。这里没有声称已在你的仓库执行。

常见失败

为什么“小改动完成了,工作区却多出无关格式化”还不能交付

小改动完成了,工作区却多出无关格式化

原因
Agent 运行了全仓格式化或改动范围没有锁定
怎么改
对照修改前后的状态和 diff,只保留任务文件并重新运行定向测试
验收方式

版本记录、小改动 diff、测试与回滚证据通过哪些检查才算完成

进一步核对

Agent 起步:参考资料与核对入口