TODO #12(联调与验收)+ #1C(macOS 注入与浮层)· 2026-07-10
| 验收项 | 结果 | 说明 |
|---|---|---|
| 12A mac 全链路(快捷键→采集→流式→浮层→注入) | 通过 | 真实 App + 模拟快捷键,mock 文本成功注入 TextEdit,计费准确 |
| 12A Windows 全链路 | 未执行 | Windows 机(ssh windows)缺 Rust/Node 工具链,需先装环境 |
| 12B release_to_commit < 300ms | 部分达标 | P50 261ms ✅ / P95 918ms ❌(受两轮 provider 异常拖累) |
| 12B first_partial P95 < 500ms | 未达标 | P50 845ms / P95 3870ms——gummy partial 下发节奏本身 ~750-850ms,目标需重新校准 |
| 12C 断连重建 | 通过 | 服务端重启后桌面端数秒内自动重连(18E 生效) |
| 12C SESSION_LIMIT(3 分钟截断) | 通过 | 198s 推流在 180s 准时截断:先定稿下发全部 final,再发 SESSION_LIMIT |
| 12C RATE_LIMITED(30 次/30 分钟) | 通过 | 第 31 个会话被精确拒绝,前 30 个正常 |
| 12C QUOTA_EXCEEDED(试用/余额用尽) | 通过 | 扣穿当句不掐断、final 不丢;再次 start 预检拒绝(帧序备注见 §五) |
| 1C 浮层不抢焦点 + 注入 | TextEdit 通过 | 会话期间焦点保持在目标 App,注入成功;微信/浏览器/IDE 三目标待人工点验 |
| 商业链路(登录/购买/入账) | 通过 | mock 扫码登录、下单、回调入账、回调重放幂等、订单状态全部正确 |
transparent: true 窗口,但未启用
macOSPrivateApi——macOS 上 WKWebView 透明必须开启该项,否则浮层带不透明底色。
本次已在 tauri.conf.json 加 "macOSPrivateApi": true、
Cargo.toml 加 macos-private-api feature(cargo check 通过),
视觉效果需真机目测确认。
| 项 | 值 |
|---|---|
| 服务端 | 本机 go run ./cmd/server(:8080)+ docker compose pg/redis;先 mock 后切 gummy 真实 provider(key 经 rbw 管道注入环境,未落盘) |
| 桌面端 | npm run tauri dev 调试构建,settings.json 预置 mock 登录 token 指向 localhost |
| 快捷键模拟 | osascript System Events 按住/松开 Cmd+Shift+Space(3s) |
| 延迟/异常压测 | 自制无头 WS 客户端 wslat(Go + gorilla),按协议 100ms/3200B 实时推流真实中文语音(macOS say 合成 8.6s / 1s / 198s 三种)走 /v1/asr/stream 真实网关路径 |
| 测试账号 | mock 微信登录建两个 trial 用户;用户一经 mock 支付购入 pack_100(6000s 余额) |
POST /v1/auth/qr → 手动打回调(模拟扫码)→ 轮询 confirmed 拿 JWT ✅focusable:false 生效,即 1C 验证点)✅/v1/me 的 trial_used_today 精确 +3 ✅npm i && npm run tauri dev,注入走 SendInput(10F)。| 指标 | P50 | P95 | 目标 | 判定 |
|---|---|---|---|---|
| first_partial | 845ms | 3870ms | P95 < 500ms | 未达标 |
| release_to_commit | 261ms | 918ms | < 300ms | P50 达标 / P95 超 |
| 场景 | 做法 | 观察 | 判定 |
|---|---|---|---|
| 断连重建 | App 保持连接时重启服务端进程 | 桌面端数秒内自动重连(lsof 确认新连接),无需用户操作 | 通过 |
| SESSION_LIMIT 3 分钟截断 |
余额账号推 198s 长音频 | 180s 准时截断:219 个 partial、全部 final 先定稿下发,随后 SESSION_LIMIT:单次最长 3 分钟,松开后可继续,会话关闭 |
通过 |
| RATE_LIMITED 30 次/30 分钟 |
同设备连发 31 个 1s 短会话 | 第 1-30 个会话全部正常识别并计费;第 31 个 start 被拒:RATE_LIMITED:操作过于频繁,稍后再试——滑动窗口精确在第 31 次生效 |
通过 |
| QUOTA_EXCEEDED 试用+余额用尽 |
Redis 置试用已用 177/180s 后推 8.6s 音频;再次 start | 剩 3s 时 start 预检放行 → 推流中扣穿 → 下发 QUOTA_EXCEEDED:今日试用已用完,去购买时长 → 随后仍 flush 当句 final(已识别内容不丢,实测收到截至扣穿点的定稿文本);再次 start 在预检被直接拒绝 |
通过 |
on_server_msg 对 error 帧不丢弃会话,错误帧之后的 final 照常进 CommitBuffer,松键时注入GET /v1/packs:三档时长包(100/500/2000 分钟)正常返回 ✅POST /v1/orders:下单返回 native code_url ✅POST /v1/pay/notify(mock 明文回调):SUCCESS,余额 +6000s,订单转 paid,账号 trial→ok ✅/v1/pay/notify 现等于公开充值接口,上线前必须换 wechatpay-go 真实验签。| 项 | 负责 | 说明 |
|---|---|---|
| 真人麦克风实说验证 | 人工 · 2 分钟 | App 正在运行且已登录:任意输入框按住 Cmd+Shift+Space 说话即可(服务端 gummy) |
| 1C 三目标注入点验 | 人工 · 3 分钟 | 微信 / 浏览器 / IDE 各注入一次;同时目测浮层深色玻璃是否透明(本次修复效果) |
| 辅助功能/麦克风权限引导 | 人工 | 正式打包后首启流程(11F)在无权限干净环境走一遍 |
| Windows 全链路 | 装环境后复测 | ssh windows 可达但缺 rustup/Node/VS Build Tools |
| overlay 错误态文案目测 | 人工 | 断网/超限场景下浮层文案(19C) |
| first_partial 目标重校准 + provider 观测日志 | 开发 | 见 §四建议,建议并入 #22 backlog |