本提交为 .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-*/
8.6 KiB
测试报告 — REQ-会话-001 员工结束会话 v1.3.1 / v1.3.2 端到端 QA
报告版本: v1.3.2 日期: 2026-07-27 需求编号: REQ-会话-001 测试类型: 单元测试 + 生产构建验证(端到端代码层) 关联 PRD:
01-产品文档/02-会话管理/PRD-REQ-会话-001-员工结束会话-v1.4.md关联技术方案:02-技术文档/技术方案-REQ-会话-001-员工结束会话-v1.4.md关联任务说明书:07-项目管理/任务说明书/任务说明书-REQ-会话-001-员工结束会话v1.4.md测试结论: ✅ 通过(单测 75/75 + 生产构建成功);🔶 分歧 1(状态条)已于 v1.4(2026-08-03)产品拍板闭环(删除状态条)
一、测试范围
| 子版本 | 变更主题 | 验证目标 |
|---|---|---|
| v1.3.1 | 引导语 BugFix | computeGuideText 场景 1(无会话)/ 场景 2(AI<3 轮)返回 null,避免与 ChatPanel 顶部"输入问题咨询..."重复引导 |
| v1.3.2 | InputBar 布局 BugFix | 操作按钮(call-agent-btn)从 InputBar 工具栏移除,整合入 IntegrationZone(状态条+6 态按钮+进度胶囊+引导语) |
关联回归:v1.3 智能推荐 30 分钟抑制白名单(
recommend.test.ts)一并回归,防止整合区改造波及推荐逻辑。
二、测试环境
| 项 | 值 |
|---|---|
| 前端框架 | Vue 3 + TypeScript + Vite |
| 测试框架 | Vitest v4.1.10(node 环境,纯函数测试) |
| 被测代码路径 | src/frontend-h5/src/components/chat/ |
| 代码基线 | git feature/message-reliability @ f9c25147 |
| 构建产物 | src/frontend-h5/dist/(✓ 528 模块,built in 2.53s) |
三、测试结果汇总
| 测试文件 | 用例数 | 结果 | 覆盖子版本 |
|---|---|---|---|
inputBarGuideText.test.ts |
15 | ✅ 通过 | v1.3.1 |
integrationZoneLogic.test.ts |
44 | ✅ 通过 | v1.3.2 |
recommend.test.ts |
16 | ✅ 通过 | v1.3 回归 |
| 合计 | 75 | ✅ 75 passed (0 failed) | — |
RUN v4.1.10
✓ src/components/chat/inputBarGuideText.test.ts (15 tests) 5ms
✓ src/components/chat/integrationZoneLogic.test.ts (44 tests) 8ms
✓ src/stores/recommend.test.ts (16 tests) 54ms
Test Files 3 passed (3)
Tests 75 passed (75)
四、关键验证点
4.1 v1.3.1 — 引导语场景 1/2 返回 null
源文件:src/frontend-h5/src/components/chat/inputBarGuideText.ts → computeGuideText(ctx)
| 场景 | 判定条件 | 期望返回 | 验证 |
|---|---|---|---|
| 1 无会话 | !currentConversation |
null |
✅ 避免与 ChatPanel 顶部"输入问题咨询,或点击下方'人工坐席'按钮"重复 |
| 2 AI<3 轮 | status==='ai_handling' && !canCallAgent |
null |
✅ 用户已与 AI 对话,底部"请继续描述"显啰嗦(v1.3.2 优化) |
| 3 坐席离线 | !agentOnline |
null |
✅ 注:v1.3.5 已移除该场景引导语(产品决定不显示离线描述) |
| 4 会话过期 | status==='resolved' && !canReopen |
⏰ 上一会话已过期,开始新对话吧 |
✅ 保留 |
设计意图(PRD §3.3):引导语仅 disabled 态显示,且与按钮态计算共享同一
callAgentState调用栈,永不同步错位。
4.2 v1.3.2 — InputBar 布局 / IntegrationZone 整合
源文件:integrationZoneLogic.ts(纯逻辑)+ IntegrationZone.vue(容器)+ InputBar.vue(瘦身)
| 验证项 | 期望 | 验证 |
|---|---|---|
| InputBar 工具栏 | 仅 😊 📎 [输入框] [发送],无操作按钮 |
✅ 操作按钮(call-agent-btn)已迁移至 IntegrationZone |
| IntegrationZone 6 态按钮 | disabled/active/urgent/waiting/end/reopen 文案/图标/title 由 inputBarCallAgentState 复用 |
✅ 44 用例覆盖全部态 |
| 点击意图映射 | computeCallAction:end→endConversation / reopen→reopenConversation / waiting→cancelQueue / active |
urgent→callAgent / disabled→none |
| 引导语渲染 | shouldRenderGuideText(text):非 null 才渲染;computeIntegrationGuideClass 处理 warn 变体 |
✅ |
| 生产构建产物 | dist/assets/index-Dc6ilDe1.js 含 IntegrationZone / integration-zone__guide / call-agent-btn--reopen |
✅ grep 命中 |
五、生产构建验证
vite build
✓ 528 modules transformed.
dist/assets/index-Dc6ilDe1.js 370.72 kB │ gzip: 135.16 kB
✓ built in 2.53s
- 编译:528 模块全部转换成功,无 TypeScript / 语法错误。
- 产物:v1.3.2
IntegrationZone组件已进入主包,确认功能代码真实进入生产 bundle。 - 备注:首次构建因 WorkBuddy
safe-delete拦截dist/assets清理失败(已知铁律:assets>50 文件时需先mv dist dist_bak);按铁律改名后二次构建成功。此属工具约束,非代码缺陷。
六、发现的缺陷 / 分歧
✅ 分歧 1(已闭环):PRD v1.3 ↔ 代码 v1.3.5 状态条(Status Bar)不一致
| 视角 | 描述 |
|---|---|
| PRD v1.3 / 技术方案 v1.3 | §11.4 决策 1「状态条永久显示」、§11.6「前端硬编码 SHIFT_HOURS='9:00-18:00'」、IntegrationZone.vue 实际仍渲染状态条(import shiftHours、buildStatusBarText) |
| 代码 v1.3.5 注释 | integrationZoneLogic.ts:16「:37「v1.3.5 状态条已删除」;inputBarGuideText.ts:63「用户拍板删除状态条 + 离线描述」 |
| 代码内部不一致 | IntegrationZone.vue 仍渲染状态条,但 integrationZoneLogic.ts 注释称已删除 → 半完成清理 |
拍板结果(2026-08-03):以 v1.3.5 代码为准 —— 删除整合区状态条(不向员工暴露坐席在线/离线)。该决策已在 v1.4 三件套(PRD / 技术方案 / 原型)完整落地:
- PRD §3.4 / §11.4 决策 1 由「✅ 永久显示」反转为「❌ v1.4 删除」;整合区由 4 元素降为 3 元素(操作按钮 + 进度胶囊 + 引导语)。
- 技术方案 §D.3 状态条文案生成函数标记(v1.4 已移除),
src/utils/shiftHours.ts取消新增;IntegrationZoneProps.shiftHours预留为后端班次字段(当前无渲染)。 - 原型 9 个状态条 mockup 全部移除,9.6 表新增第 6 行「状态条反转(v1.4)」。
处置:✅ 已闭环。文档与线上行为恢复一致;TR 本报告结论由「⚠️ 待拍板」升级为「✅ 已闭环」。
🔶 分歧 2(历史遗留,不在本次范围)
- 其他文档(
04-运维文档/部署运维/00-标准故障排查手册.md、任务说明书-REQ-AI-001-打字机效果.md、08-历史归档/...、BUG-用户-坐席离线未限制呼叫人工-001.md)仍存 UTF-8 乱码(U+FFFD),非本次 7 文档合并范围,建议后续专项扫描修复。
七、部署验证状态
| 项 | 状态 |
|---|---|
| 代码提交 | ✅ 已提交 feature/message-reliability @ f9c25147(含 v1.3.1/v1.3.2 全部改动) |
| 生产构建 | ✅ 本地构建成功(dist/ 已生成,可发布) |
| 服务端部署 | 🟡 待执行 — 需走标准发布流程(构建 dist → 上传服务器 /opt/wecom-it-desk/frontend-h5/dist → docker compose up -d nginx) |
依据项目铁律「宣布修复前必须端到端验证」:本 QA 完成代码层端到端(单测 + 构建 + 产物 grep),服务层端到端(线上 H5 实测)需在部署后由 agent-browser 或人工在
https://itsupport.servyou.com.cn/h5/验证。
八、结论与建议
- ✅ v1.3.1 / v1.3.2 功能正确性经 75 条单测 + 生产构建双重验证通过。
- ✅ 整合区(IntegrationZone)已正确收纳操作按钮,InputBar 工具栏瘦身符合设计。
- ✅ 状态条分歧(原分歧 1)已于 v1.4(2026-08-03)产品拍板闭环:删除整合区状态条,整合区降为三元素,文档与线上行为恢复一致。
- 🟡 服务端部署验证建议纳入发布 checklist,部署后补一次线上冒烟。
附录 A · v1.4(2026-08-03)状态条删除闭环记录
- 拍板:以 v1.3.5 代码为准,删除整合区状态条(不向员工暴露坐席在线/离线)。
- 文档落地:PRD v1.4 / 技术方案 v1.4 / 原型 v1.4 三件套同步反转,整合区由 4 元素降为 3 元素。
- 代码落地:
IntegrationZone.vue状态条渲染移除,src/utils/shiftHours.ts取消新增;v1.4 生产构建成功(任务Y8WEtB,528 模块,built in 3.27s)。 - 关联 TR 状态:本报告分歧 1 由「⏸️ 待拍板」升级为「✅ 已闭环」。
报告结束 — Duckula / 2026-08-03(v1.4 闭环更新)