# 3-15 [done] 垃圾箱 workbench 残留 `pollMs=1000` 触发 Convex query 风险

> 创建时间：2026-05-17
>
> 更新时间：2026-05-17
>
> 状态：`done`

## 问题

主页面树实时链路已在 `57ec8322` 切到 WebSocket push，但 `/trash` 渲染的垃圾箱 workbench 仍创建 `EventSource('/api/tree/events')` 并显式设置 `pollMs=1000`。

这条路径不是首页主链路，但用户打开垃圾箱页面或弹窗后，仍可能把 `/api/tree/events` 带回 1 秒轮询语义，重新放大 Convex `POST /api/query` 压力。

## 处理方案

1. 为 `/trash` 渲染测试增加断言：垃圾箱 workbench 不得输出 `pollMs=1000`。
2. 修改垃圾箱 workbench 事件订阅，移除显式 `pollMs=1000`。
3. 保留 `EventSource('/api/tree/events')` 作为兼容刷新通道，让 Rust SSE route 使用当前 push-driven 默认行为。
4. 运行 `mnote-web` 相关单测，确认渲染输出不再包含旧轮询参数。

## 处理结果

- 已移除 `rust/crates/mnote-web/src/routes/gateway.rs` 中垃圾箱 workbench 的 `url.searchParams.set('pollMs', '1000')`。
- 已保留 `/api/tree/events` 事件通道，避免破坏垃圾箱打开后根据 tree event 刷新的兼容行为。
- 已增加测试断言，确保 `/trash?workspaceId=...` HTML 不再输出 `pollMs`。

## 验证

```bash
cargo test --manifest-path rust/Cargo.toml -p mnote-web routes::gateway::tests::trash_entry_renders_real_workspace_trash_workbench -- --nocapture
```

结果：`1 passed`。

```bash
cargo test --manifest-path rust/Cargo.toml -p mnote-web routes::gateway::tests:: -- --nocapture
```

结果：`18 passed`。

```bash
cargo test --manifest-path rust/Cargo.toml -p mnote-web routes::sse::tests::live_poll_query_drops_bridge_pagination_cursor -- --nocapture
cargo test --manifest-path rust/Cargo.toml -p mnote-web routes::sse::tests::sse_route_returns_workspace_snapshot_event -- --nocapture
```

结果：两个 SSE 单测均 `1 passed`。

## 备注

整组 `routes::sse::tests::` 批量运行时，两个长连接流测试超过 60 秒未自然结束，已中断；本次改动未触碰 SSE route 行为，已用相关短测试和 `gateway` 渲染测试覆盖本缺陷。
