From 58c2c4ae5eaca3dff127f2ffb15f9dd2b160f994 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sun, 07 Jun 2026 01:45:59 +0800
Subject: [PATCH] Record X-ASR experimental build

---
 02-P-NBL/freeze/20260607-x-asr-experimental-build.md                         |   52 +++++++++++++++++
 Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/RELEASE_MANIFEST.md |   78 ++++++++++++++++++++++++++
 Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/SHA256SUMS.txt      |    1 
 3 files changed, 131 insertions(+), 0 deletions(-)

diff --git a/02-P-NBL/freeze/20260607-x-asr-experimental-build.md b/02-P-NBL/freeze/20260607-x-asr-experimental-build.md
new file mode 100644
index 0000000..597b22f
--- /dev/null
+++ b/02-P-NBL/freeze/20260607-x-asr-experimental-build.md
@@ -0,0 +1,52 @@
+# 2026-06-07 X-ASR 2.1.29 实验包记录
+
+## 结论
+
+已生成 `2.1.29 build 20260607.0141` Apple Silicon 本机实验包,用于测试 X-ASR 960ms 效果。
+
+此包不是 App Store 上传包,不替代当前 2.1.28 App Store 审核线。
+
+## 回滚
+
+稳定上架基线:
+
+- Tag: `v2.1.28-build20260605.0353-appstore-upload`
+- Branch: `codex/freeze-2.1.28-appstore-20260605.0353`
+- Commit: `82ce4aa571dfa74032d4697984cc932257cfa35b`
+
+实验包源码:
+
+- Branch: `codex/x-asr-experiment-2.1.29`
+- Commit: `825443c94207230def2fb467bfa6e665478e03f2`
+- Tag: `v2.1.29-build20260607.0141-xasr-experimental`
+
+## 产物
+
+```text
+/Users/ar/Desktop/PrivateVoice-26.0604上架/03-本机测试包/PrivateVoice-Dictation-2.1.29-build20260607.0141-arm64-local.dmg
+/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/PrivateVoice-Dictation-2.1.29-build20260607.0141-arm64-local.dmg
+```
+
+SHA256:
+
+```text
+365b98d908e2ab2614cc73a97da6fa2a9398482a2823f69312d75e9b8a2d51bb
+```
+
+## 验证记录
+
+- X-ASR 960ms 四文件下载并安装到本机模型目录:PASS
+- 模型目录无 `com.apple.quarantine`:PASS
+- `go test -count=1 ./internal/model ./internal/modelselection ./internal/engine`:PASS
+- `PRIVATEVOICE_XASR_SMOKE=1 go test -count=1 ./internal/engine -run TestXASRRealModelSmoke -v`:PASS
+- 本机 arm64 DMG 构建:PASS
+- DMG `hdiutil verify`:PASS
+- 安装到 `/Applications/PrivateVoice Dictation.app`:PASS
+- 安装后 code signature:PASS
+- 安装后版本/build/category/export compliance plist:PASS
+
+## 已知范围
+
+- 当前只是把 X-ASR streaming recognizer 接入现有最终文本听写流程。
+- 还没有做 live partial 上屏,也没有做 VAD endpointing 产品化。
+- X-ASR 模型没有随 DMG 打包,需要先运行安装脚本或保留当前本机模型目录。
diff --git a/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/RELEASE_MANIFEST.md b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/RELEASE_MANIFEST.md
new file mode 100644
index 0000000..009178e
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/RELEASE_MANIFEST.md
@@ -0,0 +1,78 @@
+# PrivateVoice Dictation 2.1.29 build 20260607.0141
+
+## 类型
+
+X-ASR 技术实验本机测试包。
+
+这不是 App Store 上传包,不是 universal 包;仅用于 Apple Silicon 本机测试 X-ASR 960ms 模型效果。
+
+## 源码
+
+- Branch: `codex/x-asr-experiment-2.1.29`
+- Commit: `825443c94207230def2fb467bfa6e665478e03f2`
+- Tag: `v2.1.29-build20260607.0141-xasr-experimental`
+- Rollback baseline: `v2.1.28-build20260605.0353-appstore-upload`
+- Rollback branch: `codex/freeze-2.1.28-appstore-20260605.0353`
+
+## 变更
+
+- 新增 `x-asr-zh-en-960ms` experimental model profile。
+- macOS 下新增 sherpa-onnx `OnlineRecognizer` backend,用于 X-ASR 960ms 最终文本识别实验。
+- 新增 `privatevoice.src/scripts/install-x-asr-zh-en-960ms.sh`,只下载 `chunk-960ms-model` 所需文件。
+- `Info.plist` 新增 `ITSAppUsesNonExemptEncryption=false`。
+
+## 构建命令
+
+```bash
+cd /Users/ar/Projects/PrivateVoice/privatevoice.src
+./scripts/build-local-macos.sh arm64 --install
+```
+
+## 产物
+
+```text
+/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/PrivateVoice-Dictation-2.1.29-build20260607.0141-arm64-local.dmg
+/Users/ar/Desktop/PrivateVoice-26.0604上架/03-本机测试包/PrivateVoice-Dictation-2.1.29-build20260607.0141-arm64-local.dmg
+```
+
+SHA256:
+
+```text
+365b98d908e2ab2614cc73a97da6fa2a9398482a2823f69312d75e9b8a2d51bb  PrivateVoice-Dictation-2.1.29-build20260607.0141-arm64-local.dmg
+```
+
+## 本机模型依赖
+
+X-ASR 模型未打包进 DMG。测试机器已通过安装脚本安装:
+
+```text
+/Users/ar/Library/Application Support/PrivateVoice Input/models/x-asr-zh-en-960ms
+```
+
+模型目录大小:`598M`。
+
+必需文件:
+
+- `encoder-960ms.onnx`
+- `decoder-960ms.onnx`
+- `joiner-960ms.onnx`
+- `tokens.txt`
+
+## 验证
+
+- `go test -count=1 ./internal/model ./internal/modelselection ./internal/engine`: PASS
+- `PRIVATEVOICE_XASR_SMOKE=1 go test -count=1 ./internal/engine -run TestXASRRealModelSmoke -v`: PASS
+- X-ASR 960ms model load: PASS, `X-ASR zh-en 960ms · CPU`
+- Installed app bundle ID: `com.shanghai3168.privatevoicedictation`
+- Installed app version/build: `2.1.29 / 20260607.0141`
+- `LSApplicationCategoryType`: `public.app-category.productivity`
+- `ITSAppUsesNonExemptEncryption`: `false`
+- `codesign -vvv --deep --strict /Applications/PrivateVoice Dictation.app`: PASS
+- Installed binary architecture: `arm64`
+- DMG SHA256 recorded: PASS
+
+## 注意
+
+- 本包使用 `PrivateVoice Local Code Signing` 本地签名身份。
+- 本包已安装到 `/Applications/PrivateVoice Dictation.app`。
+- 如果系统辅助功能权限失效,需要在系统设置里移除旧的 `PrivateVoice Dictation` 权限项后重新添加 `/Applications/PrivateVoice Dictation.app`。
diff --git a/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/SHA256SUMS.txt b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/SHA256SUMS.txt
new file mode 100644
index 0000000..f607b59
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0141/SHA256SUMS.txt
@@ -0,0 +1 @@
+365b98d908e2ab2614cc73a97da6fa2a9398482a2823f69312d75e9b8a2d51bb  PrivateVoice-Dictation-2.1.29-build20260607.0141-arm64-local.dmg

--
Gitblit v1.9.3