开发约定

August 15, 2026 · View on GitHub

CONTRIBUTING.md 互补;本文更完整地描述包结构与分层规则。


包布局

所有代码在 src/cnequity/

子包职责
domain契约(schema、数据集元数据)
adapters源 I/O,薄
steps采集编排单元
orchestrator引擎与 manifest
storage湖读写
derive可重算派生
quality审计
query只读消费
config / cli配置与入口

Steps 按数据层分文件

文件数据层
reference.pyL0
bars.pyL1
events.pyL2
fundamentals.pyL3
capital.pyL4
structure.pyL5
macro_risk.pyL6/L8
research.pyL4/L7
finalize.py收尾

新数据集 step 放入对应层文件;新层则新建文件并在 steps/__init__.py import。


数据契约优先

  1. domain/schemas.py — 列类型 + PK
  2. domain/datasets.pyDatasetSpec
  3. tests/unit/test_dataset_registry.py 保持同步

写 staging 前必须 validate_dataframe()


Adapters 要薄

  • 协议、分页、源字段映射 → adapters/
  • 增量窗口、写 staging、manifest → steps/
  • 不含 DuckDB / compact 逻辑

测试原则

  • 单元测试离线:mock/monkeypatch 网络
  • 网络测试@pytest.mark.network,单独运行
  • 集成测试@pytest.mark.integrationtests/integration/
ruff format .
ruff check .
pytest tests/unit
pytest tests/integration  # 可选

全局超时 120s(pyproject.toml)。


架构决策

非平凡设计选择写 ADR:docs/adr/,复制 0000-template.md


代码风格

  • Ruff:line-length 100,py310
  • 类型注解:新代码推荐完整标注
  • 注释:仅解释非显而易见的业务/协议细节

相关文档