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

---
 Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/RELEASE_MANIFEST.md |   80 ++++++++++++++++++++++++++++++++++++++++
 Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/SHA256SUMS.txt      |    1 
 02-P-NBL/freeze/20260607-x-asr-experimental-build.md                         |   17 +++++---
 3 files changed, 91 insertions(+), 7 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
index 597b22f..557efe1 100644
--- a/02-P-NBL/freeze/20260607-x-asr-experimental-build.md
+++ b/02-P-NBL/freeze/20260607-x-asr-experimental-build.md
@@ -2,9 +2,11 @@
 
 ## 结论
 
-已生成 `2.1.29 build 20260607.0141` Apple Silicon 本机实验包,用于测试 X-ASR 960ms 效果。
+已生成 `2.1.29 build 20260607.0147` Apple Silicon 本机实验包,用于测试 X-ASR 960ms 效果。
 
 此包不是 App Store 上传包,不替代当前 2.1.28 App Store 审核线。
+
+`20260607.0141` 是早期实验包,因 X-ASR 中文字间空格修复被 `20260607.0147` 取代,不建议再使用。
 
 ## 回滚
 
@@ -17,28 +19,29 @@
 实验包源码:
 
 - Branch: `codex/x-asr-experiment-2.1.29`
-- Commit: `825443c94207230def2fb467bfa6e665478e03f2`
-- Tag: `v2.1.29-build20260607.0141-xasr-experimental`
+- Commit: `90dfe73f1a1b6815cfba08ec165394719005e4cf`
+- Tag: `v2.1.29-build20260607.0147-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
+/Users/ar/Desktop/PrivateVoice-26.0604上架/03-本机测试包/PrivateVoice-Dictation-2.1.29-build20260607.0147-arm64-local.dmg
+/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/PrivateVoice-Dictation-2.1.29-build20260607.0147-arm64-local.dmg
 ```
 
 SHA256:
 
 ```text
-365b98d908e2ab2614cc73a97da6fa2a9398482a2823f69312d75e9b8a2d51bb
+8b2d85b31236ce83ac2ff692e6d095574ce117c0f1783bb85d882ea300288cfa
 ```
 
 ## 验证记录
 
 - X-ASR 960ms 四文件下载并安装到本机模型目录:PASS
 - 模型目录无 `com.apple.quarantine`:PASS
-- `go test -count=1 ./internal/model ./internal/modelselection ./internal/engine`:PASS
+- `go test -count=1 ./internal/textproc ./internal/model ./internal/modelselection ./internal/engine`:PASS
 - `PRIVATEVOICE_XASR_SMOKE=1 go test -count=1 ./internal/engine -run TestXASRRealModelSmoke -v`:PASS
+- X-ASR 中文字间空格后处理测试:PASS
 - 本机 arm64 DMG 构建:PASS
 - DMG `hdiutil verify`:PASS
 - 安装到 `/Applications/PrivateVoice Dictation.app`:PASS
diff --git a/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/RELEASE_MANIFEST.md b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/RELEASE_MANIFEST.md
new file mode 100644
index 0000000..a3afabb
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/RELEASE_MANIFEST.md
@@ -0,0 +1,80 @@
+# PrivateVoice Dictation 2.1.29 build 20260607.0147
+
+## 类型
+
+X-ASR 技术实验本机测试包。
+
+这不是 App Store 上传包,不是 universal 包;仅用于 Apple Silicon 本机测试 X-ASR 960ms 模型效果。
+
+## 源码
+
+- Branch: `codex/x-asr-experiment-2.1.29`
+- Commit: `90dfe73f1a1b6815cfba08ec165394719005e4cf`
+- Tag: `v2.1.29-build20260607.0147-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` 所需四个文件。
+- 修复 X-ASR 中文输出常见的 CJK 字间空格,例如 `请 你 根 据` 会归并为 `请你根据`。
+- `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.0147/PrivateVoice-Dictation-2.1.29-build20260607.0147-arm64-local.dmg
+/Users/ar/Desktop/PrivateVoice-26.0604上架/03-本机测试包/PrivateVoice-Dictation-2.1.29-build20260607.0147-arm64-local.dmg
+```
+
+SHA256:
+
+```text
+8b2d85b31236ce83ac2ff692e6d095574ce117c0f1783bb85d882ea300288cfa  PrivateVoice-Dictation-2.1.29-build20260607.0147-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/textproc ./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.0147`
+- `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`。
+- `20260607.0141` 是早期实验包,已被本 build 替代。
diff --git a/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/SHA256SUMS.txt b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/SHA256SUMS.txt
new file mode 100644
index 0000000..9a085bc
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.29-build20260607.0147/SHA256SUMS.txt
@@ -0,0 +1 @@
+8b2d85b31236ce83ac2ff692e6d095574ce117c0f1783bb85d882ea300288cfa  PrivateVoice-Dictation-2.1.29-build20260607.0147-arm64-local.dmg

--
Gitblit v1.9.3