新增 src/debug.rs:/debug/ping、/config、/redis、/jmap、/telegram、/worker 六个只读 探针 + POST /debug/notify 一条测试出站消息。 SAF-DEBUG-GATE 双因子,缺任一即完全不挂载路由(请求落到通用 404,无"未配置即放行" 降级): - 启动命令带 --debug(main.rs 最小 std::env::args 解析,未新增依赖) - Secret 环境变量 DEBUG_TOKEN 非空 两层执行点:main.rs 推导 debug_token 并传入 router builder(None 则 debug_router 不被 merge);debug.rs 侧 auth_token 缺失时直接返回空 Router。 SAF-DEBUG-AUTH:每个 handler 先做 Authorization: Bearer DEBUG_TOKEN 常数时间比较 (复用 worker_authorized),失败 401,鉴权通过前不产生任何副作用。 探针只读侧全部复用现成实现,不另写一套:Redis 走 is_enabled,JMAP 走 probe_jmap_session,Telegram 走 probe_telegram_get_me,出站走唯一构造点 business_client(notify.rs 新增 pub(crate))到 send_text,/debug/notify 与 refresh_business_config 共用同一条客户端构造路径。 SAF-NO-SECRET-ECHO / SAF-LOG-PURITY:/debug/config 只回"是否配置"、计数与超时等 运行时参数,bot token / JMAP password / worker / webhook / reconcile token / LLM key 一律不出现在响应体;DEBUG_TOKEN 只在鉴权内部暴露,不回显、不入日志,日志仅一条 "debug endpoints enabled" 且不含令牌值。allowlist 用 chat_allowlist_snapshot 取生效值 (运行时业务配置优先、否则启动值),/debug/notify 显式 chat_id 不在 allowlist 则 403。 ARCH-LB-WORKER 白名单不含 /debug/*,该面仅供直连 origin 联调,公网入口不可达。 AGENTS.md 登记 4 个稳定 ID:MOD-DEBUG / SAF-DEBUG-GATE / SAF-DEBUG-AUTH / REQ-DEBUG-ENDPOINTS(§2 第 19 条硬边界、§5 测试条、§7 索引 4 行)。 调试路由测试(4 项,notify.rs + debug.rs 内):Bearer 放行 200、缺失/错误令牌 401、 未提供 DEBUG_TOKEN 因子时 /debug/* 完全不注册而落 404、/debug/notify POST 未认证 401。 门禁四段全绿(rust:1-slim-bookworm):cargo fmt --all -- --check / cargo check --locked / cargo clippy --locked --all-targets -- -D warnings / cargo test --locked = 49 passed / 0 failed / 1 ignored。 |
||
|---|---|---|
| .. | ||
| domain | ||
| ai.rs | ||
| channel.rs | ||
| config.rs | ||
| debug.rs | ||
| domain.rs | ||
| error.rs | ||
| main.rs | ||
| notify.rs | ||
| state.rs | ||
| web.rs | ||
| worker.rs | ||