方法论与洞察

2026-08-01 Codex 教程清单 2/3/4 · 三项目 19 段录屏复盘

事实记录(不可修改区)


一、作品回顾

和上一批的差别

上一批(实战六)是一条链路、一个对话从头跑到尾;这一批是三个互不相关的真实项目,且其中一个(工位池塘)是已经发布过三个构建的线上项目——不能真让 AI 去改它。

所以这批的难点不在”怎么模拟人手”(那套已经成熟、零改动复用),而在:

  1. 每个项目的界面版面都不一样,同一套硬编码坐标要在不同版面下反复成立;
  2. 有一个项目不能被真正修改,只能录”下指令”这一半;
  3. 任务书里有子镜头在这台机器上没有素材

三批产出对照

批次段数时长特征
实战六(上一批)1921.7 min单一链路,长镜头多(段11 305s、段13 320s)
清单 2/3/4(本批)1922.8 min三个项目,最长 264s(台风计划书生成)

二、结果分析

做到的

出问题的(全部是”版面前提”类)

本批的失败没有一条出在鼠标轨迹、输入法、OBS 这些”难”的地方,全部出在硬编码坐标的前提没有被校验

事故表面现象真因
PLAN.md 被 Ctrl+A+Delete 清空(18KB→101B)脚本”正常跑完”右侧文档面板开着时,INPUT_BOX(3670,990) 落在文档编辑器里,不在输入框上
同根因第二次:确认语被打进 PLAN.md文件多一行,确认压根没发出去send() 里没有先 ensure_layout()
台风段 04 差点开浏览器——取”最靠下的短蓝链接”选中了气象局外链,改取最靠上那个
工位池塘 05/06/07 三段一声不响退出什么都没打印Codex 被上一段最小化过,SW_RESTORE 没回到最大化,BTN(4005,1025) 落到窗口外读到背景,被判成”还在跑”
06 段”找不到 Codex 窗口”——最小化窗口 GetWindowRect 只有 160×28,被按最小尺寸过滤的窗口枚举漏掉
05 段出片 43.9s、时长合格、内容不能用参数全对开头就是上一条废弃take留下的”你在 9s 后停止了”,同一句提示词在画面里出现两遍
06 段出片 34.9s、时长合格、内容不能用参数全对快门按下时提示词还躺在输入框里、发送键在转圈——新建项目任务要几秒才建会话

另有一批”环境层”的坑(Chrome --app 遇中文路径开成新标签页、F11 跑到主屏、Godot class_name 缓存没生成、Godot 复选框要先悬停一帧、Godot 忽略 WM_CLOSE),都是一次性的,已写进脚本注释。

最有价值的数据点:又是 2 条”时长合格但内容错误”

上一批这个数字是 4/19,本批是 2/19。两批合计 6 条参数全对、内容全错。 这两条都发生在这批最后三段(工位池塘 Codex 段),也就是流程最熟、最容易松手的时候。


三、方法论沉淀

[固定坐标必须绑一条可机检的前提断言]

核心:UI 自动化里的每个硬编码坐标都有隐含前提(面板是关的 / 窗口是最大化的 / 输入框是空的 / 侧栏在顶部)。前提不成立时,坐标不会报错,它会落在别的东西上并照常执行——这才是它比”坐标写错”危险一个量级的原因。

来源:本批 4 次事故同一根因(清空 PLAN.md ×2、按钮预检误判、窗口没最大化整段静默退出);上一批已出现 2 次(ensure_layout()、输入框必须为空才能用按钮亮度判断在跑)。

验证状态:⭐⭐ 二次验证(两批不同素材、不同项目各自独立复现)

操作规则

  1. 每个坐标常量旁边写死它的前提,并把前提做成可机检的断言,而不是注释里的一句提醒
  2. 断言写在动作前,不是动作后——ensure_layout() 必须在 clear_box() 之前跑,顺序反了就是清空文档
  3. 断言优先选位置无关的像素特征:本项目用”BTN 区域最暗像素”同时判三件事——按钮在不在预期位置(<250)、Codex 在不在跑(<100)、版面对不对
  4. 破坏性操作(Ctrl+A + Delete、拖放、点击”确认”)前必须过一次断言,别的动作可以只在开头过一次
  5. 窗口类前提要校验矩形,不能只发一条 ShowWindowSW_RESTORE 不保证回到最大化

反例 / 边界:坐标由程序当场探测(读控件 rect、找蓝色块、找按钮)时不适用——那类失败会当场返回 None,是响亮的失败,不需要额外断言。这条只针对硬编码常量

