# Function Audit · 逐页功能审计 `visual-parity` 比**像素**,这里比**行为**:把每个页面在真实 React 路由里打开, 逐个真实点击所有可交互元素,报出「点了没反应」的死交互(假按钮)。 完整说明见 skill:`.claude/skills/page-function-audit/SKILL.md`。 ## 快速开始 ```bash # 0. 先起前后端(见 skill)。后端必须 .venv/bin/python。 # 1. 装依赖(复用 visual-parity 的 playwright) cd AirShelf/core/qa/function-audit && npm install # 2. 跑 node audit.mjs # 全量(最准,慢) node audit.mjs --only account # 单页(改完复验) node audit.mjs --mode quick # 粗扫(快) # 3. 读报告 open output/summary.md # 全页一览,看 dead 列 open output/.audit.md # 单页 DEAD 表 ``` ## 判定口径 - ✅ works — 点了有反应(URL/浮层/自身状态/网络/DOM 五路任一变) - ❌ **dead** — 点了五路全无反应 → 真缺陷,优先修(多半没接 onClick) - 🛑 error — 点击抛 JS 异常 - ◷ noop-active — 点的是已选中 tab/chip,本该无反应,忽略 - ⏭ skipped — 破坏性按钮(删除/充值/生成…)不自动点,人工验 - 🔍 missing — 设计稿 `/exact` 有、React 没渲染(启发式,人工过) ## 参数 | 参数 | 默认 | 说明 | |---|---|---| | `--mode` | `isolated` | `isolated`=逐元素 reload(准);`quick`=不 reload(快) | | `--only` | (全部) | 逗号分隔页名子串,如 `--only account,pipeline` | | `--include-pointer` | off | 额外把 `cursor:pointer` 的 div 当候选 | | `--headed` | off | 看着浏览器跑 | | `--settle` | `700` | 点击后观察窗口 ms | | `--token` / `--email` / `--password` | 演示账号 | 登录态来源 | | `--base` | `http://127.0.0.1:5173` | 前端地址 |