2026-06-16 19:24:02 +08:00
|
|
|
|
# 企微IT智能服务台 — 项目状态看板
|
|
|
|
|
|
|
|
|
|
|
|
> 📌 **这个文件就是项目的"驾驶舱仪表盘"**。任何时候新开 session,**先读这个文件就懂上下文**。
|
|
|
|
|
|
>
|
|
|
|
|
|
> 📝 **更新规则**:每次 Claude 完成 / 开始 / 阻塞重要任务,会主动更新本文件。你也可以自己改(纯 markdown,git 跟踪)。
|
|
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
最后更新:**2026-07-09 09:20**(WS 子协议修复部署生产 + 合入 origin/main;方案A E2E 2026-07-08 通过)
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 一句话总览
|
|
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**v0.7.1 已上线运行,生产稳定**。知识库迭代 v0.7.2 全链路交付完成:
|
2026-07-04 21:01:39 +08:00
|
|
|
|
|
|
|
|
|
|
**已完成 (v0.7.1)**:
|
2026-07-09 11:50:19 +08:00
|
|
|
|
- ✅ 企微入口 SSO
|
|
|
|
|
|
- ✅ 管理后台 RBAC(6处装饰器修复, 5/5 PASS)
|
|
|
|
|
|
- ✅ 敏感词检测(隐私正则 \b→\d 修复, 89/89 PASS)
|
2026-07-04 21:01:39 +08:00
|
|
|
|
- ✅ 扫码登录优化(iOS NSURLError 修复)
|
|
|
|
|
|
- ✅ 文档优化专项(已完成)
|
|
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**v0.7.2 知识库迭代(✅ 全部交付)**:
|
|
|
|
|
|
- ✅ AI 辅助功能增强
|
|
|
|
|
|
- ✅ 排查流程优化
|
|
|
|
|
|
- ✅ 知识库迭代(Tier0+Tier1+可视化+去重+串联闭环, 49文件 169/169 PASS)
|
2026-07-04 21:01:39 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**P1/P2功能开发任务 ✅ 全部完成**:
|
|
|
|
|
|
- ✅ 阶段2 (P1): 摇人按钮、满意度评价、排队系统、快速回复、知识库基础
|
|
|
|
|
|
- ✅ 阶段3 (P2): AI Wingman、会话标注、自动摘要
|
|
|
|
|
|
- ✅ 阶段4 (P2): 数据看板、知识库自动迭代(含图谱可视化+合并去重)
|
2026-07-07 21:52:11 +08:00
|
|
|
|
- 📋 详细规格: `docs/02-产品需求/功能详细规格说明书-P1P2功能.md`
|
|
|
|
|
|
|
2026-07-04 21:01:39 +08:00
|
|
|
|
**文档优化专项 (2026-07-04) ✅ 已完成**:
|
|
|
|
|
|
- ✅ 扫描并整理 docs/ 目录全部文档
|
|
|
|
|
|
- ✅ 规范化目录结构(01-11 编号体系)
|
|
|
|
|
|
- ✅ 恢复归档文档到正确位置
|
|
|
|
|
|
- ✅ 整理 10-项目管理 目录
|
|
|
|
|
|
- ✅ 整理 03-技术架构 目录
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-07-07 21:52:11 +08:00
|
|
|
|
## 🟢 正在做(in_progress,1 件)
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
2026-07-07 21:52:11 +08:00
|
|
|
|
| # | 任务 | 说明 |
|
|
|
|
|
|
|---|---|---|
|
|
|
|
|
|
| #91 | 忘记密码-企微扫码重置 | 坐席忘记密码时通过企微扫码验证后重置 |
|
|
|
|
|
|
|
|
|
|
|
|
### #90 开发进度 (2026-07-06) ✅ 已完成
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ 后端登录API (`/api/agents/login`)
|
|
|
|
|
|
- ✅ 坐席端登录页面 (账号密码+OTP)
|
|
|
|
|
|
- ✅ 管理端登录页面 (账号密码+OTP)
|
|
|
|
|
|
- ✅ 企微客户端检测功能 (v1.8 新增)
|
|
|
|
|
|
- ✅ 部署测试 (2026-07-06 10:05 生产验证通过)
|
|
|
|
|
|
|
|
|
|
|
|
### #91 开发进度 (2026-07-07) ✅ 已完成
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ 后端API:`POST /api/agents/password/reset-by-wecom` 企微OAuth扫码重置密码
|
|
|
|
|
|
- ✅ 前端:登录页"忘记密码"入口 (H5)
|
|
|
|
|
|
- ✅ 前端:修改密码弹窗 (H5 + Admin)
|
|
|
|
|
|
- ✅ 前端:用户头像菜单"修改密码" (H5 ChatPanel)
|
|
|
|
|
|
- ✅ 部署测试:API验证通过 ✅
|
|
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
## 🔬 方案A 消息发送延时改造 — E2E 验真 (2026-07-08) ✅ 通过
|
2026-07-07 21:52:11 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
> 真实浏览器端到端实测(系统 Chrome + Playwright)。报告:`docs/06-测试质量/方案A-消息发送延时-E2E验证报告-20260708.md`,截图:`docs/06-测试质量/e2e-screenshots/`
|
2026-07-07 21:52:11 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**验证结论**:✅ 员工端发送消息**瞬时返回不阻塞 UI**(点击 1.26s 返回,`ai_reply:null`),AI 回复经 **WebSocket 打字机流式**推送(收到 `ai_reply_chunk` **343 帧**,2.3s 起渲染,Duckula 头像 + 1469 字完整内容正常)。
|
2026-07-07 21:52:11 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**⚠️ 顺带修复 1 个真实后端 bug(生产相关)**:WebSocket 握手时浏览器用子协议 `bearer.{token}` 传 token,后端 `ws_manager.connect/connect_employee` 读了 token 却未在 `accept()` 回显子协议 → 浏览器拒绝握手。此前被 3s 轮询兜底**掩盖**,生产坐席/员工 WS 实际走了轮询而非流畅打字机。已修复 `accept(subprotocol=...)`。
|
2026-07-07 21:52:11 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**✅ 已部署生产 (2026-07-09 09:14)**:`docker cp` 修复文件进 `wecom_it_backend` 容器 + `docker restart`,重启后日志确认 H5 员工(tangzhenzhen)/坐席(sxn) WebSocket 连接 `[accepted]` 且**连接建立**(旧代码下浏览器会因未回显 subprotocol 拒绝握手,根本到不了 accepted)。commit `bacd34c` → cherry-pick `6db1c0e` 已推送 `origin/main`。Dify key 临时切换已还原回 `app-J3s8sHarZQ2SCaNF3xCppliL`(dev 验证用,备注于 compose)。
|
2026-07-07 21:52:11 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
**另修复 3 个 dev 容器化环境阻断**(使「Docker dev 栈 + 真实浏览器 E2E」链路可用):
|
|
|
|
|
|
1. H5 应用无法挂载:dev compose 补挂载 `./frontend-h5/public:/app/public`(`duckula.webp` 镜像烘焙时缺失)
|
|
|
|
|
|
2. Mock 登录 500:Vite 代理目标改为可配置 `VITE_PROXY_TARGET`(dev 注入 `http://backend:8000`)
|
|
|
|
|
|
3. CSP 阻断 dev WS:`index.html` CSP `connect-src` 增加 `ws://localhost:8000`
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🔬 验真结论 (2026-07-07) → ✅ 全部已修复 (2026-07-08)
|
|
|
|
|
|
|
|
|
|
|
|
> 5 项验真发现的缺陷,经 RBAC BugFix + 知识库迭代全链路 + 隐私正则修复,**全部已解决**。
|
|
|
|
|
|
|
|
|
|
|
|
| # | 功能 | 结论 | 修复 |
|
|
|
|
|
|
|---|------|------|------|
|
|
|
|
|
|
| ① | 排队系统 | ✅ 真实可用 | — |
|
|
|
|
|
|
| ② | 知识库自动迭代 | ✅ 全链路(49文件/169测试) | Tier0+Tier1+P0串联+P2 |
|
|
|
|
|
|
| ③ | AI Wingman | ✅ 真实可用 | — |
|
|
|
|
|
|
| ④ | 管理后台 RBAC | ✅ 已修复(test_rbac 5/5) | 装饰器修复 |
|
|
|
|
|
|
| ⑤ | 敏感词检测 | ✅ 已修复(隐私正则 \b→\d) | 89/89 PASS |
|
2026-07-07 21:52:11 +08:00
|
|
|
|
- `tests/test_content_moderation.py`(11/13,2 失败即隐私 Bug 证据)
|
|
|
|
|
|
- `tests/test_rbac_verification.py`(3/5,2 失败即 422 Bug 证据)
|
2026-07-04 21:01:39 +08:00
|
|
|
|
|
2026-07-09 11:50:19 +08:00
|
|
|
|
## 🔬 #75 头像同步功能 复盘 (2026-07-07/08)
|
|
|
|
|
|
|
|
|
|
|
|
> 软件团队快速模式交付(工程师 12/12 单测 + 103 回归通过)。**关键边界:验证的是代码逻辑,未做真实业务效果验证。**
|
|
|
|
|
|
|
|
|
|
|
|
**已验证(代码层,07-08 23:00 真实再跑)**:`backend/tests/test_avatar_service.py` **12 passed in 0.77s**(5 TestCleanAvatarUrl + 5 TestSyncEmployeeAvatar + 2 TestSessionServiceAvatar)。仅 2 个 deprecation warning(`datetime.utcnow()`),与 #75 主线无关。
|
|
|
|
|
|
|
|
|
|
|
|
**test_h5_oauth.py 6 失败归因**:抓 `test_callback_stores_token_in_redis:237 assert stored is not None` traceback 验证,根因是 `mock_redis`(fakeredis)跨 fixture 状态丢失 + redis 库 `setex` deprecated,**与 #75 avatar_service / sync_employee_avatar 无任何代码引用关系**——是历史遗留(与 QA 昨夜的"16 失败全在 test_h5_oauth.py"一致)。
|
|
|
|
|
|
|
|
|
|
|
|
**git 真实状态(07-08 23:00 摸底)**:
|
|
|
|
|
|
- HEAD = `ba068d3`,**#75 15 个文件中 14 个与 HEAD 一致**(avatar_service.py / test_avatar_service.py / h5.py OAuth 段 / agents.py / auth_qrcode.py / qrcode_service.py / dev_auth.py / auth_wecom_sso.py / session_service.py + 6 个前端 .vue),已被其他 agent 在 400ce3d / 9bb080d / ba068d3 等 commit 整合。
|
|
|
|
|
|
- 仅 1 个 `M` = `backend/app/api/h5.py` 是别的 agent 的 h5_send_message AI 异步化重构(`dep_ai_handler` → `app.tasks.h5_ai_task.process_h5_ai_reply`),与 #75 无关。
|
|
|
|
|
|
|
|
|
|
|
|
**为什么本地 / 预生产都看不到效果(5 因)**:
|
|
|
|
|
|
1. **绑定登录动作**:#75 在每次登录时强制同步,已登录态不触发 → 改完代码不重登看不到变化。
|
|
|
|
|
|
2. **mock / 测试账号**:本地 dev 走 `/api/h5/mock-login` 传固定 avatar;预生产测试账号企微通讯录可能未返回新头像。
|
|
|
|
|
|
3. **企微通讯录缓存延迟**:企微通讯录 API 有缓存,换头像后不立即生效。
|
|
|
|
|
|
4. **前端不主动重拉**:`employee.ts` 已登录不自动重拉 avatar,依赖登录时刷新。
|
|
|
|
|
|
5. **token 登录态**:已持 token 进入不触发重新同步。
|
|
|
|
|
|
|
|
|
|
|
|
**任务状态**:
|
|
|
|
|
|
- ✅ Task #3(提交代码):**completed — 变体结论:#75 已被 HEAD 含括,无需独立提交**。夜班 agent 已把 #75 散落到多个 commit(400ce3d / 9bb080d / ba068d3 等)。
|
|
|
|
|
|
- ⏳ Task #1(端到端真实效果验证):pending — 待真实企微账号换头像→退出重登实测
|
|
|
|
|
|
- ⏳ Task #2(手动刷新兜底按钮):pending
|
|
|
|
|
|
- ⏳ Task #4(补 SSO/JS-SDK employee upsert 头像):pending
|
|
|
|
|
|
|
|
|
|
|
|
**下一步建议**:直接进 Task #1 端到端验真(最快闭环 #75 真实效果),或开 Task #2 兜底按钮(不依赖重登提升可用性)。等你通知启动。
|
|
|
|
|
|
|
2026-07-04 21:01:39 +08:00
|
|
|
|
## ✅ 最近搞定
|
|
|
|
|
|
|
2026-07-07 21:52:11 +08:00
|
|
|
|
### 2026-07-06 P1功能开发完成
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **P1-25 满意度评价**:会话结束后5星+表情评价,含文字反馈;后端API + H5弹窗 + 坐席端自动发送邀请 + 管理后台统计
|
|
|
|
|
|
|
2026-07-05 17:03:36 +08:00
|
|
|
|
### 2026-07-05 生产问题修复
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **坐席端消息列表 500 错误**:添加 `current_agent` 参数到 `list_messages` 函数
|
|
|
|
|
|
- ✅ **坐席端消息发送失败**:安装缺失的 `wordfilter` 模块,补充文档
|
|
|
|
|
|
- ✅ **文档补充**:更新 requirements.txt 和部署手册,新增 Python 依赖管理章节
|
2026-07-07 21:52:11 +08:00
|
|
|
|
- 📝 详细记录(已并入 [标准故障排查手册](../../09-部署运维/00-标准故障排查手册.md))
|
|
|
|
|
|
|
|
|
|
|
|
### 2026-07-07 管理后台登录修复 + 故障排查文档整合
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **管理后台登录"网络连接失败"根因修复**:Redis 密码 `R3d!s@2026#Secure` 含 `@`/`#`,`urlparse` 误判为 URL 分隔符 → 连到不存在的 host → 连接**无限挂起**(浏览器"网络连接失败"、curl 永远无返回)。修复:`backend/app/config.py` 加 `unquote()`+5s socket 超时;`docker-compose.yml` 后端 `REDIS_URL` 改 URL-encode(`R3d%21s%402026%23Secure`);redis `--requirepass`/healthcheck 保持**明文**;重建 backend+redis。真实浏览器(headless Chromium)登录截图证明 sxn/admin 成功进入仪表盘。详见手册 [CASE-20260707-01](../../09-部署运维/00-标准故障排查手册.md)。
|
|
|
|
|
|
- ✅ **故障排查文档整合 (v1.0)**:9 份散落文档合并为 `09-部署运维/00-标准故障排查手册.md` 单一入口(删 9 份、修 13 处断链、mkdocs 新增「故障排查」导航);经验固化三层——项目 MEMORY「⚠️ 生产环境地雷」+「故障排查文档(单一入口)」、用户级 Skill `deploy-troubleshoot`、用户级 MEMORY「验证完成硬规则」。
|
2026-07-05 17:03:36 +08:00
|
|
|
|
|
2026-07-04 21:01:39 +08:00
|
|
|
|
### 2026-07-04 下午 (#90 身份认证修复 + 部署)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#90 Portal→H5 token传递修复**:路由守卫接收token后调用`fetchEmployeeInfo()`获取用户信息,修复token存在但用户信息未初始化的认证问题
|
|
|
|
|
|
- ✅ **#90 生产部署成功**:H5 前端已构建并部署到生产服务器 (10.90.5.110),Nginx 已重载
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🔴 P0 必做(下一个 sprint)
|
|
|
|
|
|
|
|
|
|
|
|
| # | 任务 | 重要程度 | 说明 |
|
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
| #48 | v1.0 收窄 set_real_ip_from | 🔴 P0 | 现 allow 0.0.0.0/0 是临时方案,正式上线前必须改精确代理 IP |
|
2026-07-07 21:52:11 +08:00
|
|
|
|
| #81 | 敏感词检测 + 语气优化 | 🔴 P0 | v0.7.1 开发内容,文本安全过滤 ⚠️验真:隐私检测Bug+仅警告 |
|
2026-07-04 21:01:39 +08:00
|
|
|
|
| #90 | 身份认证问题修复 | ✅已完成 | ✅Portal→H5 token传递修复:路由守卫接收token后调用fetchEmployeeInfo()获取用户信息 |
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🟡 P1 重要(看时间做)
|
|
|
|
|
|
|
|
|
|
|
|
| # | 任务 | 说明 |
|
|
|
|
|
|
|---|---|---|
|
|
|
|
|
|
| #73 | 修后端文件未真正覆盖 | `yes | cp -f` 路径,部署时偶尔没生效 |
|
|
|
|
|
|
| #86 | 排查流程图零依赖部分 review + 文档化 | 把 Mermaid 流程图从代码里剥离成可读文档 |
|
2026-07-07 21:52:11 +08:00
|
|
|
|
| #88 | 管理后台 RBAC 角色权限 | 管理后台细粒度角色权限(大功能,2-3 天) 🔴验真:admin_users鉴权422失效 |
|
2026-06-21 07:23:14 +08:00
|
|
|
|
| #83 | 澄清"OTM 跟项目关系" | 已 2026-06-21 决策:走 TOTP+SMS 双引擎(MFA Phase 2 实施) |
|
2026-07-05 17:03:36 +08:00
|
|
|
|
| 🆕 | v0.7.0 部署 + 35 项 E2E 验收 | 看 `docs/09-部署运维/deploy/10-一键部署操作包-v0.7.0.md` 6 步 + `docs/06-测试质量/testing-测试/E2E-CHECKLIST-v0.7.0.md` |
|
|
|
|
|
|
| #100 | 消息推送策略优化与超时提醒 | ✅已完成:坐席回复仅推 H5,超时未回复发送企微提醒,10分钟后标记待关闭 |
|
2026-06-21 07:23:14 +08:00
|
|
|
|
| 🆕 | 修 64 pre-existing 测试失败 | Role.data_scope 缺字段 / WecomService DI / test_message_experience 等 |
|
2026-07-09 11:50:19 +08:00
|
|
|
|
| #75 | 头像同步功能完善 | 登录全路径强制同步 + 前端首字降级;代码已交付(12/12 单测 + 103 回归),**业务效果待端到端验真** | 🆕 等用户通知执行 |
|
2026-06-21 07:23:14 +08:00
|
|
|
|
|
2026-07-07 21:52:11 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 🎯 P1/P2 功能开发任务 (2026-07-06 新增)
|
|
|
|
|
|
|
|
|
|
|
|
**详细规格**: `docs/02-产品需求/功能详细规格说明书-P1P2功能.md`
|
|
|
|
|
|
|
|
|
|
|
|
#### 阶段2 - P1功能 (25人日)
|
|
|
|
|
|
|
|
|
|
|
|
| # | 功能 | 需求ID | 预估工时 | 状态 |
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
| 🆕 P1-24 | 摇人按钮 | 输入框左侧一键呼叫坐席 | 5人日 | ✅已完成 |
|
|
|
|
|
|
| 🆕 P1-25 | 满意度评价 | 会话结束后5星+表情评价 | 5人日 | ✅已完成 |
|
|
|
|
|
|
| 🆕 P1-26 | 排队系统 | 多会话时排队等待+显示位置 | 6人日 | ✅已验真(2026-07-07) |
|
|
|
|
|
|
| 🆕 P1-27 | 快速回复 | 坐席常用语管理+搜索+分类 | 5人日 | ✅已完成 |
|
|
|
|
|
|
| 🆕 P1-28 | 知识库(基础) | FAQ手动维护+RAGFlow检索 | 4人日 | ✅已完成 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 阶段3 - P2功能-上半 (18人日)
|
|
|
|
|
|
|
|
|
|
|
|
| # | 功能 | 需求ID | 预估工时 | 状态 |
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
| 🆕 P2-09 | AI Wingman | AI建议回复+Ctrl+1/2/3快捷采纳 | 8人日 | ✅已验真(2026-07-07) |
|
|
|
|
|
|
| 🆕 P2-10 | 会话标注 | 坐席标注AI回复准确性 | 5人日 | ✅已完成 |
|
|
|
|
|
|
| 🆕 P2-11 | 自动摘要 | 会话结束后AI摘要 | 5人日 | ✅已完成 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 阶段4 - P2功能-下半 (17人日)
|
|
|
|
|
|
|
|
|
|
|
|
| # | 功能 | 需求ID | 预估工时 | 状态 |
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
| 🆕 P2-12 | 数据看板 | 服务数据统计+可视化 | 10人日 | ✅已完成 |
|
2026-07-09 11:50:19 +08:00
|
|
|
|
| 🆕 P2-13 | 知识库自动迭代 | AI分析高频+建议更新+图谱可视化+合并去重+会话闭环 | 7人日 | ✅全链路(2026-07-08: 49文件, 169/169 PASS) |
|
2026-07-07 21:52:11 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-06-21 07:23:14 +08:00
|
|
|
|
## 🟢 P2 / 等用户决策
|
|
|
|
|
|
|
|
|
|
|
|
| # | 任务 | 卡在哪 |
|
|
|
|
|
|
|---|---|---|
|
|
|
|
|
|
| **🆕 服务器更新?** | 把 v0.7.0 部署到生产(扫码+MFA+高危+4 项 P0) | **等你跑 `DEPLOY-QUICK-v0.7.0.md` 6 步** |
|
|
|
|
|
|
| #31 | 推 docker 镜像到生产 registry | 等你确认要走哪条路(自建 Harbor / 阿里云 / 别的) |
|
|
|
|
|
|
| #43 | 配置 HTTPS | 等域名备案完成 + 证书到位 |
|
|
|
|
|
|
| #53 | 用户在企微验证 /itportal/ | 等你去企微点一点 |
|
|
|
|
|
|
| 🆕 #23 | 清理 ~/Downloads/ patch1 包 | 部署观察期后拍板 |
|
|
|
|
|
|
| 🆕 #24 | 清理生产 patch1 回滚备份 | 1 周观察期后拍板 |
|
|
|
|
|
|
| 🆕 #48 | 收窄 set_real_ip_from 内网地址 | 部署后下一迭代(v1.0 前) |
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## ✅ 最近搞定(给你信心)
|
|
|
|
|
|
|
2026-07-04 21:01:39 +08:00
|
|
|
|
### 2026-07-04 上午 (文档优化专项)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **文档全面扫描**:扫描 docs/ 目录下全部约 100 个文档,识别缺失/冲突/异常内容
|
|
|
|
|
|
- ✅ **问题清单识别**:发现 6 个关键问题(用户手册空白、看板过期、KPI缺失等)
|
|
|
|
|
|
- ✅ **行业最佳实践对比**:对比 ServiceNow/Zendesk/ITSM 行业基准
|
|
|
|
|
|
- ✅ **Portal token 传递修复**:修复 backend/app/api/portal.py 身份认证问题
|
|
|
|
|
|
|
2026-06-22 17:38:47 +08:00
|
|
|
|
### 2026-06-22 凌晨 02:30+ (E2E §3.4 验证)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#46 nginx path-prefix bug 真修好**(之前 2026-06-22 凌晨已改配置,本次 admin token 验证三端点全部到 backend)
|
|
|
|
|
|
- ✅ **#54 E2E §3.4 验证完成**:`/api/admin/high-risk/whitelist` → HTTP 200 + `{"code":2001,"message":"高危操作需要 OTP 二次验证"}`(完美:鉴权链通 + #19 中间件工作 + #20 MFA UI 流程就绪)
|
2026-07-04 21:01:39 +08:00
|
|
|
|
- ✅ **#59 admin token 生成命令固化**:`backend/scripts/gen_admin_token.py` + `docker exec` 单行命令,可复现)
|
2026-06-22 17:38:47 +08:00
|
|
|
|
- ✅ **新发现**:`/api/admin/mfa/users` 端点真不存在(backend 只定义 `/admin/mfa/reset/{id}`,无 list)→ 已加 v0.7.1 backlog
|
|
|
|
|
|
- ✅ **新坑经验**:`http://wecom_it_nginx/api/...` 容器内 curl 会 301 → `https://`(nginx 强制 HTTPS 升级),必须用 `https://` + `-k`
|
|
|
|
|
|
|
|
|
|
|
|
### 2026-06-22 凌晨 (E2E 浏览器测试 - 用户反馈澄清)
|
|
|
|
|
|
|
|
|
|
|
|
- ⚠️ **#61 用户反馈 2 个浏览器 bug**:
|
|
|
|
|
|
1. 二维码不显示 — **真 bug**: 后端 `auth_qrcode.py:91-96` 没返回 `qrcode_png_base64`,前端 `QrcodeLogin.vue:34-40` 永远拿不到数据(已查,根因清楚,待修)
|
|
|
|
|
|
2. /itportal/ 直接出扫码页 — **不是 bug, 是设计**: v0.7.0 故意把 `/` redirect 到 `/qrcode-login`(`c389959 feat(portal)`),扫码成功后**按角色自动跳**(/itadmin/ /itagent/ /itdesk/),`PortalSelect` 保留为**多角色用户 fallback**。原 v0.5.x 是「先选角色再登录」2 步,v0.7.0 改成「先扫码自动识别」1 步。
|
|
|
|
|
|
|
2026-06-22 01:19:54 +08:00
|
|
|
|
### 2026-06-22 凌晨(自动跑批)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#23** `~/Downloads/patch1*` 已删(`backend-patch1-ws-fix.tar.gz` 21KB + `backend-v070-patch1.tar.gz` 63KB)
|
|
|
|
|
|
- ✅ **#41** MkDocs 文档站后台跑起来(`http://127.0.0.1:8765/`,58 个 markdown,Material theme)
|
|
|
|
|
|
- ✅ **#58** 38 → 13 backend pytest 失败修复(根因:`conftest` patch 路径错 + `h5_client` fixture 缺 WecomService mock)
|
|
|
|
|
|
- ✅ **#49** `/api/ready` defer 到 v0.7.1,backlog 已存 `memory/v0.7.1-backlog-2026-06-22.md`
|
|
|
|
|
|
- ✅ 4 个 agent 状态复核:#14/#17/#19/#20 全部合入 main(commit `bf872da` + `f564d0e`),worktree 分支已清
|
|
|
|
|
|
- ✅ 集成测试再确认:4 套新测试 70 passed(扫码 13 + MFA 21 + 高危 28 + UUID 8)+ WS 8 passed + 4 xfail = 78 + 4 xfail(跟 merge 报告一致)
|
|
|
|
|
|
|
2026-06-21 07:23:14 +08:00
|
|
|
|
### 2026-06-21(凌晨 1 小时 sprint)
|
|
|
|
|
|
|
|
|
|
|
|
#### 🆕 v0.7.0 release 收尾(8 个 worktree → main)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#14 阶段 1.1**:后端 `auth_qrcode.py` 4 端点(create/poll/scan/confirm)
|
|
|
|
|
|
- ✅ **#15 阶段 1.2**:前端 `Login.vue` + `QrcodeLogin.vue` 扫码 UI
|
|
|
|
|
|
- ✅ **#16 阶段 1.3**:坐席/管理员域名路由分发(`/itagent/` `/itadmin/`)
|
|
|
|
|
|
- ✅ **#17 阶段 2.1**:后端 MFA 服务 + pyotp 集成
|
|
|
|
|
|
- ✅ **#18 阶段 2.2**:数据库 User MFA 字段 + Alembic migration 023
|
|
|
|
|
|
- ✅ **#19 阶段 2.3**:高危操作路由白名单 + 中间件(5 类白名单)
|
|
|
|
|
|
- ✅ **#20 阶段 2.4**:前端 MFA UI(绑定 + 验证 + 高危弹窗 + 管理表格)
|
|
|
|
|
|
- ✅ **#21 集成测试 + E2E + 培训文档**:E2E-CHECKLIST 176 行 + DEPLOY-QUICK 252 行
|
|
|
|
|
|
|
|
|
|
|
|
#### 🔐 P0/P1 合规修复(#30)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ WS endpoint `missing argument 'request'`(签名 + 8 个回归测试)
|
|
|
|
|
|
- ✅ messages.id VARCHAR → UUID(migration 025)
|
|
|
|
|
|
- ✅ nginx access_log 脱敏脚本(删 Authorization/Cookie)
|
2026-06-21 09:56:15 +08:00
|
|
|
|
- ✅ Gitea token 撤销流程已文档化(旧 token 已 revoke,新 token 已签发)
|
2026-06-21 07:23:14 +08:00
|
|
|
|
|
|
|
|
|
|
#### 🐛 测试修复(#32)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ wordfilter 1.0.6 API 适配(`Wordfilter()` 实例 + `addWords()` + `blacklisted()`)
|
|
|
|
|
|
- ✅ SQLite ARRAY/JSONB 编译补丁(quiz.keywords / themes.palette)
|
|
|
|
|
|
- ✅ conftest autouse 业务表清理(feedback 事务隔离)
|
|
|
|
|
|
- ✅ h5_client 用 `127.0.0.1` 跳过企微 UA 检测
|
|
|
|
|
|
- ✅ wecom mock 默认 name 不覆盖 body.name
|
|
|
|
|
|
- ✅ 测试基线:570 ERROR → 470 passed, 4 xfailed, 64 failed
|
|
|
|
|
|
|
|
|
|
|
|
#### 📦 提交记录
|
|
|
|
|
|
|
|
|
|
|
|
- `8e748d1` docs: CHANGELOG.md 添加 v0.7.0 release 节
|
|
|
|
|
|
- `1255e95` docs: v0.7.0 一键部署操作包
|
|
|
|
|
|
- `c33abb6` fix(tests): h5_client UA 检测
|
|
|
|
|
|
- `a9b97de` fix(tests): wordfilter API + SQLite 编译补丁 + 事务隔离
|
|
|
|
|
|
- `e96fbb2` docs: v0.7.0 E2E 验收清单
|
|
|
|
|
|
- `bf872da` feat(merge): 4 个 worktree 合入 main
|
|
|
|
|
|
- **tag v0.7.0** 已打
|
|
|
|
|
|
|
|
|
|
|
|
### 历史(2026-06-16 选重点)
|
2026-06-16 19:24:02 +08:00
|
|
|
|
|
|
|
|
|
|
#### 🛠️ Dev 环境(本地链路全通)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **本地 dev 4 端链路跑通**(#89-92):
|
|
|
|
|
|
- backend (8000) + h5 (5174) + agent (5173) + admin (5175) + portal (5176) 全起
|
|
|
|
|
|
- Mock 企微 OAuth 全通(`/api/dev/login` 给 token)
|
|
|
|
|
|
- portal → H5 / 坐席 / 管理员 跳转正常
|
|
|
|
|
|
- ✅ **修了 3 个 dev 启动坑**:
|
|
|
|
|
|
1. `pydantic==2.7.5` → `2.7.4`(2.7.5 被 PyPI yank)
|
|
|
|
|
|
2. docker-compose 加 `PYTHONPATH=/app`(alembic 1.13+ 不再默认 prepend cwd)
|
|
|
|
|
|
3. dev 启动必须用 `--env-file .env.dev`(根 `.env` 冲突)
|
|
|
|
|
|
|
|
|
|
|
|
#### 🐛 Bug 修复
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#93 修 portal dev 模式跳错端口**:`import.meta.env.DEV` 判断,生产走相对路径,dev 走完整 URL
|
|
|
|
|
|
- ✅ **#97 修 require_role 装饰器**:`@wraps` 让 FastAPI 看到 `__wrapped__` 签名,Depends 未被解析 → `current_user` 实际是 Depends 对象。用 `inspect` 合并 signature + 手动设 `wrapper.__signature__` 修
|
|
|
|
|
|
- ✅ **#99 dev 模式短路企微推送**:避免 `.env.dev` 用 `dev_corp_id_xxxxx` 调企微 API 返 `invalid corpid` 噪音
|
|
|
|
|
|
|
|
|
|
|
|
#### 🗃️ 数据库 migration(3 个)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#94 alembic 010**:加 `agents.otp_secret` + `agents.otp_enabled`
|
|
|
|
|
|
- ✅ **#94 alembic 011**:加 `conversations.impact_scope` + `is_blocking` + `emotion_state`(用户坐席发消息 500 的真因)
|
|
|
|
|
|
- ✅ **#96 alembic 012**:加 `conversations.dify_conversation_id` + `employees.it_level` + `it_level_source` + `notes`
|
|
|
|
|
|
|
|
|
|
|
|
#### 🛡️ 防错工具(留底用)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#95 dev-check-schema-drift.ps1**:对比 SQLAlchemy 模型 vs Postgres schema,漂移 exit 1。以后模型加字段忘 migration 一跑就发现(用 docker exec,免去 Python 依赖)
|
|
|
|
|
|
|
|
|
|
|
|
#### 📋 其他
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **#68 H5 空白页闪一下**:dev 模式验证不再白屏(生产未复测)
|
|
|
|
|
|
|
|
|
|
|
|
### 历史(选重点)
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ v0.5.5:应急页 v0.5.4 + 移除 IT 设备升级 + admin 登录修复 + 内容审核架构
|
|
|
|
|
|
- ✅ v0.5.3:重打后端部署包(5 IT + 2 HR + 1 行政 + 1 财务 = 9 条)
|
|
|
|
|
|
- ✅ v0.5.6-dev-tooling 已 tag + push gitea(本地 dev 工具集)
|
|
|
|
|
|
- ✅ messages.id varchar=UUID SQL bug 修了(#60)+ 10 个回归测试通过
|
|
|
|
|
|
- ✅ nginx /api/admin/ 和 /itadmin/ 修复 403/allow(#57)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 怎么跑起来(3 步)
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 后端 dev(已经在跑 ✅)
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
cd D:\资料\03-项目开发\wecom_it_smart_desk-claude
|
|
|
|
|
|
docker compose -f docker-compose.dev.yml --env-file .env.dev up -d
|
|
|
|
|
|
curl http://localhost:8000/api/dev/health
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 前端 dev(已经在跑 ✅)
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
# 一次性装 4 个前端依赖(已装好)
|
|
|
|
|
|
.\scripts\dev-frontend-install.ps1
|
|
|
|
|
|
|
|
|
|
|
|
# 之后:一起起所有前端
|
|
|
|
|
|
.\scripts\dev-frontend-start.ps1
|
|
|
|
|
|
# 单独停:.\scripts\dev-frontend-start.ps1 -Stop
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 浏览器验证
|
|
|
|
|
|
|
|
|
|
|
|
- portal:http://localhost:5176/itportal/select
|
|
|
|
|
|
- H5:http://localhost:5174/itdesk/
|
|
|
|
|
|
- 坐席:http://localhost:5173/itagent/
|
|
|
|
|
|
- 管理员:http://localhost:5175/itadmin/
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📌 怎么读这份文档
|
|
|
|
|
|
|
|
|
|
|
|
**你是运维小白,不需要懂代码**。看这个文件就能 1 分钟懂:
|
|
|
|
|
|
|
|
|
|
|
|
1. **"现在在干嘛?"** → 看「正在做」表
|
|
|
|
|
|
2. **"接下来要干嘛?"** → 看「P0 必做」表
|
|
|
|
|
|
3. **"我需要做什么?"** → 看「正在做」表里的「你做什么」列
|
|
|
|
|
|
4. **"今天有啥进展?"** → 看「最近搞定」
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🤖 Claude 怎么帮你
|
|
|
|
|
|
|
|
|
|
|
|
每次开新 session 我会:
|
|
|
|
|
|
|
|
|
|
|
|
1. **第一件事**:读这个文件 + TaskList,告诉你"上次到这了"
|
|
|
|
|
|
2. **完成一件重要事**:更新这个文件(改状态、加完成项)
|
|
|
|
|
|
3. **遇到阻塞**:写在「P2 / 等用户决策」里,等你回话
|
|
|
|
|
|
4. **新需求进来**:跟当前 in_progress 比较,看是**接着做**还是**并行加**(参考你的"并行处理"反馈)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**这个文件就是你和 Claude 之间的"工作交接本"。有问题改这里就行。**
|