研发协作
用真实浏览器对当前分支做端到端 Dogfood…
当需要针对某个分支(或 PR)引入的改动做端到端浏览器 QA、并希望自动修复小缺陷、产出可复用报告时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用真实浏览器对当前分支做端到端 Dogf特定
解决思路
- 以 QA 工程师身份端到端 dogfood 当前分支,直到真正就绪:本分支引入的每个用户可见改动都要在真实浏览器中走完整旅程,按正确性和产品 persona 的体验来评判,小缺陷要修复、加回归测试并提交。
- 完成标准:矩阵中每个场景都处于 Pass、Fixed、Skipped 或终态 Blocked;项目自动化测试套件跑过一次并记录结果;报告写入 <root>/dogfood-reports/<YYYY-MM-DD>-<branch-slug>-dogfood.md 并按模板定稿提交。矩阵全绿但套件红时,定稿为 not-ready 而非 ready;本次任务不负责把套件追绿。
- 这是 diff-scoped 而非全应用探索:只测本分支相对 trunk 引入或修改的内容。
- 在 Phase 0(Scope)之前先读 references/phases.md 并严格按其执行,仅凭阶段列表无法正确运行。
- 浏览器只通过 agent-browser CLI 驱动,绝不用 Chrome MCP 工具(mcp__claude-in-chrome__*)、其他浏览器 MCP 或内置浏览器控制工具;用直接二进制,绝不用 npx agent-browser(直接二进制走快速 Rust 客户端)。
- 分支名或空白目标时绝不 dogfood trunk(没有 diff);PR 目标总有 base,即使其 head 分支名为 main 也始终可 diff。
- 数字目标在隔离和 checkout 全程保持 PR 身份,绝不塌缩为其 head ref(其名可能就叫 main)。
- 绝不把用户的主 checkout 从脚下切走:本技能只决定是否提供隔离——空白或当前分支目标为否(已在上面),PR 或其他命名 ref 为是——由 ce-worktree 处理机制并报告结论;若用户拒绝隔离,则就地 checkout 目标,若未提交改动会被扰动则先确认。
- 截图等临时产物放到 OS 临时目录(mktemp -d "${TMPDIR:-/tmp}/ce-dogfood-XXXXXX"),绝不放到仓库根;仅在嵌入报告时复制一份进去。
- 只自动修复小而明确、低风险的改动;需要架构或 schema 决策、改变产品行为或 UX 意图、跨多文件、或有多个合理竞争方案的改动,一律升级到报告的 Decisions for a human 部分,绝不为清掉矩阵项而实现。
- 前置条件:需要可启动的本地 dev server(bin/dev、rails server、npm run dev 等),以及已安装 agent-browser;用 command -v agent-browser >/dev/null 2>&1 && echo "Ready" || echo "NOT INSTALLED" 检查,未安装则停止并告知用户安装,打印当前安装方式对应的 ce-setup 调用,再打印 ce-dogfood <original arguments> 调用以便重试。
- 前置失败时的调用渲染:默认用 /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>;每种调用只渲染为行内代码且只输出一种形式。
- 产物根:报告在 <root>/dogfood-reports/,persona 在 <root>/personas/;首次组合任何 <root>/ 路径时解析 <root>,无论读写,且不得提前解析;若本次不组合任何路径则跳过。
- 解析 CE 产物根 <root>:仅从 <repo-root>/.compound-engineering/config.yaml 读 docs_root(<repo-root> = git rev-parse --show-toplevel),不要从 config.local.yaml 读;未设置则 <root> 为 docs,与之前一致。
- 校验已设置的 docs_root:必须是仓库相对目录,其真实、符号链接解析后的路径留在仓库内,且既不是仓库根也不在 .git/ 下;否则报错并指明 docs_root 及其值,绝不回退到 docs。
- 把 <root> 作为唯一产物位置:不存在则创建,每个路径组合为 <root>/<subdir> 加本技能自己的子目录,绝不同时读 docs。
- ce-dogfood 是编排者:优先复用已有 CE 技能而非重新推导其行为——用 ce-worktree 隔离 PR 或命名分支目标,把非显而易见根因交给 ce-debug,用 ce-commit 提交每个修复,用 ce-compound 沉淀可复用经验。
- 仓库声明的 Compound Packs 提供 persona 和标准:描述用户的 pack 规则是走流程时扮演的 persona;规定产品外观或行为的规则是每个场景到达时评判的标准,矛盾即失败并带 (pack: <id>, <path within the pack>) 引用进入修复循环;分支有意为之的矛盾是关于规则的人类决策而非修复;可泛化的判断通过 ce-compound 回写 pack,本技能绝不写 pack;references/phases.md 定义 pack 如何应用。
- 阶段顺序:Scope -> 分析 diff -> 映射流程 -> 推导矩阵 -> 起服务 -> 执行 -> 修复循环 -> 报告;顺序是不变量:流程模型先于矩阵,矩阵先于任何浏览器工作;各阶段条件见 references/phases.md,在 Phase 0(Scope)前读它而非从这行重建阶段;一次处理一个场景,按正确性和每个 persona 的体验评判;修复只有在回归测试修复前失败、修复后通过,或报告说明为何没有有意义的自动化测试时才算完成。
- 检查点而非最终写入:矩阵一存在就按 references/dogfood-report-template.md 创建报告,所有场景为 Pending,每个场景评判后和每个修复提交后更新;<branch-slug> 是分支名小写、所有非字母数字字符(含斜杠)连续段折叠为一个 -;用 glob <root>/dogfood-reports/*-<branch-slug>-dogfood.md 找上次运行;任务列表是会话级的,但磁盘上的报告才是后续运行或队友恢复的依据,所以中断的运行必须留下模板形状的检查点而非裸矩阵。
- 终态:Blocked (needs human verify)(需要外部交互如 OAuth、真实邮件、支付或短信且无法无头驱动的步骤)和 Blocked (human decision)(太大无法自主修复的修复)都等人,各自结束该场景而非整个运行:继续矩阵其余部分,绝不在本次或恢复时静默重排已阻塞场景;如何触达人员因状态而异,由设置该状态的阶段说明。
适用边界 · 注意事项
- 不要 dogfood trunk:分支名或空白目标没有 diff,无法进行 diff-scoped 测试。
- 不要用 Chrome MCP 工具、其他浏览器 MCP 或内置浏览器控制工具驱动浏览器,也不要用 npx agent-browser。
- 不要自动修复需要架构/schema 决策、改变产品行为或 UX 意图、跨多文件或有多个合理竞争方案的改动,这些应升级给人类决策。