Files
wecom_it_smart_desk/docs/02-技术文档/重构记录/01-问题验证清单.md
T
Simon 44e77dcb0e chore(docs): docs/ 目录全面重新编号 + 重组
**重构前**(旧编号 02-11):
- docs/02-产品需求/      → 00 产品规划/PRD
- docs/03-技术架构/      → 01-05 子目录散落
- docs/04-原型设计/      → 01-02 产品设计(HTML 原型)
- docs/05-原型设计/      → screens/
- docs/06-测试素材/      → 02-E2E / 03-功能 / 04-版本测试
- docs/07-项目管理/      → 任务说明书/日报/计划
- docs/08-安全审计/      → 审计报告
- docs/09-堡垒运维/      → toolbox / deploy
- docs/10-项目管理/      → 任务说明书(重复)
- docs/11-历史归档/      → deploy-nas-archived

**重构后**(新编号 00-07,语义化):
- docs/00-产品开发流程与文档管理规范.md
- docs/00-版本迭代总览.md
- docs/01-产品文档/      (PRD/原型/认证/会话/AI 服务/坐席/集成)
- docs/02-技术文档/      (技术方案/架构图/重构记录/前端改造/实现配置)
- docs/03-测试文档/      (E2E/功能用例/版本报告/缺陷单)
- docs/04-运维文档/      (部署运维/运维指南)
- docs/05-运营文档/      (品牌推广/用户手册)
- docs/06-安全审计/      (审计报告)
- docs/07-项目管理/      (任务说明书/日报/计划/看板)

**净收益**:
- 目录编号与产品文档管理规范对齐(按文档阶段 01-07 编号)
- 消除 02-产品需求 与 10-项目管理 的编号重叠
- 子目录按文档类型分组(如 01-产品文档/00-产品规划、01-产品文档/01-认证与登录)
- 把运维/安全/项目管理从 0X 散落改为 04/06/07

合计 494 文件 + 78495 行 / - 14076 行
2026-08-03 18:46:55 +08:00

