diff --git a/docs/design.md b/docs/design.md index 4d0e67b..932c579 100644 --- a/docs/design.md +++ b/docs/design.md @@ -346,7 +346,7 @@ message-weave/ | `web` | axum | `/config` 静态页 + `include_str!` 嵌入 + CSP | 前端由 `web/config.test.mjs` 覆盖 | 已实现 | | `debug` | reqwest 0.13;redis 0.27 | 远端诊断面 `/debug/*`(`src/debug.rs`):6 条只读探针 `/debug/ping`、`/debug/config`、`/debug/redis`、`/debug/jmap`、`/debug/telegram`、`/debug/worker` + `POST /debug/notify`(走生产出站路径发一条测试消息,无独立实现) | 仅 `DEBUG_ENABLED`(或 `--debug`)+ `DEBUG_TOKEN` 双因子齐备时挂载路由;模块本身无条件编译 | 已实现,不进 Worker 白名单(`SAF-DEBUG-ORIGIN-ONLY`) | -> 注:「现状」列是**模块级**口径(模块已落地),不代表行为完备。行为级缺口不在本表内:`docs/opengaps.md`「代码缺口」中 `/search`、Telegram 429 退避、多实例重复投递窗口均已实现,仅剩 1 条按产品决策保留不改(`SAF-DEBUG-ALLOWLIST`)。`worker` 模块的 `/search` 路径已随 `bfe0fd8` 落地。 +> 注:「现状」列是**模块级**口径(模块已落地),不代表行为完备。行为级缺口不在本表内:`/search`、Telegram 429 退避、多实例重复投递窗口均已实现。此前记录的唯一一条产品决策项 `SAF-DEBUG-ALLOWLIST`(`POST /debug/notify` 在空白名单时不拦截任意 `chat_id`)已于 2026-09-29 按风险接受关闭并移出 `docs/opengaps.md`——其暴露面由 `SAF-DEBUG-GATE` 双因子挂载与 Worker 路由 safelist 共同约束,行为与残余风险(直连后端 origin 可同时绕过这两层)见 `docs/deployment.md` §2.1 与 `docs/design.md` §7.6。`worker` 模块的 `/search` 路径已随 `bfe0fd8` 落地。 --- diff --git a/docs/opengaps.md b/docs/opengaps.md index bae08d4..c504122 100644 --- a/docs/opengaps.md +++ b/docs/opengaps.md @@ -13,7 +13,6 @@ | 3 | 回调公网映射 | 你 | 只回答一个问题:用哪个组件做映射 | | 4 | `Email/changes` 的 `newState` 语义 | 你 + 我 | 腾一次停机窗口 | | 5 | 单飞锁 TTL 实测 | 我 | 不需要的,依赖 #2 成功后我自己跑 | -| 6 | 允许名单收紧 | 你 | 仅当你要收紧时改业务配置,代码不用动 | ## 阶段目标 @@ -94,12 +93,6 @@ TTL 参数已在代码里写死、单测也已覆盖,但真实场景下的实 我来做的:恢复后跑 `POST /reconcile`,再看 `/debug/worker` 的 `reconcile_cursor`。预期是重新变成一个**新的 `baseline:` 游标**(重新基线化成功),而不是报错或停在旧游标。实测语义回填本节。 -## 代码缺口(已定位) - -仅 1 条,按产品决策保留不改——**这不是待修项,也不需要你做任何事**。 - -- **`SAF-DEBUG-ALLOWLIST`** — `POST /debug/notify` 的收件人校验在允许名单为空时**无条件放行**任意 `chat_id`(`src/debug.rs:233-235`:`!allowlist.is_empty() && !allowlist.contains(&chat_id)`)。空名单即「未启用收紧」,是刻意行为。要收紧:在业务配置里把允许名单填上,代码不用改。要改代码:先推翻这个决策。 - ## 后续(多账号) 单账号由产品决策固定,不在阶段目标内。当前 JMAP 登录与 `Email/query` 均为单一邮箱账号。