参与代码与文档贡献

开始之前

对于任何大于缺陷修复或文档订正的工作,请先开 issue,以便在投入时间前确认范围。安全问题走 SECURITY.md,绝不开公开 issue。小而聚焦的 pull request 比大块改动更快得到评审。

代码变更

构建并运行完整测试套件,然后为新行为补充针对性测试:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
ctest --test-dir build --output-on-failure

评审者会检查的规则:

  • 公共签名与契约保持显式;新增公共声明必须在同一次改动里带上注释、中文翻译与刷新后的 API 清单。

  • 数值改动必须附带能说明它的 fixture 或 oracle。不要为了让某个平台通过而削弱断言或放宽容差。

  • 性能改动要说明负载、机器与统计量;噪声结果记为 INCONCLUSIVE,而不是向上汇总。

  • 可选接口(ImPlot、扩展)保持可选:任何核心 target 都不得开始依赖图形库。

注释规范

公共声明使用 /// 的 Google 风格契约:以“Returns ...”这类动词短语开头,写明单位、对齐与缺失值规则、所有权,以及经过验证的失败模式。实现注释解释不明显的算法与不变量,而不是逐行复述机械步骤。不要臆造复杂度、线程安全或异常保证。

纯注释改动必须可证明是纯注释:

python docs/site/tools/check_comment_only.py <files>

文档变更

英文源是权威。先生成目录、翻译新字符串,再用严格警告构建两种语言:

cd docs/site
doxygen Doxyfile
python tools/normalize_doxygen_xml.py ../_build/doxygen/xml
sphinx-build -b gettext -W --keep-going . ../_build/gettext
sphinx-intl update -p ../_build/gettext -l zh_CN
sphinx-build -b html -W -n --keep-going . ../_build/html/en
FINCORE_DOCS_LANGUAGE=zh_CN sphinx-build -b html -W -n --keep-going . ../_build/html/zh_CN
cd ../..
python docs/site/tools/check_built_site.py

会被强制执行的文档规则:

  • 每个页面在 locale/zh_CN/LC_MESSAGES/ 都有中文条目;未翻译或 fuzzy 条目会让站点检查失败。

  • 标题不得以数字开头(## 1. ...),否则即使目录里有该字符串,MyST 也会让它保持未翻译。

  • 标识符、命令、路径与公式在翻译中保持原样。

  • 生成的 HTML、Doxygen XML、.pot/.mo 文件与基准输出不入库。

  • 描述失败模式的页面要写出真实消息,而不是转述。

提交与 pull request

  • 一次提交一个主题:行为改动、文档改动与产物更新不放在同一提交里。

  • 说明你跑了什么、以及没能验证什么 —— 平台、硬件、外部服务。本地构建不等于线上部署。

  • 若某个平台不可用,请连同确切的操作路径一起记为待完成,而不是声称成功。

评审与证据

评审者关注:契约写在读者会去找的位置;如果行为回退,测试会失败;文档写的是代码实际做什么而不是打算做什么;文中出现的每个数字都能从仓库复现。

docs/acceptance/ 下的验收记录与 docs/iterations/ 下的迭代说明是项目的记忆。当改动改变了事实时更新它们,绝不为了看起来更整洁而改写历史。