巡检发现:
- 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行已建,旧副本待清理但非阻塞)
5.4 KiB
定时代码走查 — 第 4 轮(2026-06-15)
触发:定时走查 cron(每 30 分钟)。范围 = 自第3轮起 1 新提交(
94cdcdcCR-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.rejectedHint(en=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 处未接 i18n:L6/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_MAP:11 个审批参数标签硬编码(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-53(CR-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-60:8 个 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-CN,loadAll 后回填,已知短暂态有注释。 - 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 整页未接 i18n(13 处)是新页面 i18n 债。
方法论:换垂直切片角度(i18n 维度)有效突破前几轮按提交/改动的横切盲区,发现 40+ 处硬编码 — 印证 task2/3「功能/模块垂直走查」的价值(换角度有新发现)。
todo 映射:CR-260615-08 扩展(3→40+ 子项,标 P1-1 最高优先)+ CR-21 标 ✅。