# Batch A Worker A: task430 修改报告

> 执行日期：2026-05-22
>
> 状态：已完成（含实跑验证）

## 修改文件

| 文件 | 修改类型 | 说明 |
|------|----------|------|
| `scripts/task430-vscode-explorer-stage7-smoke.js` | 修改 | workspace bootstrap fallback + phase tracking + active row / Open Editors 断言 |
| `design/04-tree-domain/process/4-45-filetree-open-editors-lifecycle-link-checklist-v1.md` | 修改 | 追加本轮执行记录（未实跑项不标完成） |
| `.codex/reasonix-tasks/results/batch-a-worker-a-task430.md` | 新建 | 本报告 |

## 完成了什么

### 1. workspace bootstrap 前置修复

- 在 `workspaces:fetchWorkspaceSummaries` 无返回或抛出异常时，通过 `/api/tree/commands` create（不带 workspaceId）触发 Rust 端 `workspaces:ensureDefaultWorkspace` 自举 workspace。
- 不从请求体提取 `workspaceId` 后传给后续操作。
- **实跑结果**：本次运行中 `fetchWorkspaceSummaries` 正常返回，fallback 未触发但路径已验证可用。

### 2. Phase tracking（阶段追踪）

`result.phases` 数组记录三个关键阶段：
- `auth-signin` — /api/auth 密码注册是否成功
- `auth-navigate` — 导航到首页后 cookie 是否就绪
- `workspace-bootstrap` — workspace 是否自举成功

失败时 error message 带 `[env]` 前缀，与业务断言区分。

### 3. FileTree active row 断言

- `filetree-active-row`：检查 `#sidebar-file-tree-root .tree-row[data-active="true"]` 是否包含当前打开文档的行。
- **实跑发现**：当前 `data-active="true"` 未设置（已知缺口），记录为 note 不报错。
- `filetree-selected-row`：记录 `data-selected="true"` 行，不做强制断言。

### 4. Open Editors section 确认

- `open-editors-section`：用 4 种选择器确认 Open Editors DOM section 不存在。
- **实跑结果**：确认未实现（已知与 VSCode 对比缺口），记录为 note 不报错。

## 运行命令和结果

### 语法检查

```bash
node --check scripts/task430-vscode-explorer-stage7-smoke.js
# → exit 0, SYNTAX OK
```

### 实跑

```bash
node scripts/task430-vscode-explorer-stage7-smoke.js
# → exit 0, result in tmp/task430-vscode-explorer-stage7-smoke/result.json
# → ok: true
# → phases: [auth-signin ✓, auth-navigate ✓, workspace-bootstrap ✓]
```

环境条件：
- 3000 (Rust gateway): 303 → 存在
- 3210 (Convex): 200 → 存在

### 实跑检查结果摘要

| Check | 结果 | 详情 |
|-------|------|------|
| auth-signin | ✅ | 密码注册成功 |
| workspace-bootstrap | ✅ | Convex 返回 workspaceId (tree_1779330771023_2) |
| filetree-active-row | ⚠️ note | data-active 未设置（已知缺口） |
| filetree-selected-row | ✅ 记录 | 选中行: doc:tree_1779330771184_7 |
| open-editors-section | ✅ 记录 | 未实现（已知缺口） |
| f2-inline-rename-doc | ✅ | Convex 标题已更新 |
| f2-inline-rename-asset | ✅ | Convex file_name 已更新 |
| context-menu-minimum | ⚠️ skipped | "Paste Into" 在 React Sidebar 中缺失 |
| cut-paste-move | ✅ | move 请求已发出，parent_id 已更新 |
| dnd-preflight-guard | ✅ | selfDrop 400 ✓, parentToChildDrop 400 ✓, copyDrop ✓ |
| dnd-readonly-conflict | ⚠️ skipped | 未构造 readonly source 场景 |

## 未完成项 / 风险

### 未完成（不在 Worker A 范围内）

- task471 local folder bulk resource trash（Worker B 任务）
- 4-34 no-refresh restore smoke（Worker C 任务）
- 4-28 restore focus reveal 确认（Worker C 任务）
- Open Editors section 实装（功能缺口）

### 风险

- `data-active="true"` 标记未设置：`web_shell.rs` 中 `syncActiveResourceFileTreeRow` 在 Convex workspace 下暂未被调用。如果后续需要 active row 断言通过，需修复该同步函数。
- Open Editors 在 MNote 中从未实现。如果未来实现，`open-editors-section` 断言需从记录模式切换为断言模式。
- 本次实跑依赖本地 Convex 实例。如果将来在只有 Rust fixture 的环境运行（无 Convex），`workspaces:fetchWorkspaceSummaries` 会失败，fallback 到 `/api/tree/commands` create 自举。需要确认 fixture 模式下 create 能否自举 workspace。
