2026-05-20 20:48:18 +08:00
|
|
|
# 5-20 Resource Tab Close Confirm Checklist v1
|
|
|
|
|
|
2026-05-21 09:04:13 +08:00
|
|
|
> 状态:done
|
|
|
|
|
>
|
|
|
|
|
> 归档说明(2026-05-21):resource tab close guard 可见提示已完成。
|
2026-05-20 20:48:18 +08:00
|
|
|
>
|
|
|
|
|
> 日期:2026-05-20
|
|
|
|
|
>
|
|
|
|
|
> Owner:主编辑区 resource tab close guard / `web_shell.rs`
|
|
|
|
|
|
|
|
|
|
## 1. 目标
|
|
|
|
|
|
|
|
|
|
补齐 P0-2 的可见关闭防护:resource tab 已能检测 `dirty/saving/hasExternalConflict`,但当前只是 `console.warn` 并阻止关闭。需要补上用户可见的最小确认/提示 UI,避免“点击无反应”。
|
|
|
|
|
|
|
|
|
|
## 2. 允许修改范围
|
|
|
|
|
|
|
|
|
|
- `rust/crates/mnote-web/src/routes/web_shell.rs`
|
|
|
|
|
- `rust/crates/mnote-web/src/ssr/styles.rs`
|
|
|
|
|
- `scripts/task460-resource-tab-close-dirty-smoke.js`
|
|
|
|
|
- 可新增一个聚焦 smoke
|
|
|
|
|
|
|
|
|
|
## 3. 禁止事项
|
|
|
|
|
|
|
|
|
|
- 不引入完整 VSCode working copy service。
|
|
|
|
|
- 不改变 resource markdown / text / code 的保存事实源。
|
|
|
|
|
- 不实现完整 discard/undo 体系;本轮只做可见提示和明确阻止。
|
|
|
|
|
|
|
|
|
|
## 4. Checklist
|
|
|
|
|
|
|
|
|
|
- [x] `dirty` 关闭时显示明确提示,说明资源有未保存更改。
|
|
|
|
|
- [x] `saving` 关闭时显示明确提示,说明正在保存。
|
|
|
|
|
- [x] `hasExternalConflict` 关闭时显示明确提示,说明存在外部冲突。
|
|
|
|
|
- [x] tab 上保留 `data-mnote-resource-close-guard` 与可测试状态。
|
|
|
|
|
- [x] 提示 UI 可被后续关闭尝试更新,不堆积多个弹层。
|
|
|
|
|
- [x] 新增或更新 smoke 覆盖点击关闭后出现提示,而不是静默无响应。
|
|
|
|
|
|
|
|
|
|
## 5. 验收
|
|
|
|
|
|
|
|
|
|
- [x] `node --check scripts/task460-resource-tab-close-dirty-smoke.js`
|
|
|
|
|
- [x] `node scripts/task460-resource-tab-close-dirty-smoke.js`
|
|
|
|
|
- [x] `cargo test -p mnote-web web_shell -- --test-threads=1`
|
|
|
|
|
|
|
|
|
|
## 5.1 本轮执行记录
|
|
|
|
|
|
|
|
|
|
- 已合入:`showResourceTabCloseGuardNotice`,对 `dirty` / `saving` / `hasExternalConflict` 输出可见提示。
|
|
|
|
|
- 已验证:`task460` 断言可见提示存在且重复点击不堆叠。
|
|
|
|
|
- 保留约束:仍只阻止关闭,不实现 discard/undo。
|
|
|
|
|
|
|
|
|
|
## 6. 非目标
|
|
|
|
|
|
|
|
|
|
- 不做真正丢弃更改按钮。
|
|
|
|
|
- 不做保存队列或 retry 策略。
|