Files
wecom_it_smart_desk/docs/10-项目管理/05-项目状态看板/01-项目状态看板.md
T

388 lines
23 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.
# 企微IT智能服务台 — 项目状态看板
> 📌 **这个文件就是项目的"驾驶舱仪表盘"**。任何时候新开 session,**先读这个文件就懂上下文**。
>
> 📝 **更新规则**:每次 Claude 完成 / 开始 / 阻塞重要任务,会主动更新本文件。你也可以自己改(纯 markdown,git 跟踪)。
最后更新:**2026-07-09**(WS 子协议修复部署生产 + 合入 origin/main;方案A E2E 2026-07-08 通过;+ 日志体系 5 项决策登记 #101#104)
---
## 🎯 一句话总览
**v0.7.1 已上线运行,生产稳定**。知识库迭代 v0.7.2 全链路交付完成:
**已完成 (v0.7.1)**:
- ✅ 企微入口 SSO
- ✅ 管理后台 RBAC6处装饰器修复, 5/5 PASS
- ✅ 敏感词检测(隐私正则 \b→\d 修复, 89/89 PASS
- ✅ 扫码登录优化(iOS NSURLError 修复)
- ✅ 文档优化专项(已完成)
**v0.7.2 知识库迭代(✅ 全部交付)**:
- ✅ AI 辅助功能增强
- ✅ 排查流程优化
- ✅ 知识库迭代(Tier0+Tier1+可视化+去重+串联闭环, 49文件 169/169 PASS
**P1/P2功能开发任务 ✅ 全部完成**:
- ✅ 阶段2 (P1): 摇人按钮、满意度评价、排队系统、快速回复、知识库基础
- ✅ 阶段3 (P2): AI Wingman、会话标注、自动摘要
- ✅ 阶段4 (P2): 数据看板、知识库自动迭代(含图谱可视化+合并去重)
- 📋 详细规格: `docs/02-产品需求/功能详细规格说明书-P1P2功能.md`
**文档优化专项 (2026-07-04) ✅ 已完成**:
- ✅ 扫描并整理 docs/ 目录全部文档
- ✅ 规范化目录结构(01-11 编号体系)
- ✅ 恢复归档文档到正确位置
- ✅ 整理 10-项目管理 目录
- ✅ 整理 03-技术架构 目录
---
## 🟢 正在做(in_progress,1 件)
| # | 任务 | 说明 |
|---|---|---|
| #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验证通过 ✅
## 🔬 方案A 消息发送延时改造 — E2E 验真 (2026-07-08) ✅ 通过
> 真实浏览器端到端实测(系统 Chrome + Playwright)。报告:`docs/06-测试质量/方案A-消息发送延时-E2E验证报告-20260708.md`,截图:`docs/06-测试质量/e2e-screenshots/`
**验证结论**:✅ 员工端发送消息**瞬时返回不阻塞 UI**(点击 1.26s 返回,`ai_reply:null`),AI 回复经 **WebSocket 打字机流式**推送(收到 `ai_reply_chunk` **343 帧**2.3s 起渲染,Duckula 头像 + 1469 字完整内容正常)。
**⚠️ 顺带修复 1 个真实后端 bug(生产相关)**:WebSocket 握手时浏览器用子协议 `bearer.{token}` 传 token,后端 `ws_manager.connect/connect_employee` 读了 token 却未在 `accept()` 回显子协议 → 浏览器拒绝握手。此前被 3s 轮询兜底**掩盖**,生产坐席/员工 WS 实际走了轮询而非流畅打字机。已修复 `accept(subprotocol=...)`
**✅ 已部署生产 (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)。
**另修复 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 |
- `tests/test_content_moderation.py`11/13,2 失败即隐私 Bug 证据)
- `tests/test_rbac_verification.py`3/52 失败即 422 Bug 证据)
## 🔬 #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 散落到多个 commit400ce3d / 9bb080d / ba068d3 等)。
- ⏳ Task #1(端到端真实效果验证):pending — 待真实企微账号换头像→退出重登实测
- ⏳ Task #2(手动刷新兜底按钮):pending
- ⏳ Task #4(补 SSO/JS-SDK employee upsert 头像):pending
**下一步建议**:直接进 Task #1 端到端验真(最快闭环 #75 真实效果),或开 Task #2 兜底按钮(不依赖重登提升可用性)。等你通知启动。
## ✅ 最近搞定
### 2026-07-06 P1功能开发完成
-**P1-25 满意度评价**:会话结束后5星+表情评价,含文字反馈;后端API + H5弹窗 + 坐席端自动发送邀请 + 管理后台统计
### 2026-07-05 生产问题修复
-**坐席端消息列表 500 错误**:添加 `current_agent` 参数到 `list_messages` 函数
-**坐席端消息发送失败**:安装缺失的 `wordfilter` 模块,补充文档
-**文档补充**:更新 requirements.txt 和部署手册,新增 Python 依赖管理章节
- 📝 详细记录(已并入 [标准故障排查手册](../../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-04 下午 (#90 身份认证修复 + 部署)
-**#90 Portal→H5 token传递修复**:路由守卫接收token后调用`fetchEmployeeInfo()`获取用户信息,修复token存在但用户信息未初始化的认证问题
-**#90 生产部署成功**:H5 前端已构建并部署到生产服务器 (10.90.5.110)Nginx 已重载
---
## 🔴 P0 必做(下一个 sprint)
| # | 任务 | 重要程度 | 说明 |
|---|---|---|---|
| #48 | v1.0 收窄 set_real_ip_from | 🔴 P0 | 现 allow 0.0.0.0/0 是临时方案,正式上线前必须改精确代理 IP |
| #81 | 敏感词检测 + 语气优化 | 🔴 P0 | v0.7.1 开发内容,文本安全过滤 ⚠️验真:隐私检测Bug+仅警告 |
| #90 | 身份认证问题修复 | ✅已完成 | ✅Portal→H5 token传递修复:路由守卫接收token后调用fetchEmployeeInfo()获取用户信息 |
| #104 | 运行期结构化日志查看页(D) | 🔴 P0 | 决策4:落地「按级别/时间筛选 + 下载」页面与后端接口(`GET /api/admin/runtime-logs`),权限 admin;产品规格见 `docs/04-功能设计/系统日志与审计日志-产品与设计.md`;状态:待开发 |
---
## 🟡 P1 重要(看时间做)
| # | 任务 | 说明 |
|---|---|---|
| #73 | 修后端文件未真正覆盖 | `yes | cp -f` 路径,部署时偶尔没生效 |
| #86 | 排查流程图零依赖部分 review + 文档化 | 把 Mermaid 流程图从代码里剥离成可读文档 |
| #88 | 管理后台 RBAC 角色权限 | 管理后台细粒度角色权限(大功能,2-3 天) 🔴验真:admin_users鉴权422失效 |
| #83 | 澄清"OTM 跟项目关系" | 已 2026-06-21 决策:走 TOTP+SMS 双引擎(MFA Phase 2 实施) |
| 🆕 | 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分钟后标记待关闭 |
| 🆕 | 修 64 pre-existing 测试失败 | Role.data_scope 缺字段 / WecomService DI / test_message_experience 等 |
| #75 | 头像同步功能完善 | 登录全路径强制同步 + 前端首字降级;代码已交付(12/12 单测 + 103 回归),**业务效果待端到端验真** | 🆕 等用户通知执行 |
| #101 | 管理后台日志命名区分(决策1) | 侧边栏「系统日志」明确区分「配置变更历史(A)」与「安全审计日志(B)」,避免管理员混淆;状态:待开发 |
| #102 | 配置变更 A+B 双写边界确认(决策2) | 维持 `PUT /api/admin/configs/{key}` 同时写 `config_change_logs``audit_logs``config_change` 事件,不收敛;代码已实现,本文档锁定边界;状态:设计中 |
| #103 | 配置变更历史页筛选(决策3) | A 页补充「配置键/操作人/时间」筛选,后端 `GET /api/admin/system-logs` 增加对应过滤参数;状态:待开发 |
---
### 🎯 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人日 | ✅已完成 |
| 🆕 P2-13 | 知识库自动迭代 | AI分析高频+建议更新+图谱可视化+合并去重+会话闭环 | 7人日 | ✅全链路(2026-07-08: 49文件, 169/169 PASS) |
---
## 🟢 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-07-04 上午 (文档优化专项)
-**文档全面扫描**:扫描 docs/ 目录下全部约 100 个文档,识别缺失/冲突/异常内容
-**问题清单识别**:发现 6 个关键问题(用户手册空白、看板过期、KPI缺失等)
-**行业最佳实践对比**:对比 ServiceNow/Zendesk/ITSM 行业基准
-**Portal token 传递修复**:修复 backend/app/api/portal.py 身份认证问题
### 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 流程就绪)
-**#59 admin token 生成命令固化**:`backend/scripts/gen_admin_token.py` + `docker exec` 单行命令,可复现)
-**新发现**:`/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 凌晨(自动跑批)
-**#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(凌晨 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)
- ✅ Gitea token 撤销流程已文档化(旧 token 已 revoke,新 token 已签发)
#### 🐛 测试修复(#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 选重点)
#### 🛠️ 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 之间的"工作交接本"。有问题改这里就行。**