0042519f66
【触发】 2026-08-12 09:00 早班巡检:jumpserver-V2 容器内 `python urllib` 绕开 nginx 直测 FastAPI(backend:8000): - /test-ping 200 pong - /test-error 200 "服务器内部错误" - /version 200 1.1.0(含 git hash) - /openapi.json 404(P0-NEW11 已闭环) 真实风险:公网 404 全部依赖 nginx 边缘层兜底;若 nginx 配置被误改 / 失效 / 容器间网络可达 backend:8000,攻击者可拿到 3 个调试端点。 【修复(v1.0 + v1.1 二次修复)】 1. 新建 src/backend/app/api/debug.py 集中 3 个调试端点(/api/debug/ping /error /version),加双重门控: - 模块级:main.py `if _is_dev_mode():` 块内 include_router(debug_router) - 端点级:每个端点内部 _is_dev_mode() 二次校验(防 fail-open) 2. 删除 main.py 散落的 /test-ping /test-error /version 3. debug.py 的 _is_dev_mode() 委托 main.py:48 单一真源(避免三处定义漂移) 4. 【v1.1 二次修复】_is_dev_mode() / _dev_mode_enabled() 改为 app_env 优先: - 优先级 1: app_env=="production" → 永远 False(即使 DEV_MODE=true) - 优先级 2: 非 production → 看 DEV_MODE / settings.dev_mode 同步修复 main.py + dev_auth.py(两个独立实现不能漏一处) 5. tests/conftest.py enable_dev_mode fixture 同步设 APP_ENV=development (避免 dev 测试 case 因 app_env 默认 production 而 fail) 【验证(公网 + 容器内)】 - 公网 12 端点:3 旧端点 404 + 3 新端点 404 + 3 dev 403(nginx IP 白名单)+ 1 health 200 + 3 P0-NEW11 404 ✅ - 容器内直连 backend:8000 6 端点:100% 4xx ✅(用户原话真实风险场景) - 回归测试 10 passed + 1 skipped(psutil 缺包) 【部署】 jumpserver-V2 PSFTP + sudo cp + chown admin:admin + 清理 __pycache__ + docker restart wecom_it_backend v1 部署:10:48 v2 部署:10:55(app_env 优先修复后) 【关联】 - 缺陷单:docs/03-测试文档/05-缺陷单/BUG-安全-005-调试端点无门控-001.md - 看板:项目状态看板 v1.9.7-DRAFT P0-NEW12 ✅ 已修复 - 工作日志:.workbuddy/memory/2026-08-12.md - MEMORY 铁律:.workbuddy/memory/MEMORY.md「调试端点铁律」5 条
05-缺陷单
目录定位: 本目录归
03-测试文档/下,专门承载 BUG 缺陷单据。 规范依据:docs/00-产品开发流程与文档管理规范.md§ 2.2、§ 12
一、目录说明
缺陷单(BUG)是质量验证(阶段 4)的核心产出之一(spec § 1.1),承担"问题发现 → 根因分析 → 修复 → 验证 → 关闭"的闭环职责。
| 项目 | 说明 |
|---|---|
| 目录归属 | 03-测试文档/05-缺陷单/(不在 07-项目管理/,因为项目管理范畴只包含任务说明书/迭代/会议/看板) |
| 命名规范 | BUG-{模块}-{描述}-{序号}.md,符合正则 ^BUG-.*-\d+\.md$ |
| 模块取值 | AI / 会话 / 坐席 / 用户 / 审批 / 知识 / 集成 / 运维 / 通用 |
| 必备章节 | 基本信息 / 复现步骤 / 根因分析 / 修复方案 / 验证结果 / 关联信息 / 变更记录 |
| 头部模板必填 | 缺陷编号 / 版本 / 状态 / 优先级 / 日期 / 人员 |
二、缺陷状态
| 状态 | 标记 | 说明 |
|---|---|---|
| 待处理 | [待处理] | 缺陷已确认,待指派 |
| 进行中 | [进行中] | 正在修复中 |
| 已修复 | [已修复] | 代码已修复,待验证 |
| 已验证 | [已验证] | 验证通过,缺陷关闭 |
| 已关闭 | [已关闭] | 缺陷修复并验证完成 |
| 延期 | [延期] | 暂不处理,推迟 |
| 无法复现 | [无法复现] | 无法复现,关闭 |
完整优先级与处理流程参考 spec.md § 12.2 / § 12.3。
三、当前缺陷清单(2026-07-28 维护)
| 缺陷编号 | 标题 | 状态 | 优先级 | 发现日期 | 关联需求 |
|---|---|---|---|---|---|
| BUG-AI-001 | 打印机安装路由错误 | [已修复] | P2-Medium | 2026-07-20 | REQ-AI-路由 |
| BUG-坐席-001 | 图片预览刷新问题 | [待处理] | P2-Medium | 2026-07-20 | REQ-坐席-080 |
| BUG-坐席-002 | 选项汇总标签缺失(已选:xxx ✓) | [已修复] | P3-Low | 2026-07-28 | REQ-坐席-002 |
| BUG-通用-001 | 用户角色分配表格看不清 | [进行中] | P2-Medium | 2026-07-27 | REQ-通用-003 |
| BUG-通用-002 | 快速回复规则路由目标筛选 500 错误 | [已关闭] | P1-High | 2026-07-28 | REQ-通用-002 |
| BUG-用户-001 | 坐席离线未限制呼叫人工 | [已修复] | P1-High | 2026-07-25 | REQ-用户-004 |
| BUG-用户-002 | H5 请求超时问题 | [已修复] | P1-High | 2026-07-26 | - |
全量缺陷跟踪表维护在
docs/07-项目管理/缺陷跟踪表.md(如需)。
四、命名与目录纪律
4.1 命名禁止
- ❌
BUG-{模块}-{描述}.md(缺序号)—— 警告 - ❌
bug-{模块}-{描述}-{序号}.md(大小写错误)—— 重命名为BUG- - ❌
{模块}-{描述}-BUG.md(后缀位置错)—— 按BUG-{模块}-{...}重排
4.2 目录放置禁止
| 错放位置 | 应放位置 |
|---|---|
docs/07-项目管理/BUG-*.md |
docs/03-测试文档/05-缺陷单/BUG-*.md |
docs/01-产品文档/BUG-*.md |
docs/03-测试文档/05-缺陷单/BUG-*.md |
docs/08-历史归档/BUG-*.md(如仍被引用) |
提升回 05-缺陷单/,归档表迁 08-历史归档/ |
4.3 引用同步
| 引用场景 | 引用格式 |
|---|---|
| PRD / 技术方案中提及 | [BUG-模块-序号](../03-测试文档/05-缺陷单/BUG-模块-描述-序号.md) |
| 任务说明书中提及 | [BUG-模块-序号](../../../docs/03-测试文档/05-缺陷单/BUG-模块-描述-序号.md) |
| 提交代码 | commit message 含 [BUG-模块-序号] 修复 xxx |
五、变更记录
| 日期 | 版本 | 变更内容 | 变更人 |
|---|---|---|---|
| 2026-07-28 | v1.0 | 创建本目录;首批移入 5 份 BUG 单(AI/坐席/通用/用户×2) | Duckula |
| 2026-07-28 | v1.1 | 追加 BUG-通用-002(快速回复规则路由目标筛选 500 错误);当前清单更新到 6 条 | Duckula |
| 2026-07-28 | v1.2 | 追加 BUG-坐席-002(坐席端选项汇总标签缺失——v2.2 增量修复,已部署待人工验证);当前清单更新到 7 条 | Duckula |