ce-dogfood 是一个面向当前分支的、无需人工介入的浏览器 QA(Dogfood)技能,来自 everyinc/compound-engineering-plugin。它的目标定位是充当一名 QA 工程师,端到端地试用当前活动分支,直到它真正就绪。
【用途】 ce-dogfood 针对的是“这个分支带来了什么改动”这一问题。它是 diff 范围的验证,而非对整个应用做探索。它会只测试当前分支相对主干(trunk)新增或修改的内容。通过这种方式,它把自动化浏览器验证收敛到本次改动所影响的用户可见行为上。
【主要能力】
- 映射用户流程:根据 diff 推导出本次改动涉及的用户可见路径。
- 驱动真实浏览器:通过 agent-browser CLI 在真实浏览器中执行这些流程。
- 生成测试矩阵:把流程拆解成一个个场景,逐场景判定。
- 自动修复小问题:对于小范围、易于理解、低风险的破损,进行修复并补充回归测试后提交。
- 输出报告:在 <root>/dogfood-reports/ 下生成并提交一份格式化的 dogfood 报告。
【工作方式与流程】 execution 的顺序为:Scope(范围)-> 分析 diff -> 映射流程 -> 推导矩阵 -> serve(启动服务)-> 执行 -> 修复循环 -> 报告。这个顺序是不变量:先有流程模型,再有矩阵,矩阵先于任何浏览器工作。每个阶段的详细定义在 references/phases.md 中,技能要求在执行 Phase 0 之前先阅读该文件。
执行时一次处理一个场景,从正确性和对每个 persona 的体验感受两个角度判定。一个修复只有在“回归测试在修复前失败、修复后通过”时才算完成,否则报告中需说明为何没有有意义的自动化测试。
报告是检查点而非最终写入:矩阵一旦存在就立即按 references/dogfood-report-template.md 创建报告,所有场景初始为 Pending,之后每判定一个场景、每提交一个修复都更新它。这样被中断的运行会留下一个模板形状的检查点,供后续运行或队友接续。
【前置条件】
- 需要一个可以启动的本地开发服务器(bin/dev、rails server、npm run dev 等)。
- 需要安装 agent-browser。可通过命令
command -v agent-browser >/dev/null 2>&1 && echo "Ready" || echo "NOT INSTALLED"检查;若未安装,必须停下并让用户安装后再重试,该工作流没有它无法运行。
【边界与限制】
- 只能通过 agent-browser CLI 驱动浏览器,禁止使用 Chrome MCP 工具(mcp__claude-in-chrome__*)、其他浏览器 MCP 或内置浏览器控制工具。
- 必须使用直接二进制,不要用 npx agent-browser。
- 绝不基于分支名或空白目标去 dogfood 主干——因为没有 diff。
- 绝不擅自切换用户的主检出(primary checkout)。是否隔离由本技能判断,具体机制由 ce-worktree 处理。
- 截图等临时产物写入操作系统临时目录,不写入仓库根目录;只有需要嵌入报告时才复制一份进来。
- 自动修复仅限小范围、易理解、低风险的问题。需要架构或 schema 决策、改变产品行为或 UX 意图、跨多个文件、或存在多个合理方案的改动,一律升级到报告的“待人类决策”部分,绝不为了清掉某个矩阵项而擅自实现。
【产物根目录】 报告位于 <root>/dogfood-reports/,persona 位于 <root>/personas/。首次组装任何 <root>/ 路径时解析 <root>。docs_root 只从 <repo-root>/.compound-engineering/config.yaml 读取,不从 config.local.yaml 读取;未设置时 <root> 为 docs。若设置了值,则必须是位于仓库内、且真实路径(解析符号链接后)仍留在仓库内、既非仓库根也不在 .git/ 下的仓库相对目录,否则报错停止,绝不回退到 docs。
【阻塞状态】 Blocked (needs human verify)(如 OAuth、真实邮件、支付或短信等无法无头驱动、需要外部交互的步骤)和 Blocked (human decision)(修复过大、无法自主完成)这两种状态都需要等待人类,且只终止该场景而非整轮运行;应继续矩阵其余部分,并不得在本轮或续跑时静默重排被阻塞的场景。
【委派与 Compound Packs】 ce-dogfood 是编排者:PR 或具名分支目标的隔离交给 ce-worktree;非显而易见的根因交给 ce-debug;每个修复用 ce-commit 提交;可复用的经验通过 ce-compound 沉淀。仓库声明的 Compound Packs 提供 persona 和判定标准:描述用户的规则对应一个 persona,规定产品外观或行为的规则作为判定标准,矛盾则作为失败进入修复循环并附引用。该技能本身从不写入 pack。
【调用方式】 调用形式按宿主渲染:默认使用 /ce-setup 和 /ce-dogfood <original arguments>;仅当宿主为 Codex 或明确文档说明使用美元前缀时,使用 $ce-setup 和 $ce-dogfood <original arguments>;在 oh-my-pi (omp) 上使用 /skill:ce-setup 和 /skill:ce-dogfood <original arguments>。每种调用只渲染一种形式。
【适用场景】 适用于对某个功能分支或 PR 做无人值守的浏览器端回归验证,尤其是改动了用户可见界面和交互的情况。
【限制】 不适用于主干或无 diff 目标;不负责把项目自动化测试套件追到全绿(套件为红但矩阵为绿时,最终判定为 not-ready 而非 ready);无法无头驱动的场景会进入阻塞状态;自动修复范围严格受限。