2026-06-14 X-ASR 首字修复
用户目标
- 修复 X-ASR 实验分支中短句首字偶发丢失问题,例如实际说“你看看”但识别为“看看”。
- 修复完成后必须拉两个代码审核员审核,并拉 QA 做回归测试。
- QA 过程不得临时拼 GUI/AX/cliclick/screencapture 命令,应收敛到项目内稳定脚本入口或常规测试/构建命令。
已完成事项
- 暂停正式打包,先排查首字问题。
- 通过本机 app 日志确认缺字发生在
Recognized: 阶段,排除剪贴板/上屏链路。
- 定位主要原因:hold 模式存在约 180-210ms 启动延迟,用户按下热键后立即说话时,短句首字可能落在未录音窗口。
- 在
codex/x-asr-experiment-2.1.29 实现 X-ASR-only 首字保护:
- X-ASR 引擎新增
HoldPreCaptureEngine 能力。
- App 在 X-ASR hold 模式按下热键时立即预采集音频。
- 确认不是组合键后再显示浮窗并进入正式录音。
- 组合键或短按会丢弃预采集音频,不进入识别。
- X-ASR streaming session 首次接收音频时补 250ms 前置静音。
- Escape 取消会停止 live caption,并阻止同一次按住手势重启录音。
- 引擎不可用时仍允许已有录音释放/取消清理,但不会启动或确认新录音。
- 递增测试包版本至
2.1.31,build 20260614.2056。
- 创建源码冻结 commit:
e86df221fa8f9d6796fb7fe59020767d7c806fac。
- 创建 tag:
v2.1.31-build20260614.2056-xasr-hold-precapture。
- 生成 arm64 本地测试 DMG:
/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.31-build20260614.2056-xasr-hold-precapture-arm64/PrivateVoice Dictation-2.1.31-build20260614.2056-arm64-local.dmg
- SHA256:
ba7ced3706bfc1a4557961c21c22eee1bc92d12cbcbd16b39f0d78c4b20175d8
文件变更
privatevoice.src/app.go
privatevoice.src/internal/engine/engine.go
privatevoice.src/internal/engine/engine_darwin.go
privatevoice.src/app_live_caption_test.go
privatevoice.src/internal/engine/engine_darwin_test.go
privatevoice.src/build/darwin/Info.plist
privatevoice.src/frontend/package.json
privatevoice.src/frontend/package-lock.json
CHANGELOG.md
- 本地 release 证据目录:
Release/PrivateVoice-Dictation-2.1.31-build20260614.2056-xasr-hold-precapture-arm64/
审核与 QA
- 两位代码审核员首轮发现 P2:
- Escape 取消未停止 live caption。
- Escape 后同一次 hold 按住可能重启录音。
- 引擎变 nil 时 pending 预采集释放路径可能被 guard 阻断。
- 已修复上述问题。
- 两位代码审核员二审均未发现新的 P1/P2。
- QA 结论通过:
go test -count=1 ./... 通过。
go test -race -count=1 . ./internal/engine 通过。
PRIVATEVOICE_XASR_SMOKE=1 go test -v -count=1 -run TestXASRRealModelSmoke ./internal/engine 通过。
npm run build -- --outDir /tmp/privatevoice-frontend-qa-20260614-xasr 通过。
GOOS=darwin CGO_ENABLED=1 GOARCH=arm64 PRODUCTION=true go build -buildvcs=false -gcflags=all="-l" -o /tmp/privatevoice-input-qa-20260614-xasr . 通过。
- 本地自测也通过:
/opt/homebrew/bin/go test ./...
/opt/homebrew/bin/go test -race . ./internal/engine ./internal/audio ./internal/input
npm run build
PATH="/opt/homebrew/bin:$PATH" ./scripts/build-local-macos.sh arm64
codesign --verify --deep --strict --verbose=2
hdiutil verify
shasum -a 256 -c SHA256SUMS.txt
未决问题与后续建议
- 未做 GUI/AX/真实热键/真实麦克风端到端自动化验证,符合本轮 QA 收敛要求。
- 用户仍需安装新 DMG 后用真实语音验证短句:
你看看
你看一下
确认一下
可以了
好了呀
技术总监让我问你一下
- Release 目录下
.dmg 按 .gitignore 不进入 git;manifest/SHA 文件已生成在本地 release 目录。