7.1 KiB
7.1 KiB
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 检查
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. 初始共享工作树与构建输入只读检查
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. 版本源逐行及实际导入检查
[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. 打包脚本内置冻结门禁确认
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 正式包重建
& .\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. 新安装器隔离安装/启动/卸载冒烟
& .\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 专项测试
.\.venv\Scripts\python.exe -m pytest 'tests\test_app_update.py::test_inno_helper_executes_bootstrap_with_production_flags' -q
- 退出码:
0 - 结果:
1 passed(单点输出为.)。该测试未 mocksubprocess.Popen,会真实启动 PowerShell helper,并由测试生成的 helper 脚本在收到生产参数集后写入 ready 文件;最后断言 ready 文件内容为ready,因此确认生产 flags 下 ready 握手实际产生。
8. 最终版本/生产 flag 复核及独立哈希核验
.\.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. 完成前共享工作树/产物复查
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.3.0、DEBUG_MODE=False。 - 正式 EXE/ZIP 重建成功,内置三项冻结门禁全部通过。
- 1.3.0 安装器隔离安装、启动、卸载和残留检查通过。
- 真实 Windows helper bootstrap 在生产 flags 下成功生成 ready 文件。
- 最终大小与 SHA-256 已独立复核,且与
SHA256SUMS.txt一致。 - 未触碰真实安装或现场服务端 1.1.0 包。