MessageWeave/docs/todo.md

35 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 未完成项与阻塞原因
> 本文件取代已删除的根目录 `HANDOFF.md`。只保留未完成项与阻塞原因;已完成能力见 `README.md`、`docs/design.md`、`docs/deployment.md`。门禁命令见 `docs/deployment.md` §8.0。
## 阻塞(需要真实环境,当前无法验证)
- **真实 Stalwart 邮箱联调**:未运行任何真实邮箱端到端集成。JMAP 客户端代码与配置校验已完成并通过本地 `cargo test`,但 `Email/changes`、`PushSubscription` 等路径没有用真实邮箱账号验证过。→ 阻塞原因:无可用 Stalwart 账号/凭据,禁止使用测试账号或伪造结果。
- **真实 Telegram Bot 联调**:`/webhook/tg` 的签名校验、`getUpdates` 迁移、`setWebhook` 注册、`sendMessage` 出站均未在真实 Bot 上验证。→ 阻塞原因:无 Bot Token,禁止向真实用户发消息。
- **真实 Redis TLS 连接**:`REDIS_URL` 使用 `rediss://` 的 TLS 握手、密码特殊字符 URL 编码、`CONFIG_ENCRYPTION_KEY` 热更新均未实测。→ 阻塞原因:无 Upstash/托管 Redis 实例。
- **`Email/changes` 的 `newState` 语义**(design.md §10.5.1 应修-1):客户端已用「同 `sinceState` 翻倍 `maxChanges` 扩窗」消除按页漏批,但 `newState` 是否表示"全部待报变更之后"仍需真实 Stalwart 复验,否则停机积压边界无法判定。→ 阻塞原因:无可用 Stalwart 账号/凭据。
- **Push callback 公网映射**:`push:registration` 注册锁(360s)与 callback 映射(7d)TTL 依赖真实 Stalwart 的回调时序。→ 阻塞原因:无真实推送回调可观察。
## 代码缺口(已定位,待实现)
- **Redis 错误映射**:`read_batch` 与 `retry_or_dlq` 在 Redis 出错时仍可能返回 `Ok(())`,消费循环不会因单次失败退出,这类故障只能靠 Redis 侧告警发现(可选改进)。
- **多实例重复投递窗口(残余)**:XAUTOCLAIM 空闲阈值已按批大小缩放(批大小 × 单条上限 300s);仅当单条事件处理耗时接近 300s 上限时,多实例部署下另一实例仍可能提前认领(仅重复不丢),单实例不受影响。
- **Worker safelist 与注册流程不一致**:`POST /api/push/register` 不在 `cloudflare-worker/src/backends.js` 的 `SAFE_ROUTES` 中,Worker 对其返回 404;`docs/deployment.md` §10.4 已修正为直连后端实例。→ 待决策:加入 safelist,或保持直连后端。
## 未排期(阶段 5「搜索 + 搜索片段 + 打磨」)
- `/search` + `SearchSnippet/get` 高亮。
- 错误消息打磨、速率/退避实测、`clippy`/`fmt`、README 复核。
## 监控验收(Q-DEP-B)
- 容器不写日志文件、只走 stdout,已由 `docker`/`docker-compose.yml` 检查项覆盖。
- 业务事件、计数、时间戳、脱敏摘要的结构化日志已由代码审查确认。
- 未验证项:真实平台的日志采集器是否落盘、是否可检索。**→ 阻塞原因:Q-DEP-B 明确允许延后到真实部署验收。**
## 本轮已收口(2026-09-26)
- **错误 envelope 统一**:全部公开写路由错误响应改为 `{"error":<code>,"request_id":<id>}`,可重试的 503 追加 `Retry-After: 30`;`GET /ready` 保留结构化诊断 JSON(Uptime Kuma 运行契约),不改 envelope。
- **Web SPA i18n**:按浏览器语言判断 `zh`/`en`,默认英文,保持纯静态 SPA(`data-i18n` 属性 + 内联消息字典,无新增资源文件)。
- **文档**:`README.md` 改英文默认,新增 `README.zh-CN.md`,两版章节与关键事实 1:1 对齐;`docs/design.md`、`docs/deployment.md`、`AGENTS.md` 同步修正滞后描述。