完成 0.2.0 预发布收口与中文安装器

This commit is contained in:
2026-09-09 01:20:45 +08:00
parent 90262aaf6d
commit 1f5e26c361
30 changed files with 1826 additions and 121 deletions
@@ -169,7 +169,7 @@ Qt 版本:
powershell -NoProfile -ExecutionPolicy Bypass -File internal/qa/scripts/Invoke-StaticChecks.ps1
```
当前自动化覆盖意图分发、提醒解析和类型、天气解析和模板、联网能力检测、聊天历史兼容,以及源码登记、废弃模块残留、默认资源和 GitHub 导出隔离。真实窗口、托盘通知、音效、网络 Provider、安装卸载仍按手测执行。
当前自动化覆盖意图分发、提醒解析和类型、天气解析/城市别名/IP 定位响应/模板、联网能力检测、聊天历史兼容、配置损坏恢复与 AI 诊断脱敏。静态检查覆盖源码登记、废弃模块残留、默认资源、GitHub 导出隔离、发布包必要输入和安装器关键安全项。真实窗口、托盘通知、音效、外部网络服务、Release 二进制和安装卸载仍按手测执行。
## 发布与性能
@@ -177,7 +177,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File internal/qa/scripts/Invoke-S
| 用例 | 步骤 | 预期结果 | 结论 |
| --- | --- | --- | --- |
| Release 构建 | 用户手动构建 Release | 构建成功,无新增编译错误 | TODO |
| 打包 | 运行 `tools/package_release.ps1` | 包含 exe、Qt runtime、resources、README、LICENSE | TODO |
| 打包 | 运行 `tools/package_release.ps1` | 包含 exe、Qt runtime、MSVC x64 runtime、resources、README、LICENSE;MSVC 运行库缺失时打包直接失败 | TODO |
| 安装器 | 生成并安装 Inno Setup 包 | 无 Qt 开发环境机器可运行 | TODO |
| 安装器自启动选项 | 安装页面勾选/不勾选开机自启动分别安装 | 勾选时写入当前用户 Run 项;不勾选时不新增自启动项;选项默认不勾选 | TODO |
| 卸载清理自启动 | 已启用开机自启动后卸载 | 当前用户 Run 项被清理,不残留开机启动入口 | TODO |
@@ -211,4 +211,4 @@ UI 状态:
| 历史 | 设置页聊天页和 `ConversationManager/ConversationStore` | 新消息写入 `timestamp/provider/model`;旧 role/content 历史兼容读取;支持关键词、Provider、模型筛选;Markdown/JSON 导出 | 本地历史关闭时只显示内存记录;损坏历史备份后忽略;导出路径不可写时提示错误 | 超大历史由保存上限和筛选 UI 控制;导出文件由用户选择路径 | 历史管理补全完成,不导出 API Key,不记录完整聊天日志 |
| 本地能力收缩 | `CommandDispatcher -> Reminder / Weather / Chat` | 本地文件、应用启动和工作区 Agent 文本不再进入系统工具链,且旧配置只被忽略 | AI 仍可能解释如何手动操作,但不得声称已访问文件、启动程序或执行命令 | 重点防止残留入口、旧配置读取和意图枚举引用 | 三个本地高权限模块已从当前产品中移除 |
| 联网模式 | `ChatInputDialog -> PetWindow::submitWebChatMessage() -> WebChatManager` | 输入框联网开关开启后,支持 OpenAI 官方 Web Search 和 Gemini Google Search grounding;记住开关状态时用户切换会立即保存 | AI 未配置、Provider 不支持、超时、网络失败、无来源均明确提示;Web 忙时不启动第二个请求 | 不再维护旧搜索源聚合或 SearXNG 旧配置 | 联网模式完成,结构化搜索 API/自建后端延期 |
| 发布/性能 | `tools/package_release.ps1` 和 `docs/performance_stability_check.md` | 发布脚本复制 exe、Qt runtime、角色/图标/音效资源、README、LICENSE;性能文档覆盖静置、AI、提醒、天气和联网模式 | `windeployqt`、Inno Setup、安装/卸载验证需用户手动执行并记录 | 未经手动构建和实机安装不能确认二进制运行 | 验收入口已补齐,本轮不运行 CMake 或构建命令 |
| 发布/性能 | `tools/package_release.ps1` 和 `docs/performance_stability_check.md` | 发布脚本复制 exe、Qt runtime、角色/图标/音效资源、README、LICENSE;静态规则验证发布输入、内部 QA 隔离、安装器自启动与卸载清理声明 | 产品 Release、`windeployqt`、Inno Setup、安装/卸载验证需用户手动执行并记录 | 未经手动构建和实机安装不能确认二进制运行 | 内部 QA 已独立验证;产品 Release 与安装器等待用户构建输入 |
@@ -4,12 +4,12 @@
| 项目 | 内容 |
| --- | --- |
| 测试日期 | 2026-07-17 |
| 版本 / 发布阶段 | 当前开发版 / 预发布回归进行中 |
| 测试源码基线 | `d0d1de4-dirty`;包含已确认的产品能力收缩、无用代码清理和内部 QA 基础设施 |
| 工作树说明 | 用户手测后只新增测试记录,未再修改产品业务代码 |
| 构建类型 | 用户未反馈,待补充 |
| 编译器 / Qt | 待补充 |
| 测试日期 | 2026-07-17 至 2026-07-18;2026-09-08 至 2026-09-09 复测 |
| 版本 / 发布阶段 | `0.2.0` / 发布候选验收完成 |
| 测试源码基线 | `90262aa` + 本记录所在提交;`90262aa` 已推送开发仓库 |
| 工作树说明 | 连接测试、提醒按钮定位、天气城市/IP 定位、诊断脱敏、QA 扩展、中文安装器和发布脚本已完成收口 |
| 构建类型 | Release |
| 编译器 / Qt | Qt 6.5.3 / MSVC 19.44 |
| 操作系统 | Windows,具体版本待补充 |
| 显示器 / DPI | 待补充 |
| 测试人 | 用户手动测试 |
@@ -18,8 +18,8 @@
| 检查 | 结果 | 摘要 |
| --- | --- | --- |
| 核心逻辑 C++ 测试 | NOT_RUN | 已建立 28 个用例;尚未手动构建内部 QA 工程 |
| 静态检查 | PASS | 13 项通过,0 项失败 |
| 核心逻辑 C++ 测试 | PASS | 2026-09-08 使用 Qt 6.5.3 / MSVC 19.44 构建并执行隔离 QA,43 项通过,0 项失败 |
| 静态检查 | PASS | 14 项通过,0 项失败;覆盖发布包、MSVC 运行库、中文安装器和隔离规则 |
| 性能工具链自检 | PASS | 脱敏 fixture 和 1 秒临时进程采样均成功生成 PASS 报告;不代表产品性能 |
| GitHub 导出隔离 | PASS | 静态确认公开导出排除 `docs/internal/reports`,发布构建和打包不依赖内部 QA |
@@ -34,21 +34,114 @@
| 单实例唤醒 | PASS | 用户确认通过 |
| 设置页居中 / 置前 | PASS | 用户确认通过 |
| 应用设置保存及重启保持 | PASS | 用户确认通过 |
| 开机自启动 | WAIVED | 用户于 2026-09-08 决定免测并接受当前实现,不作为技术验证 PASS |
| 导入合法角色包 | PASS | 用户于 2026-07-18 确认通过 |
| 切换用户角色并重启保持 | PASS | 用户于 2026-07-18 确认通过 |
| 同 ID 用户角色取消覆盖 | PASS | 用户于 2026-07-18 确认通过 |
| 拒绝缺少 `character.json` 的角色包 | PASS | 用户于 2026-07-18 确认通过 |
| 拒绝缺少 `idle` 状态的角色包 | PASS | 用户于 2026-07-18 确认通过 |
| 内置角色删除保护 | PASS | 用户于 2026-07-18 确认通过 |
| 导出角色及文件完整性 | PASS | 用户于 2026-07-18 确认通过 |
| 导出目标冲突确认与取消保护 | PASS | 用户于 2026-07-18 确认通过 |
| 打开用户角色目录 | PASS | 用户于 2026-07-18 确认通过 |
| 删除当前用户角色并回退默认角色 | PASS | 用户于 2026-07-18 确认通过 |
| AI 配置保存并重启保持 | PASS | 用户于 2026-07-18 确认通过 |
| 正确配置连接测试 | PASS | `AI-CONNECT-001` 修复后,用户于 2026-09-08 使用原配置复测通过 |
| 错误 Key / Base URL 错误提示 | PASS | 用户于 2026-07-18 确认通过 |
| 普通聊天 | PASS | 用户于 2026-07-18 确认通过 |
| 流式回复 | PASS | 用户于 2026-07-18 确认通过 |
| AI 忙时拒绝第二个请求 | PASS | 用户于 2026-07-18 确认通过 |
| 取消 AI 请求 | PASS | 用户于 2026-07-18 确认通过 |
| 本地历史保存和重启恢复 | PASS | 用户于 2026-07-18 确认通过 |
| 历史关键词搜索 | PASS | 用户于 2026-07-18 确认通过 |
| Provider / 模型筛选 | PASS | 用户于 2026-07-18 确认通过 |
| 导出 Markdown | PASS | 用户于 2026-07-18 确认通过 |
| 导出 JSON | PASS | 用户于 2026-07-18 确认通过 |
| 关闭历史保存后不持久化新消息 | PASS | 用户于 2026-07-18 确认通过 |
| 清空聊天历史及二次确认 | PASS | 用户于 2026-07-18 确认通过 |
| 一次性提醒 | PASS | 用户于 2026-09-08 确认通过 |
| 中文相对时间 | PASS | 用户于 2026-09-08 确认通过 |
| 绝对日期 | PASS | 用户于 2026-09-08 确认通过 |
| 每天 / 每周 / 每月重复提醒 | PASS | 用户于 2026-09-08 确认通过 |
| 复杂重复规则拒绝 | PASS | 用户于 2026-09-08 确认通过 |
| 提醒列表 | PASS | 用户于 2026-09-08 确认通过 |
| 聊天取消提醒 | PASS | 用户于 2026-09-08 确认通过 |
| 设置页编辑 pending | PASS | 用户于 2026-09-08 确认通过 |
| 桌宠可见时触发 | PASS | 动态定位修复后,用户于 2026-09-08 复测通过 |
| 桌宠隐藏时触发 | PASS | 用户于 2026-09-08 确认通过 |
| AI 忙时触发 | PASS | 用户于 2026-09-08 确认通过 |
| 拖动中触发 | PASS | 用户于 2026-09-08 确认通过 |
| 多提醒同时触发 | PASS | 用户于 2026-09-08 确认通过 |
| 知道了 | PASS | 用户于 2026-09-08 确认通过 |
| 5分钟后再提醒 | PASS | 用户于 2026-09-08 确认通过 |
| 20天历史清理 | PASS | 用户于 2026-09-08 确认通过 |
| 自定义音效导入 / 试听 / 删除 | PASS | 用户于 2026-09-08 确认通过 |
| 内置音效保护 | PASS | 用户于 2026-09-08 确认通过 |
| 睡眠与系统时间变化 | PASS | 用户于 2026-09-08 确认通过 |
| 提醒保存失败回滚与重试 | PASS | 用户于 2026-09-08 确认通过 |
| 洛杉矶天气 | PASS | 用户于 2026-09-08 确认可识别并返回天气 |
| 华盛顿天气 | PASS | 用户于 2026-09-08 确认可识别并返回天气 |
| 西安天气候选 | PASS | 低价值同名候选过滤修复后,用户于 2026-09-08 完成 T06 最小清单复测 |
| 纽约天气 | PASS | 中文海外城市别名修复后,用户于 2026-09-08 完成 T06 最小清单复测 |
| 东京天气 | PASS | 中文别名与候选过滤修复后,用户于 2026-09-08 完成 T06 最小清单复测 |
| 日本东京天气 | PASS | 国家限定解析修复后,用户于 2026-09-08 完成 T06 最小清单复测 |
| 公网 IP 定位 | PASS | `ipapi.co` 失败后切换 `ipwho.is` 的备用链路通过用户复测 |
| 文件操作已移除 | PASS | 用户于 2026-09-08 确认不再弹文件选择框或访问本地文件 |
| 应用启动已移除 | PASS | 用户于 2026-09-08 确认不再弹 exe 选择/确认框或启动程序 |
| 工作区 Agent 已移除 | PASS | 用户于 2026-09-08 确认不再扫描目录或打开 Agent 窗口 |
| 本地能力菜单入口清理 | PASS | 用户于 2026-09-08 确认右键与托盘入口已清理 |
| 本地能力设置页清理 | PASS | 用户于 2026-09-08 确认应用启动和 Agent 页面已清理 |
| Agent 快捷键清理 | PASS | 用户于 2026-09-08 确认 `Alt+A` 不再呼出 Agent |
| 旧本地能力配置兼容 | PASS | 用户于 2026-09-08 确认保留旧配置启动不崩溃且不恢复旧能力 |
| `0.2.0` Release 构建 | PASS | 用户于 2026-09-08 使用 Qt 6.5.3 / MSVC Release Kit 完成构建 |
| 中文安装器界面 | PASS | 用户于 2026-09-09 确认安装器实机验收通过 |
| 桌面快捷方式和开机自启默认未选 | PASS | 用户于 2026-09-09 确认默认选项符合预期 |
| 安装完成并启动 | PASS | 用户于 2026-09-09 确认通过 |
| 覆盖安装 | PASS | 用户于 2026-09-09 确认通过 |
| 卸载时保留用户数据 | PASS | 用户于 2026-09-09 确认通过 |
| 卸载时删除用户数据 | PASS | 用户于 2026-09-09 确认通过 |
## T09 自动化验证
| 用例 | 结果 | 实际结果 / 备注 |
| --- | --- | --- |
| App 配置损坏 | PASS | 损坏文件被备份,加载默认 AppConfig |
| AI 配置损坏 | PASS | 损坏文件被备份,回退未配置的 Custom Provider |
| 天气配置损坏 | PASS | 损坏文件被备份,回退 Open-Meteo 默认配置 |
| 联网配置损坏 | PASS | 损坏文件被备份,回退默认联网开关配置 |
| 提醒数据损坏 | PASS | 损坏文件被备份,返回空提醒列表 |
| 历史数据损坏 | PASS | 既有 ConversationStore 自动化验证备份并忽略损坏历史 |
| 日志隐私 | PASS | 诊断上下文、JSON 摘要和错误摘要均不泄露 Key、Bearer、token、message/content 内容 |
| 同秒重复损坏 | PASS | 连续损坏生成带后缀的独立备份,不覆盖前一份 |
## T10 发布与安装验收
| 检查 | 结果 | 实际结果 / 备注 |
| --- | --- | --- |
| PowerShell / JSON 语法 | PASS | QA、性能、发布和 GitHub 导出脚本均可解析 |
| 发布包输入 | PASS | 包含 exe、Qt runtime、应用本地 MSVC x64 runtime、characters/icons/sounds、README、LICENSE |
| 发布隔离 | PASS | 发布脚本不复制 `docs/internal/reports`,产品 CMake/打包脚本不依赖内部 QA |
| 安装器结构 | PASS | 简体中文、per-user 安装、x64、文件递归、自启动默认未选、Run 项和卸载清理逻辑均已验证 |
| MSVC 依赖闭合 | PASS | `MSVCP140/140_1/140_2` 与 `VCRUNTIME140/140_1` 均随包部署,依赖扫描无缺失 |
| ZIP 发布包 | PASS | `QtDesktopPet-0.2.0-windows-x64.zip`,SHA256 `A247A6AB7EC467B2FC1EA2439611660E9E269E573860EDD587E7D65243768661` |
| 中文安装器 | PASS | `QtDesktopPet-0.2.0-windows-x64-setup.exe`,SHA256 `0FE7E215C649E4C2175736C8798BF25F1FDEB34C1B45632CD8824F3F6DDEE709` |
| Release / 实际打包 / 安装卸载 | PASS | 用户完成 Release 构建,并于 2026-09-09 确认中文安装、覆盖安装、启动和卸载数据选项通过 |
| 数字签名 | ACCEPTED_LIMITATION | 当前安装器未签名,Windows SmartScreen 可能显示“未知发布者”;不作为 `0.2.0` 预发布阻断项 |
## 批次状态
| 批次 | 范围 | 结果 | 备注 |
| --- | --- | --- | --- |
| T01 | 基础窗口与托盘 | PASS | 6 项基础窗口/托盘用例通过 |
| T02 | 应用设置与开机自启动 | IN_PROGRESS | 应用设置持久化通过;开机自启动尚未测试 |
| T03 | 角色管理 | NOT_RUN | |
| T04 | AI 与聊天历史 | NOT_RUN | |
| T05 | 定时提醒 | NOT_RUN | |
| T06 | 天气查询 | NOT_RUN | |
| T07 | 联网模式 | NOT_RUN | |
| T08 | 已移除能力与安全边界 | NOT_RUN | |
| T09 | 配置损坏与隐私 | NOT_RUN | |
| T10 | 打包、安装与卸载 | NOT_RUN | |
| T02 | 应用设置与开机自启动 | ACCEPTED | 应用设置持久化通过;开机自启动由用户决定免测并接受 |
| T03 | 角色管理 | PASS | 10 项全部通过 |
| T04 | AI 与聊天历史 | PASS | 连接测试修复后复测通过;本批次全部通过 |
| T05 | 定时提醒 | PASS | 动态按钮定位复测通过,提醒批次关闭 |
| T06 | 天气查询 | PASS | 海外中文城市、候选过滤、国家限定和 IP 备用服务均通过最小清单复测 |
| T07 | 联网模式 | BLOCKED | 当前没有可用的 OpenAI/Gemini 官方 Key;不是功能失败 |
| T08 | 已移除能力与安全边界 | PASS | 用户确认全部 7 项通过 |
| T09 | 配置损坏与隐私 | PASS | 8 项自动化验证通过,测试仅使用 Qt 测试专用配置目录 |
| T10 | 打包、安装与卸载 | PASS | `0.2.0` 中文安装器、运行库闭合、安装启动、覆盖安装及卸载均通过 |
## 性能状态
@@ -56,11 +149,16 @@
## 缺陷与复测
当前已执行项目未发现缺陷。
| 缺陷 ID | 首次现象 | 严重级别 | 修复状态 | 复测结果 |
| --- | --- | --- | --- | --- |
| AI-CONNECT-001 | 正常聊天可用,但连接测试返回 `HTTP 200: AI response content is empty.` | Medium | 已移除测试请求的 16 token 限制,并补充 token 截断提示 | PASS / CLOSED(2026-09-08) |
| REMINDER-UI-001 | 到点提醒的“知道了”和“5分钟后再提醒”按钮距角色主体偏远 | Low | 已改为按当前角色帧 Alpha 可见边界和可见尺寸动态定位,并保留屏幕边缘回退 | PASS / CLOSED(2026-09-08) |
| WEATHER-GEO-001 | 西安出现低价值候选,纽约/东京中文名无法稳定解析,国家限定失败 | Medium | 增加集中式中文城市别名、国家限定、人口/地点等级候选过滤,并修复中文被误判为两位国家码 | PASS / CLOSED(2026-09-08) |
| WEATHER-IP-001 | ipapi.co 服务端错误或超时导致公网 IP 定位失败 | Medium | 改为 ipapi.co 失败或 5 秒超时后自动尝试 ipwho.is,全部失败才提示配置默认城市 | PASS / CLOSED(2026-09-08) |
## 当前结论
- 已执行手测:7 项 `PASS`。
- 已执行静态检查:13 项 `PASS`。
- 未执行项目仍较多,本记录状态为 `IN_PROGRESS`。
- 当前不能据此判定可发布。
- 已执行手测:72 项 `PASS`,0 项 `FAIL`,1 项 `WAIVED`。
- 已执行自动化:核心逻辑 C++ 测试 43 项 `PASS`,静态检查 14 项 `PASS`。
- T07 因缺少官方联网 Key 处于 `BLOCKED`,不是已发现的功能失败;产品性能场景尚未执行。
- `0.2.0` 可作为预发布版本发布;已知限制为联网模式未实测、安装器未数字签名,公开分发时应明确说明。
+1 -1
View File
@@ -2,7 +2,7 @@
| 日期 | 版本 / 阶段 | Commit | 构建 | 自动化 | 手测 | 性能 | 发布结论 | 记录 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 2026-07-17 | 预发布回归进行中 | `d0d1de4-dirty` | 用户构建,详情待补 | 静态 13/13;C++ NOT_RUN | 7 PASS,其余 NOT_RUN | NOT_RUN | IN_PROGRESS | `2026-07-17_pre-release_d0d1de4-dirty.md` |
| 2026-07-17 至 2026-07-18;2026-09-08 至 2026-09-09 复测 | `0.2.0` 发布候选 | 本记录所在提交 | Release / Qt 6.5.3 / MSVC 19.44 | 静态 14/14;C++ 43/43 | 72 PASS / 0 FAIL / 1 WAIVED;T07 无 Key 未测 | NOT_RUN | PASS_WITH_LIMITATIONS | `2026-07-17_pre-release_d0d1de4-dirty.md` |
| 2026-07-17 | QA 基础设施 | `d0d1de4-dirty` | 未构建 | 静态 13/13;C++ NOT_RUN | NOT_RUN | fixture PASS | NOT EVALUATED | `2026-07-17_qa-infrastructure_d0d1de4-dirty.md` |
正式记录按时间倒序添加。模板和维护规则分别见 `TEMPLATE.md` 与 `README.md`。