由 OCR(open-codereview.ai,deepseek-v4-flash)审查产出: - 审查汇总.md / high-severity-comments.md / all-comments.jsonl / 修复记录.md 等 Reviewed-by: OCR (open-codereview.ai)
7.3 KiB
7.3 KiB
gongxue-base 全库 OCR 审查汇总
模型:deepseek-v4-flash(opencode.ai,Responses API)|工具:OCR v1.8.10(open-codereview.ai)|日期:2026-08-09
覆盖范围
- apps/admin/src:192 个文件(排除测试),两轮扫描,去重后 336 条评论,约 1060 万 token,61 分钟
- apps/server/src:366 个文件(排除测试),两轮扫描,去重后 775 条评论,约 2060 万 token,105 分钟
- 根级/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 |
部署/运维高危问题(根级文件)
serve-proxy.js:API_TARGET环境变量被读取但从未使用,硬编码127.0.0.1:3000;catch-all 对所有缺失文件返回 index.html(200),掩盖资源缺失;readFileSync阻塞事件循环;透传 hop-by-hop 头。migrate.sh:明文/硬编码数据库密码、固定sleep 8竞态、SQL 无事务(部分迁移)、无 trap 清理。deploy.sh+.gitea/workflows/deploy.yml:rsync --delete可能删掉服务器端.env;npm ci被 node_modules 存在性跳过导致新依赖永不安装;远程命令块无set -e,失败仍 reload PM2 且退出码 0;workflow 无 concurrency 并发控制。ecosystem.config.cjs:缺kill_timeout(SIGKILL 约 1.6s 后强杀,请求/DB 连接被切断);相对日志路径按启动目录解析。oxlint.config.ts:React 硬编码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 / 循环内顺序 await:attendance-import、bills、dashboard-queries、archive-report 等。
- 无界输入:records 数组、values、密码、notes、page/limit 无上限。
- 时区混用:本地时间与 UTC+8 混用(约 8 处重复模式),
common/dayjs.ts注释声称引入 tz 插件但实际没有。
前端(admin)突出问题主题
- A11y:
.ai-chat-hover-actionsopacity:0 但仍在 Tab 序中;:focus-visible被移除;可编辑单元格无焦点样式;对比度不足(#ff4d4f)。 - crypto.randomUUID() 无降级:provider.ts、operation-id.ts、LiteMermaid.tsx、EditableCell/index.tsx 在非安全上下文会抛错。
- 错误处理反模式:空 catch、unhandled promise rejection(prefetchQuery、validateFields)、成功提示实际失败、catch 范围过大。
- 渲染期写 ref / 缺 cleanup:useSubmissionState、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 摘选)
- LIKE 通配符转义:classes/students/deposits/rooms 的
Like("%"+keyword+"%")加转义 helper。 - 上传空文件防护:archive/expenses/classrooms/rooms/occupancies/students/imports 控制器对
@UploadedFile()加 null 判断,500→400。 - 修复矛盾校验器:
@Matches+@IsISO8601({strict:true})二选一(3 个 dto)。 - 加输入上限:deposits.studentIds、notifications dto、bed/locker count、sync limit 等。
- 替换废弃
findByIds:ai-attachment.service、rbac-user.service 改用In(ids)。 - fire-and-forget 通知 promise 补 await/.catch:bills/deposits/occupancies controller。
- 审计日志 best-effort:with-audit-log 及日志后置控制器,避免成功操作被日志拖成 500。
- 部署面:deploy 加
--exclude=.env*、固定跑 npm ci、远程块set -e、workflow 加 concurrency、PM2kill_timeout:5000、serve-proxy 用API_TARGET并改流式读文件。 - 时区统一:抽
CHINA_TZ/CN_UTC_OFFSET=8常量替换约 8 处重复的 UTC+8 逻辑。 - oxlint:React
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> # 以后每次提交后审改动