Files
zyt/app/research/update_handoff_1_3_package_result.md
2026-08-31 15:17:34 +08:00

7.1 KiB
Raw Permalink Blame History

Doctor Workstation 1.3.0 Windows 正式包构建与安全验证结果

  • 执行日期:2026-08-28Asia/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.143 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 kBPyInstaller 报告一个可选 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
  • 退出码:0PowerShell 进程退出码)
  • 结果: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(单点输出为 .)。该测试未 mock subprocess.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. 版本/发布开关正确:1.3.0DEBUG_MODE=False
  2. 正式 EXE/ZIP 重建成功,内置三项冻结门禁全部通过。
  3. 1.3.0 安装器隔离安装、启动、卸载和残留检查通过。
  4. 真实 Windows helper bootstrap 在生产 flags 下成功生成 ready 文件。
  5. 最终大小与 SHA-256 已独立复核,且与 SHA256SUMS.txt 一致。
  6. 未触碰真实安装或现场服务端 1.1.0 包。