生态第三方包第三方库编写指南
发布硬性要求
第三方库进入稳定生态前必须满足的工程、API、安全、验证与发布门禁。
本页是稳定发布门禁,不是建议评分表。任一适用项缺少直接证据,就不能把版本标为稳定。 确实不适用的条件要在发布报告中写出原因,不能用“不适用”隐藏未实现或未测试的能力。
身份与范围
| 要求 | 可接受证据 |
|---|---|
| 包解决明确且可复用的问题,不冒充官方维护 | README 的定位、维护者和与相近包的差异 |
| 仓库名、包名、依赖别名和导出关系清楚 | README 安装段与格式 2 清单 |
包名符合文字、数字、_、-、.规则且身份稳定 | yanxu 包 .成功,发布后不在同一兼容线改名 |
| 支持声明有明确边界 | COMPATIBILITY.md列出最低/最高已测版本和不支持项 |
工程与依赖
言序.toml必须使用[包].格式 = 2,包含名称、SemVer 版本、实际最低言序、包内入口、 说明、SPDX 许可、导出和字节码构建目标。- 所有权限键必须显式且最小化;纯计算库保持空列和
false。新增文件、网络、环境、进程、 原生或桌面能力必须有威胁模型和拒绝权限测试。 - 稳定依赖必须同时给出兼容版本范围和不可移动的标签修订。发布清单、示例、基准和消费者
都不得残留路径依赖、
main或HEAD。 - 根包及每个独立子项目都提交
言序.lock。在线安装后离线验证成功;版本、提交、内容摘要 和依赖边可复现,不能手改或宽松比较关键字段。 - 依赖许可必须兼容;复用或捆绑第三方源码、字体、数据和动态库时记录来源、版本和许可。
- 包中不得包含密钥、令牌、私钥、签名证书、真实密码、开发者绝对路径或无关生成文件。
API、错误与安全
- 默认导出只暴露稳定能力,内部实现不成为偶然公共 API;独立消费者只能通过
包:<名称>导入。 - 公共函数、类型、常量和字段使用一致的中文命名;参数顺序、返回形状、空值、顺序、所有权 和回调行为有文档与规格。
- 所有可预期失败都有库级稳定错误代码;完整中文消息不作为程序协议。常见失败提供结构化
错误详情,适合时同时提供不抛出的尝试…入口。 - 外部输入具有公开且受测的长度、深度、项目、输出、时间或步数预算。超限明确失败,不 返回截断伪成功,也不接受无限配置。
- SQL、HTML、URL、路径、命令、网络和原生边界使用安全默认值与负面测试;敏感字段在错误、 日志、踪迹和制品中默认脱敏。
yanxu 文生成的 Markdown 与 JSON API 清单随源码提交,CI 重新生成并逐字节防漂移。
测试与文档
稳定库至少具备并通过:
- 正常、边界、非法输入、资源上限、错误代码和状态转换规格;
- 可执行五分钟示例;
- 有固定负载、结果断言和环境说明的基准;
- 只用公开包边界的独立消费者;
- 当前稳定言序与清单声明最低言序的清单、锁、格式、静态检查、执行和 release 构建;
- 纯言序路径的树解释器、字节码 VM 与 Release YXB 结果对照;
- 所有声称支持的操作系统、架构和真实外部服务版本。
仓库必须提供非占位的README.md、LICENSE、CHANGELOG.md、COMPATIBILITY.md、
CONTRIBUTING.md、SECURITY.md、API、指南、架构、性能、安全模型和迁移文档。小库可以
合并相近文档,但上述信息不能缺失。
CI 必须在 PR、默认分支和正式标签触发;固定工具链和第三方 Action;默认最小 GitHub 权限; 任何测试、API 漂移、制品缺失、摘要不符或安全门禁失败都阻止发布。
原生扩展附加要求
原生包还必须满足:
- 使用已支持的 ABI,稳定生态优先 ABI v2;清单为每个目标固定唯一文件、真实大小和 SHA-256。
- 每个声称支持的操作系统与架构在原生 runner 构建、检查格式与架构、核对
yanxu_native_module_v2导出,并执行源码和 YXB 消费者。 - 原生工具链与依赖锁定,格式、单测、严格 lint、release 构建均通过。
- macOS 安装名与签名状态、Windows CRT 策略、Linux glibc 与动态依赖下限有机器检查和 Release 披露。
- Git 标签本身包含清单引用的文件,或通过兼容包索引分发完整 Release 归档;不能假设 Git 依赖解析器会下载 GitHub Release 附件。
- 未登记、缺失、错误架构、大小或摘要不符的制品明确失败,不跨目标静默回退。
版本控制与发布
- 功能、测试、文档、CI 和发布准备按可独立验证的步骤提交;一个提交不混入无关重构或 批量格式化。
- 变更在独立分支完成,通过 PR 审查和全部检查;不直接推默认分支。
- PR 使用普通 merge,最终合并提交恰有两个父提交;不以 squash、rebase 或强推改写步骤 历史。
- 版本遵循 SemVer。清单、源码版本、原生工程、CHANGELOG、迁移说明、API 和 Release Notes 同步。
- 标签在 PR 合并和最终主分支 CI 成功后创建,命名为
v<版本>,且必须是附注标签,精确 指向最终默认分支提交。 - GitHub Release 绑定该标签;稳定版不是草稿、不是预发布;制品大小、SHA-256、签名状态、 平台矩阵和已知限制如实披露。
- 已公开标签和 Release 不移动、不重写、不用强推替换。发现缺陷后以新的补丁、次版本或 主版本修复。
最终验收
发布完成前必须保留一份逐项证据记录,并从外部可见状态重新验证:
- 默认分支、附注标签和 Release 指向同一最终提交;
- PR 是普通双父合并,主分支与标签 CI 成功;
- 从公开标签、空依赖缓存进行全新克隆,在线安装后离线锁验证成功且工作树干净;
- 独立消费者以公开 Git 标签或兼容索引安装,源码与 release YXB 均完成真实任务;
- 下载公开附件后重新计算大小与 SHA-256,与 CI 产物和 Release 说明一致;
- 权限拒绝、恶意输入、敏感信息扫描、许可证和供应链审计成功;
- 测试或服务创建的文件、端口、进程、数据库对象全部清理;
- 所有已知限制有文档,没有把未实现或未验证能力写成支持。
验收必须覆盖发布声明的完整范围。单个平台、单个入口、缓存工作树或仅构建成功的结果,都 不能证明跨平台、独立消费、离线复现或运行时安全。
发布清单
在创建标签前最后核对:
- 格式 2 清单、所有锁文件、依赖标签和权限已审查;
- 当前与最低言序、全部平台和真实服务门禁成功;
- API、错误、示例、基准、兼容、安全和迁移文档同步;
- 独立消费者的源码与 Release 路径成功;
- 分支步骤提交完整,普通 merge PR 已合并,最终主分支 CI 成功;
- 附注标签、标签 CI、Release 元数据与制品摘要可复核;
- 全新克隆、离线锁、安全扫描和清理检查成功。
全部勾选并有证据后,版本才具备稳定发布条件。