Ariver
2026-06-03 a188fdfe9d56f7b88519d13fc11bb1c48b796caa
Record Round 4 QA progress
2 files modified
2 files added
267 ■■■■■ changed files
02-P-NBL/round-4/logs/local-build-install-20260603-round4-after-qa-fix.log 154 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-4/qa-handoff.md 17 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-4/qa-report.md 78 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-4/todo-list.md 18 ●●●● patch | view | raw | blame | history
02-P-NBL/round-4/logs/local-build-install-20260603-round4-after-qa-fix.log
New file
@@ -0,0 +1,154 @@
==> Preflight checks
Using existing local signing identity: PrivateVoice Local Code Signing
==> Cleaning old local build
==> Building frontend
> privatevoice-input-frontend@2.1.21 build
> vite build
vite v6.4.1 building for production...
transforming...
3:01:28 PM [vite-plugin-svelte] src/components/update/UpdateDialog.svelte:28:0 Elements with the 'dialog' interactive role must have a tabindex value
https://svelte.dev/e/a11y_interactive_supports_focus
26:
27: <!-- svelte-ignore a11y_click_events_have_key_events -->
28: <div class="overlay" onclick={onclose} role="dialog">
          ^
29:   <!-- svelte-ignore a11y_click_events_have_key_events -->
30:   <div class="dialog" onclick={(e) => e.stopPropagation()} role="document">
3:01:28 PM [vite-plugin-svelte] src/components/update/UpdateDialog.svelte:30:2 Non-interactive element `<div>` should not be assigned mouse or keyboard event listeners
https://svelte.dev/e/a11y_no_noninteractive_element_interactions
28: <div class="overlay" onclick={onclose} role="dialog">
29:   <!-- svelte-ignore a11y_click_events_have_key_events -->
30:   <div class="dialog" onclick={(e) => e.stopPropagation()} role="document">
            ^
31:     <h2 class="title">{t('update.title')}</h2>
32:     <p class="version">{t('update.version', { version: info.version })}</p>
3:01:28 PM [vite-plugin-svelte] src/components/shared/ToggleSwitch.svelte:17:0 Buttons and links should either contain text or have an `aria-label`, `aria-labelledby` or `title` attribute
https://svelte.dev/e/a11y_consider_explicit_label
15: </script>
16:
17: <button
           ^
18:   class="toggle"
19:   class:active={checked}
✓ 163 modules transformed.
rendering chunks...
computing gzip size...
dist/index.html                      0.41 kB │ gzip:  0.28 kB
dist/assets/app-icon-Bs-pS5hx.png  400.98 kB
dist/assets/index-Bm3gykhy.css      35.00 kB │ gzip:  5.92 kB
dist/assets/index-QkfSvZCU.js      142.09 kB │ gzip: 47.42 kB
✓ built in 423ms
==> Building Go binary (arm64)
# voicesnap
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/go.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000000.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000001.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000002.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000003.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000004.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000005.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000006.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000007.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000028.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000029.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000030.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000031.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000032.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000033.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000034.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000035.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000036.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000037.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000038.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000039.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000040.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000041.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000042.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000043.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000044.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000045.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000046.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000047.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000048.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000049.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000050.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000051.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000052.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000053.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000054.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: object file (/private/var/folders/tz/gdr6h5t96cj4r08kchkjx2b00000gn/T/go-link-2443319701/000055.o) was built for newer 'macOS' version (26.0) than being linked (11.0)
ld: warning: building for macOS-11.0, but linking with dylib '@rpath/libonnxruntime.1.23.2.dylib' which was built for newer version 13.4
==> Assembling PrivateVoice Input.app
==> Fixing rpaths
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: /Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libonnxruntime.1.23.2.dylib
==> Code signing with stable local identity
/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libonnxruntime.1.23.2.dylib: replacing existing signature
/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib: replacing existing signature
/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/MacOS/PrivateVoice Input: replacing existing signature
/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app: replacing existing signature
==> Verifying app signature
--prepared:/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib
--validated:/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib
--prepared:/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libonnxruntime.1.23.2.dylib
--validated:/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/Frameworks/libonnxruntime.1.23.2.dylib
/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app: valid on disk
/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app: satisfies its Designated Requirement
Executable=/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app/Contents/MacOS/PrivateVoice Input
Identifier=com.privatevoice.input
Format=app bundle with Mach-O thin (arm64)
CodeDirectory v=20500 size=28343 flags=0x10000(runtime) hashes=875+7 location=embedded
Signature size=1830
Authority=PrivateVoice Local Code Signing
Signed Time=Jun 3, 2026 at 15:01:30
Info.plist entries=12
TeamIdentifier=not set
Runtime Version=26.2.0
Sealed Resources version=2 rules=13 files=3
Internal requirements count=1 size=100
==> Creating DMG
created: /Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input-2.1.21-build20260603.1327-arm64-local.dmg
==> Signing DMG
正在检查“Protective Master Boot Record(MBR:0)”的校验和…
Protective Master Boot Record(MBR:0):已验证CRC32 $A8E7551D
正在检查“GPT Header(Primary GPT Header:1)”的校验和…
    GPT Header(Primary GPT Header:1):已验证CRC32 $3DD4B017