→ 已抽成单档:UI自动化的固定坐标必须绑前提断言_v1

[出片不等于合格 —— 第三次验证,升铁律]

核心:机器只能验参数,内容必须过人眼。

来源:本批两条(05 段内容重复、06 段停在未发送)都是时长合格、参数正常、内容不能用。

验证状态:⭐⭐⭐ 三次验证 —— 首验(更早一次自动录制 3 个 mp4 参数正常但整体被废)→ 二验(实战六拦下 4 条)→ 三验(本批拦下 2 条)。已在 自动化产出双重验收_机器验参数人眼验内容_v1 升级标注。

本批新增的一条操作规则能把内容判据写成断言的,就别只靠事后抽帧。 06 段的”提示词到底发出去没有”完全可以机检——发送后按钮应该是停止态。加了 confirm_sent() 之后这类失败当场判废,不用等人看。人眼关是兜底,不是第一道防线。

[真实项目当演示素材:只录”下指令”,发完立刻停]

核心:教学素材要拿真实项目才有说服力,但真实项目不能被演示改坏。“发完立即停止”是一个可执行的中间态——画面上是真的下了指令、AI 真的开始跑,但没有产生任何变更。

来源:工位池塘是有 37 个提交、三个已发布构建的线上项目,清单4 的三条提示词(改像素风 / 自审核 / 打包 exe)真跑完会改坏它。

验证状态:初次发现 ⚠️

操作规则

  1. 先确认任务书对该镜头的要求是不是只到”输入 + 发送”——本例正是(清单4 写的是”对话框手动输入提示词”)
  2. 发送后停留足够长(本例 9 秒)让”已发送”的状态上镜,再点停止
  3. 收工后用两个独立证据复核没被改:项目侧 git status 干净 + 应用侧环境面板「变更 +0 −0」。只信一个都不够
  4. 停止动作放在录制之外(本例在 stop_record() 之后),画面里不出现”我把它停了”

边界:只适用于”下指令”类镜头。要展示 AI 的产出,就得让它真跑,那时应该换到一次性工作区(台风案例就是这么做的:新建项目指向交接包的空工作区)。

[任务书里的”展示 X”,X 可能根本不存在]

核心:人写给人的任务书默认”素材当然有”。自动化时会撞上这台机器上没有那份素材,此时如实标注比补拍假的强。

来源:清单4 段[7] 要求”展示自检发现的 6 个问题”,但 desk-pond 的开发是在别处完成的,这台机器的 Codex 里没有那段对话。

验证状态:初次发现 ⚠️(上一批的同族发现是”人写给人的任务书,自动化时有系统性失配”,本条是它的一个新形态)

操作规则

  1. 排练阶段就把”这个镜头的素材在哪”逐条落实到具体窗口 / 文件 / URL,落实不了的当场标出来,不要拖到录完才发现
  2. 缺素材时给出最接近的真实替代并说清差别(本例:git 提交记录里有”6 处问题”,但那和”Codex 界面里的自检结果”不是一回事),让人来定
  3. 绝不用别的项目的画面冒充

四、下次改进

如果重来,最想改哪一步

开录前先跑一遍”版面前提自检”,而不是每段各自试错。

本批 4 次事故都是同一类,本来可以一次性拦掉:开录前依次断言「Codex 在录制屏上最大化 → 文档面板关闭 → 输入框为空 → 按钮是箭头态 → 侧栏在顶部」,任一不成立就修好再录。实际做法是每撞一次修一条,多花了 3 次重录。

下次同类型任务的行动清单

  1. 每个坐标常量配一条可机检前提,破坏性操作前必过(UI自动化的固定坐标必须绑前提断言_v1
  2. 能写成断言的内容判据一律写成断言(confirm_sent() 这类),人眼关退为兜底
  3. 涉及真实线上项目:先确认镜头是否只需”下指令”;发完停;收工双证据复核
  4. 排练阶段把每个镜头的素材落实到具体窗口 / 文件 / URL,缺的当场标出来
  5. 应用状态机(新建任务 / 选项目 / 已有对话)不要靠单次点击推断——本例”点侧栏项目条目”会进已有对话,“点新建任务”项目又是空的,正解是三步组合并用像素校验结果

五、一句话结论

这批的所有失败都长一个样:动作本身没错,错在动作发生时版面不是我以为的那个版面。 自动化做熟之后,风险从”会不会做”整体迁移到了”是不是在对的上下文里做”。


关联文档

类型/IP视觉主题/口播教学主题/自动化录屏工具/humancast工具/OBS工具/Codex