--- id: T-406 title: 实例删除确认中的 User Data Dir 显式删除 phase: 4 deps: [T-301, T-303, T-305] status: DONE created: 2026-07-27 owner: codex --- ## 需求与背景 当前实例删除确认只移除 Chub 配置,明确保留 User Data Dir。用户需要在同一确认框中选择“删除实例和数据”,以便在不再需要某个隔离环境时一并删除其浏览器 profile 数据。 ## 方案与边界 - 确认框保留“取消 / 删除实例”安全默认路径;新增默认未勾选的“同时删除 User Data Dir 中的数据”业务复选框。勾选后展示目标目录和不可恢复警告,确认按钮改为“删除实例及数据”。取消、Escape 和窗口关闭均不改变实例或数据。 - 只有状态为“已退出”或“启动失败”的实例可勾选数据删除;运行、启动/停止、外部关联、外部占用和未知占用时选项禁用,用户仍可仅删除配置。该 UI 状态只是预防性提示,不是删除授权依据。 - 确认数据删除后,Gio 在后台调用 `InstanceDataDeleter`,以实例 ID、User Data Dir 和请求代次接收结果。删除过程中确认框保持且禁用重复/取消;成功后才删除实例行、持久化配置并恢复列表焦点。失败保持实例、目录、确认框和勾选,以可恢复说明提示停止浏览器或检查权限。 - `cmd/chub` adapter 在文件删除前重新检查 Chub registry 与 Windows 外部 profile 占用;不确定、检查失败或占用均拒绝。`internal/platform/files.InstanceDataRemover` 只处理绝对、清理后的非卷根真实目录,拒绝普通文件、符号链接或重解析点;目录不存在可视作已清除。不得按浏览器进程名枚举、关闭或接管任何进程。 - 此次扩展了不可逆确认状态,先更新 `docs/ui/browser-manager.html` 交互原型和 `docs/ui/README.md`。原型仅模拟选择和结果,绝不删除本机文件。 ## 验收要点 - 自动化:新增安全目录删除(成功、相对路径、卷根、普通文件、链接、取消上下文)测试;新增占用复核、UI 默认配置删除、勾选后的后台成功/失败/过期结果及运行态禁用测试。`go test ./...`、`go test -race ./cmd/chub ./internal/ui ./internal/platform/files`、`go vet ./...`、`cmd /c build.bat` 通过。 - Windows smoke:已退出实例打开删除确认时复选框默认未选,勾选后可见实际目录与不可恢复警告,确认按钮文案改变;删除测试 profile 后其目录和配置均消失。运行中/外部占用实例只能删除配置。故意占用目录、权限拒绝或无效路径时,确认框保留且配置/目录都不变。 - 交互与无障碍:确认框背景不可交互、默认焦点为取消、Escape 取消;进入删除中状态不显示不可兑现的取消;错误以文字说明影响范围和恢复路径,不显示原始系统错误。窄窗口、200% 缩放、长路径和键盘 Tab/Space/Enter 仍可完成或取消。 ## 执行记录 - 状态:DONE - 变更:确认框默认只删除配置,新增默认未选的数据删除复选框、目录/不可恢复警告、动态确认文案、取消默认焦点和 Escape 取消。仅“已退出”与“启动失败”允许勾选;数据删除在后台运行,确认框在执行中保持并禁用重复/取消。成功后才删除配置,失败或过期结果保留配置、目录与确认框。`cmd/chub` 在删除前复核 Chub registry 与外部 profile 占用,`internal/platform/files` 拒绝相对路径、卷根、普通文件、链接及 Windows 重解析点。 - 验证:`go test ./...`、`go test -race ./cmd/chub ./internal/ui ./internal/platform/files`、`go vet ./...`、`cmd /c build.bat` 均通过。目录删除测试在 Windows 临时真实目录上验证成功删除,并验证相对路径、卷根、文件、链接和已取消上下文均不会执行删除;Shell 与 adapter 测试覆盖默认配置删除、运行态禁用、成功/失败/过期结果、Chub/外部占用复核。 - 阻塞:无。