Files
wangziqi 1289aea7ce docs(ocr): 全库 OCR 审查与修复记录
由 OCR(open-codereview.ai,deepseek-v4-flash)审查产出:
- 审查汇总.md / high-severity-comments.md / all-comments.jsonl / 修复记录.md 等

Reviewed-by: OCR (open-codereview.ai)
2026-08-09 21:29:54 +08:00

7.3 KiB
Raw Permalink Blame History

gongxue-base 全库 OCR 审查汇总

模型:deepseek-v4-flashopencode.aiResponses API)|工具:OCR v1.8.10open-codereview.ai)|日期:2026-08-09

覆盖范围

  • apps/admin/src:192 个文件(排除测试),两轮扫描,去重后 336 条评论,约 1060 万 token61 分钟
  • apps/server/src:366 个文件(排除测试),两轮扫描,去重后 775 条评论,约 2060 万 token105 分钟
  • 根级/CI/配置deploy.sh、migrate.sh、serve-proxy.js、ecosystem.config.cjs、oxlint.config.ts、turbo.json、WATCHDOG.yml、.gitea/workflows、packages/typescript-config):13 个文件,22 条评论
  • 合计:571 个文件,OCR 语义去重后约 1133 条评论(文件精确去重 1626 条,含近似重复),约 3180 万 token,约 2.9 小时

严重度分布(精确去重)

严重度 数量
low 840
medium 698
high 88

分类分布

分类 数量
bug 737
maintainability 580
performance 116
security 108
style 65
other 18
documentation 2

区域分布

区域 数量
server 1035
admin 568
misc 23

评论最多的文件 TOP 20

评论数 其中 high 文件
9 1 apps/server/src/imports/imports.workbook-fallback.ts
8 0 apps/admin/src/components/AiChat/useAiChatMessageActions.tsx
8 0 apps/server/src/attendance/attendance-generation.service.ts
8 0 apps/server/src/classroom-rentals/rental-schedule.service.ts
8 0 apps/server/src/dashboard/dashboard.service.ts
8 1 apps/server/src/occupancies/occupancy-operations.service.ts
7 0 apps/admin/src/pages/Occupancies/index.tsx
7 0 apps/admin/src/pages/RoomVisual/index.tsx
7 0 apps/admin/src/pages/Wallets/index.tsx
7 1 apps/server/src/archive/archive.service.ts
7 0 apps/server/src/ai-config/ai-config.helpers.ts
7 3 apps/server/src/classes/classes.controller.ts
7 0 apps/server/src/integration/dingtalk-student-sync.ts
7 1 apps/server/src/occupancies/occupancies.controller.ts
7 1 apps/server/src/occupancies/occupancy-import.service.ts
7 2 migrate.sh
6 0 apps/admin/src/store/middleware/persist.ts
6 0 apps/admin/src/components/AiChat/DynamicReview.tsx
6 0 apps/admin/src/components/AiChat/AiChatDrawer.tsx
6 0 apps/admin/src/components/StudentProfileContent/index.tsx

部署/运维高危问题(根级文件)

  1. serve-proxy.jsAPI_TARGET 环境变量被读取但从未使用,硬编码 127.0.0.1:3000;catch-all 对所有缺失文件返回 index.html(200),掩盖资源缺失;readFileSync 阻塞事件循环;透传 hop-by-hop 头。
  2. migrate.sh:明文/硬编码数据库密码、固定 sleep 8 竞态、SQL 无事务(部分迁移)、无 trap 清理。
  3. deploy.sh + .gitea/workflows/deploy.ymlrsync --delete 可能删掉服务器端 .envnpm ci 被 node_modules 存在性跳过导致新依赖永不安装;远程命令块无 set -e,失败仍 reload PM2 且退出码 0workflow 无 concurrency 并发控制。
  4. ecosystem.config.cjs:缺 kill_timeoutSIGKILL 约 1.6s 后强杀,请求/DB 连接被切断);相对日志路径按启动目录解析。
  5. oxlint.config.tsReact 硬编码 19.0.0(仓库无对应依赖);全局禁用 no-explicit-any

