Files
fa-agent/.gitea/ai-review.md
Jayway Liu a3d91ad17f ci: 接入 vertai-tech/ai-review-engine 对抗式 AI PR 审查
- .gitea/workflows/ai-review.yml 原样拷贝引擎模板(含 pr_number 经 env 传参的
  注入防护),引擎钉 v1 移动标签,通过 REVIEW_ENGINE_TOKEN 只读 PAT 拉取
- .gitea/ai-review.md 按本仓库技术栈写审查侧重:金额精度(Decimal/NUMERIC)、
  缺失值语义与对账容差、文件路径符号链接安全、endpoint 角色与 worker 撤权核验、
  事务并发与 revision、Excel 公式注入与长度上限、前端异步状态、测试真实性
- 仓库级 Actions 配置(Gitea 设置,不在本提交内):REVIEW_ENGINE_TOKEN secret、
  REVIEW_BASE_URL/MODEL/PUBLIC_URL/PRICES、FIX_MODEL/FIX_MODEL2/FIX_PLAN_MODEL/
  FIX_PLAN_THINKING,以及新仓库推荐起点 REVIEW_FIX_SUGGEST_ONLY=1(只给改法)
2026-09-26 15:22:08 +08:00

3.2 KiB
Raw Permalink Blame History

fa-agent (TraceIQ 财务分析) review profile

Stack and verification

  • Django 5.2 后端(PostgreSQL 生产 / SQLite 仅开发),金额一律 NUMERIC(44,24) + Python Decimal(精度 60);JSON 中金额为字符串。
  • React 19 + TypeScript + Vite 前端(AG Grid、ECharts),npm run build 含 tsc --noEmit。
  • openpyxl 流式生成公式工作簿(SUMIFS/COUNTIFS),公式正确性靠 LibreOffice 无头重算验证。
  • pytest(--cov-fail-under=85)+ Playwright E2E;CI 在 PostgreSQL 17 服务容器上跑全量。
  • 验证命令:uv run pytest、uv run ruff check server finance tests scripts、npm run typecheck、python manage.py makemigrations --check。

Review priorities

  1. 金额精度:财务计算、持久化、Excel 公式生成路径上出现 float()、round()、Decimal 与 float 混算、或金额以数字(非字符串)进 JSON,必须报。浏览器 Number 只允许用于绘图与显示。
  2. 缺失值语义:成本/毛利/人数等依赖字段缺失时必须传播为不可用(服务端 None、Excel #N/A),不得静默转 0 或跳过;比率分母为零/非正同样不可用。对账容差按指标类型独立(人数严格相等、金额 0.01、比率 0.0001),不得为消除报错统一放宽容差。
  3. 文件与路径安全:清理/下载/回收文件前必须 lstat 校验且拒绝符号链接(目录用 O_NOFOLLOW 打开),只删除本次任务在受控目录内创建的文件;清理失败要留日志与可追踪状态,不得静默吞掉 OSError。
  4. 越权与生命周期:每个 endpoint 必须声明 roles 白名单;worker 执行阶段要重新核验角色、is_active、组织与科室范围(不能只信创建时的检查);卡死任务要有超时恢复,且恢复不得与活跃 worker 抢任务。
  5. 事务与并发:配额/唯一性检查必须在事务内并锁定稳定的所属行(如 Membership),审计与业务变更同事务提交;乐观并发用 revision + 409,不得静默后写覆盖。
  6. Excel 公式注入与上限:不可信文本写入单元格必须强制文本类型;CSV/公式中 = + - @ 开头加 ' 前缀;SUMIFS/COUNTIFS criteria 必须转义 ~ * ? " 并检查 255 字符上限、公式 8192 字符上限。
  7. 前端异步状态:useEffect 依赖未变时不得清空已加载数据(同状态重复点击不能停在“加载中”);并发请求要有过期响应丢弃(active flag/AbortController);失败路径要有可见错误与重试。
  8. 测试真实性:行为修复必须带“修复前失败、修复后通过”的回归测试;环境门禁(LibreOffice、PostgreSQL 并发、真实 AI)必须显式 skip 并注明原因,不得用 mock 通过冒充真实验收。

Avoid reporting

  • 纯格式与风格问题(ruff / prettier 已在 CI 把关)。
  • 改动行为已被等价集成测试或 E2E 覆盖时,仅因缺少同名单测而报缺测试。
  • 没有具体并发路径的假想竞态(SQLite 单写者语义下的理论交错不算,除非改动显式依赖 PostgreSQL 行为)。
  • 对 docs/ 报告类 HTML/Markdown 的措辞与结构建议——它们记录的是验收状态,不是产品代码。