- 资产 preview_url 从「逐图签发预签名 URL」改为虚拟主机式公读直链 (https://{bucket}.{host}/{key})。桶公读已验证免签可访问;直链稳定可被浏览器/CDN 缓存,而签名链每次都变、1h 过期反而打不到缓存。boto3 也移出序列化热路径。 - allNotifications 不再逐页翻全部(原 O(N) 随消息增长拖慢每次刷新),只取首页 100 条 (侧边栏徽标 unread_count + 团队动态仅展示最近 6 条已足够);「共 N」改用后端真实 count。 - perf-probe:page_size 由 API 级硬闸确定性守住后,浏览器端「资产翻页」降为提示 (翻 1~2 页是资产真超 200 的合法分页,仅 ≥3 页才疑似 page_size 失效)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Function Audit · 逐页功能审计
visual-parity 比像素,这里比行为:把每个页面在真实 React 路由里打开,
逐个真实点击所有可交互元素,报出「点了没反应」的死交互(假按钮)。
完整说明见 skill:.claude/skills/page-function-audit/SKILL.md。
快速开始
# 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/<page>.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 |
前端地址 |