巡检发现:
- 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行已建,旧副本待清理但非阻塞)
90 lines
5.4 KiB
Markdown
90 lines
5.4 KiB
Markdown
# 定时代码走查 — 第 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轮](./定时走查-2026-06-15-P0复核.md)/[第2轮](./定时走查-2026-06-15-第2轮.md)/[第3轮](./定时走查-2026-06-15-第3轮.md)。
|
||
|
||
---
|
||
|
||
## 一、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 标 ✅。
|