Help us improve
Share bugs, ideas, or general feedback.
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.
npx claudepluginhub hujianbest/harness-flow --plugin harness-flowHow 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**。
Drives 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.
Visually verify implemented features work correctly before marking complete. Use when testing UI changes, verifying web features, or checking user flows work in the browser.
Share bugs, ideas, or general feedback.
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 唯一。