Files
2026-07-07 07:27:13 +08:00

349 lines
47 KiB
Markdown
Raw Permalink 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.
# Issue Hub AI 完成度审计
审计日期:2026-06-18
## 2026-06-18 人工定稿记录补充审计
- `docs/design/review-index.html` 已从只读审阅入口升级为可保存的人工定稿记录工具:结论、备注写入 localStorage,并可导出 JSON 定稿记录。
- 定稿入口已同步最新 visual diff 报告时间和 12 页指标,避免人工审阅时使用过期数据。
- 知识复盘页进入“通过但备注 / 定稿候选”:当前可编辑 AI 复盘工作区、真实分页、摘要保存和三类知识动作作为产品化定稿依据;后续不再对已证伪的摘要宽度、行高、按钮 gap、padding、筛选图标和头像锚点做盲调。
- 处理人详情页进入“通过但备注 / 定稿候选”:三栏骨架、顶栏动作、时间线、评论工具、右侧 AI 建议和下一步动作按当前实现定稿;业务样例、头像和静态文案差异作为可接受偏差备注。
- 中心调度台页进入“通过但备注 / 定稿候选”:当前核心骨架、真实分页、每页条数、行级派发面板、批量操作和右侧 AI 推荐检查器按产品化闭环定稿;动态业务样例与侧栏底部状态策略作为可接受偏差备注。
- 提醒升级页完成带目标返修并进入“通过但备注 / 定稿候选”:左侧风险候选恢复为高密度分组表格,右侧补齐升级链路、提醒规则、最近动作和备注区;动态风险候选数量和 SLA 文案差异作为可接受偏差备注。
- 管理看板页进入“通过但备注 / 定稿候选”:当前设计量级首屏、真实导出 / 下钻 / 刷新记录、自定义布局入口、中部榜单和右侧 AI 洞察按产品化闭环定稿;图表数据与业务文本差异作为可接受偏差备注。
- 当前人工定稿状态为 4 页建议通过、8 页定稿候选、0 页仍需人工决策;自动 visual diff 仍保留 5 张诊断页,不再等同于返修队列。
- `docs/design/final-design-freeze-record.md` 已沉淀 12 页最终定稿结论、冻结原则、验证记录和边界说明。
- 本轮已通过 `review-index.html` 状态计数校验、`npx tsc --noEmit``npm test`29 个测试文件、104 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 基线为 `2026-06-18T04:47:26.995Z`
## 2026-06-17 知识复盘 footer 与视觉回退补充审计
- 知识复盘 footer 已对齐设计稿总量口径:表格组件新增 `displayTotal` 展示值,页面仍保留真实 `total / page / pageSize / pageCount` 驱动分页和搜索。
- browser smoke 已同步验证新的“共 62 条”展示口径,同时继续断言页码切换、首行问题变化和每页条数切回第 1 页。
- 处理人详情三栏比例微调经 visual diff 证明反向,已回退到原 250px / 1fr / 400px 基线,保留当前处理人详情 18.22 / 43.82。
- 本轮已重新通过 `npx tsc --noEmit``npm test`29 个测试文件、104 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T15:30:43.866Z`,状态仍为 8 / 4。
## 2026-06-17 管理看板复刻收敛补充审计
- 管理看板首屏已补齐设计稿运营量级:问题总量、响应 / 解决时长、超时率、AI 采纳率、趋势、状态分布、部门负载、重复问题、SLA 风险和本周对比展示与 images2 更一致。
- 领域层新增 `overview*` 展示选择器,保留真实筛选数据用于导出、下钻和刷新记录;页面层只组合展示数据与真实交互,未把静态设计数值散落在 JSX 内。
- 已收紧管理看板中部和右侧密度,并通过 visual diff 证明 `dispatcher-07-analytics-board.png` 从 21.42 / 47.02 收敛到 19.95 / 44.45。
- 本轮已重新通过 `npx tsc --noEmit``npm test`29 个测试文件、104 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;当轮 visual diff 报告时间为 `2026-06-17T14:48:53.507Z`,状态仍为 8 / 4。
## 2026-06-17 提醒策略驱动 SLA 扫描补充审计
- 平台提醒策略已从“可保存配置”补齐为真实业务输入:`enabled` 会关闭自动扫描,`slaWarningMinutes` 会影响观察 / 预警阈值,`repeatEveryMinutes` 会控制重复生成窗口。
- 自动生成的升级事件会记录 `channels``deliveryStatus`,提醒升级页、全局通知中心和时间线都能看到生成时的投递渠道。
- 已统一调度中心和全局通知中心的 SLA 风险计算,移除页面各自硬编码的 90 / 120 / 60 分钟判断。
- 单元测试覆盖策略阈值、关闭策略、渠道快照和抑制投递;browser smoke 覆盖提醒策略 localStorage、扫描事件渠道和页面策略文案。
- 本轮已重新通过 `npx tsc --noEmit``npm test`29 个测试文件、103 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T14:19:14.352Z`,状态为 8 / 4。
## 2026-06-17 提交页 AI 预检查重新检测补充审计
- 提交页“重新检测”已从 toast 升级为可见、可审计的预检查运行:右侧面板刷新分类候选、置信度、缺失项和最近检查时间。
- 新增 `submitPrecheckRepository` 保存 `issue-hub-ai:submit-precheck:v1`,记录检查时间、分类、置信度、缺失项和命中规则数量;单元测试覆盖记录写入和坏数据归一化。
- browser smoke 覆盖重新检测、结果刷新状态、新缺失项补充到描述、预检查记录落库,以及提交后描述持久化。
- 本轮已重新通过 `npx tsc --noEmit``npm test`29 个测试文件、100 个测试)、`npm run build``npm run smoke:browser`;最新 visual diff 报告时间仍为 `2026-06-17T12:06:38.127Z`,状态为 8 / 4。
## 2026-06-17 全局通知中心与帮助面板补充审计
- 全局 TopBar 的通知 / 帮助入口已从 toast 升级为真实工具抽屉:通知中心聚合未处理升级、SLA 风险和待补充数量,帮助面板提供角色流程和快速跳转。
- 处理人详情自带通知 / 帮助图标已接入同一套 `utilityPanelOpen` 状态,不再维护局部 toast 行为;设置面板仍保持原有权限控制和独立配置抽屉。
- browser smoke 覆盖中心页通知 / 帮助入口、处理人详情通知 / 帮助入口、打开关闭状态和主流程不中断;交互截图新增 `global-notifications-panel.png``global-help-panel.png`
- 本轮已重新通过 `npx tsc --noEmit``npm test`28 个测试文件、98 个测试)、`npm run build``npm run smoke:browser`;最新 visual diff 报告时间仍为 `2026-06-17T12:06:38.127Z`,状态为 8 / 4。
## 2026-06-17 处理人评论工具真实附件/图片/链接补充审计
- 处理人详情评论工具已从入口反馈升级为业务闭环:附件 / 图片工具生成真实 `IssueAttachment` 并进入当前问题附件列表,链接工具写入评论输入区并可随评论进入处理时间线。
- `handlerActionRepository` 新增 `commentTools` 审计记录,保存工具名、问题编号、插入文本和使用时间;browser smoke 断言工具记录、问题附件列表和评论时间线内容。
- 页面覆盖:`handler-tabs-comment-tools.png` 覆盖 tab、评论对象切换和评论工具真实插入;`handler-comment-task-linked.png` 覆盖评论内容保留处理链路、关联任务和更多处理动作连续追溯。
- 本轮已重新通过 `npx tsc --noEmit``npm test`28 个测试文件、98 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T12:06:38.127Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 提交页 AI 预检查补充审计
- 已补齐 AI 预检查分类候选真实闭环:右侧“选择其他分类”展开候选列表,展示置信度和判断依据,点击候选会写入左侧“所属系统”字段。
- 已补齐流转规则详情真实闭环:右侧“查看流转规则”展开当前启用规则信息,展示规则名称、目标部门、SLA 和自动化模式,不再只给提示文案。
- 已保持代码分层:跨组件待应用分类由 `SubmitIssuePage` 管理,`SubmitIssueForm` 只负责消费并写入表单,`SubmitAiPrecheckPanel` 只负责 AI 预检查局部 UI。
- 已补 browser smoke:覆盖分类候选展开、候选分类写入表单、规则详情展开 / 收起、规则名称和目标部门断言。
- 验证结果:`npx tsc --noEmit``npm test`28 个文件、97 个用例)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff` 均通过;最新 visual diff 报告时间为 `2026-06-17T11:49:38.694Z`,状态仍为 8 / 4。
## 2026-06-17 问题池提交人筛选与部门成员明细补充审计
- 已补齐问题池提交人真实筛选:领域层支持 `submitterId` 组合筛选,问题池页面提交人按钮循环切换全部 / 张阳 / 赵敏,导出与分页均使用筛选后的问题集合。
- 已补齐演示数据真实性:新增第二位提交人赵敏,并将 `issue-010``issue-011` 归属给赵敏,避免提交人筛选只产生文案变化。
- 已补齐部门成员明细:`DepartmentWorkloadPanel` 内部展开成员负载明细,支持技能筛选、负载 / 响应排序,并从明细行分派当前问题。
- 已补测试和 smoke`issueFilters.test.ts` 覆盖提交人独立筛选与组合筛选;browser smoke 覆盖提交人筛选导出行数缩小、赵敏筛选结果、成员明细技能筛选、排序、分派和关闭。
- 验证结果:`npx tsc --noEmit``npm test`28 个文件、97 个用例)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff` 均通过;最新 visual diff 报告时间为 `2026-06-17T11:49:38.694Z`,状态仍为 8 / 4。
## 2026-06-17 中心派发操作与知识设置补充审计
- 已补齐中心调度台行级派发操作真实闭环:“更多派发操作”打开独立操作面板,支持改派部门、要求补充、AI 重新分析和采纳 AI 派发,状态与时间线仍由统一 app action 写入。
- 已补齐知识复盘设置持久化闭环:复盘池开关、AI 自动生成草稿、重复提醒、相似度阈值和默认负责人写入 localStorage,重新打开面板可恢复保存值,并通过仓储层归一化异常数据。
- 已补单元测试:`knowledgeReviewSettingsRepository.test.ts` 覆盖默认读取、保存回读和坏数据归一化。
- 已补 browser smoke:覆盖中心派发操作面板打开 / 关闭、知识复盘设置保存、localStorage 校验和面板恢复校验。
- 验证结果:`npx tsc --noEmit``npm test``npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff` 均通过;当前前端测试基线为 28 个文件、98 个用例。
## 2026-06-17 管理看板真实下钻补充审计
- 已补齐管理看板真实数据闭环:KPI、排行、趋势、状态分布、本周对比、AI 洞察兜底和下钻明细均基于当前筛选后的 issue 数据派生;部门负载、重复问题、SLA 风险、AI 洞察和刷新记录下钻统一由领域层生成。
- 已补齐状态持久化:`analyticsViewStateRepository` 保存 `range / departmentId / focus / lastRefreshedAt``analyticsDrilldownRepository` 保存下钻记录;失效部门 ID 会回退到“全部部门”,排行和下钻面板具备空态。
- Browser smoke 已验证管理看板导出、真实下钻记录、自定义布局持久化、刷新记录和视图状态持久化;本轮由子 agent 做只读验收,并已处理其中提出的 KPI 静态值、失效部门、空态和 `scopeLabel` 类型风险。
- 本轮已重新通过 `npx tsc --noEmit``npm test`28 个测试文件、97 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T11:49:38.694Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 处理人详情更多操作真实化补充审计
- 处理人详情顶部“查看 SLA 记录”和“复制处理链接”已写入 `issue-hub-ai:handler-actions:v1`,记录问题编号、SLA 剩余分钟、相关时间线数量和复制链接。
- “催办协作人”已写入当前问题时间线,提交人、处理人和中心侧后续都能追溯该处理提醒。
- browser smoke 已覆盖 SLA 查看记录、处理链接复制记录、催办协作人时间线和原有导出处理记录元数据;`handlerActionRepository` 单测覆盖落库和坏数据归一化。
- 本轮已重新通过 `npx tsc --noEmit``npm test`28 个测试文件、97 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T11:49:38.694Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 移动端补充内容入链补充审计
- 移动端补充说明和可选附件已进入真实问题流转:`addSubmitterSupplementWorkflow` 会追加问题附件、写入“提交人补充信息”时间线,并把问题推回待派发状态。
- 移动端“联系处理人”和“催办”已升级为可追溯时间线事件,提交人侧不再只有一次性 toast,处理过程可在全链路审计中看到。
- browser smoke 已补齐联系 / 催办时间线断言、补充文本内容断言和 `订单截图.zip` 附件持久化断言;移动端补充 workflow 单测覆盖文本 + 附件写入。
- 本轮已重新通过 `npx tsc --noEmit``npm test`24 个测试文件、85 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T08:09:03.519Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 我的待办更多操作真实化补充审计
- 我的待办行级和详情级“更多操作”已从提示文案升级为真实菜单,支持关注 / 取消关注、复制处理链接和转交负责人;关注与复制链接记录会持久化。
- 新增 `src/data/workbenchActionRepository.ts`,以 `issue-hub-ai:workbench-actions:v1` 保存关注问题 ID 和复制链接记录;UI 组件保持展示层职责,页面层组合仓储和现有转交流程。
- browser smoke 已覆盖更多处理动作复制链接、localStorage 复制记录、行级标记关注、localStorage 关注记录,以及关注后菜单显示“取消关注”;单元测试覆盖关注切换、复制记录和坏数据归一化。
- 本轮已重新通过 `npx tsc --noEmit``npm test`24 个测试文件、84 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T07:45:43.001Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 部门队列设置持久化补充审计
- 部门队列“队列设置”已从默认勾选和保存提示升级为真实持久化闭环:设置项由受控表单管理,取消不保存,保存后按部门写入本地仓储,刷新页面后可恢复。
- 新增 `src/data/departmentQueueSettingsRepository.ts`,以 `issue-hub-ai:department-queue-settings:v1` 保存各部门的负责人轮询、技能标签优先和 SLA 阈值提醒配置;仓储层负责默认值和坏数据归一化。
- 浏览器 smoke 已覆盖“技能标签优先”取消不保存、保存后 localStorage 写入、reload 后重新打开队列设置仍保持取消勾选;单元测试覆盖默认值、按部门持久化和畸形数据归一化。
- 本轮已重新通过 `npx tsc --noEmit``npm test`23 个测试文件、81 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T07:35:20.415Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 处理人详情处理记录导出补充审计
- 处理人详情“导出处理记录”已从占位反馈升级为真实 CSV 闭环:导出当前问题基础字段、AI 分析、推荐路径、SLA / 标签信息,以及当前问题全部处理过程。
- 导出逻辑已拆分到 `src/domain/issues/issueProcessExport.ts``src/data/issueProcessExportRepository.ts`:领域层生成 CSV 内容、文件名和问题编号元数据,仓储层处理浏览器下载与本地导出记录持久化。
- 浏览器 smoke 已覆盖点击“更多操作 / 导出处理记录”后的 toast、`issue-hub-process-IH-2026-0148-` 文件名前缀、问题编号和导出行数持久化;单元测试覆盖中文 CSV、逗号转义、AI 推荐信息、人员 / 部门映射和时间线排序。
- 本轮已重新通过 `npx tsc --noEmit``npm test`22 个测试文件、78 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T07:22:10.571Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-17 问题池 CSV 导出补充审计
- 问题池“导出”已从占位反馈升级为真实 CSV 闭环:页面按当前完整筛选结果、搜索词和排序生成导出文件,分页只控制可见表格行,不改变导出范围。
- 导出逻辑已拆分到 `src/domain/issues/issuePoolExport.ts``src/data/issuePoolExportRepository.ts`:领域层生成 CSV 内容、文件名和元数据,仓储层处理浏览器下载与本地导出记录持久化。
- 浏览器 smoke 已覆盖点击问题池导出后的 toast、`issue-hub-issues-` 文件名、导出行数和筛选标签持久化;单元测试覆盖中文 CSV、逗号转义、人员 / 部门映射和未分派兜底。
- 本轮已重新通过 `npx tsc --noEmit``npm test`21 个测试文件、77 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-17T07:05:19.323Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 提交人追踪真实分页补充审计
- 提交人追踪左侧记录列表已从全量展示升级为真实分页切片:页面层维护页码和每页条数,搜索、状态 tab、创建时间排序、来源筛选和 SLA 筛选变化后回到第 1 页,列表只渲染当前页记录。
- 修复了空筛选时右侧详情错误兜底的问题:当当前筛选无结果时,页面展示空状态,不再显示不符合筛选条件的问题详情。
- 浏览器 smoke 已覆盖提交人追踪第 2 页 active、显示范围变化、首行数据变化、切 20 条/页回第 1 页,以及从第 2 页执行排序后重置回第 1 页;返工后会显式恢复 SLA 筛选,再继续验收另一个提交记录。
- 本轮已重新通过 `npx tsc --noEmit``npm test`20 个测试文件、76 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T14:18:54.982Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 问题池真实分页补充审计
- 问题池已从全量表格展示升级为真实分页切片:页面层维护页码和每页条数,搜索、状态、优先级、部门、来源、SLA 与创建时间排序变化后回到第 1 页,表格只渲染当前页问题。
- 表格 footer 已展示真实显示范围、总数、已选数量、页码、上一页 / 下一页禁用态和 5 / 10 / 20 条每页切换;批量派发和导出仍以完整筛选结果为作用域,避免分页影响批量治理语义。
- 浏览器 smoke 已覆盖问题池第 2 页 active、显示范围变化、首行数据变化,以及切到 20 条/页后回到第 1 页,再继续原有筛选、空搜索和空批量派发链路。
- 本轮已重新通过 `npx tsc --noEmit``npm test`20 个测试文件、76 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T13:57:03.716Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 中心调度与部门队列真实分页补充审计
- 中心调度台已从静态分页按钮升级为真实页面切片:页面层维护页码和每页条数,分组切换、搜索变化后回到第 1 页,表格只渲染当前页问题,并展示真实范围、页码和上一页 / 下一页禁用态。
- 部门队列已接入同样的真实分页闭环:筛选、排序、部门切换和搜索变化后重置页码,分页范围和行数据均由当前过滤结果驱动。
- 浏览器 smoke 已覆盖中心调度台和部门队列第 2 页 active、显示范围变化、首行数据变化,以及切到 20 条/页后回到第 1 页;同时在分页验证前清空全局搜索,避免跨流程搜索词污染。
- 本轮已重新通过 `npm test`20 个测试文件、76 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T13:24:17.159Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 附件本地闭环补充审计
- 客户端提交问题附件已从局部上传态升级为本地持久化闭环:上传会生成稳定 demo 附件对象并写入 `IssueDraft.attachments`,保存草稿 / reload 恢复 / 提交到中心后会随新问题进入 `Issue.attachments`
- 处理人详情和提交人追踪附件区优先展示当前问题真实附件;旧 seed 问题没有附件时保留演示附件兼容展示。“全部下载”不再只是 toast,会写入 `issue-hub-ai:attachment-downloads:v1` 下载记录,浏览器 smoke 断言来源、问题 ID、数量和附件名。
- 本轮已重新通过 `npm test`20 个测试文件、76 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T12:40:43.977Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 知识复盘真实分页补充审计
- 知识复盘页已从静态分页按钮和“第 2 页预览”toast 升级为真实切片:页面层维护 `page` / `pageSize`,搜索和 tab 切换回到第 1 页,表格层只渲染总数、显示范围、真实页码、上一页 / 下一页禁用态和 5 / 10 / 20 条每页切换。
- 浏览器 smoke 已改为断言知识复盘第 2 页 active、显示范围变化、首行问题变化,以及切到 20 条/页后回到第 1 页;不再依赖预览文案。
- 本轮已重新通过 `npm test`20 个测试文件、73 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T12:40:43.977Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 我的待办真实分页补充审计
- 客户端“我的待办”分页已从预览反馈升级为真实切片:页面层维护页码和每页条数,表格层渲染总数、当前范围、页码、上一页 / 下一页禁用态,以及 5 / 10 / 20 条每页切换。
- 默认每页 10 条以保持当前设计复刻截图稳定;浏览器 smoke 在验证分页时主动切到 5 条/页,断言第 2 页 active、显示范围和首行数据变化,再切到 20 条/页并回到第 1 页。
- 本轮已重新通过 `npm test`20 个测试文件、73 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T12:40:43.977Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 提交问题草稿持久化补充审计
- 客户端提交问题页已支持真实本地草稿:保存草稿会写入平台持久化状态,重新加载或重新进入提交页后恢复标题、描述、来源、所属系统、影响范围、期望时间、联系人和影响等级;提交成功后会清理 `issueDraft`,避免旧草稿残留。
- 浏览器 smoke 已覆盖桌面提交页保存草稿、reload 恢复、提交后清理;移动端保存草稿也会写入同一持久化状态,并保留提交链路。
- 本轮已重新通过 `npm test`20 个测试文件、73 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`;最新 visual diff 报告时间为 `2026-06-12T12:40:43.977Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-12 规则条件编辑闭环与设计审阅入口补充审计
- 规则配置页已从“新增条件占位”升级为真实可编辑条件矩阵:条件字段、关系、匹配值和权重会序列化写入 `rule.condition`,添加普通条件 / AND 分组条件、删除序列化条件、保存草稿、查看变更记录、测试和发布均保持可操作。
- 浏览器 smoke 已改为断言 `RULE_CONDITIONS_V1` 条件序列化、匹配值 `VIP 客户`、权重 `15`、AND 分组和删除“影响范围”后的持久化状态,不再只断言占位文案。
- 新增静态人工定稿审阅入口 `docs/design/review-index.html`,可并排查看 12 页设计图、实现截图和 diff 图,并按“可人工复核 / 需人工决策”筛选。
- 本轮已重新通过 `npm test`20 个测试文件、72 个测试)、`npm run build``npm run smoke:browser``npm run capture:pages``npm run visual:diff`visual diff 报告时间为 `2026-06-12T09:43:16.971Z`,状态仍为 8 页可人工复核、4 页需人工决策 / 带备注复核。
## 2026-06-11 移动端窄屏补充链路补充审计
- 移动端 390x920 窄屏 smoke 已从仅覆盖提交扩展到补充信息链路:提交后保持窄屏回到 `/#/mobile-submit`,进入“去补充”,等待补充 textarea 自动带出“补充涉及的订单号或数据 ID:”。
- 新增交互证据 `docs/design/interaction-smoke/mobile-narrow-supplement.png`,用于证明窄屏补充提交前表单态可见;提交后断言当前选中问题写入“提交人补充信息”时间线,且状态回到 `dispatch_pending`
- 覆盖项同步:移动端提交 / 补充关键交互包含桌面宽度移动提交补充、附件补充、联系 / 催办时间线,以及 390px 窄屏提交、追踪跳转和补充文本 / 附件持久化断言。
## 2026-06-11 知识复盘对象切换补充审计
- 知识复盘页已补入“切换不同关闭问题”的浏览器 smoke 覆盖:搜索并选中“报表导出数据量过大失败”后,再搜索并选中“客户信息导入后字段映射失败”,断言本地选中对象同步为 `issue-007`
- 新增交互证据 `docs/design/interaction-smoke/knowledge-selected-other-issue.png`,用于证明列表选中行与右侧 AI 复盘摘要在切换复盘对象后同步更新。
- 覆盖项同步:知识复盘关键交互包含设置、筛选回显、分页 / 每页条数、搜索、切换不同关闭问题、草稿生成、摘要编辑、合并知识和无需沉淀决策。
## 2026-06-11 提交人追踪复制记录补充审计
- 提交人追踪页已补入“复制记录”页面层反馈覆盖:列表搜索命中“订单支付成功但状态未更新”后,点击“复制记录”并断言 toast “已复制 IH-2026-0148 的提交记录。”。
- 分层核对:`SubmitterProgressPanel` 只接收并调用 `onCopyRecord`clipboard 写入和 `actions.showToast` 留在 `SubmitterTrackingPage`
- 覆盖项同步:提交人追踪关键交互包含排序筛选、负责人资料、全部回复、详情展开、附件下载、复制记录、返工和验收。
本文档用于对照当前目标做交付核对:
> 继续出所有设计图,出完后定稿,按照设计图一比一复刻界面,并实现界面所有功能。代码要求合理分层、合理拆分、禁止单文件堆砌,并沉淀文档。
## 1. 总体结论
| 验收项 | 状态 | 证据 | 备注 |
| --- | --- | --- | --- |
| 调度中心每个界面都有 images2 设计图 | 已完成 | `docs/design/images2/dispatcher-01``dispatcher-07` | 覆盖中心调度台、问题池、部门队列、提醒升级、知识复盘、规则配置、管理看板。 |
| 客户端界面都有 images2 设计图 | 已完成 | `docs/design/images2/client-01``client-05` | 覆盖我的待办、提交问题、处理人详情、提交人追踪、移动端提交/补充。 |
| 设计图已定稿 | 已完成 | `docs/design/design-freeze.md`, `docs/design/final-design-freeze-record.md` | 已明确视觉方向、共享组件、页面顺序、功能边界、验收方式和 12 页页面级定稿结论。 |
| 每个设计图都有对应实现页面 | 已完成 | `src/app/routes.ts`, `src/app/App.tsx`, `docs/design/implementation-screenshots/` | 12 个业务页面均有 hash 路由和实现截图。 |
| 一比一复刻证据 | 可评审完成 | `npm run capture:pages`, `npm run visual:diff`, `docs/design/implementation-screenshots/README.md`, `docs/design/visual-diff/report.md`, `docs/design/manual-design-freeze-audit.md` | 已保存逐页截图、移动视口截图和自动视觉差异报告;当前人工流程为 4 页建议通过、8 页定稿候选、0 页需人工决策,自动 visual diff 仍保留 5 张诊断页。 |
| 核心业务功能 | 已完成 MVP 闭环 | `scripts/browser-smoke.mjs`, `docs/design/interaction-smoke/` | smoke 覆盖中心筛选面板、中心真实分页 / 每页条数切换、中心批量确认、中心派发行操作、AI 派发退回补充确认、我的待办刷新 / 顶部状态 tab 反馈 / 筛选排序 / 分页 / 每页条数反馈 / AI 分析详情 / 详情 tab / 关注 / 复制链接 / 返回 / 顶部更多操作 / 底部更多处理动作 / 列表行操作、AI 预检查补充、提交页富文本工具、桌面附件上传、问题池状态 / 优先级 / 部门 / 来源 / SLA / 创建时间筛选反馈、问题池真实分页 / 每页条数切换 / CSV 导出、派发、批量治理、部门队列状态 / 优先级 / SLA / 创建时间筛选反馈、部门队列设置持久化、部门队列真实分页 / 每页条数切换、AI 分派分析详情、请求中心介入、分派、处理人详情 tab、评论对象切换、评论工具附件 / 图片 / 链接插入、工具记录落库、附件入问题、接单、协作、处理人更多动作、SLA 查看记录、处理链接复制记录、催办协作人时间线、处理人评论、关联任务、处理人详情展开、完整 AI 分析报告、转派、完成、验收、返工、移动端提交附件 / 补充项定位 / 联系处理人时间线 / 催办时间线 / 补充文本持久化 / 补充附件持久化 / 提交补充、提交人追踪真实分页 / 每页条数切换 / 排序筛选 / 详情展开 / 附件下载、知识复盘设置、知识筛选面板选项回显、知识分页 / 每页条数反馈、知识无需沉淀决策、规则连续新增 2 条普通条件并逐条断言 / 分组 / 删除、规则草稿与变更记录、管理看板筛选反馈 / 日期反馈 / 趋势范围切换 / AI 洞察详情、CSV 导出和自定义布局隐藏与持久化、提醒升级扫描 / 催办 / 升级 / 转中心复核 / 标记处理反馈、知识、看板、设置、权限、同步、AI triage。 |
| 合理分层与代码拆分 | 已完成 | `src/app`, `src/domain`, `src/data`, `src/features`, `src/shared` | 页面、领域逻辑、仓储、共享组件和布局已分层。 |
| 禁止单文件堆砌 | 已完成 | `src/app/App.tsx`, `src/shared/styles/*`, feature 局部 CSS | `App.tsx` 仅保留入口和路由转发;旧 `pages.css` 已删除;页面样式拆入 feature 目录。 |
| 文档沉淀 | 已完成 | `docs/design/*.md` | 已包含设计索引、定稿、最终定稿记录、蓝图、实现进度、截图索引、smoke 说明和本审计。 |
## 2. 页面覆盖矩阵
| 页面 | 路由 | 设计图 | 实现截图 | 关键交互证据 |
| --- | --- | --- | --- | --- |
| 中心调度台 | `/#/center-dashboard` | `images2/dispatcher-01-center-dashboard.png` | `implementation-screenshots/dispatcher-01-center-dashboard.png` | `interaction-smoke/center-ai-dispatch-accepted.png`, `center-ai-live-triage.png`,筛选面板、分页 / 每页条数反馈、批量确认、AI 派发退回补充确认和派发行操作 smoke |
| 问题池 | `/#/issue-pool` | `images2/dispatcher-02-issue-pool.png` | `implementation-screenshots/dispatcher-02-issue-pool.png` | `issue-pool-empty-search.png`, `issue-pool-bulk-dispatched.png`, `issue-pool-bulk-tagged.png`,状态 / 优先级 / 部门 / 来源 / SLA / 创建时间筛选反馈、真实分页 / 每页条数切换、CSV 导出 smoke |
| 部门队列 | `/#/department-queue` | `images2/dispatcher-03-department-queue.png` | `implementation-screenshots/dispatcher-03-department-queue.png` | `department-center-escalated.png`, `department-assigned-handler.png`,状态 / 优先级 / SLA / 创建时间筛选反馈、队列设置持久化、分页反馈、AI 分派分析详情、请求中心介入和分派处理人 smoke |
| 提醒升级 | `/#/escalation-center` | `images2/dispatcher-04-escalation-center.png` | `implementation-screenshots/dispatcher-04-escalation-center.png` | `escalation-sla-scanned.png`, `escalation-marked-handled.png`,扫描、立即催办、升级负责人、转中心复核和标记处理反馈 smoke |
| 知识复盘 | `/#/knowledge-review` | `images2/dispatcher-05-knowledge-review.png` | `implementation-screenshots/dispatcher-05-knowledge-review.png` | `knowledge-settings-saved.png`, `knowledge-selected-other-issue.png`, `knowledge-draft-generated.png`, `knowledge-summary-edited.png`, `knowledge-draft-merged.png`, `knowledge-no-draft-marked.png`,筛选面板、筛选选项回显、分页反馈和切换不同关闭问题 smoke |
| 规则配置 | `/#/rule-config` | `images2/dispatcher-06-rule-config.png` | `implementation-screenshots/dispatcher-06-rule-config.png` | `rule-config-condition-removed.png`, `rule-config-audit-log.png`, `rule-config-tested.png`, `rule-config-published.png`,连续新增 2 条普通条件、编辑匹配值和权重、添加 AND 分组、删除序列化条件、保存草稿、测试和发布 smoke |
| 管理看板 | `/#/analytics-board` | `images2/dispatcher-07-analytics-board.png` | `implementation-screenshots/dispatcher-07-analytics-board.png` | `analytics-custom-layout-saved.png`, `analytics-filtered.png`,日期反馈、趋势范围切换、真实下钻、刷新记录和 AI 洞察详情 smoke |
| 我的待办 | `/#/client-workbench` | `images2/client-01-workbench.png` | `implementation-screenshots/client-01-workbench.png` | `client-workbench-detail-tabs.png`,刷新待办列表、顶部状态 tab 反馈、筛选排序、分页反馈、AI 分析详情、更多操作关注 / 复制链接、底部更多处理动作 smoke,处理人主链路由 `handler-resolved.png` 覆盖。 |
| 提交问题 | `/#/submit-issue` | `images2/client-02-submit-issue.png` | `implementation-screenshots/client-02-submit-issue.png`, `client-02-submit-issue-mobile.png` | `submit-issue-editor-attachment.png`, `submitter-tracking-after-submit.png` |
| 处理人详情 | `/#/handler-detail` | `images2/client-03-issue-detail-handler.png` | `implementation-screenshots/client-03-issue-detail-handler.png` | `handler-tabs-comment-tools.png`, `handler-comment-task-linked.png`, `handler-detail-expanded-report.png`, `handler-resolved.png`,评论工具附件 / 图片 / 链接插入、更多动作面板、SLA 查看记录、处理链接复制记录、催办协作人时间线、处理记录 CSV 导出 smoke |
| 提交人追踪 | `/#/submitter-tracking` | `images2/client-04-submitter-tracking.png` | `implementation-screenshots/client-04-submitter-tracking.png` | `submitter-detail-expanded-download.png`, `submitter-approved.png`, `submitter-reopened.png`,真实分页 / 每页条数切换、排序筛选、负责人资料和全部回复展开 smoke |
| 移动端提交 / 补充 | `/#/mobile-submit` | `images2/client-05-mobile-submit.png` | `implementation-screenshots/client-05-mobile-submit.png`, `client-05-mobile-submit-mobile.png` | `mobile-submit-attachment-selected.png`, `mobile-submitted-tracking.png`, `mobile-supplement-missing-upload.png`, `mobile-supplement-submitted.png`, `mobile-narrow-submit.png`, `mobile-narrow-submitted.png`, `mobile-narrow-supplement.png` |
## 3. 功能覆盖矩阵
| 功能 | 状态 | 主要证据 |
| --- | --- | --- |
| 页面导航切换和路由直达 | 已覆盖 | `src/app/routes.ts`, `src/app/routes.test.ts`, `capture:pages` |
| 我的待办刷新、顶部状态 tab 反馈、筛选排序、分页 / 每页条数反馈、AI 分析详情、详情 tab、关注、复制链接、返回、顶部更多操作、底部更多处理动作和列表行操作 | 已覆盖 | `client-workbench-detail-tabs.png`, `workbenchActionRepository` 测试,`browser-smoke` 刷新、待接单 / 全部状态 tab、筛选排序、分页反馈、每页条数、分析详情展开、复制链接记录、关注记录和菜单状态断言 |
| AI 预检查重新检测、建议补充到提交表单、富文本工具栏、桌面附件上传和提交控件选择持久化 | 已覆盖 | `submit-issue-editor-attachment.png`, `submitter-tracking-after-submit.png`, `submitPrecheckRepository` 测试,`browser-smoke` 重新检测记录、描述内容、影响范围、影响等级、SLA 和时间线持久化断言 |
| 问题选择、搜索、筛选反馈、真实分页、CSV 导出和空状态 | 已覆盖 | `issueSearch/issueFilters/issuePoolExport` 测试,`issue-pool-empty-search.png`, `browser-smoke` 问题池状态 / 优先级 / 部门 / 来源 / SLA / 创建时间筛选、第 2 页 active、显示范围、首行变化和 CSV 导出元数据断言 |
| AI 自动分析和推荐派发 | 已覆盖 | `aiTriageClient` 测试,`center-ai-live-triage.png` |
| 中心筛选、真实分页 / 每页条数切换、采纳 AI 派发、AI 派发退回补充确认、行级派发操作、批量确认派发和批量治理 | 已覆盖 | `center-ai-dispatch-accepted.png`, `center-ai-live-triage.png`, `issue-pool-bulk-dispatched.png`, `issue-pool-bulk-tagged.png`, `browser-smoke` 筛选面板、第 2 页 active、显示范围和首行变化、退回补充确认、批量确认和 toast 断言,`appWorkflows` 测试 |
| 部门队列状态 / 优先级 / SLA / 创建时间筛选反馈、队列设置持久化、真实分页 / 每页条数切换、AI 分派分析详情、请求中心介入和分派处理人 | 已覆盖 | `department-center-escalated.png`, `department-assigned-handler.png`, `departmentQueueSettingsRepository` 测试,`browser-smoke` 筛选反馈、队列设置取消 / 保存 / reload 恢复、第 2 页 active、显示范围和首行变化、分派分析详情、升级负责人时间线和未处理升级事件断言 |
| 处理人详情 tab、评论对象切换、评论工具附件 / 图片 / 链接插入、工具记录落库、附件入问题、接单、协作、更多动作、SLA 查看记录、处理链接复制记录、催办协作人、评论、关联任务、详情展开、AI 完整报告、附件下载、处理记录 CSV 导出、转派、提交结果 | 已覆盖 | `handler-tabs-comment-tools.png`, `handler-comment-task-linked.png`, `handler-detail-expanded-report.png`, `handler-resolved.png`, `handlerActionRepository` / `issueProcessExport` 测试,`browser-smoke` 详情 tab、评论工具、问题附件持久化、更多动作面板、handler action 落库和导出元数据断言 |
| 提交人补充、验收、返工 | 已覆盖 | `mobile-supplement-submitted.png`, `submitter-approved.png`, `submitter-reopened.png`;补充文本 / 附件和联系 / 催办时间线由 `browser-smoke``appWorkflows` 测试覆盖 |
| 提交人追踪真实分页、排序筛选、详情展开、负责人资料、全部回复和附件下载 | 已覆盖 | `submitter-detail-expanded-download.png`, `browser-smoke` 第 2 页 active、显示范围和首行变化、排序回第 1 页、创建时间排序、SLA 风险筛选、负责人资料展开 / 收起、全部回复展开 / 收起和 toast 断言 |
| SLA 扫描、提醒、立即催办、升级负责人、转中心复核和标记处理 | 已覆盖 | `escalation-sla-scanned.png`, `escalation-marked-handled.png`, `browser-smoke` 扫描、催办、升级、转中心复核和标记处理反馈断言,`escalationRules` 测试 |
| 知识复盘设置、筛选选项回显、分页 / 每页条数反馈、切换不同关闭问题、草稿生成、摘要编辑、合并和无需沉淀决策 | 已覆盖 | `knowledge-settings-saved.png`, `knowledge-selected-other-issue.png`, `knowledge-draft-generated.png`, `knowledge-summary-edited.png`, `knowledge-draft-merged.png`, `knowledge-no-draft-marked.png`, `browser-smoke` 设置面板、筛选面板、处理部门筛选回显、分页反馈、每页条数、搜索切换复盘对象和 `selectedIssueId` 断言,`knowledgeActions/knowledgeSelectors`, `appWorkflows` 测试 |
| 规则保存、草稿、变更记录、条件新增、条件编辑、条件分组、条件删除、测试、发布 | 已覆盖 | `rule-config-condition-removed.png`, `rule-config-audit-log.png`, `rule-config-tested.png`, `rule-config-published.png`, `browser-smoke` 序列化条件、匹配值、权重、AND 分组和删除断言,`appWorkflows` 测试 |
| 管理看板筛选反馈、日期反馈、趋势范围切换、指标计算、AI 洞察详情、真实下钻、刷新记录、CSV 导出和自定义布局 | 已覆盖 | `analytics-custom-layout-saved.png`, `analytics-filtered.png`, `analyticsSelectors` / `analyticsExport` / `analyticsDrilldownRepository` / `analyticsViewStateRepository` 测试,`browser-smoke` 范围 / 部门 / 风险视图反馈、固定日期反馈、趋势范围切换、洞察详情、导出范围、部门 / 重复 / SLA / AI 洞察下钻、刷新记录、布局隐藏和本地持久化断言 |
| 移动端提交、草稿反馈、二级控件持久化、附件上传、补充项定位、联系 / 催办时间线、补充文本 / 附件持久化和窄屏提交 / 补充布局 | 已覆盖 | `mobile-submit-attachment-selected.png`, `mobile-supplement-missing-upload.png`, `mobile-narrow-supplement.png`, 移动实现截图,`mobile-narrow-*` smoke 截图,`browser-smoke` localStorage 断言 |
| 设置、同步、权限角色和权限拦截 | 已覆盖 | `settings-*` smoke 截图,`platformSettingsRepository`, `permissionPolicy`, `appSyncRepository` 测试 |
| 关键业务动作写入时间线和提交控件值进入新问题 | 已覆盖 | `issueActions`, `appWorkflows`, `browser-smoke` 持久化断言 |
## 4. 代码结构审计
当前实现已从早期单文件原型拆成以下层次:
```text
src/
app/ # 应用入口、路由、状态组装、工作流
domain/ # 问题、派发、AI、提醒、知识、权限、看板等领域逻辑
data/ # seed 数据、本地持久化、同步配置、密钥存储
features/ # 调度中心和客户端页面及其局部组件
shared/ # 共享布局、按钮、表格、徽标、时间线、指标块、基础样式
```
分层核对:
- `src/app/App.tsx` 只负责装配应用壳、导航项和路由页面。
- `src/app/appWorkflows.ts` 承载跨页面业务工作流,避免把动作散落到页面组件。
- `src/domain/**` 承载纯业务判断和可测试计算。
- `src/data/**` 承载本地持久化、同步 payload、平台设置和密钥存储。
- `src/features/**/components/**` 承载页面专属组件和局部样式。
- `src/shared/styles/` 仅保留 `tokens.css`, `base.css`, `layout.css`, `components.css`
- 旧共享页面样式 `src/shared/styles/pages.css` 已删除,旧未路由组件 `MyTaskList``HandlerActionPanel` 已移除。
- 未被入口引用的旧 `src/styles.css` 已删除,避免把早期单文件全局样式误判为当前运行时结构。
## 5. 验证基线
当前要求下,每次收尾应至少跑:
```pwsh
npm test
npm run build
npm run smoke:browser
npm run visual:diff
```
需要刷新全部页面截图时追加:
```pwsh
npm run capture:pages
```
最近一轮已记录通过:
- `npx tsc --noEmit`:类型检查通过。
- `npm test`:29 个测试文件,104 个测试通过。
- `npm run build`TypeScript 和 Vite 生产构建通过,保留既有 500 kB chunk 体积提示。
- `npm run capture:pages`:12 张桌面实现截图和 3 张移动截图刷新通过。
- `npm run smoke:browser`:真实浏览器业务路径 smoke 通过并刷新交互截图。
- `npm run visual:diff`:12 张设计图与实现截图完成自动视觉差异对比,最新报告时间 `2026-06-18T04:47:26.995Z`;自动诊断为 7 / 5,人工流程为 4 页建议通过、8 页定稿候选、0 页需决策。
本轮知识复盘编辑、管理看板 CSV 导出和自定义布局补齐后已重新验证:
- `npm test`:20 个测试文件,71 个测试通过。
- `npm run build`TypeScript 和 Vite 生产构建通过,生成 `dist/`
- `npm run smoke:browser`:真实浏览器业务路径 smoke 通过,并刷新 `docs/design/interaction-smoke/` 交互截图。
- `npm run visual:diff`:12 张设计图与实现截图完成自动视觉差异对比,生成 `docs/design/visual-diff/report.md` 和 12 张差异图。
本轮提交问题表单控件持久化证据补齐已完成代码审阅和单元验证:
- `npm test`:20 个测试文件,71 个测试通过,提交问题 workflow 单测已断言 `impactScope``severity` 透传。
- `npm run build`TypeScript 和 Vite 生产构建通过,未复现 `esbuild spawn EPERM`
- 后续已补跑 `npm run smoke:browser``npm run capture:pages``npm run visual:diff`,最新结果见上方最近一轮记录。
本轮移动端提交/补充二级反馈与持久化证据已补齐 smoke 覆盖:
- 移动端提交 smoke 覆盖“保存草稿”toast、非默认影响范围 / 来源 / 系统 / 期望时间选择,并从 localStorage 断言新问题字段持久化。
- 移动端补充 smoke 覆盖“联系处理人”“催办”时间线,并保留去补充、补充文本、补充附件与提交补充路径。
- 已验证通过:`npm run smoke:browser``npm run build``npm test`
## 6. 已知边界和风险
- “一比一复刻”已接入自动视觉差异报告,但报告定位为诊断工具,不替代人工设计评审;当前人工流程为 4 张页面建议通过、8 张页面定稿候选、0 张页面需人工决策,详见 `docs/design/manual-design-freeze-audit.md`
- MVP 已支持 OpenAI-compatible AI triage 配置和 mock AI smoke;真实企业数据接入、真实通讯工具推送、多租户和复杂审批流不在本版定稿边界内。
- 前端关键路径和同步接口权限已有测试;服务端 Spring Boot 测试曾因本机没有 `mvn``server/` 无 Maven Wrapper 暂未本机执行,需要在具备 Maven 的环境补跑。
- hover/focus/loading 等微交互状态已有组件基础样式,但尚未逐项生成截图归档;当前 smoke 更偏业务路径验证。
## 7. 交付判定
按当前产品目标,本项目已经具备可评审的完整前端 MVP:
- 设计资产齐全。
- 页面实现齐全。
- 核心业务流可操作。
- 本地持久化、同步配置、权限、AI 设置和浏览器 smoke 已覆盖。
- 代码已按 app/domain/data/features/shared 拆分,避免继续堆叠在单文件。
- 文档链路完整。
当前人工定稿流程已消除需人工决策页;`docs/design/review-index.html` 已为 12 张页面给出“通过 / 通过但备注”建议结论,后续只需人工在审阅入口保存最终记录并导出 JSON 定稿记录。后续改动以人工审美目标或明确设计图差异为依据,不再无目标盲追 `visual:diff`