- .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(只给改法)
3.2 KiB
3.2 KiB
fa-agent (TraceIQ 财务分析) review profile
Stack and verification
- Django 5.2 后端(PostgreSQL 生产 / SQLite 仅开发),金额一律
NUMERIC(44,24)+ PythonDecimal(精度 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
- 金额精度:财务计算、持久化、Excel 公式生成路径上出现
float()、round()、Decimal 与 float 混算、或金额以数字(非字符串)进 JSON,必须报。浏览器Number只允许用于绘图与显示。 - 缺失值语义:成本/毛利/人数等依赖字段缺失时必须传播为不可用(服务端
None、Excel#N/A),不得静默转 0 或跳过;比率分母为零/非正同样不可用。对账容差按指标类型独立(人数严格相等、金额 0.01、比率 0.0001),不得为消除报错统一放宽容差。 - 文件与路径安全:清理/下载/回收文件前必须
lstat校验且拒绝符号链接(目录用O_NOFOLLOW打开),只删除本次任务在受控目录内创建的文件;清理失败要留日志与可追踪状态,不得静默吞掉OSError。 - 越权与生命周期:每个 endpoint 必须声明 roles 白名单;worker 执行阶段要重新核验角色、
is_active、组织与科室范围(不能只信创建时的检查);卡死任务要有超时恢复,且恢复不得与活跃 worker 抢任务。 - 事务与并发:配额/唯一性检查必须在事务内并锁定稳定的所属行(如 Membership),审计与业务变更同事务提交;乐观并发用 revision + 409,不得静默后写覆盖。
- Excel 公式注入与上限:不可信文本写入单元格必须强制文本类型;CSV/公式中
= + - @开头加'前缀;SUMIFS/COUNTIFS criteria 必须转义~ * ? "并检查 255 字符上限、公式 8192 字符上限。 - 前端异步状态:useEffect 依赖未变时不得清空已加载数据(同状态重复点击不能停在“加载中”);并发请求要有过期响应丢弃(active flag/AbortController);失败路径要有可见错误与重试。
- 测试真实性:行为修复必须带“修复前失败、修复后通过”的回归测试;环境门禁(LibreOffice、PostgreSQL 并发、真实 AI)必须显式 skip 并注明原因,不得用 mock 通过冒充真实验收。
Avoid reporting
- 纯格式与风格问题(ruff / prettier 已在 CI 把关)。
- 改动行为已被等价集成测试或 E2E 覆盖时,仅因缺少同名单测而报缺测试。
- 没有具体并发路径的假想竞态(SQLite 单写者语义下的理论交错不算,除非改动显式依赖 PostgreSQL 行为)。
- 对
docs/报告类 HTML/Markdown 的措辞与结构建议——它们记录的是验收状态,不是产品代码。