58 lines
6.0 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.
# v4.0 重构 — 问题验证清单(20 项)
> **日期**2026-07-17
> **验证方式**:逐项对照源码核实(文件 + 行号)
> **用途**:新会话快速理解重构问题基线,无需重新探索
---
## 一、后端问题(B1-B8
| # | 问题 | 证据(文件:行号) | 现状 |
|---|------|------------------|------|
| B1 | 9 个匹配/识别入口(5 活 4 死) | 活:Dify 主 action、ApprovalMatcher、routing detect、Neo4j 图谱、关键词预过滤;死:`approval.py:1060``byod.py:348`、DifyTriageService、matchers.IntentMatcher | 待 P1-2 收敛 |
| B2 | 双重超时致 proxy 兜底不可达 | `ai_service.py` httpx timeout=30s`config.py:115`= `h5_ai_task.py:1197` wait_for(30)native→proxy 串行最坏 60s | 待 P0-6 |
| B3 | ApprovalMatcher 死分支 | `approval_matcher.py:66-69` 优先级 5 与 50-53 优先级 2 同调 `_match_by_keyword(approval_type)`,不可达 | 待 P1-4 |
| B4 | Matcher 匹配失败仅 warning | `h5_ai_task.py:461`action 无 card_data 透传 → 前端空白 | 待 P1-4(D3 兜底) |
| B5 | 同一 Dify 调用代码复制 3 遍 | `approval.py:999-1057`(死)、`routing_service.py:120-189`(活)、`byod.py:243-300`(死),各自新建 httpx.AsyncClient | 待 P1-2 |
| B6 | 路由 detect 与主 Dify 串行 45s | `h5_ai_task.py:1060` detect15s 超时)→ `:1197` 主调用(30s | 待 P1-3D1 合并) |
| B7 | 26 对 try/except | `h5_ai_task.py` 主函数 11 对,最深 4 层缩进(L1037→1196→1205→1227 | 待 P1-3 管线化 |
| B8 | 死代码 9 项 | 见 v4.0 方案 §3 表格(get_reply_stream、detect-intent×2、dynamic_recommend 死分支、matcher P5、前端死 API×2、handle_message 死分支、回调 TODO、.bak 文件) | 待 P2-1 |
| B9 | get_shared_ai_handler 伪单例 | `dependencies/__init__.py:98-106` 每次新建 AIHandler+AIService+2 个 httpx 池,从不 close | 待 P1-1 |
## 二、前端问题(F1-F6
| # | 问题 | 证据 | 现状 |
|---|------|------|------|
| F1 | ~~showApprovalCard 空白气泡(P0~~ **误报** | `stores/conversation.ts:900-917` 构造空 extra_data。**但 InputBox.vue 是孤儿组件(ChatPanel.vue:96 实际用 InputBar.vue),showApprovalCard 无人调用,此 bug 在用户界面不存在**。all-categories-card 端点保留备用,InputBox+showApprovalCard 列入批次4死代码 | ⚠️ 误报,批次4清理 |
| F2 | RecommendCard invokeApproval 崩溃(P0 | `RecommendCard.vue:178` 调用未定义函数(grep 确认无定义/导入/emit | 待 P0-4 |
| F3 | WS new_message 白名单丢字段(P0 | `stores/conversation.ts:395-429` 只取 7 字段;后端 `messages.py:278` 已下发全量 | 待 P0-5 |
| F4 | WS 3 种死路由 | `useH5WebSocket.ts:392/477/489`ai_reply_chunk/pending_close_request/quiz_diagnostic_answer),后端零产出 | 待 P1-5 |
| F5 | ApprovalCardModal 3 处渲染点 | `MessageBubble.vue:19/82/103`L82 text 分支自 v2.4 已死;approval_card msg_type 后端从未产出 | 待 P1-5 |
| F6 | 大量死代码 | store 死状态(approvalCardVisible 等)、MessageItem.vue 孤儿组件、死 CSS、前端死 APIconversation.ts:430/486/505 | 待 P2-1 |
## 三、配置/部署问题(C1-C6)
| # | 问题 | 证据 | 现状 |
|---|------|------|------|
| C1 | DIFY_NATIVE_* 生产从未配置 | 根 compose environment 无此 2 项;`.env.production``deploy-server/.env.production``backend/.env.example` 均无 → v2.1 原生直连未上线 | 待 P0-2 |
| C2 | workers=2 破坏单 worker 铁律 | `docker-compose-override.yml:4``deploy-server/docker-compose.yml:115``docker-compose-green.yml:46``--workers 2`;主文件已 1 但被 override 覆盖 | 待 P0-1 |
| C3 | APP_ENV 未传 | `config.py:182` 默认 dev → 生产 UA 校验/IP 白名单不生效 | ✅ P1-7 已完成(2026-07-18`APP_ENV=production` 已注入容器) |
| C4 | Redis 密码硬编码两处 | 根 compose L51requirepass 明文)、L120URL 编码硬编码);`.env` 的 REDIS_PASSWORD 未被引用;密码已进 git | ✅ P1-7 已完成(2026-07-18 轮换为 32 位随机密码,老密码 WRONGPASS 验证失效) |
| C5 | 15+ 处 os.getenv 旁路 | upload.py:35/49/51、auth_wecom_sso.py:65/83/161、dev_auth.py:42 等;DEV_MODE 判定重复 4 处 | 待 P1-7 |
| C6 | 3 个潜伏 bug | ① `main.py:1020` `app_root` 未定义 → /version 永远 unknown;② `tasks/scheduler.py:21` `AsyncIOSScheduler` 拼写错误(多一个 S,且零导入);③ `config.py:409` 使用未定义 `logger` | ✅ P1-7 已完成(2026-07-18 全部修复并部署) |
| C7 | employees.last_login_ip 列缺失 | OAuth 回调 WARNING`column employees.last_login_ip does not exist`(model 有该字段但表缺列,schema 迁移缺失)。仅 WARNING 不阻塞登录 | ✅ 已完成(2026-07-18 ALTER TABLE 补列,验证 EXISTS |
| C8 | redis decode 兼容警告 | `wecom_service.py:83``decode_responses=True` 返回 str 后代码再调 `.decode()` → WARNING 走降级。不致命 | ✅ 已完成(2026-07-18 修复 7 处裸 decodewecom_service×2/employee_directory×3/auth_wecom_sso×2,统一 isinstance 保护) |
## 四、已完成的修复(v3.0/v3.1/批次 0,勿重复)
| 日期 | 修复 | 位置 |
|------|------|------|
| v3.0 | 后端 ApprovalMatcher 统一匹配;前端 ApprovalCardModal 纯渲染;APPROVAL_TEMPLATES 扩展 icon/desc/category;删除前端 APPROVAL_OPTIONS / APPROVAL_URL_MAP / getApprovalKeywords API | `approval_matcher.py``approval.py``ApprovalCardModal.vue``MessageBubble.vue``RecommendCard.vue``conversation.ts` |
| v3.1 | Dify 无 action 降级(h5_ai_task.py:1252-1272+ 超时降级(:1205-1241);修复 `message_content` 未定义 bug3 处改 `content` | `h5_ai_task.py` |
| 批次 0 | dify_main_chat_prompt v1.2 同步线上;DEPLOY-GUIDE §4.3 部署铁律;2 个 prompt 文档标废弃;本目录归档 | `docs/` |
---
**参考**:完整方案见 `00-v4.0重构总方案.md`;批次执行记录见 `01-批次1-P0执行记录.md` 等。