Files
wecom_it_smart_desk/docs/02-技术文档/重构记录/01-问题验证清单.md
T
Simon facc04aa65 chore: docs 结构整改 + compose 双目录对齐(合并重建提交)
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交
(5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。

一、docs 结构整改(整改 #14)
根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入,
随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录
树并存于 docs/,共 791 文件、双分类体系冲突。

修复动作:
- b2 同名异主题文件改名迁移保全 9 个
- C 类 39 个孤立文件按主题正确归类
- A/B1 类 222 个重复文件删除(新结构已有内容副本)
- 9 个旧独有空目录删除
- 270 处内部引用按 verified 映射改写
- 整改记录 #14 登记于 04-运维文档/部署运维

结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。
残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。

二、compose 双目录对齐(消除踩坑 A)
- docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist
  改为 src/frontend-*/dist(h5 / agent / admin / terminal)
- docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/
- 效果:本地 docker compose up 不再把根目录 stale dist 挂回,
  与线上一致,分叉隐患消除(已 docker compose config 校验通过)

防复发铁律:
- 重构须提交;仓库修复须 git stash -u 或先 commit
- 新结构须 git add 并提交,避免再次 untracked 复活
- H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
2026-08-07 22:31:32 +08:00

6.0 KiB
Raw Blame History

v4.0 重构 — 问题验证清单(20 项)

日期2026-07-17 验证方式:逐项对照源码核实(文件 + 行号) 用途:新会话快速理解重构问题基线,无需重新探索


一、后端问题(B1-B8

# 问题 证据(文件:行号) 现状
B1 9 个匹配/识别入口(5 活 4 死) 活:Dify 主 action、ApprovalMatcher、routing detect、Neo4j 图谱、关键词预过滤;死:approval.py:1060byod.py:348、DifyTriageService、matchers.IntentMatcher 待 P1-2 收敛
B2 双重超时致 proxy 兜底不可达 ai_service.py httpx timeout=30sconfig.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:461action 无 card_data 透传 → 前端空白 待 P1-4D3 兜底)
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/489ai_reply_chunk/pending_close_request/quiz_diagnostic_answer),后端零产出 待 P1-5
F5 ApprovalCardModal 3 处渲染点 MessageBubble.vue:19/82/103L82 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.productiondeploy-server/.env.productionbackend/.env.example 均无 → v2.1 原生直连未上线 待 P0-2
C2 workers=2 破坏单 worker 铁律 docker-compose-override.yml:4deploy-server/docker-compose.yml:115docker-compose-green.yml:46--workers 2;主文件已 1 但被 override 覆盖 待 P0-1
C3 APP_ENV 未传 config.py:182 默认 dev → 生产 UA 校验/IP 白名单不生效 P1-7 已完成(2026-07-18APP_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 回调 WARNINGcolumn employees.last_login_ip does not exist(model 有该字段但表缺列,schema 迁移缺失)。仅 WARNING 不阻塞登录 已完成(2026-07-18 ALTER TABLE 补列,验证 EXISTS
C8 redis decode 兼容警告 wecom_service.py:83decode_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.pyapproval.pyApprovalCardModal.vueMessageBubble.vueRecommendCard.vueconversation.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 等。