正在检查“GPT Partition Data(Primary GPT Table:2)”的校验和…
GPT Partition Data(Primary GPT Table:已验证CRC32 $0D75002A
正在检查“(Apple_Free:3)”的校验和…
                      (Apple_Free:3):已验证CRC32 $00000000
正在检查“disk image(Apple_APFS:4)”的校验和…
            disk image(Apple_APFS:4):已验证CRC32 $DC4DD60B
正在检查“(Apple_Free:5)”的校验和…
                      (Apple_Free:5):已验证CRC32 $00000000
正在检查“GPT Partition Data(Backup GPT Table:6)”的校验和…
GPT Partition Data(Backup GPT Table::已验证CRC32 $0D75002A
正在检查“GPT Header(Backup GPT Header:7)”的校验和…
     GPT Header(Backup GPT Header:7):已验证CRC32 $13C09357
已验证CRC32 $F5A9B167
hdiutil: verify: checksum of "/Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input-2.1.21-build20260603.1327-arm64-local.dmg" is VALID
==> Installing to /Applications
--prepared:/Applications/PrivateVoice Input.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib
--validated:/Applications/PrivateVoice Input.app/Contents/Frameworks/libsherpa-onnx-c-api.dylib
--prepared:/Applications/PrivateVoice Input.app/Contents/Frameworks/libonnxruntime.1.23.2.dylib
--validated:/Applications/PrivateVoice Input.app/Contents/Frameworks/libonnxruntime.1.23.2.dylib
/Applications/PrivateVoice Input.app: valid on disk
/Applications/PrivateVoice Input.app: satisfies its Designated Requirement
==> Local build complete
  App: /Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input.app
  DMG: /Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input-2.1.21-build20260603.1327-arm64-local.dmg
  Compatibility DMG: /Users/ar/Projects/VoiceSnap-2.1.1-Round4/privatevoice.src/build/local/arm64/PrivateVoice Input-2.1.21-arm64-local.dmg
  Signing identity: PrivateVoice Local Code Signing
02-P-NBL/round-4/qa-handoff.md
@@ -1,6 +1,6 @@
# Round 4 QA Handoff:Parakeet English 高级模型
状态:待 QA 真机验证
状态:真机 QA 部分通过,待断网验证
日期:2026-06-03
## 1. QA 目标
@@ -71,3 +71,18 @@
- 失败下载不会破坏原模型。
- 用户历史、词库、权限、热键配置不丢失。
## 7. 当前 QA 进度
截至 2026-06-03 15:30,已通过:
- Parakeet 真实下载、解压、安装。
- Parakeet 加载到 `Parakeet English · CPU`。
- Parakeet 英文识别并写入历史。
- 切回 Moonshine 并完成英文识别。
- 切回中文 SenseVoice 并完成中文识别。
- 下载中断/退出后的 partial 清理补丁验证。
待完成:
- Parakeet 断网英文识别。
- 断网后重启持久化验证。
02-P-NBL/round-4/qa-report.md
New file
@@ -0,0 +1,78 @@
# Round 4 QA 报告:Parakeet English 高级模型
状态:部分通过,待断网英文识别
日期:2026-06-03
测试分支:`codex/round4-parakeet-english`
当前实现 commit:`ce96a0e`
## 1. 自动化与构建
已通过:
- `go test ./... -count=1`
- `npm run build`
- `git diff --check`
- 本地 macOS arm64 App 构建、安装、签名验证
- 本地 DMG `hdiutil verify`
相关日志:
- `logs/go-test-all-20260603-round4-after-qa-fix.log`
- `logs/npm-run-build-20260603-round4-after-qa-fix.log`
- `logs/git-diff-check-20260603-round4-after-qa-fix.log`
- `logs/local-build-install-20260603-round4-after-qa-fix.log`
## 2. 真机 QA 结果
| 项 | 结果 | 证据 |
|---|---|---|
| English 默认模型 | PASS | English 状态默认 Moonshine,Parakeet 作为 Advanced/可选模型显示 |
| Parakeet 下载 | PASS | 下载官方 `sherpa-onnx-nemo-parakeet-unified-en-0.6b-int8-non-streaming` 包,落盘到 `models/parakeet-en` |
| Parakeet 必需文件 | PASS | `encoder.int8.onnx`、`decoder.int8.onnx`、`joiner.int8.onnx`、`tokens.txt` 均存在 |
| Parakeet 加载 | PASS | 15:07:39 日志显示 `ASR engine ready: Parakeet English · CPU` |
| Parakeet 英文识别 | PASS | 15:11:04 识别 `Do you understand me?`,并写入历史 |
| Moonshine 回退 | PASS | 15:13:04 日志显示 `ASR engine ready: Moonshine English · CPU` |
| Moonshine 英文识别 | PASS | 15:18:27 识别 `This is a most shy fullback test.`,并写入历史 |
| 中文 SenseVoice 回归 | PASS | 15:19:24 日志显示 `ASR engine ready: SenseVoice · CoreML (Apple Neural Engine)` |
| SenseVoice 中文识别 | PASS | 15:29:18 识别 `这是中文 since voice 回归测试。`,并写入历史 |
| 下载失败保护 | PASS | 中途 App 退出后 Moonshine 仍可用;补丁后下一次下载会清理旧 partial |
| 用户数据保护 | PASS | `history.json`、`userdict.json`、`config.json` 未丢失,历史持续写入 |
## 3. QA 预检发现的问题和修复
### 3.1 下载中 Engine UI 状态误导
现象:
- Parakeet 下载过程中,旧 Moonshine 引擎仍可用,但 UI 曾显示 Engine Loading。
处理:
- 前端只在已安装模型切换或下载完成后设置 Engine Loading;下载过程中保留当前引擎状态。
结果:
- 补丁后下载期间 Engine 显示 `Moonshine English · CPU`,符合真实状态。
### 3.2 中途退出留下大体积 partial
现象:
- Parakeet 下载中途 App 退出后,`.downloads/parakeet-en` 留下约 439 MiB partial。
处理:
- `DownloadProfile` 在同模型新下载开始前清理旧 `.downloads/<model>` partial。
结果:
- 补丁后重新下载时旧 partial 被清理,新 run 从 0 开始,最终成功安装。
## 4. 待完成项
- Parakeet 断网英文识别。
- 断网后重启 App,确认 Parakeet 仍可加载并识别。
## 5. QA 观察项
- 中文回归测试后日志出现短时间多次模型初始化记录:`sensevoice-zh`、`moonshine-en`、`sensevoice-zh`。最终状态回到 `SenseVoice · CoreML (Apple Neural Engine)`,功能结果通过。建议后续继续观察是否存在设置页快速切换或异步 reload 触发的初始化交叉。
02-P-NBL/round-4/todo-list.md
@@ -1,6 +1,6 @@
# Round 4 Todo List:Parakeet English 高级模型
状态:研发自测通过,待 QA 真机验证
状态:真机 QA 部分通过,待断网验证
所属子项目:`02-P-NBL`
Round:Round 4
日期:2026-06-03
@@ -39,15 +39,15 @@
## 4. QA
- [ ] 自动化/半自动 QA
- [ ] Parakeet 真实下载和加载
- [ ] Parakeet 英文识别
- [x] 自动化/半自动 QA
- [x] Parakeet 真实下载和加载
- [x] Parakeet 英文识别
- [ ] Parakeet 断网英文识别
- [ ] Moonshine 回退
- [ ] 中文 SenseVoice 回归
- [ ] 下载失败保护
- [ ] 用户数据保护
- [ ] QA 报告
- [x] Moonshine 回退
- [x] 中文 SenseVoice 回归
- [x] 下载失败保护
- [x] 用户数据保护
- [x] QA 报告
## 5. 交付