背景
v1.5.3 之后多次出现“issue 已关闭 / release notes 写已完成 / CI 通过”,但真实使用仍然发现功能没有闭环的问题。典型表现包括:
后端字段或类型加了,但 UI 没有可见入口。
写了 release notes,但按钮实际没有绑定或没有后端 command。
只做了提示文案,没有真正执行修复闭环。
只做了底层函数,没有做用户能看到的明细列表、失败提示、复制路径、打开位置等体验。
issue 被关闭,但没有实机截图、命令输出、PR diff 证据和手动验收记录。
本 issue 的目的不是新增功能,而是建立 v1.6 QA Gate :要求 Codex / 开发者必须用可验证证据证明每个问题真的修了,不能再用“已实现 / 已优化 / 已通过 CI”来糊弄。
总原则
v1.6 不做大功能,不新增系统管家能力,不扩大危险操作范围。
v1.6 的目标只有一个:
把 v1.5.3 已经声明、已经关闭但用户实际没感知到的能力,修到真实可用、可理解、可验收。
任何修复都必须满足三层证据:
代码证据 :指出改了哪些文件、哪些函数、哪些 UI 入口、哪些后端 command。
运行证据 :给出本机运行后的截图 / 日志 / 命令输出 / 操作步骤。
验收证据 :逐条对照本 issue 与 [v1.5.3 QA Blocker] 真实复测问题:安全模式、桌面急救、MySQL 排版、JDK 候选、端口识别与通知体验 #89 、[1.5.2 Patch 总控] 基于真实用户反馈修复路径展示、端口误判、外部运行时安全、桌面急救与白屏兜底 #57 、[1.5.2 Patch] Java/JDK 候选管理与环境医生联动,支持外部 JDK 设为 JAVA_HOME 但禁止卸载 #61 、[1.5.2 Patch] 桌面急救/大文件/重复文件打开目录精确化,不再只打开总目录 #62 、[1.5.2 Patch] 页面帮助说明增强:从口号式安全提示改为可操作使用指南 #63 、[1.5.2 Patch] 前端启动白屏兜底、全局错误页、日志入口与 UI 配置恢复 #64 、[1.5.2 Patch] 端口检测全面增强:识别准确性、详情解释、风险分级、历史记录与项目端口联动收口 #66 、[1.5.2 Patch] MySQL 修复中心系统库缺失/不完整疑似误报:补齐诊断证据、连接验证、风险分级、强制备份与三次确认 #67 、[1.5.2 Patch] 端口管理进阶特色增强:软件识别库、智能快捷操作、项目联动与证据评分体系 #71 、[1.5.2 Patch] 端口管理界面布局优化:摘要优先、筛选分层、表格轻量、详情抽屉承载复杂信息 #72 、[1.5.2 Patch][P0] 高危操作增加后端 confirmation token,避免只依赖前端确认 #74 、[1.5.2 Patch][P2] 前端 main.ts 拆分为 feature modules,降低白屏和回归风险 #82 的验收清单,明确“通过 / 未通过 / 不适用”。
没有证据,不能关闭 issue。
禁止行为
开发过程中禁止以下行为:
不允许只改 README、release notes、文案就关闭问题。
不允许只加类型定义、mock 字段、占位 UI 就说完成。
不允许把按钮做出来但没有事件绑定。
不允许前端调用不存在的后端 command。
不允许用 console.log 或 TODO 代替真实修复。
不允许把“后续阶段开放”“等待结果”“Phase N”这种半成品入口继续留在稳定版主界面。
不允许隐藏错误,只能让错误更可理解、更可关闭、更可复现。
不允许关闭 issue 时只写“已完成”“已优化”“测试通过”。
不允许用 CI 通过代替 Windows 实机验收。
不允许新增大功能来掩盖原问题没有修好。
不允许提交安装包、target、dist、node_modules、release-assets、临时 probe 文件。
不允许 git add .。
不允许 force push。
不允许 amend 已公开提交。
不允许在 main 未合并前打 release。
必须修复的问题范围
本 issue 不重新定义新需求,只约束以下已发现问题的修复质量。
P0-1:安全模式必须真的可用
关联:#64 、#89
必须修到:
不再出现 Command plugin:dialog|confirm not allowed by ACL。
安全模式页面自己不能再次触发未处理异步错误。
安全模式提示可关闭或折叠。
安全模式说明要人话化:说明它是异常兜底,不会自动扫描、修复、清理、安装、停止服务或写环境变量。
重试、重置 UI 配置、打开日志目录、复制诊断信息都必须能点。
安全模式下不得自动执行任何扫描、修复、清理、安装、停止服务、写环境变量动作。
必须提供证据:
修复前错误来源说明:哪个调用触发了 plugin:dialog|confirm。
修复后相关代码位置:安全模式不依赖 Tauri dialog confirm,或 capability 最小授权已补齐。
一张安全模式页面截图。
点击重置 UI、复制诊断、打开日志目录的实测结果。
明确说明普通 toast 不会卡住“已进入安全模式”。
验收方式:
模拟 localStorage 损坏或前端初始化错误 → 启动软件 → 进入安全模式 → 无 ACL 报错 → 提示可关闭 / 折叠 → 四个恢复按钮可用。
P0-2:桌面急救 / 大文件必须有明细和精确定位
关联:#62 、#89
必须修到:
桌面急救和大文件扫描不只显示分类汇总。
必须显示大文件明细列表。
每条记录至少包含:文件名、完整路径、所在目录、大小、修改时间、扩展名/类型、来源分类、是否仍存在、是否可定位。
每条记录必须有:打开所在目录、资源管理器中选中文件、复制完整路径、复制所在目录、重新扫描。
分类卡片点击“查看明细”时显示该分类 Top N 文件,而不是只打开桌面或下载根目录。
文件不存在、被移动、无权限、云盘占位文件未下载时,必须给明确提示。
超长路径不能撑爆 UI。
不自动删除、不自动移动文件、不读取文件内容。
必须提供证据:
大文件结果截图,里面能看到具体文件名、大小、路径、修改时间。
点击“打开所在目录 / 选中文件”的实测说明。
删除或移动一个扫描出的文件后,再点打开时的错误提示截图。
代码证据:后端返回结构、前端渲染明细、open/select 文件分支。
验收方式:
在桌面和下载目录分别放置测试大文件 → 扫描 → 查看明细 → 复制路径 → 打开所在目录 → 资源管理器选中文件 → 删除其中一个文件 → 再次打开显示“已移动或删除,请重新扫描”。
P0-3:MySQL 修复中心必须可读、可信、不吓人
关联:#67 、#89
必须修到:
MySQL 候选卡片重新排版,不能把字段横向硬塞。
分区展示:概览、结论、证据、风险、备份、操作。
长路径必须 ellipsis + title/tooltip 或详情层 + 复制按钮。
PermissionUnknown / Running 必须用人话解释:Data 目录不可读,因此不能下结论,不等于系统库一定损坏。
正常运行 / 端口可连接 / 服务存在时,不得直接判定 LikelyBroken。
高危修复必须要求 backup manifest + confirmation token。
无有效备份时,不允许执行补库等高危修复。
必须提供证据:
MySQL 修复中心截图,证明排版不挤。
PermissionUnknown 场景的人话提示截图。
无备份时执行高危修复被拦截的截图或日志。
有备份 manifest 时计划预览截图。
代码证据:诊断状态映射、UI 分区、备份校验、token 校验。
P0-4:外部 JDK 必须可验证、可作为 JAVA_HOME 候选,但不能被接管
关联:#61 、#89
必须修到:
外部 JDK 能执行只读验证:java -version、javac -version、jar --version 或等价命令。
外部 JDK 可以作为用户级 JAVA_HOME 候选。
外部 JDK 可以生成 Java 稳定修复计划。
UI 明确区分:验证此 JDK、设为用户级 JAVA_HOME、切换 DevEnv 受管版本。
外部 JDK 不得显示卸载、删除目录、接管 third-party manager current 等按钮。
SystemInstaller、Scoop、Chocolatey、mise、asdf、IDE bundled JDK 都要显示来源分类。
必须提供证据:
外部 JDK 候选列表截图。
点击验证后显示 java / javac / jar 三项结果截图。
设为 JAVA_HOME 计划预览截图。
证明外部 JDK 没有删除/卸载按钮。
代码证据:验证 command、JAVA_HOME 计划、外部来源保护。
P0-5:高危操作必须有后端 token,不能只靠前端 confirm
关联:#74 、#89
必须修到:
建立统一高危操作登记表,列出 command、风险等级、是否需要备份、是否需要 confirmation token。
后端执行函数必须自己校验 token。
前端 confirm 只能作为用户体验,不能作为安全边界。
token 必须绑定 action_id、plan_id、risk_level、plan_fingerprint。
token 必须单次使用、过期失效、plan 不匹配拒绝、重复使用拒绝。
至少覆盖以下命令:
apply_env_repair_plan
restore_user_environment
cleanup_path_entries
apply_user_environment_configuration
manage_system_platform
manage_local_service
stop_local_service
apply_project_configuration
update_project_port
rollback_move
execute_move_plan
execute_expansion_plan
clear_download_cache
clean_dev_cache
kill_process
execute_mysql_repair_plan
必须提供证据:
后端登记表代码位置。
每个高危 command 是否需要 token 的清单。
单元测试:无 token、过期 token、plan 不匹配、重复使用均拒绝。
至少一个前端高危操作的完整流程截图:预览 → 生成 token → 执行 → 结果。
P1:必须做的稳定版收口
1. 首页去掉迁移状态,改为版本更新卡片
必须修到:
首页不再展示“迁移状态”。
首页展示当前版本、最新版本、检查时间、是否有更新、下载/Release 入口。
启动时检查更新默认开启,但失败不能阻断主界面。
如果更新下载/安装后端闭环不完整,就不要展示下载/安装按钮,只展示打开 Release 或复制链接。
证据:
首页截图。
手动检查更新截图。
断网时轻量失败提示截图。
代码确认 check_for_updates / download_update / launch_update_installer 后端 command 存在并注册;若不存在,必须降级按钮。
2. 页面帮助改成真正的使用指南
必须修到:
不再使用空泛口号。
每页说明:能做什么、适合场景、第一步、只读操作、会修改系统的操作、是否需要备份、失败怎么办、不会做什么。
“这个页面怎么用?”改名或重构,避免和命令面板功能重复。
MySQL、端口管理、桌面急救、环境医生、JDK/Python/chsrc 要有专门说明。
证据:
至少 5 个主要页面的帮助截图。
代码中对应 featureHelp 或 help content 的文件位置。
3. 环境医生安全修复不能像摆设
必须修到:
没有可修项时,不显示“安全修复”主按钮,改为“查看建议”。
有可修项时,必须显示修复计划预览。
每条问题说明:问题是什么、影响什么、是否可自动修复、为什么可以/不可以修。
执行后显示结果明细,不用 window.alert 展示复杂结果。
证据:
无可修项状态截图。
有可修项计划预览截图。
执行结果明细截图。
4. Toast / 通知统一
必须修到:
普通成功通知 5 秒后自动消失。
普通信息通知 5 秒后自动消失。
警告可停留更久,但必须可关闭。
错误可保留,但长错误默认折叠,必须可关闭。
页面切换后不残留大量旧 toast。
安全模式和高危确认类提示不自动消失,但必须可关闭或折叠。
证据:
showToast 或 toast manager 代码位置。
成功通知自动消失的实测说明。
错误通知可关闭截图。
5. 端口管理必须让用户看懂
必须修到:
1冲突 可点击或展开,展示冲突来源、端口、项目配置、常见服务、置信度、建议操作。
unknown 进程要进一步分析:文件名、路径、签名/公司名、父进程、命令行关键词、是否系统目录、是否常见软件目录。
常见进程识别库补齐:System、QQ.exe、msedge.exe、steam.exe、svchost.exe、VMware、NVIDIA、ArmouryCrate、MuMu、Autodesk、Kaspersky 等。
系统关键进程不显示“安全结束”。
不得只凭 3000–9999 端口归类为 development。
证据:
端口列表截图。
冲突详情截图。
System / lsass / services 等不显示结束按钮截图。
unknown 详情截图。
单元测试:Steam/QQ/Edge 不被判 Spring,unknown 8080 保持低置信度,系统关键进程 blocked。
6. 去掉半成品入口和开发者本机痕迹
必须修到:
项目启动向导不再硬编码 E:\pycode\dailytools。
C 盘急救隐藏“后续阶段开放”“等待清理结果”等 tab。
去掉 Phase N、真扩容主入口、系统管家感文案。
Docker / WSL / 自卸载等系统级入口默认折叠到高级区或降级为诊断/复制官方入口。
证据:
项目页面默认空路径截图。
C 盘急救页面截图,证明没有半成品 tab。
工具箱截图,证明系统级高危入口已降级。
7. main.ts 模块化只做必要拆分,不大重写
关联:#82
必须修到:
至少拆出 toast / safe mode / update / ports / mysql / cleanup / jdk 的 UI 和事件逻辑。
main.ts 只保留应用启动、顶层路由、全局状态组装和模块注册。
不大改视觉,不引入大框架。
每拆一块都要保持 npm run build 通过。
证据:
文件结构截图或列表。
main.ts 行数变化。
每个模块负责范围说明。
必须提交的验证材料
修复 PR 的正文必须包含以下内容。缺一项不允许合并。
1. 修复矩阵
格式必须类似:
问题
关联 issue
修改文件
用户可见变化
验收证据
状态
安全模式 ACL
#64 #89
xxx.ts / xxx.rs
不再报错,可关闭
截图 + 日志
通过
2. 命令验证
必须运行并贴出结果:
cd tauri/ src- tauri
cargo test -- all- targets
cargo clippy -- all- targets -- - D warnings
cd ..
npm ci
npm run build
npm run tauri:build
cd ..
py -3 scripts/ check_repo_hygiene.py
如果某条失败,不能合并,必须说明失败原因并修复。
3. Windows 实机手测记录
至少覆盖:
安全模式
桌面急救大文件定位
MySQL 修复中心
外部 JDK 验证
端口冲突解释
环境医生安全修复
首页更新卡片
通知自动消失
项目页默认路径
半成品 tab 隐藏
每项要写:
操作步骤:
预期结果:
实际结果:
证据:截图 / 日志 / 命令输出
结论:通过 / 未通过
4. 代码自查 grep
PR 中必须给出以下自查结果:
rg " E:\\pycode|后续阶段开放|等待清理结果|Phase 3|Phase 4|C 盘急救大师|真扩容" tauri/ src
rg " window.alert|window.confirm" tauri/ src
rg " check_for_updates|download_update|launch_update_installer" tauri/ src- tauri/ src tauri/ src
rg " TODO|placeholder|暂未|尚未生成|后续阶段" tauri/ src tauri/ src- tauri/ src
要求:
第一条不应在稳定版主 UI 中出现。
window.alert/window.confirm 只能保留在低风险或已说明场景,高危操作不能只靠它。
更新相关 command 必须前后端闭环。
TODO / placeholder 不得出现在用户可见稳定版主路径。
5. Release 前检查
发 v1.6 前必须确认:
PR 已合并到 main。
tag 从 main 当前提交创建。
Release asset 是真实 NSIS 安装包,不是错误文件。
update-manifest.json 的 version、downloadUrl、sha256 对应真实 asset。
README 不夸大能力。
docs/release-v1.6.md 只写真实修复,不写未完成能力。
安装包可下载、可安装、可启动。
关闭规则
本 issue 不能由 Codex 自己一句“已完成”关闭。
关闭前必须满足:
所有关联 issue 的 P0 全通过。
P1 至少全部有明确处理:修复 / 降级 / 隐藏 / 明确不做。
PR 正文包含修复矩阵、命令验证、Windows 手测记录、grep 自查。
用户实际安装 v1.6 后确认核心问题不再复现。
没有新的半成品入口、硬编码本机路径、未绑定按钮、缺失后端 command。
如果某项无法完成,必须在 PR 中明确写:
未完成项:
原因:
用户可见影响:
临时降级方案:
后续 issue:
不能用模糊话术代替。
对 Codex 的一句话要求
不要再只让 CI 通过、issue 关闭、release notes 写漂亮。
这次要让用户打开 v1.6 后能实际看到:
安全模式不炸。
大文件能定位。
MySQL 页面能读懂。
JDK 能验证。
端口冲突能解释。
高危按钮更少、更安全。
半成品入口消失。
通知不挡人。
首页像正式软件。
修不到这个程度,就不要发布 v1.6 Stable。
背景
v1.5.3 之后多次出现“issue 已关闭 / release notes 写已完成 / CI 通过”,但真实使用仍然发现功能没有闭环的问题。典型表现包括:
本 issue 的目的不是新增功能,而是建立 v1.6 QA Gate:要求 Codex / 开发者必须用可验证证据证明每个问题真的修了,不能再用“已实现 / 已优化 / 已通过 CI”来糊弄。
总原则
v1.6 不做大功能,不新增系统管家能力,不扩大危险操作范围。
v1.6 的目标只有一个:
任何修复都必须满足三层证据:
没有证据,不能关闭 issue。
禁止行为
开发过程中禁止以下行为:
console.log或 TODO 代替真实修复。git add .。必须修复的问题范围
本 issue 不重新定义新需求,只约束以下已发现问题的修复质量。
P0-1:安全模式必须真的可用
关联:#64、#89
必须修到:
Command plugin:dialog|confirm not allowed by ACL。必须提供证据:
plugin:dialog|confirm。验收方式:
P0-2:桌面急救 / 大文件必须有明细和精确定位
关联:#62、#89
必须修到:
必须提供证据:
验收方式:
P0-3:MySQL 修复中心必须可读、可信、不吓人
关联:#67、#89
必须修到:
PermissionUnknown / Running必须用人话解释:Data 目录不可读,因此不能下结论,不等于系统库一定损坏。必须提供证据:
P0-4:外部 JDK 必须可验证、可作为 JAVA_HOME 候选,但不能被接管
关联:#61、#89
必须修到:
java -version、javac -version、jar --version或等价命令。JAVA_HOME候选。必须提供证据:
P0-5:高危操作必须有后端 token,不能只靠前端 confirm
关联:#74、#89
必须修到:
至少覆盖以下命令:
必须提供证据:
P1:必须做的稳定版收口
1. 首页去掉迁移状态,改为版本更新卡片
必须修到:
证据:
2. 页面帮助改成真正的使用指南
必须修到:
证据:
3. 环境医生安全修复不能像摆设
必须修到:
window.alert展示复杂结果。证据:
4. Toast / 通知统一
必须修到:
证据:
showToast或 toast manager 代码位置。5. 端口管理必须让用户看懂
必须修到:
1冲突可点击或展开,展示冲突来源、端口、项目配置、常见服务、置信度、建议操作。证据:
6. 去掉半成品入口和开发者本机痕迹
必须修到:
E:\pycode\dailytools。证据:
7. main.ts 模块化只做必要拆分,不大重写
关联:#82
必须修到:
main.ts只保留应用启动、顶层路由、全局状态组装和模块注册。npm run build通过。证据:
必须提交的验证材料
修复 PR 的正文必须包含以下内容。缺一项不允许合并。
1. 修复矩阵
格式必须类似:
2. 命令验证
必须运行并贴出结果:
如果某条失败,不能合并,必须说明失败原因并修复。
3. Windows 实机手测记录
至少覆盖:
每项要写:
4. 代码自查 grep
PR 中必须给出以下自查结果:
要求:
window.alert/window.confirm只能保留在低风险或已说明场景,高危操作不能只靠它。5. Release 前检查
发 v1.6 前必须确认:
update-manifest.json的 version、downloadUrl、sha256 对应真实 asset。关闭规则
本 issue 不能由 Codex 自己一句“已完成”关闭。
关闭前必须满足:
如果某项无法完成,必须在 PR 中明确写:
不能用模糊话术代替。
对 Codex 的一句话要求
不要再只让 CI 通过、issue 关闭、release notes 写漂亮。
这次要让用户打开 v1.6 后能实际看到:
修不到这个程度,就不要发布 v1.6 Stable。