贡献指南¶
感谢参与 AutoVision。本框架的维护标准较高:每个变更都要能被机器验证—— 门禁脚本、对拍测试与协议化基准是评审的硬通货。请先读完本页再动手。
适用范围:bug 修复、功能实现、文档、数据集 / 权重接入、测试与门禁增强。 范围边界:不接收任何受限许可权重的下载捷径、不接收未注明出处的第三方代码 (见「许可与溯源红线」)。
开发环境¶
Python ≥ 3.10,以 pip 安装为准(与 CI 同款):
pip install -e ".[dev,export,serving,video,transformers]" # 测试 + 导出 + 服务/视频依赖(CI 同款)
pip install -e ".[docs]" # mkdocs 站点构建(改文档时需要)
pytest tests -q # 全量测试(CPU 可跑)
uv.lock 由公共 PyPI 生成,可用 uv lock --check 验证复现性;CI 与发布门禁
以 pip 路径为准。重新生成时必须显式使用公共索引:
UV_DEFAULT_INDEX=https://pypi.org/simple uv lock。
提交前必须通过的门禁¶
与 CI 同一套门禁(命令与 .github/workflows/ci.yml 一致;gen_model_zoo
--check 由测试套件在 CI 内执行):
ruff check src tests scripts # lint(规则集见 pyproject.toml)
bandit -r src/autovision -ll -ii -q # SAST(medium/high)
mypy src/autovision/errors.py src/autovision/runtime/env.py \
src/autovision/runtime/checkpoint.py src/autovision/runtime/fsdp.py \
src/autovision/config # 核心模块类型门禁
pytest tests -q # 测试(含金标准快照)
python scripts/smoke_enterprise.py --json smoke-report.json # 企业冒烟
# CI 另有 core coverage gate(19 个文件,--cov-fail-under=30)
python scripts/check_provenance.py # 溯源门禁(禁词扫描 + allowlist 卫生)
python scripts/check_layering.py # 分层契约(单向依赖)
python scripts/check_docs_links.py # 公开树断链检查(链接 + 反引号仓库路径)
scripts/gen_model_zoo.py --check # 模型库页面与注册表一致性(pytest 同款)
mkdocs build --strict # 文档站点构建(零警告)
测试规范¶
- 新功能必须带测试。数值 / 行为类改动优先对拍:与官方实现比对 (bit-equal 优先)、与独立构造的 naive oracle 比对、或断言数值容差—— 而不是只断言「跑通」。
- 金标准快照在
tests/golden/:有意的配方变更后删除快照重新录制 (对应测试跑两遍);快照更新必须在本 PR 说明原因。 - 需要网络 / GPU 的测试一律用门控环境变量(
AUTOVISION_HF_TESTS=1、AUTOVISION_DDP_TESTS=1);默认路径必须 CPU-only 可跑、CI 无网络依赖。 - 修复 bug 时先写能复现的测试,再修实现。
文档规范¶
- 站点页面放在
docs/下,必须在mkdocs.yml导航注册(--strict构建要求);内部分析类文档用exclude_docs显式排除,不静默发布。 - 相对链接必须指向存在的文件(
scripts/check_docs_links.py强制;站点内 链接由mkdocs build --strict强制)。 - 数字纪律:性能 / 精度数字只进
docs/benchmarks.md,并遵循该文首的不可变 协议——对手数字只引官方发表值并给出处,自家数字必附复现脚本,只增不改、 修正进勘误节。 - 模型库页面(
docs/model_zoo.md)由注册表机器生成,勿手改;注册表变更后 运行scripts/gen_model_zoo.py重新生成。 - 国际化:中文是默认语言(
docs/*.md);英文副本使用同名*.en.md(如index.en.md)。未提供英文副本的页面由mkdocs-static-i18n自动回退到中文;新增或修改页面时,若已有对应的.en.md,请同步更新。 - README 语言切换:
README.md(中文默认)与README.en.md顶部互链; 英文站构建在/en/,中文站保持在/。
许可与溯源红线¶
- 每个新增源文件带 Apache-2.0 版权头(样式见任一现有文件首行)。
- 新依赖必须先过许可审查。AGPL 类只允许 extras 隔离(模板见
pyproject.toml的ultralytics条目):不得进入核心dependencies、 不得在模块级 import、不得成为默认安装路径的一部分。 - 权重资产必须钉
revision+sha256+ 许可三元组;受限许可 (CC-BY-NC、自定义 License)必须默认不下载、要求显式自证接受。 - 二进制权重不进仓(
.gitignore已挡*.pt / *.pth / *.onnx / *.engine); 第三方代码 / 模型入库需登记NOTICE并保持字节级可溯源(重新打包的容器 必须附逐位忠实性对拍)。 - 不允许删除或弱化既有门禁来让变更通过评审。
提交与 PR¶
- 提交信息:一行摘要写明「做了什么 + 关键验证读数」,正文写动机、方案与 验证方式(对拍读数、门禁结果)。参考既有提交历史。
- PR 使用
.github/PULL_REQUEST_TEMPLATE.md清单;CI 全绿 + 至少一轮评审。 - 面向用户的可见变更记入
CHANGELOG.md的[Unreleased]段(格式遵循 Keep a Changelog;版本政策见docs/release_process.md)。 - 公共 API(
autovision.*顶层导出、CLI 命令 / 参数、配置字段)的弃用遵循 发布流程中的弃用政策:先标注、至少跨一个 MINOR 才移除。
问题报告¶
用仓库的 issue 模板(bug 报告 / 功能请求);许可与合规问题请按
NOTICE 的联系方式处理,不要在公开 issue 中粘贴受限权重的直链。