Add docs/agent-handoff (backlog, execution state, verification, platform plan, per-task evidence), repo AGENTS.md, and architecture notes updated for the dual-renderer design.
363 lines
12 KiB
Markdown
363 lines
12 KiB
Markdown
# haocode 全量修复任务:无人值守连续执行
|
||
|
||
你是本次唯一的开发工作 Agent。用户将长时间离开,不会及时回复。
|
||
|
||
你的目标不是提出方案,也不是只完成一个任务,而是按照仓库内已经固化的任务清单,持续完成所有可实施修复、测试和文档更新,直到:
|
||
|
||
1. 所有能够在当前环境完成的任务均达到完成条件;
|
||
2. 所有自动化测试通过;
|
||
3. 无法在当前机器完成的真实平台验收被准确记录;
|
||
4. 已经没有不需要用户介入即可继续的工作。
|
||
|
||
不要在完成一个任务后停下来等待确认。完成当前任务后,立即按依赖顺序执行下一项。
|
||
|
||
## 一、工作目录
|
||
|
||
固定工作目录:
|
||
|
||
D:\WorkSpace\Project\GCC\haocode_0
|
||
|
||
不得在其他副本、临时复制目录或旧版本中实施修复。
|
||
|
||
## 二、首次启动必须执行
|
||
|
||
开始修改代码前,依次完整读取:
|
||
|
||
1. `AGENTS.md`
|
||
2. `docs/agent-handoff/README.md`
|
||
3. `docs/agent-handoff/REPAIR_BACKLOG.md`
|
||
4. `docs/agent-handoff/VERIFICATION.md`
|
||
5. `docs/agent-handoff/PLATFORM_PLAN.md`
|
||
6. `docs/agent-handoff/CURRENT_STATE.md`
|
||
|
||
其中:
|
||
|
||
- 当前行为和缺陷必须由源码、复现和测试确认。
|
||
- 目标行为、任务范围和完成条件以 `docs/agent-handoff/` 为准。
|
||
- `readme.md`、`Frame.md`、`ARCHITECTURE.md` 只作历史背景。
|
||
- 第三方修复要求和外部 harness 项目不是事实源。
|
||
|
||
读完后,先确认 `P0-03` 文档基线已经完成,不要重复创建交接目录。
|
||
|
||
然后从 `P0-01` 开始实施。
|
||
|
||
## 三、建立防遗忘执行状态
|
||
|
||
在进行任何业务代码修改前,创建:
|
||
|
||
`docs/agent-handoff/EXECUTION_STATE.md`
|
||
|
||
并在 `docs/agent-handoff/README.md` 增加一个简短指针:
|
||
|
||
> 当 `EXECUTION_STATE.md` 的状态为 `ACTIVE` 时,任何继续执行、上下文恢复或压缩恢复都必须先读取该文件。
|
||
|
||
`EXECUTION_STATE.md` 必须保持简洁,只保存当前事实,不写成长篇流水账。至少包含:
|
||
|
||
```text
|
||
# 全量修复执行状态
|
||
|
||
状态:ACTIVE
|
||
总目标:完成 REPAIR_BACKLOG.md 中所有待实施任务
|
||
当前任务:P0-01
|
||
当前阶段:调查 / 红测试 / 实现 / 定向验证 / 阶段回归
|
||
最后完成动作:
|
||
下一步唯一动作:
|
||
当前修改文件:
|
||
最近测试结果:
|
||
尚未验证的平台:
|
||
阻塞项:
|
||
任务状态表:
|
||
- P0-01: IN_PROGRESS
|
||
- P0-02: PENDING
|
||
...
|
||
```
|
||
|
||
状态值只能使用:
|
||
|
||
- `PENDING`
|
||
- `IN_PROGRESS`
|
||
- `AUTOMATED_VERIFIED`
|
||
- `PLATFORM_VALIDATION_PENDING`
|
||
- `COMPLETE`
|
||
- `BLOCKED`
|
||
|
||
每次发生以下事件后,立即更新 `EXECUTION_STATE.md`:
|
||
|
||
- 开始一个任务;
|
||
- 确认根因;
|
||
- 完成一组源码修改;
|
||
- 运行测试;
|
||
- 测试失败并改变调查方向;
|
||
- 完成任务;
|
||
- 准备执行长时间命令;
|
||
- 发现外部环境阻塞;
|
||
- 即将结束当前上下文。
|
||
|
||
只保留最新状态和下一步,不依赖聊天记录保存进度。
|
||
|
||
## 四、上下文压缩恢复协议
|
||
|
||
一旦发生以下任一情况:
|
||
|
||
- 上下文被压缩或总结;
|
||
- 你无法准确复述当前任务;
|
||
- 不确定哪些测试已经运行;
|
||
- 不确定下一步应该做什么;
|
||
- 会话中断后重新继续;
|
||
|
||
立即停止凭记忆操作,按顺序重新读取:
|
||
|
||
1. `AGENTS.md`
|
||
2. `docs/agent-handoff/README.md`
|
||
3. `docs/agent-handoff/EXECUTION_STATE.md`
|
||
4. `REPAIR_BACKLOG.md` 中“当前任务”的完整章节
|
||
5. 当前任务引用的 `PLATFORM_PLAN.md` 或 `VERIFICATION.md` 章节
|
||
6. `EXECUTION_STATE.md` 列出的当前修改文件
|
||
|
||
然后核对工作区实际状态和最近测试结果,再从“下一步唯一动作”继续。
|
||
|
||
聊天摘要不能代替 `EXECUTION_STATE.md`。不得因为上下文压缩重新设计范围、跳过测试或把未完成任务误判为完成。
|
||
|
||
## 五、永久硬约束
|
||
|
||
### 凭据铁律
|
||
|
||
`data/config.json` 是不透明的本机密钥文件。
|
||
|
||
绝对不得:
|
||
|
||
- 打开;
|
||
- 读取;
|
||
- 搜索其内容;
|
||
- 打印;
|
||
- 复制;
|
||
- 修改;
|
||
- 计算散列;
|
||
- 制作快照;
|
||
- 让递归内容搜索包含它;
|
||
- 让其内容进入工作上下文或测试输出。
|
||
|
||
所有自动化测试必须使用临时配置和临时数据库。
|
||
|
||
验证真实配置未被访问时,使用打开路径拦截器、替身或访问记录;不得通过读取真实文件验证。
|
||
|
||
在 `P0-01` 完成前,不得运行可能绕过临时配置而读取真实配置的 GUI/LLM 测试。先审查测试入口并完成隔离。
|
||
|
||
### 范围约束
|
||
|
||
- 不初始化 Git,不创建提交,不伪造历史。
|
||
- 不删除或清理用户现有数据库、附件、日志、锁文件或运行产物。
|
||
- 不移动或拆分现有模块。
|
||
- 不借修复重写 `main_window.py`、`app.js` 或弹窗系统。
|
||
- 不增加新产品功能。
|
||
- 不增加工具注册系统。
|
||
- 不参考或移植 Claude Code、Codex、Grok Build、DeepSeek Harness。
|
||
- 不改变 `core/agent/` 作为 pi Python 移植的定位。
|
||
- 不增加 Agent shell sandbox、命令审批或路径权限边界。
|
||
- Chromium sandbox 保持默认开启。
|
||
- 不引入 WebKitGTK 或相关 Qt 封装。
|
||
- 不做 PyInstaller、安装器、AppData/XDG 迁移或发行包。
|
||
- 本阶段只保证源码运行。
|
||
- `vendor/webview2/` 和根目录 `WebView2Loader.dll` 不得删除。
|
||
- 产品内部 Agent 继续按原方式调用 LLM,不修改其产品行为。
|
||
- 不把开发工作委派给其他 Agent;由你连续完成。
|
||
|
||
只修改当前任务“允许修改”中列出的文件。发现无关问题时记录到 `EXECUTION_STATE.md` 的“观察项”,不要顺手扩大范围。
|
||
|
||
## 六、任务执行顺序
|
||
|
||
严格按以下顺序连续执行:
|
||
|
||
1. `P0-01` 配置路径与测试隔离
|
||
2. `P0-02` 合并重复的 `MainWindow.eventFilter`
|
||
3. 复核已经完成的 `P0-03`
|
||
4. `P1-01` 双向消息渲染窗口
|
||
5. `P1-02` Windows/Linux shell 与进程树终止
|
||
6. `P1-03` Windows/Linux 渲染器启动链
|
||
7. `P1-04` Linux 截图热键与截图实现
|
||
8. `P2-01` Bash 任务按启动时间倒序
|
||
9. `P2-02` 右侧 Bash 面板滚动条
|
||
10. `P2-03` WebView2 原生窗口遮挡层
|
||
11. `P2-04` 跨平台聚合测试入口
|
||
|
||
不得跳过依赖。某项存在真实平台验收阻塞时,先完成其实现和自动化验证,将状态设为 `PLATFORM_VALIDATION_PENDING`,然后继续所有不受该阻塞影响的后续任务。
|
||
|
||
## 七、每个任务的固定执行循环
|
||
|
||
对每个任务严格执行以下循环:
|
||
|
||
### 1. 领取
|
||
|
||
- 在 `EXECUTION_STATE.md` 中把任务设为 `IN_PROGRESS`。
|
||
- 完整读取该任务的“先读文件、允许修改、硬约束、目标测试、完成证据”。
|
||
- 只加载当前任务需要的源码。
|
||
|
||
完成标准:能够准确列出当前任务允许修改的文件、禁止范围和验收条件。
|
||
|
||
### 2. 复现和根因
|
||
|
||
- 从实际源码出发确认附件描述是否正确。
|
||
- 建立最小复现或失败测试。
|
||
- 对确定性缺陷记录实际调用链、状态变化或平台差异。
|
||
- 描述不准确时以代码证据纠正,不机械照抄文档中的猜测。
|
||
|
||
完成标准:测试或可重复证据在修复前能够暴露缺陷。
|
||
|
||
### 3. 实现
|
||
|
||
- 采用与现有代码风格一致的最小修改。
|
||
- 优先复用现有接口和模块边界。
|
||
- 只在确实能隔离平台差异或测试状态时增加窄辅助模块。
|
||
- 不进行无关格式化、批量重命名或结构重构。
|
||
|
||
完成标准:失败复现转绿,且没有扩大任务行为面。
|
||
|
||
### 4. 定向验证
|
||
|
||
运行任务章节列出的全部目标测试。
|
||
|
||
每条测试记录:
|
||
|
||
- 精确命令;
|
||
- 平台和环境;
|
||
- 退出码;
|
||
- PASS/FAIL/SKIP;
|
||
- 关键断言;
|
||
- 失败原因;
|
||
- 是否使用临时配置和数据库。
|
||
|
||
测试失败时进入诊断循环并继续修复,不能通过删除断言、放宽正确性要求或把失败改成 SKIP 获得通过。
|
||
|
||
完成标准:全部适用定向测试通过;不适用项有真实平台理由。
|
||
|
||
### 5. 自检
|
||
|
||
逐条核对当前任务的所有“硬约束”和“完成证据”。
|
||
|
||
检查:
|
||
|
||
- 是否改了允许范围之外的文件;
|
||
- 是否引入了新功能;
|
||
- 是否碰到真实配置或数据库;
|
||
- 是否只验证了 happy path;
|
||
- 是否保留 Windows 现有行为;
|
||
- 是否误把 offscreen 当作真实桌面证据;
|
||
- 是否有未记录的测试失败。
|
||
|
||
完成标准:每条完成证据都有源码、测试输出或真机证据对应。
|
||
|
||
### 6. 固化进度
|
||
|
||
- 更新 `REPAIR_BACKLOG.md` 的任务状态。
|
||
- 更新 `EXECUTION_STATE.md`。
|
||
- 将简洁证据写入 `docs/agent-handoff/evidence/<TASK_ID>.md`。
|
||
- 不粘贴大量完整日志,只记录命令、结果和证据文件路径。
|
||
- 立即开始下一任务,不等待用户确认。
|
||
|
||
只有全部完成条件满足时才能标记 `COMPLETE`。
|
||
|
||
## 八、阶段回归
|
||
|
||
完成 P0、P1、P2 每个阶段后,运行 `VERIFICATION.md` 对应的阶段完整回归。
|
||
|
||
要求:
|
||
|
||
- 定向测试不能代替阶段回归。
|
||
- `tests/run_tests.py` 在修复聚合入口前不能被称为全套测试。
|
||
- 平台不适用项必须明确显示 `SKIP` 和理由。
|
||
- 共同逻辑测试失败不能以平台差异豁免。
|
||
- 测试不得访问网络、真实 API 或真实凭据,除非任务明确要求且用户已经提供授权;当前没有该授权。
|
||
- 不运行 `diag_live_*` 或 `smoke_live_*` 的真实 API 路径。
|
||
|
||
P2-04 完成后,使用新的聚合入口运行最终自动化集合,并保留每个独立测试的运行能力。
|
||
|
||
## 九、平台验收处理
|
||
|
||
先只读检测当前机器实际具备的环境:
|
||
|
||
- Windows 版本;
|
||
- WebView2 是否可用;
|
||
- QtWebEngine 是否可用;
|
||
- 是否存在可用的 WSL/Ubuntu、X11 或 Wayland 环境。
|
||
|
||
不得为了补齐平台矩阵擅自安装操作系统、创建虚拟机或修改宿主机关键配置。
|
||
|
||
当前环境具备的平台必须完成真实验证。
|
||
|
||
当前环境不具备的平台:
|
||
|
||
1. 完成平台适配代码;
|
||
2. 完成平台路由和替身自动化测试;
|
||
3. 记录缺少的真实环境;
|
||
4. 将任务标为 `PLATFORM_VALIDATION_PENDING`,不能标记 `COMPLETE`;
|
||
5. 继续执行其他任务。
|
||
|
||
不得伪造 Windows WebView2、Linux X11、Linux Wayland、portal、DPI、全局热键或截图的真机证据。
|
||
|
||
## 十、阻塞处理
|
||
|
||
用户正在休息。不要因为普通实现选择、测试失败或代码复杂而询问用户。
|
||
|
||
优先采用:
|
||
|
||
1. 现有源码行为;
|
||
2. `docs/agent-handoff/` 中已经冻结的决策;
|
||
3. 最小、兼容、可测试的实现;
|
||
4. 将判断依据写入执行状态和证据文档。
|
||
|
||
只有遇到以下情况才允许停止:
|
||
|
||
- 必须获取用户凭据;
|
||
- 必须执行不可逆或破坏性操作;
|
||
- 必须使用当前不存在的外部机器;
|
||
- 两个权威要求存在无法同时满足的真实矛盾;
|
||
- 连续诊断后确认没有任何不需要用户介入的工作可继续。
|
||
|
||
即使一个任务阻塞,也要继续所有不依赖该阻塞的任务。
|
||
|
||
## 十一、最终收尾
|
||
|
||
所有可执行工作完成后:
|
||
|
||
1. 运行最终自动化聚合测试。
|
||
2. 复核所有单文件测试入口仍可运行。
|
||
3. 复核 `data/config.json` 未被测试访问,但不要读取它。
|
||
4. 检查交接文档与最终代码是否一致。
|
||
5. 更新 `CURRENT_STATE.md`,移除已经修复的“当前缺陷”表述。
|
||
6. 更新 `REPAIR_BACKLOG.md` 中每项真实状态。
|
||
7. 把 `EXECUTION_STATE.md` 状态改为:
|
||
- `COMPLETE`:所有自动化和真实平台条件均满足;
|
||
- `PLATFORM_VALIDATION_PENDING`:仅剩当前机器无法提供的真机验证;
|
||
- `BLOCKED`:仍有必须由用户决定或提供资源的问题。
|
||
8. 创建 `docs/agent-handoff/FINAL_REPORT.md`。
|
||
|
||
`FINAL_REPORT.md` 必须包含:
|
||
|
||
- 每个任务的最终状态;
|
||
- 根因与实际修复摘要;
|
||
- 修改文件清单;
|
||
- 自动化测试命令和结果;
|
||
- Windows/Linux 真机验证结果;
|
||
- 明确的未验证项;
|
||
- 对真实配置和数据库的隔离证明方式;
|
||
- 仍需用户处理的最少事项;
|
||
- 下一位 Agent 的恢复入口。
|
||
|
||
## 十二、最终回复格式
|
||
|
||
只有在没有可继续执行的工作时才回复用户。
|
||
|
||
最终回复必须先说明整体状态,然后依次给出:
|
||
|
||
1. 已完成任务;
|
||
2. 修改范围;
|
||
3. 测试结果;
|
||
4. 真机平台证据;
|
||
5. 未完成或受阻事项;
|
||
6. `FINAL_REPORT.md` 和 `EXECUTION_STATE.md` 路径;
|
||
7. 用户醒来后需要执行的最少动作。
|
||
|
||
不要只回复“完成了”。不要隐藏失败、跳过项或未验证平台。
|
||
|
||
现在开始执行首次启动步骤,创建持久化执行状态,然后从 P0-01 连续工作,直到达到上述终止条件。
|