后端(server)突出问题主题

  • 认证/授权:登录失败锁定可被永久锁定、用户名枚举、密码策略过弱(最短 4 位无上限)、JWT/审计相关风险。
  • SQL LIKE 通配符未转义%/_ 可扩大搜索范围(classes/students/deposits/rooms 等多个 service)。
  • DTO 校验矛盾@Matches + @IsISO8601({strict:true}) 同时存在导致任何值都无法通过(dashboard-query/schedule-sync/occupancy dto)。
  • 非原子多步写入imports/rooms/students/exams/attendance 多处无事务,失败留半截状态。
  • 审计/副作用写入在请求路径中可导致操作失败with-audit-log、auth.controller 等)。
  • check-then-act 竞态ai-chat.conversations、ai-form.service、classroom-rentals.service、attendance-leave-sync 等。
  • N+1 / 循环内顺序 awaitattendance-import、bills、dashboard-queries、archive-report 等。
  • 无界输入records 数组、values、密码、notes、page/limit 无上限。
  • 时区混用:本地时间与 UTC+8 混用(约 8 处重复模式),common/dayjs.ts 注释声称引入 tz 插件但实际没有。

前端(admin)突出问题主题

  • A11y.ai-chat-hover-actions opacity:0 但仍在 Tab 序中;:focus-visible 被移除;可编辑单元格无焦点样式;对比度不足(#ff4d4f)。
  • crypto.randomUUID() 无降级provider.ts、operation-id.ts、LiteMermaid.tsx、EditableCell/index.tsx 在非安全上下文会抛错。
  • 错误处理反模式:空 catch、unhandled promise rejectionprefetchQuery、validateFields)、成功提示实际失败、catch 范围过大。
  • 渲染期写 ref / 缺 cleanupuseSubmissionState、usePageVisible、DynamicReview、ECharts 等 8 处。
  • 重复逻辑useLockerMutations≈useBedMutations、persist.ts 3 个 migrate、message-mappers 4 个 history 提取等。
  • 严格相等规则违反schedule-visibility.ts、DepositModals.tsx、AiChatDrawer.tsx 的 ==/!=
  • 跨字段校验缺失:日期区间倒置、跨零点课表、金额符号未与操作类型绑定、whitespace-only required。

快速修复清单(Quick Wins 摘选)

  1. LIKE 通配符转义classes/students/deposits/rooms 的 Like("%"+keyword+"%") 加转义 helper。
  2. 上传空文件防护archive/expenses/classrooms/rooms/occupancies/students/imports 控制器对 @UploadedFile() 加 null 判断,500→400。
  3. 修复矛盾校验器@Matches+@IsISO8601({strict:true}) 二选一(3 个 dto)。
  4. 加输入上限deposits.studentIds、notifications dto、bed/locker count、sync limit 等。
  5. 替换废弃 findByIdsai-attachment.service、rbac-user.service 改用 In(ids)
  6. fire-and-forget 通知 promise 补 await/.catchbills/deposits/occupancies controller。
  7. 审计日志 best-effortwith-audit-log 及日志后置控制器,避免成功操作被日志拖成 500。
  8. 部署面deploy 加 --exclude=.env*、固定跑 npm ci、远程块 set -e、workflow 加 concurrency、PM2 kill_timeout:5000、serve-proxy 用 API_TARGET 并改流式读文件。
  9. 时区统一:抽 CHINA_TZ/CN_UTC_OFFSET=8 常量替换约 8 处重复的 UTC+8 逻辑。
  10. oxlintReact version: "detect",去掉全局 no-explicit-any,改为定点禁用。

数据文件

  • ocr-reports/all-comments.jsonl — 全部 1626 条评论(精确去重,JSONL)
  • ocr-reports/high-severity-comments.md — 88 条 high 级问题全文
  • ocr-reports/admin-scan-comments.jsonl / server-scan-comments.jsonl / misc-scan-comments.jsonl — 各分区原始评论

复查方式

cd /Users/tiku1/code/gongxue-base
ocr session list            # 查看会话
ocr session comments <id>   # 查看某个会话评论
ocr review --commit <sha>   # 以后每次提交后审改动