From harness-flow
Captures fresh browser runtime evidence (screenshot, console log, network trace) after frontend tests pass GREEN, for downstream gates. Not a review or verdict.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-flow:hf-browser-testingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
HF workflow family 中 verify 阶段的 runtime evidence side node。对触碰前端表面的 active task,在 hf-test-driven-dev 的 GREEN 之后产生一份新鲜的浏览器运行时证据 bundle,供 hf-regression-gate / hf-completion-gate 消费。**不是 review,不是 gate,不签发 verdict**。
HF workflow family 中 verify 阶段的 runtime evidence side node。对触碰前端表面的 active task,在 hf-test-driven-dev 的 GREEN 之后产生一份新鲜的浏览器运行时证据 bundle,供 hf-regression-gate / hf-completion-gate 消费。不是 review,不是 gate,不签发 verdict。
适用:
hf-specify 输出的 spec 中含 UI surface 声明,或 hf-ui-design 的设计已批准)。hf-test-driven-dev 已完成当前 task 的 GREEN,单元测试新鲜证据已在交接块中写回。hf-regression-gate / hf-completion-gate)需要 runtime DOM / 控制台 / 网络层证据。不适用:
hf-workflow-router。hf-test-review。hf-regression-gate / hf-completion-gate。hf-workflow-router。前提:存在唯一 active task;feature 目录可写(默认 features/<active>/);浏览器自动化工具链可用(Chrome DevTools MCP、Playwright、或项目已声明的等价工具)。工具链不可用 → fresh blocking evidence,不替换为"主观描述"。
hf-test-driven-dev 当前 task 的 GREEN 与新鲜单元证据必须先存在;缺位则不应启动本 skill。hf-test-driven-dev,不在本 skill 内"顺手修一下"。hf-test-review / hf-test-driven-dev。hf-regression-gate 仍会重新读 evidence 做影响面判断)。| 方法 | 核心原则 | 来源 | 落地步骤 |
|---|---|---|---|
| Runtime evidence over self-report | 取浏览器真实行为而非"应该是这样"的口头判断 | 项目化实践(HF 证据链约定) | 步骤 2 — 启动浏览器;步骤 3 — 抓 evidence |
| Three-layer evidence (DOM / Console / Network) | 截图、控制台、网络三层证据并存以避免单层假阴 / 假阳 | Chrome DevTools 实践 + AS browser-testing-with-devtools | 步骤 3 — 三类必抓 |
| Fresh evidence principle | 所有证据必须当前会话内产生;带 timestamp + commit SHA | 项目化实践 | 步骤 1、5 — bundle metadata |
| Observation, not verdict | 本 skill 仅观察并写 finding;通过 / 不通过由下游 gate 决定 | Fagan / soul.md(不验收自己) | 步骤 4 — 问题清单写法;Hard Gates |
| Walking-skeleton scenario | 从 spec 声明的关键 UI surface 中挑选最小可观察 e2e 路径 | Cockburn — Walking Skeleton | 步骤 2 — 场景选取 |
读 features/<active>/progress.md 的 Current Active Task → 校验 hf-test-driven-dev 是否完成 GREEN(交接块存在 + 单元 fresh evidence)→ 校验 spec / ui-design 是否声明 UI surface → 否则 reroute 回 hf-workflow-router。
features/<active>/progress.md、最新 hf-test-driven-dev 交接块。依据 spec / ui-design 选取覆盖当前 task 的最小 walking-skeleton 场景(≤ 3 个关键 user flow)。启动浏览器自动化工具(推荐 Chrome DevTools MCP;Playwright / Puppeteer 等等价方案见 references/runtime-evidence-protocol.md)。
最小 smoke 选择规则:
/ 或导航入口)按选定场景跑通后,对每个场景抓取:
最低判读要求:
blocking DOM observationblocking console observationmajor 或 blocking network observationblocking 或 major observation落盘到 features/<active>/verification/browser-evidence/<task-id>/<scenario>/,每个场景一子目录;bundle metadata(metadata.json)必须包含:timestamps、commit SHA、worktree path、浏览器 / 工具版本、所用场景脚本路径。
对每个 evidence 异常(console error、4xx / 5xx、未预期 DOM 状态、a11y 明显违反等)写一条 observation:
- [observation] <现象简述>
- scenario: <对应 user flow 名>
- layer: dom | console | network
- evidence: <相对路径>
- severity (initial): blocking | major | minor | nit
- suggested next: hf-test-driven-dev | hf-test-review | hf-ui-review | gate
禁止写"已通过"/"无问题"作为终态结论;终态由下游 gate 判定。
features/<active>/verification/browser-evidence/<task-id>/observations.md。向 active task 的 progress.md 追加 verify-stage handoff 块:
## Browser Testing Handoff (<task-id>, <timestamp>)
- evidence bundle: features/<active>/verification/browser-evidence/<task-id>/
- scenarios covered: ...
- observations: <count> total (<blocking>/<major>/<minor>/<nit>)
- canonical next action:
- 0 blocking + 0 major → hf-regression-gate
- any blocking → hf-test-driven-dev (with finding)
- major-only → hf-test-review or hf-ui-review (per suggested next)
canonical next action 唯一;不允许同时给出多个。
features/<active>/verification/browser-evidence/<task-id>/
metadata.json:timestamps、commit SHA、worktree、工具版本、场景索引。<scenario>/screenshots/、<scenario>/console.log、<scenario>/network.har 或 <scenario>/network.json。observations.md:observation 清单。## Browser Testing Handoff 块。metadata.json 缺 commit SHA → 不构成 fresh evidence。| 错误 | 问题 | 修复 |
|---|---|---|
| 直接复用 CI 上的截图 | 不是 fresh evidence | 当前会话内重跑 |
| 网络层只抓 200 OK | 漏 4xx/5xx 才是排错关键 | 至少把每个 4xx/5xx 落盘 |
| observation 不引用具体 evidence 文件路径 | 下游 gate 无法回读 | 每条 observation 必须有 evidence: 行 |
| 把 "通过" 写进 handoff | 越权签 verdict | 改成 observation + canonical next action |
| 借口 | 反驳 / Hard rule |
|---|---|
| "单元测试都 GREEN 了,浏览器跑一下没必要。" | Hard Gates: spec 声明 UI surface 时本 skill 是 hf-test-driven-dev 后的 evidence 必经路径;省略导致下游 gate 缺 evidence。 |
| "用 dev 上的 staging 截图凑数。" | Hard Gates: fresh evidence 必须当前会话产生,metadata.json 必含 commit SHA + timestamp。 |
| "console 偶尔有 warning,不重要不记。" | Workflow stop rule (步骤 3): console 必须按时序保留 warn / error;筛选由下游 gate 决定,不在本 skill 裁。 |
| "我看着没问题,verdict pass。" | Hard Gates (soul.md / Fagan): 本 skill 只产 observation,不签 verdict;verdict 由 hf-regression-gate / hf-completion-gate 决定。 |
| "我顺手把 console error 对应的 bug 修了。" | Hard Gates: 不修改实现 / 测试代码;发现缺陷写 finding 并 reroute 回 hf-test-driven-dev。 |
references/runtime-evidence-protocol.md:三层证据格式、metadata.json schema、Chrome DevTools MCP / Playwright 等工具的等价命令。references/playwright-smoke-example.cjs:可复制到项目侧的最小 Playwright smoke 示例;仅作参考,不让 HarnessFlow 本体依赖 Playwright。features/<active>/verification/browser-evidence/<task-id>/metadata.json 存在且含 commit SHA + timestamp。observations.md 落盘且每条 observation 引用具体 evidence 路径。## Browser Testing Handoff 块存在且 canonical next action 唯一。npx claudepluginhub hujianbest/harness-flow --plugin harness-flowDrives a real browser to navigate, snapshot, interact, and capture evidence for end-to-end verification of web pages or web apps. Supports agent-browser, playwright-cli, or chrome-browser MCP.
Verifies page interactions, forms, routing, frontend API, visual state, and runtime issues in a real browser using Playwright MCP and Chrome DevTools MCP.
Runs Playwright-driven visual checks, axe-core a11y audits, screenshot regression diffs, and E2E test scaffolds for UI-affecting changes.