test: 收口本地文件夹垃圾箱 A3 smoke
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# Reasonix Batch A3 Worker A:local folder empty-trash UI smoke
|
||||
|
||||
Project root: `/mnt/Data1T/mnote`
|
||||
|
||||
## 目标
|
||||
|
||||
补齐 `4-34` 中 local folder empty-trash UI 证据:本地文件夹垃圾箱页面能分别清空页面垃圾箱和资源垃圾箱,且不触发非预期浏览器导航。
|
||||
|
||||
## Ownership
|
||||
|
||||
允许修改:
|
||||
|
||||
- 新增 `scripts/task474-local-folder-empty-trash-ui-smoke.js`
|
||||
- `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md`
|
||||
- `.codex/reasonix-tasks/results/batch-a3-worker-a-empty-trash.md`
|
||||
|
||||
禁止:
|
||||
|
||||
- 不修改 Rust 源码。
|
||||
- 不修改 `4-46` 或移动任何 design 文件。
|
||||
- 不提交 git。
|
||||
- 不把 reload 型刷新标为 no-refresh。
|
||||
|
||||
## 要求
|
||||
|
||||
1. 新增 browser smoke,参考 `task464` / `task473` 的登录、local root、trash workbench 写法。
|
||||
2. 创建临时 local folder root:
|
||||
- 至少一个 Markdown 页面进入本地垃圾箱。
|
||||
- 至少一个非 md 资源进入本地垃圾箱。
|
||||
3. 打开 `/trash?sourceKind=local_folder&rootUri=file://...`。
|
||||
4. 点击“清空页面垃圾箱”,接受 confirm,断言页面类 trash row 消失、trash index 对应 entry 清理、trash 文件/目录不存在。
|
||||
5. 点击“清空资源垃圾箱”,接受 confirm,断言资源类 trash row 消失、trash index 对应 entry 清理、trash 文件不存在。
|
||||
6. 记录 main frame navigation delta,清空按钮操作不得触发非预期导航。
|
||||
7. 结果写入 `tmp/task474-local-folder-empty-trash-ui-smoke/result.json`。
|
||||
8. 更新 `4-34` 对 local folder empty-trash 覆盖状态,但不要移动文件。
|
||||
|
||||
## 验收命令
|
||||
|
||||
```bash
|
||||
node --check scripts/task474-local-folder-empty-trash-ui-smoke.js
|
||||
PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task474-local-folder-empty-trash-ui-smoke.js
|
||||
```
|
||||
|
||||
如果 3000 不是最新,可只做 `node --check` 并说明需要 Codex 用临时端口复跑。
|
||||
|
||||
## 最终输出
|
||||
|
||||
写入 `.codex/reasonix-tasks/results/batch-a3-worker-a-empty-trash.md`,包含:
|
||||
|
||||
- 修改文件
|
||||
- smoke 覆盖内容
|
||||
- 验证命令和结果
|
||||
- 未完成项 / 风险
|
||||
@@ -0,0 +1,51 @@
|
||||
# Reasonix Batch A3 Worker B:local folder Markdown trash lifecycle smoke
|
||||
|
||||
Project root: `/mnt/Data1T/mnote`
|
||||
|
||||
## 目标
|
||||
|
||||
补齐 `4-34` 中 local folder Markdown 自身 trash lifecycle 独立 smoke:Markdown 页面通过 `/api/tree/commands` 完成 archive / restore / purge,文件系统与 trash index 均一致。
|
||||
|
||||
## Ownership
|
||||
|
||||
允许修改:
|
||||
|
||||
- 新增 `scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js`
|
||||
- `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md`
|
||||
- `.codex/reasonix-tasks/results/batch-a3-worker-b-markdown-lifecycle.md`
|
||||
|
||||
禁止:
|
||||
|
||||
- 不修改 Rust 源码。
|
||||
- 不修改 `4-46` 或移动任何 design 文件。
|
||||
- 不提交 git。
|
||||
- 不把非 md 资源生命周期代替 Markdown 页面生命周期。
|
||||
|
||||
## 要求
|
||||
|
||||
1. 新增 API smoke,可参考 `task437-local-folder-asset-trash-lifecycle-smoke.js`。
|
||||
2. 构造临时 local folder root 和 `.mnote/workspace.json`。
|
||||
3. 至少覆盖 loose Markdown 页面:
|
||||
- `delete` 后 canonical command 应是页面或资源 lifecycle 中当前实现返回的真实值。
|
||||
- 源 `.md` 消失,`.mnote/trash` 中出现对应文件,`trash-index.json` 记录 `local-md:*`。
|
||||
- `restore` 后 `.md` 回原路径,trash 文件消失,index 清理。
|
||||
- 再次 `delete` 后 `purge`,源路径与 trash 路径均不存在,index 清理。
|
||||
4. 如 bundled Markdown 页面当前实现也容易覆盖,可加一个 bundled case;否则在结果中说明只覆盖 loose Markdown,bundled 由 Rust 单测覆盖或待后续。
|
||||
5. 结果写入 `tmp/task475-local-folder-markdown-trash-lifecycle-smoke/result.json`。
|
||||
6. 更新 `4-34` 对 local folder Markdown trash lifecycle 覆盖状态,但不要移动文件。
|
||||
|
||||
## 验收命令
|
||||
|
||||
```bash
|
||||
node --check scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
|
||||
node scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
|
||||
```
|
||||
|
||||
## 最终输出
|
||||
|
||||
写入 `.codex/reasonix-tasks/results/batch-a3-worker-b-markdown-lifecycle.md`,包含:
|
||||
|
||||
- 修改文件
|
||||
- smoke 覆盖内容
|
||||
- 验证命令和结果
|
||||
- 未完成项 / 风险
|
||||
@@ -0,0 +1,51 @@
|
||||
# Reasonix Batch A3 Worker C:4-34 / 4-46 归档审查
|
||||
|
||||
Project root: `/mnt/Data1T/mnote`
|
||||
|
||||
## 目标
|
||||
|
||||
审查 Batch A / P0 剩余文档是否能归档。你只做文档审查和状态更新,不写 smoke、不改 Rust、不提交 git。
|
||||
|
||||
## Ownership
|
||||
|
||||
允许修改:
|
||||
|
||||
- `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md`
|
||||
- `design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md`
|
||||
- 如确认完成,可移动到 `design/04-tree-domain/done/`
|
||||
- `.codex/reasonix-tasks/results/batch-a3-worker-c-doc-archive.md`
|
||||
|
||||
只读参考:
|
||||
|
||||
- `design/04-tree-domain/process/4-47-batch-a3-local-folder-trash-final-smoke-checklist-v1.md`
|
||||
- `tmp/task474-local-folder-empty-trash-ui-smoke/result.json`
|
||||
- `tmp/task475-local-folder-markdown-trash-lifecycle-smoke/result.json`
|
||||
- `tmp/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke/result.json`
|
||||
- `.codex/reasonix-tasks/results/batch-a3-worker-a-empty-trash.md`
|
||||
- `.codex/reasonix-tasks/results/batch-a3-worker-b-markdown-lifecycle.md`
|
||||
|
||||
## 要求
|
||||
|
||||
1. 如果 Worker A/B 结果文件或 smoke result 不存在,不要归档,写明 blocker。
|
||||
2. 如果 `task474` 和 `task475` 都有可复核通过证据:
|
||||
- 更新 `4-34` 覆盖矩阵和边界。
|
||||
- 判断 `4-34` 是否满足归档条件。
|
||||
- 判断 `4-46` 是否满足 Batch A P0 归档条件。
|
||||
- 满足时移动到 `done/` 并把顶部状态改为 `done`。
|
||||
3. 如果仍有真实缺口,保留在 `process/`,写明下一步。
|
||||
4. 不把 Reasonix 文字总结当事实源,必须读 result.json。
|
||||
|
||||
## 验收命令
|
||||
|
||||
```bash
|
||||
git diff --name-status
|
||||
```
|
||||
|
||||
## 最终输出
|
||||
|
||||
写入 `.codex/reasonix-tasks/results/batch-a3-worker-c-doc-archive.md`,包含:
|
||||
|
||||
- 修改/移动的文件
|
||||
- 归档依据或 blocker
|
||||
- 未完成项
|
||||
- 需要 Codex 复核的点
|
||||
@@ -0,0 +1,66 @@
|
||||
# Reasonix Browser Test: Batch A3 task474 Local Folder Empty Trash UI
|
||||
|
||||
项目根目录:`/mnt/Data1T/mnote`
|
||||
|
||||
请先阅读并遵守:`/home/lix/.codex/skills/reasonix-browser-tester/SKILL.md`
|
||||
|
||||
## 角色
|
||||
|
||||
你是浏览器测试员,不是代码修改员。
|
||||
|
||||
禁止修改源码、禁止 git commit、禁止回滚文件。只允许创建测试输出目录、临时测试数据、截图和测试结果文件。
|
||||
|
||||
## 测试目标
|
||||
|
||||
验证 `task474-local-folder-empty-trash-ui-smoke.js` 在当前最新 `mnote-web` 上覆盖 local folder 垃圾箱清空 UI:
|
||||
|
||||
- 清空页面垃圾箱按钮可点击并触发 confirm。
|
||||
- 清空后 Markdown trash row 消失。
|
||||
- 清空资源垃圾箱按钮可点击并触发 confirm。
|
||||
- 清空后资源 trash row 消失。
|
||||
- 两次清空操作都不触发非预期 main frame navigation。
|
||||
- `trash-index.json` 最终为空,trash 文件已删除。
|
||||
|
||||
## 前置
|
||||
|
||||
- 被测入口:`http://127.0.0.1:3014`
|
||||
- 3014 是 Codex 为本轮验证启动的最新 mnote-web 临时进程。
|
||||
- 使用真实浏览器或 Playwright。
|
||||
- 使用全新的 isolated browser context / userDataDir;测试开始前清空 cookies、localStorage、sessionStorage、IndexedDB、Cache Storage。
|
||||
|
||||
## 操作
|
||||
|
||||
1. 运行:
|
||||
|
||||
```bash
|
||||
cd /mnt/Data1T/mnote
|
||||
node --check scripts/task474-local-folder-empty-trash-ui-smoke.js
|
||||
MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3014 PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable MNOTE_KEEP_SMOKE_TMP=1 node scripts/task474-local-folder-empty-trash-ui-smoke.js
|
||||
```
|
||||
|
||||
2. 读取 `tmp/task474-local-folder-empty-trash-ui-smoke/result.json`。
|
||||
3. 打开 result 中的 `root` 对应 `/trash?sourceKind=local_folder&rootUri=file://...` 页面,截图清空后的 trash workbench 状态。
|
||||
4. 记录:
|
||||
- `ok`
|
||||
- `emptyDocuments.navDelta`
|
||||
- `emptyResources.navDelta`
|
||||
- `emptyDocuments.mdEntryClean`
|
||||
- `emptyResources.assetEntryClean`
|
||||
- `steps.length`
|
||||
- 最终页面是否显示页面垃圾箱 / 资源垃圾箱为空状态或对应按钮 disabled
|
||||
|
||||
## 输出目录
|
||||
|
||||
`/mnt/Data1T/mnote/tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/`
|
||||
|
||||
必须输出:
|
||||
|
||||
- `result.json`
|
||||
- `final.md`
|
||||
- 至少 1 张截图;失败时必须截图。
|
||||
|
||||
## 判定
|
||||
|
||||
- `PASS`:语法检查和 smoke 实跑 exit 0,`result.json.ok=true`,两个 navDelta 都为 0,页面与资源 entry 均清理,且截图显示清空后的 trash workbench。
|
||||
- `FAIL`:脚本退出非 0,或 no-navigation / entry 清理 / UI 清空断言失败。
|
||||
- `BLOCKED`:3014 不可达或浏览器无法启动。
|
||||
@@ -0,0 +1,103 @@
|
||||
# Batch A3 Worker A:local folder empty-trash UI smoke
|
||||
|
||||
> 更新时间:2026-05-22
|
||||
> 任务:`task474-local-folder-empty-trash-ui-smoke`
|
||||
|
||||
## 修改文件
|
||||
|
||||
| 文件 | 操作 |
|
||||
|------|------|
|
||||
| `scripts/task474-local-folder-empty-trash-ui-smoke.js` | 新增 |
|
||||
| `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md` | 更新验收矩阵、执行记录、边界和完成标准 |
|
||||
| `.codex/reasonix-tasks/results/batch-a3-worker-a-empty-trash.md` | 本文件 |
|
||||
|
||||
## Smoke 覆盖内容
|
||||
|
||||
### 测试场景
|
||||
|
||||
- **临时 local folder root**:创建松散 Markdown 页面 (`docs/test-page.md`) 和非 md 资源 (`docs/resource.txt`)
|
||||
- **归档到垃圾箱**:通过 `POST /api/tree/commands` 将两个条目都 `delete` 进入 `.mnote/trash/`
|
||||
- **打开 trash 页**:`/trash?sourceKind=local_folder&rootUri=file://...`
|
||||
- **清空页面垃圾箱**:
|
||||
- 点击 `data-trash-action="local-empty-documents"` 按钮
|
||||
- accept `window.confirm('清空后无法恢复,确定继续吗?')`
|
||||
- 断言:MD trash row 消失、资源行仍然存在、`trash-index.json` 中 MD entry 删除、trash 文件删除、按钮变为 disabled
|
||||
- 导航断言:全程 `framenavigated` delta = 0
|
||||
- **清空资源垃圾箱**:
|
||||
- 点击 `data-trash-action="local-empty-resources"` 按钮
|
||||
- accept confirm dialog
|
||||
- 断言:资源 trash row 消失、`trash-index.json` 中资源 entry 删除、trash 文件删除、按钮变为 disabled
|
||||
- 导航断言:全程 `framenavigated` delta = 0
|
||||
- **最终验证**:`trash-index.json` 为空、原始源文件未恢复
|
||||
|
||||
### 关键选择器
|
||||
|
||||
| 元素 | 选择器 |
|
||||
|------|--------|
|
||||
| Trash workbench | `[data-testid="mnote-trash-workbench"][data-trash-source-kind="local_folder"]` |
|
||||
| 清空页面垃圾箱 | `[data-trash-action="local-empty-documents"]` |
|
||||
| 清空资源垃圾箱 | `[data-trash-action="local-empty-resources"]` |
|
||||
| MD trash row | `article[data-trash-row="local"][data-trash-entry-id="local-md:docs~2Ftest-page.md"]` |
|
||||
| Asset trash row | `article[data-trash-row="local"][data-trash-entry-id="local-file:docs/resource.txt"]` |
|
||||
| Confirm 文本 | `'清空后无法恢复,确定继续吗?'` |
|
||||
|
||||
### 数据流
|
||||
|
||||
```
|
||||
postTreeCommand(delete, "local-md:docs~2Ftest-page.md")
|
||||
→ tree.resource.archive → 文件移至 .mnote/trash/ → trash-index.json 记录
|
||||
postTreeCommand(delete, "local-file:docs/resource.txt")
|
||||
→ tree.resource.archive → 文件移至 .mnote/trash/ → trash-index.json 记录
|
||||
→ 打开 /trash → 两行可见
|
||||
→ 点击 empty-documents → confirm.accept → Promise.all(rows.map purge) → refresh() (fetch+DOMParser)
|
||||
→ MD 行消失,按钮 disabled,trash-index 清理,trash 文件删除,framenavigated=0
|
||||
→ 点击 empty-resources → confirm.accept → Promise.all(rows.map purge) → refresh()
|
||||
→ 资源行消失,按钮 disabled,trash-index 为空,trash 文件删除,framenavigated=0
|
||||
```
|
||||
|
||||
## 验证命令和结果
|
||||
|
||||
```bash
|
||||
# 语法验证
|
||||
node --check scripts/task474-local-folder-empty-trash-ui-smoke.js
|
||||
# → exit 0
|
||||
|
||||
# Codex 复核:最新 mnote-web 临时端口 3014 + Chromium 实跑
|
||||
MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3014 \
|
||||
PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable \
|
||||
node scripts/task474-local-folder-empty-trash-ui-smoke.js
|
||||
# → exit 0
|
||||
# → 写入 tmp/task474-local-folder-empty-trash-ui-smoke/result.json
|
||||
```
|
||||
|
||||
Codex 复核结果:
|
||||
|
||||
- `result.json.ok=true`
|
||||
- `emptyDocuments.navDelta=0`
|
||||
- `emptyResources.navDelta=0`
|
||||
- `emptyDocuments.mdEntryClean=true`
|
||||
- `emptyResources.assetEntryClean=true`
|
||||
- `steps.length=5`
|
||||
|
||||
Reasonix Browser Worker 也已独立复测,输出:
|
||||
|
||||
- `tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/result.json`
|
||||
- `tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/trash-workbench-empty.png`
|
||||
- `tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/trash-workbench-ui.png`
|
||||
|
||||
## 更新到 4-34 的内容
|
||||
|
||||
1. **验收矩阵**:local folder Markdown 和 local folder 非 md 资源两行的 empty-trash 列已从 `❌ 未覆盖` 改为 `✅ task474 UI empty-trash`
|
||||
2. **执行记录**:在 3.5 末尾追加 task474 的覆盖说明
|
||||
3. **当前边界**:补充 task474 覆盖的 empty-trash 项
|
||||
4. **完成标准**:local folder 子项增加 `474`
|
||||
|
||||
## 未完成项 / 风险
|
||||
|
||||
| # | 项 | 状态 | 说明 |
|
||||
|---|-----|------|------|
|
||||
| 1 | bundled Markdown empty-trash | ❌ 未覆盖 | task474 只验证了松散 `.md` 的 empty-trash;bundled Markdown page(目录含 `Page.md`)未覆盖。empty-trash 操作通过 `data-resource-kind="markdown"/"markdown_bundle"` 选择器选择行,理论上 bundled Markdown 也会被选中,但未实地验证 |
|
||||
| 2 | 双浏览器 empty-trash 实时性 | ❌ 未验证 | task474 是单浏览器 UI smoke(A 浏览器操作 + 断言)。B 浏览器不刷新可见更新(Convex 双浏览器矩阵)未覆盖。当前 local folder trash 的 `refresh()` 只刷新 A 浏览器自身 DOM,`tree:delta resync_required` 事件不推送跨浏览器 |
|
||||
| 3 | 3000 未重新编译 | ✅ 已处理 | Codex 已在最新临时端口 `3014` 实跑通过 |
|
||||
| 4 | GitHub 资源空 trash 后按钮状态 | ✅ 已验证 | 脚本断言清空后按钮变为 disabled |
|
||||
| 5 | 大文件 empty-trash | ❌ 未验证 | 脚本仅用了几 KB 的小文件;大 trash 数量的 `refresh()` 性能未覆盖 |
|
||||
@@ -0,0 +1,60 @@
|
||||
# Batch A3 Worker B — Local folder Markdown trash lifecycle smoke
|
||||
|
||||
## 修改文件
|
||||
|
||||
| 文件 | 操作 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js` | 新增 | loose Markdown 页面的 delete/restore/delete+purge 完整生命周期 smoke |
|
||||
| `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md` | 修改 | 更新验收矩阵、审计结论、执行记录、边界和完成标准 |
|
||||
|
||||
## Smoke 覆盖内容
|
||||
|
||||
- **测试对象**:loose Markdown 页面(非 bundle 目录形式),`docs/test-page.md`
|
||||
- **documentId 格式**:`local-md:docs~2Ftest-page.md`
|
||||
- **API 路径**:`POST /api/tree/commands` with `sourceKind: "local_folder"`
|
||||
- **5 个步骤**:
|
||||
1. `delete` → 源 `.md` 消失,`.mnote/trash` 出现对应文件,`trash-index.json` 记录 `local-md:*` entry
|
||||
2. `restore` → `.md` 回原路径(内容不变),trash 文件消失,index 清理
|
||||
3. 再次 `delete` → 同步骤 1,验证可重复
|
||||
4. `purge` → 源路径与 trash 路径均不存在,index 清理
|
||||
5. 重建后 delete+purge 周期 → `trash-index.json` 仍为合法 JSON
|
||||
|
||||
## 当前实现观察
|
||||
|
||||
- `trash_local_markdown_page` 响应**不包含** `canonicalCommand` 字段(与 `trash_local_raw_file` / `trash_local_directory` 不同,后两者返回 `"canonicalCommand": "tree.resource.archive"`)
|
||||
- `restore_local_markdown_page` 响应包含 `previousDocumentId`、`relativePath`、`documentId`
|
||||
- `purge_local_markdown_page` 响应包含 `ok: true`
|
||||
|
||||
## 未覆盖:bundled Markdown
|
||||
|
||||
bundled Markdown(页面目录形式,含 `Page.md` + 资源文件)未在 smoke 中覆盖,原因:
|
||||
|
||||
- `trash_local_markdown_page` 会将 bundle 目录整体移入 trash(`resourceKind: "markdown_bundle"`),涉及目录遍历和子文件处理
|
||||
- `restore_local_markdown_bundle` 路径还原有额外逻辑(同名冲突处理等)
|
||||
- Rust 单测已覆盖:
|
||||
- `local_tree_command_manages_loose_markdown_like_regular_file`(loose rename/copy/delete/restore)
|
||||
- `local_tree_command_delete_page_bundle_directory_uses_page_trash`(bundle delete/restore)
|
||||
- `local_tree_command_delete_local_file_id_uses_trash_index`(local file trash/restore/purge)
|
||||
- `local_tree_command_delete_chinese_named_asset_in_subdir_uses_trash_index`(中文资源名 trash 周期)
|
||||
|
||||
bundled Markdown case 可在后续独立编写——需构造含 `Page.md` 和附件的页面目录,验证 bundle 整体移入/移出 trash。
|
||||
|
||||
## 验证命令和结果
|
||||
|
||||
```bash
|
||||
# 语法检查
|
||||
node --check scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js # exit 0
|
||||
|
||||
# 运行 smoke(需要 mnote-web 在 3000 运行)
|
||||
node scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
|
||||
# 输出: task475 local folder Markdown trash lifecycle smoke passed
|
||||
# result: tmp/task475-local-folder-markdown-trash-lifecycle-smoke/result.json
|
||||
```
|
||||
|
||||
## 风险
|
||||
|
||||
| 风险 | 说明 |
|
||||
| --- | --- |
|
||||
| canonicalCommand 缺失 | loose Markdown 的 `delete`/`restore`/`purge` 响应不含 `canonicalCommand`,与非 md 资源 lifecycle 响应不一致。如果未来统一添加,smoke 需同步更新。 |
|
||||
| trash 文件名冲突 | `next_available_path` 使用 file_stem_title 生成文件名,同名文件会附加序号(如 `test-page 2.md`)。smoke 中的路径 `trash/test-page.md` 在当前实现下恰好是单文件场景,若后续并行场景新增同名文件会冲突——但 smoke 每次使用独立 temp dir,不受影响。 |
|
||||
| API 响应结构变动 | smoke 依赖 `result.result?.execution` 的 JSON 路径,若 `json_response` 包装层变动需同步更新。 |
|
||||
@@ -0,0 +1,29 @@
|
||||
# Batch A3 Worker C — 4-34 / 4-46 / 4-47 归档审查
|
||||
|
||||
## 结论
|
||||
|
||||
Codex 已完成 Worker C 归档审查,`4-34`、`4-46`、`4-47` 均满足归档条件并移动到 `design/04-tree-domain/done/`。
|
||||
|
||||
## 移动文件
|
||||
|
||||
| 来源 | 目标 |
|
||||
| --- | --- |
|
||||
| `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md` | `design/04-tree-domain/done/4-34-filetree-trash-dual-browser-no-refresh-v1.md` |
|
||||
| `design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md` | `design/04-tree-domain/done/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md` |
|
||||
| `design/04-tree-domain/process/4-47-batch-a3-local-folder-trash-final-smoke-checklist-v1.md` | `design/04-tree-domain/done/4-47-batch-a3-local-folder-trash-final-smoke-checklist-v1.md` |
|
||||
|
||||
## 归档依据
|
||||
|
||||
- `task474-local-folder-empty-trash-ui-smoke.js` 通过,覆盖 local folder 页面垃圾箱与资源垃圾箱清空 UI。
|
||||
- `task475-local-folder-markdown-trash-lifecycle-smoke.js` 通过,覆盖 loose Markdown 页面 delete / restore / purge 生命周期。
|
||||
- Codex 在最新临时 `mnote-web` `http://127.0.0.1:3014` 上独立复跑 `task474` / `task475` 均通过。
|
||||
- Reasonix Browser Worker 复测 `task474` 并输出截图:
|
||||
- `tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/result.json`
|
||||
- `tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/trash-workbench-empty.png`
|
||||
- `tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/trash-workbench-ui.png`
|
||||
- `4-28`、`4-44`、`4-45` 已在前序 Batch A/A2 归档,`4-46` 的 Batch A P0 目标已闭环。
|
||||
|
||||
## 保留边界
|
||||
|
||||
- bundled Markdown 目录形式未新增 JS smoke,但已有 Rust 单测覆盖;后续如要补浏览器矩阵,应另开小 checklist。
|
||||
- local folder 的跨浏览器实时推送不是本批目标;本批验证的是 local-first trash workbench 的 UI 清空与 no-navigation 行为。
|
||||
Reference in New Issue
Block a user