0.9.10 嵌套模态窗口复核(2026-10-17)
# QuickApp 界面验证
0.9.10 嵌套模态窗口复核(2026-10-17)
在真实 Windows 桌面复现了 Dock → 关于 → 检查更新的遮挡:托管 owner 和 HWND owner 都正确,但“关于”原生置顶、更新窗口未置顶,原生 Z 序断言失败。“关于”自身的 Topmost 属性仍为 false,因此只检查直接 owner 的属性不足以发现问题。
修复后,同一原生测试通过 17 条断言,覆盖 Dock/设置打开关于、复用窗口切换 owner、隐藏与最小化后恢复,以及原生关闭消息后父窗口输入逐层恢复。测试使用隔离配置及受控更新服务,不启动产品安装器。此模式已接入普通 CI 和发布门禁:dotnet run --project scripts/ui-verification/UiVerification.csproj -c Release --no-build -- --desktop-modal artifacts/ui-desktop-modal。
Release 构建、189 项 Core 测试、164 条离屏实际界面断言、资源生成一致性,以及发布入口和安装包哈希门禁均通过。原生窗口检查用于补足离屏界面无法验证的系统层级和输入禁用状态。
0.9.7 安装器构建复核(2026-10-16)
本版更新版本号与安装包构建流程,应用交互和配色沿用 0.9.6,README 静态图继续明确标注截图来源。正式 scripts/publish.ps1 已重新完成 Windows x64 NativeAOT,正式 EXE 的双语资源及版本 --selfcheck 退出码为 0,PE 为 AMD64 且 CLR 目录为空;真实 Inno 安装包编译及 SHA-256 核对通过。未执行真实产品安装、覆盖升级或卸载。
macOS 打包包含已通过受控测试的镜像占用重试与退出清理;持续失败不转换镜像,也不删除挂载中的内容。发布说明校验前置到五平台构建之前,实际执行工作流内脚本,验证有效版本被接受、缺少说明与非法版本被拒绝。工作流静态校验、T4 与单文件生成一致性、46 个完整原型状态审计通过,零 JavaScript 错误。
0.9.6 界面复核(2026-10-16)
本轮使用 CodeWF.Avalonia 12.1.4.25,Toolkit 保持 1.0.0.19。主按钮、悬停和按下状态使用共享主题的成对资源;选中导航、切换器及安装按钮与原型同步。
正式 Windows x64 发布脚本通过仓外快照执行,只重定向产物、中间目录和开发 NuGet 配置,保留原编译与裁剪参数;NativeAOT 产物、正式 EXE 的 --selfcheck 与原生 UI 验证器均通过。实际界面包含 140 条主断言;新增回归通过真实模板和鼠标事件覆盖八色 × 明暗下的 normal、hover、pressed、恢复状态,共 64 次文字对比测量,最低 4.8498:1,另验证禁用按钮拒绝输入及重新启用后的色值恢复。
Core 189 项测试通过。单文件生成一致性检查通过,浏览器完整审计通过:46 个完整渲染状态,零 JavaScript 错误。原型真实按钮的三态配色审计另有 48 次测量,最低 4.8498:1。专项颜色采样在隔离页面移动现有按钮以便稳定采样,验证真实按钮样式;完整布局与鼠标路径由独立的完整原型审计覆盖。
本次 README 关键静态 PNG 来自该版本的 NativeAOT 界面验证器。下方保留历史验证记录,版本号、旧安装包哈希及历史 GIF 不能作为本轮新安装器验收结果。当前未执行真实安装、普通桌面拖放或多显示器操作;Linux/macOS 产品运行由各平台继续验收。
历史验证记录
本轮在 Windows x64 使用正式 scripts/publish.ps1 发布 NativeAOT,并在 Avalonia Headless + Skia 中运行实际窗口。测试隔离配置、下载目录和安装服务,不修改用户快捷项、不真实安装软件。
最终产物使用共享控件与国际化包 12.1.4.22:正式发布程序 --selfcheck、原生 UI verifier 的 127 条主断言和 10 项主题语言检查、Windows Inno Setup 安装包编译及 SHA-256 生成均通过。README 静态截图取自该版本原生验证器。安装器未实际运行。
已验证
- Core 189 项测试。
- 实际窗口 127 条主断言和 10 项主题语言检查,输出 51 张截图:八色 × 浅深两态、跟随系统独立保存、中英五设置页、四边 Dock、搜索与编辑模式、三类快捷项、独立关于和版本说明。
- 设置窗口标题栏只保留八个配色点、Ursa 三态主题按钮、Semi 语言图标和语言菜单;外观页去掉重复入口。实际点击 Ursa 内部按钮,检查浅色、深色、系统三态及持久化;通过真实 ListBox 选中色点检查配色绑定。
- 实际展开语言菜单并执行菜单项;检查 Ursa 内部按钮在中英和三态下的工具提示,提示文本绑定宿主 T4 资源,跟随全局语言即时刷新。
- 同一个已打开的新增快捷项窗口切换语言,验证下拉框关闭状态的
SelectionBoxItem,避免旧语种缓存。 - 更新服务使用受控实现覆盖新版本、当前版本、检查失败、平台无资产、下载就绪、取消和安装退出策略;真实安装器启动需用户主动执行。
- 单文件原型复制到空目录后验收 46 个状态,禁止外部资源请求,并断言无脚本错误;覆盖中英、八色、浅深、五设置页、关于和版本说明。
- T4 生成结果与 JSON 资源一致;宿主输出 JSON,仅使用一个 Toolkit 国际化管理器。
- 内嵌 SVG 先规范化为 UTF-8/LF,再编码为 Base64;分别使用 LF 和 CRLF 源文件验证产物一致,避免全新 Windows 检出后原型检查失败。
- macOS 的宿主 JSON 放入
Contents/Resources/I18n,应用兼容该标准路径,打包时在搬移后再次自检;Windows 使用显式进程等待读取 GUI 自检的实际退出码。 - 原型的独立窗口显示外边框、32 像素标题栏和三枚窗口按钮,验证设置窗口的最小化、还原、最大化和关闭后重开;About 的最小化、最大化与实际窗口一致禁用,并断言禁用按钮不会改变布局。About 仅使用固定样例时间
2026-10-15 00:00:00,实际程序显示真实构建时间。 - 八个色点使用共享主题的固定色样,Aurora 保留渐变;顺序与实际标题栏一致,不随明暗模式改变色点身份。
原型与实现对照
| 项目 | 原型与实际约束 |
|---|---|
| 设置窗口 | 侧栏页签、外观卡片、表单间距、圆角、文字层级与实际布局同步 |
| 外观 | 使用共享 StudioTheme 令牌快照,不通过色值判断主题;系统模式与配色分离 |
| 快捷项 | 类型下拉、目标与命令字段切换、实例数和工作目录、快捷键输入、确认取消 |
| 关于 | 独立窗口,版本、运行时、架构、编译时间、主页与仓库、许可和更新状态 |
| 下载交互 | 原型模拟状态;实际程序通过 Toolkit 执行请求、校验和受控安装 |
2026-10-15 逐图对照中文、.NET 深色、720 × 620 的外观页:32 px 标题栏、156 px 导航、13 px 主文字和四行设置的密度一致。浏览器原生滑块与 Semi 滑块的轨道、滑块轮廓不同,部分文字基线约差 3 px;保留现有主题控件,不以这些差异宣称像素完全一致。
不以主观百分比代替验证结果。字体栅格化、窗口阴影、系统托盘、毛玻璃、系统文件选择器和真实鼠标拖拽仍受平台影响;离屏截图不能替代普通桌面操作验收。Linux 和 macOS 的 NativeAOT 与安装包由各自原生 CI runner 验证,本机未执行这些平台的安装。
复现
dotnet test QuickApp.slnx -c Release
pwsh scripts/sync_localization_keys.ps1 -Check
pwsh scripts/build_prototype.ps1 -Check
dotnet run --project scripts/ui-verification/UiVerification.csproj -c Release -- artifacts/ui-verification
npm ci --prefix design/tests
npx --prefix design/tests playwright install chromium
node design/tests/audit-prototype.cjs
pwsh scripts/publish.ps1 -RuntimeIdentifier win-x64
artifacts/publish/win-x64/net10.0-windows/QuickApp/QuickApp.exe --selfcheck仓库仅引用公开 NuGet 包,不提交本地源配置;开发时可按环境变量 temp_nugets 使用最新中间包。
0.9.4 增量复核
Semi 与 Ursa 跟随唯一全局语言切换更新自身 Locale,保留宿主同键覆盖。同一个输入框复制/粘贴菜单往返切语四次,Ursa 取消文案及宿主覆盖均进入实际视图回归。修复 720 × 540 英文数据页重新加载按钮被裁掉的问题:操作按钮自动换行,长配置路径和存储说明可换行,侧栏固定 156 px 并与原型同步。两语五设置页输出最小窗口截图,检查五个配置操作的完整边界,并实际触发重新加载隔离配置。
最终正式发布、EXE 自检、原生界面与 Windows 安装包使用仅从 nuget.org 还原的隔离缓存和独立中间目录完成;README 更新为这次原生输出,不使用开发缓存中的同版本包。原型版本从项目生成,受控新版本按补丁号递增;46 个离线状态通过。精确安装包门禁新增 13 个受控场景,五个平台必须提供十个正确产品、版本和真实哈希的资产。未执行真实安装。
0.9.5 全局语言反向同步
新增后台全局切语、同一个已打开语言菜单回切、配色名称动态刷新和偏好落盘回归。设置窗口关闭后,全局语言变化仍由 Dock 保存;弱引用语言订阅通过界面调度刷新,避免后台操作选项集合。