# Doctor Workstation 1.3.0 Windows 正式包构建与安全验证结果 - 执行日期:2026-08-28(Asia/Shanghai) - 工作目录:`D:\web\zyt\app` - 结论:通过。1.3.0 Windows 安装器与 ZIP 已重新构建;冻结媒体/入口门禁、隔离安装/启动/卸载冒烟和真实 Windows helper bootstrap 专项测试全部通过。 - 安全边界:未修改生产源码或既有测试,未执行 reset/checkout,未访问现场服务端,也未用 `dist` 中旧的 1.1.0 安装器覆盖真实安装。安装器冒烟显式指定 1.3.0 文件并仅安装到随机临时目录。 ## 最终产物 | 产物 | 字节数 | SHA-256 | | --- | ---: | --- | | `D:\web\zyt\app\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe` | 162917310 | `E1734C7B5E1619951AF81082FC4578D50BD881B5CD8C7AC7F4E658E8E28B74A7` | | `D:\web\zyt\app\dist\DoctorWorkstation-Windows-x64-1.3.0.zip` | 230820285 | `FAF2D4A68065C1ED528A1D887B5210B44FACBEBBC1CB89729FA3B690D7995CEF` | `dist\SHA256SUMS.txt` 与重新计算的两个 SHA-256 完全一致。 ## 命令、退出码与结果 以下命令均从 PowerShell 执行;未特别注明时工作目录为 `D:\web\zyt\app`。 ### 1. 项目约束与 Trellis 检查 ```powershell Get-Content -LiteralPath 'D:\web\zyt\AGENTS.md' -Raw if (Test-Path -LiteralPath 'D:\web\zyt\.trellis') { Get-ChildItem ... } else { 'NO_TRELLIS' } ``` - 退出码:`0` - 结果:根 `AGENTS.md` 已完整读取;`D:\web\zyt\.trellis` 不存在,因此没有可继续读取的 `.trellis/workflow.md` 或分层 spec。 ### 2. 初始共享工作树与构建输入只读检查 ```powershell git status --short Get-Content src\doctor_workstation\__init__.py Get-Content scripts\package_windows.ps1 Get-Content scripts\smoke_windows_installer.ps1 rg -n "bootstrap|ready|helper|windows" tests\test_app_update.py Get-ChildItem dist -File ``` - 退出码:`0` - 结果:开始时共享工作树已有大量未提交源码/测试变更和研究文件,均视为他人工作并保留;确认构建、安装器冒烟与 helper 测试入口存在。`dist` 内旧 1.1.0/1.2.0 包仅被列出,没有被安装或复制到真实安装位置。 ### 3. 版本源逐行及实际导入检查 ```powershell [System.IO.File]::ReadAllLines((Resolve-Path 'src\doctor_workstation\__init__.py')) .\.venv\Scripts\python.exe -c "import doctor_workstation; print(repr(doctor_workstation.__version__)); print(repr(doctor_workstation.DEBUG_MODE)); print(repr(doctor_workstation.ONLINE_API_BASE_URL))" ``` - 退出码:`0` - 结果:`__version__ == '1.3.0'`;`DEBUG_MODE is False`;线上 API 基址为 `https://admin.zhenyangtang.com.cn`。 ### 4. 打包脚本内置冻结门禁确认 ```powershell rg -n "runtime_media_smoke|smoke|entry|frozen|media|DoctorWorkstation.exe|--smoke" scripts\package_windows.ps1 scripts\build_windows.ps1 packaging\runtime_media_smoke.py ``` - 退出码:`0` - 结果:确认 `build_windows.ps1` 在构建后依次执行冻结 Qt 多媒体文件门禁、`--media-smoke-test` 冻结进程门禁和 `--smoke-test` 应用入口门禁。 ### 5. 1.3.0 Windows 正式包重建 ```powershell & .\scripts\package_windows.ps1 ``` - 退出码:`0` - 关键结果: - `uv sync --frozen --extra build` 成功;构建环境使用 Python 3.12.12、PyInstaller 6.22.0。 - `npm ci` 成功,视频伴侣生产构建成功(Vite 6.1.1,43 modules transformed)。 - PyInstaller onedir 冻结成功,输出 `dist\DoctorWorkstation\DoctorWorkstation.exe`。 - `Frozen Qt multimedia file gate passed.` - `Frozen Qt multimedia smoke gate passed (--media-smoke-test, isolated offscreen mode).` - `Frozen application entry smoke gate passed (--smoke-test, isolated offscreen mode).` - 7-Zip 创建 1.3.0 ZIP 成功;Inno Setup 6.7.3 编译 1.3.0 安装器成功。 - 脚本打印的最终哈希与本报告“最终产物”一致。 - 非阻塞警告:Vite 报告单个 JS chunk 大于 500 kB;PyInstaller 报告一个可选 QML asset downloader 插件二进制不存在及若干 Windows 系统 DLL 静态解析警告。它们未阻断构建,且后续冻结媒体实际进程、应用入口及安装后启动门禁全部通过。 ### 6. 新安装器隔离安装/启动/卸载冒烟 ```powershell & .\scripts\smoke_windows_installer.ps1 -Installer (Resolve-Path -LiteralPath '.\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe').Path ``` - 退出码:`0`(PowerShell 进程退出码) - 结果:`Installer icon/install/start/uninstall smoke test passed.` - 隔离目录:`C:\Users\pc\AppData\Local\Temp\doctor-workstation-installer-smoke-14b72f4137814eea8ede6bc48920f5f5` - 覆盖项:安装器/主程序/卸载器图标一致;安装目录内主程序和卸载器存在;安装后主程序 `--smoke-test` 返回 0;卸载返回 0;卸载后主程序不再存在。 - 安全说明:脚本使用随机 `%LOCALAPPDATA%\Temp\doctor-workstation-installer-smoke-*\install`,环境变量、配置与日志均隔离;命令显式锁定 1.3.0 安装器,没有调用 1.1.0 包或现场服务端。 ### 7. 真实 Windows helper bootstrap 专项测试 ```powershell .\.venv\Scripts\python.exe -m pytest 'tests\test_app_update.py::test_inno_helper_executes_bootstrap_with_production_flags' -q ``` - 退出码:`0` - 结果:`1 passed`(单点输出为 `.`)。该测试未 mock `subprocess.Popen`,会真实启动 PowerShell helper,并由测试生成的 helper 脚本在收到生产参数集后写入 ready 文件;最后断言 ready 文件内容为 `ready`,因此确认生产 flags 下 ready 握手实际产生。 ### 8. 最终版本/生产 flag 复核及独立哈希核验 ```powershell .\.venv\Scripts\python.exe -c "import doctor_workstation; assert doctor_workstation.__version__ == '1.3.0'; assert doctor_workstation.DEBUG_MODE is False" Get-Item .\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe Get-FileHash .\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe -Algorithm SHA256 Get-Item .\dist\DoctorWorkstation-Windows-x64-1.3.0.zip Get-FileHash .\dist\DoctorWorkstation-Windows-x64-1.3.0.zip -Algorithm SHA256 Compare-Object <重新计算的两行> (Get-Content .\dist\SHA256SUMS.txt) ``` - 退出码:`0` - 结果:版本和 `DEBUG_MODE` 断言通过;EXE/ZIP 字节数和哈希如“最终产物”所列;`Compare-Object` 无差异。 ### 9. 完成前共享工作树/产物复查 ```powershell git status --short Get-ChildItem .\dist -File | Where-Object { $_.Name -match '1\.3\.0|SHA256SUMS' } | Select-Object Name,Length,LastWriteTime ``` - 退出码:`0` - 结果:1.3.0 EXE、ZIP 和新 `SHA256SUMS.txt` 均存在;本任务未编辑生产源码或测试。完成复查时仍可见共享工作树中的既有 `src/doctor_workstation/services/app_update.py` 修改,未回退或覆盖。 ## 验收结论 1. 版本/发布开关正确:`1.3.0`、`DEBUG_MODE=False`。 2. 正式 EXE/ZIP 重建成功,内置三项冻结门禁全部通过。 3. 1.3.0 安装器隔离安装、启动、卸载和残留检查通过。 4. 真实 Windows helper bootstrap 在生产 flags 下成功生成 ready 文件。 5. 最终大小与 SHA-256 已独立复核,且与 `SHA256SUMS.txt` 一致。 6. 未触碰真实安装或现场服务端 1.1.0 包。