参与贡献
ANet 由三个代码仓库组成:ANet(节点程序、命令行及本文档)、ANetHub(Hub)和 ANetCore(协议与密码学内核)。本页说明如何构建和测试它们、对变更的要求,以及贡献的许可方式。
基本规则
对协议的变更须先在议题中讨论,再提交拉取请求,范围包括线路格式、签名和内容标识符。协议字节在发布之后不再变更:密钥编号、标签和代码永不复用,对注册表(ANetCore 中的
wire/registry.json)的每项变更,须与规范及受影响的标准向量一并提交。缺陷修复、文档、测试和可移植性修复无需事先讨论。
凡更改了向用户显示的语句、命令、配置键或原因码的变更,须在同一拉取请求中更新文档。
请勿在公开议题中报告漏洞。参见 安全模型 与
SECURITY.md。
构建与测试
程序以 Go(1.26 或更高版本)编写,且为纯 Go:默认构建无需 CGO_ENABLED=0,也无需任何构建标签。
$ ./build.sh # builds ./anet
$ ./build.sh --check # gofmt, go vet, go test and the build-tag checks, then the build
竞态检测器需要 cgo 和较长的超时时间,因为仅守护进程的测试在其下就要运行十分钟以上:
$ CGO_ENABLED=1 go test -race -timeout 45m ./...
测试
测试与代码放在一起。守护进程包带有内存中的模拟 Hub,用于无需真实 Hub 的端到端测试。线路对象由 ANetCore/golden 中的标准向量固定:编码的字节即为判定依据,共用同一对象的两个仓库(例如 anet 与 ANetLink 之间的 C1 接口)各自持有字节完全一致的向量副本。
持续集成
有两个作业运行依赖机器环境的测试。作业 sandbox 运行两次:一次在装有 bubblewrap 和仓库中 AppArmor profile 的主机上,一次在 Debian 12 容器中;必须通过的测试列在作业里,其中任何一项被跳过都算失败。作业 premises 运行以机器环境为前提的测试(非 root 用户、参考 A2A SDK、不含某项功能的构建),其中的跳过同样算失败。macOS 与第二个账户(peercred)的作业覆盖其他平台。
风格
代码须通过
gofmt,并遵循所在文件的注释风格。原因表(
internal/a2ashape/reasons.go)是向用户显示的语句的唯一来源。命令行不自行撰写原因语句。语句按下一节所述的风格撰写。
文档
文档以 reStructuredText 编写,使用 Sphinx 和 Read the Docs 主题。英文为源语言,中文通过 sphinx-intl 基于 gettext 目录翻译。
$ pip install -r docs/requirements.txt
$ make -C docs html
$ SPHINX_LANGUAGE=zh_CN make -C docs html
构建使用 -W --keep-going 运行,因此任何警告都会导致构建失败。新增命令、配置键或代码的页面,必须在代码或规范中给出其依据。参考部分的页面在程序源码持有数据之处生成:命令索引、原因码、Hub 代码和线路表(脚本位于 docs/_tools)。
风格
采用正式、克制的语体。标题使用名词短语,说明使用完整的陈述句。不使用口语、感叹号、反问句或表情符号,不将软件拟人化。
描述中不直接称呼读者,使用运维者、调用方和节点等角色。操作步骤可以使用祈使句。
使用 术语表 中的术语,并在首次使用时给出定义。
时间使用 UTC 和 ISO 8601 格式书写,金额带单位“额度”。
主机使用
hub.example.com,AID 使用明显虚构的值。不得公布密钥、令牌或内部主机名。示例应完整且可运行。命令以
.. code-block:: console标注,结构化数据以json标注。交叉引用使用
:ref:与:doc:。
翻译
中文译文按通顺自然的原则撰写,不逐字对译,语体保持一致。提取和更新目录的命令如下:
$ make -C docs gettext
$ sphinx-intl update -p docs/_build/gettext -l zh_CN
术语遵循术语表。命令行、配置键、代码和路径不翻译。
在中文文本中,紧邻汉字的行内标记前后需要加转义空格(反斜杠加空格),否则 docutils 无法识别标记的起止。每次执行 sphinx-intl update 之后,运行设置这些转义的脚本:
$ python3 docs/_tools/fix_po_markup.py
贡献的许可
ANet 依据 ANet 开源许可证发布(参见 许可证)。提交贡献即表示贡献者同意其按该许可证提供,包括其中的贡献者条款:Agent Network Research 可以调整许可证,可以将贡献用于商业用途(包括其托管 Hub 和云运营),并可以仅依据 Apache License 2.0 将其提交给 A2A 项目。对 docs/a2a/ 中 A2A 规范材料的贡献依据 Apache License 2.0 许可。
安全报告
怀疑存在漏洞时,请发送邮件至 hi@anet0.com,主题为 [SECURITY]。