跳转至

运行 eqlib 对抗性依赖审查

eqlib 内置 evaluator 会从依赖、wheel 元数据、离线契约、性能基线和受限的在线数据契约五个方向检查发布质量。它会同时生成供人阅读的 Markdown 与供 CI 消费的 JSON 证据。

运行离线审查

在仓库根目录、使用 Python 3.10 或更新版本运行:

python scripts/evaluate_eqlib_dependencies.py \
  --profile offline --strict --output artifacts/eqlib-evaluator

产物为 artifacts/eqlib-evaluator/report.md 和 report.json。--strict 会让 P0/P1 发现以非零状态退出;P2(例如没有可比性能基线)仍会记录,但不会阻断提交。

离线契约明确排除 pytest.mark.network,因此不访问行情提供方。它覆盖导入、行情适配器边界、交易日历、组合风控、统计指标和机器学习预处理。

运行受限在线审查

在线契约仅运行明确标记为 network 的测试:

python scripts/evaluate_eqlib_dependencies.py \
  --profile live --output artifacts/eqlib-evaluator-live

该模式为提供方测试设置 EQLIB_EVALUATOR_LIVE=1,总时限为 90 秒。数据源不可用或超时会记为 DATA-190、状态为 unavailable,不会把网络故障误判为产品逻辑通过。GitHub Actions 在工作日定时和手动触发时运行此模式;普通 push/PR 只运行严格离线门禁。

解读发现

严重度 含义 严格离线门禁
P0 错误结果、不可安装或数据完整性风险 阻断
P1 可靠性、契约或可重复性风险 阻断
P2 性能、可观测性或暂不可用的辅助证据 记录,不阻断

报告中的 evidence 保留命令、退出码、失败 pytest node id 和有界日志。不要只看报告摘要;修复后应重新运行同一 profile。

更新锁文件

Python 3.10 的四目标哈希锁及其已检查的 resolver 证据位于 requirements/。锁文件不能手工修改;请按仓库根目录的 requirements/README.md 的生成、哈希补全和目标验证步骤更新。更新后至少运行严格离线 evaluator,并在原生 Linux Python 3.10 上执行锁文件的严格下载验证。

CI 行为

.github/workflows/eqlib-evaluator.yml 在 Ubuntu 的 Python 3.10 与 3.12 上运行严格离线审查并上传报告;定时/手动 live job 上传在线报告。普通测试工作流以 -m "not network" 排除真实提供方调用,避免网络波动影响可重复测试。

离线报告还会检查打包交易日历是否至少覆盖未来 120 天;接近到期时产生 DATA-192(P2),提醒在下一次发布前刷新 eqlib/static/ashare_trading_days.json。