Files
DevFlow/docs/05-代码审查/定时走查-2026-06-15-第4轮.md
绝尘 f30df333b3 docs: 巡检简报+todo 回写(2026-06-15 第2轮)
巡检发现:
- 2196c77 workflow 整文件替换回退破坏(AiChat+Ideas 12项功能)
- B-260615-03 truncated 标志已落地
- AR-8-scroll scrollToBottom smooth 已补
- CR-260615-09 .ai-md 残余:4详情页各21处 scoped .ai-md
  (全局 ai-md.css 75行已建,旧副本待清理但非阻塞)
2026-06-15 17:23:57 +08:00

5.4 KiB
Raw Blame History

定时代码走查 — 第 4 轮2026-06-15

触发:定时走查 cron每 30 分钟)。范围 = 自第3轮起 1 新提交(94cdcdc CR-21 修复)+ i18n 垂直切片走查src/i18n 26 文件此前从未深查,最大未审区域)。 方法:主代理地面 git show 核 CR-21 + 1 路后台代理走查 i18n 完整性/硬编码遗漏45 tool_uses 全量扫)。 性质:核对记录,不改产品代码(本会话 session-role-diagnose-only。todo 待修项见 docs/todo.md。 关联:第1轮/第2轮/第3轮


一、CR-21 修复确认(价值第 4 次闭环)

94cdcdc App.vue:218-222 try { await startDataChangedListener() } catch(e){ console.error(...) }。提交说明「cron 巡检捕获另一会话走查第3轮 CR-21」。 已修。


二、i18n key 树质量 — 优秀

466 key 全对齐12 命名空间 × 2 语言):

维度 结果
zh vs en key 树 0 缺 key / 0 多余 / 0 结构不一致
翻译质量 0 TODO/占位符0 复制中文漏译(仅 aiLanguageZh=🇨🇳 简体中文 1 处合理)
插值参数 {var} 占位符 zh/en 逐一匹配0 mismatch
命名/嵌套 顶层=文件名camelCase嵌套≤2 层,一致

i18n 文件本身无需改动。问题全在 src/ 硬编码遗漏


三、硬编码遗漏 — 40+ 处CR-08 扩展,真实问题)

CR-260615-08 原记 3 处i18n 代理全量扫发现 40+ 处,按严重度分三档:

🔴 P1 — 直接破坏 i18n已有 key 却硬编码)

P1-1 useAiEvents.ts:182(最高优先,改一行)tc.result = '用户拒绝了此操作' 硬编码,绕过已有 aiTool.rejectedHinten=User rejected this action。ToolCard.vue:54 渲染 tc.result || $t('aiTool.rejectedHint')|| 短路致 en locale 拒绝提示恒中文,已有 en 翻译被一行废掉。修:删该赋值(让 ToolCard 走 t())或改 t('aiTool.rejectedHint')

P1-2 TaskDetail.vue 整页 13 处未接 i18nL6/12/17/24 + 11 个 label span + L144 errorMsg。i18n 无 taskDetail namespace只有 tasks需新建。en locale 全中文。

P1-3 ProjectDetail.vue 审批/导入 5 处L12 导入目录 / L201 确认(N) / L220 取消 / L392 confirmDialog / L399 Message.success / L404 Message.error / L381 未知错误 fallback。

P1-4 Dashboard.vue:76 暂无项目,去创建一个

P1-5 AiChat.vue 3 处L107 title=清空 / L471 confirmDialog / L687 showToast 发送失败。

🟡 P2 — JS 字符串赋 UI/Toast

P2-1 ToolCard.vue:152-164 ARG_LABEL_MAP11 个审批参数标签硬编码ID/项目 ID/名称/标题/描述/字段/新值/路径/优先级/标签/来源aiTool.ts 无对应 key需新增 aiTool.argLabels.*

P2-2 store error fallback 11 处全中文knowledge.ts:53/64/74/105 + ideas.ts:10/20/38 + projects.ts:13/25/37/63/71/81/90 + tasks.ts:10/20/38 + workflow.ts:19。en locale 下所有加载/CRUD 失败 toast 中文。

P2-3 useAiStream.ts:52-53CR-08 行号偏差,原记 39-41看门狗超时两文案 ⚠ 工具已执行完成... / ⚠ 响应中断... 直接 push messages。

P2-4 useAiSend.ts:49/65/130:队列满 throw + 审批未送达 tc.result。

P3 — 边界/低优先

P3-1 utils/time.ts:46-51(隐蔽)formatRelative 相对时间硬编码(刚刚/X 分钟前...。i18n 已有 common.justNow/minutesAgo/hoursAgo/dayAgo key 却没用 → en locale 所有时间戳中文。

P3-2 router/index.ts:18-608 个 meta.title 中文,但 0 消费方grep meta.title/document.title 无匹配),死代码/潜伏隐患。

P3-4 i18n/index.ts:20 fallbackLocale: 'en'zh-CN 用户缺 key 回退英文,反直觉(当前 key 全对齐不触发,设计气味)。


四、亮点

  • i18n key 树工程化扎实466 key 双语全对齐、插值参数一致、命名规范、无占位符 — 国际化基础设施质量高。
  • i18n index 初帧渲染处理合理appSettings 异步,getInitialLocale() 默认 zh-CNloadAll 后回填,已知短暂态有注释。
  • TaskDetail.vue 单文件 XSS/响应式到位第1轮已肯定i18n 是唯一短板。

📊 本轮摘要

类别 代表
价值闭环 1 CR-21 → 94cdcdc
i18n key 树肯定 466 全对齐 0 缺 key优秀
硬编码新发现 40+ P1-1 useAiEvents:182改一行最高 ROI/ TaskDetail 整页 / ToolCard ARG_LABEL_MAP / store fallback 11 处 / time.ts 隐蔽
P1 i18n 破坏 5 useAiEvents:182 / TaskDetail / ProjectDetail / Dashboard / AiChat
P2/P3 6 ARG_LABEL_MAP / store fallback / useAiSend / time.ts / router meta / fallbackLocale

本轮价值i18n 垂直切片暴露真实问题 — key 树优秀但 src/ 硬编码 40+ 处CR-08 严重低估)。P1-1 useAiEvents:182 是明确 i18n 破坏 bug(一行废掉 en 翻译),改一行最高 ROI应优先。TaskDetail 整页未接 i18n13 处)是新页面 i18n 债。

方法论换垂直切片角度i18n 维度)有效突破前几轮按提交/改动的横切盲区,发现 40+ 处硬编码 — 印证 task2/3「功能/模块垂直走查」的价值(换角度有新发现)。

todo 映射CR-260615-08 扩展3→40+ 子项,标 P1-1 最高优先)+ CR-21 标