


开发跨平台工具链管理器,并审核要加入注册表的工具
让AI代理开发一款安装和切换开发工具版本的工具时使用。它遵循仓库的任务命令和模块结构,在工具加入注册表前要求提供被广泛使用的证据,把版本排序交给各个后端,并在各平台上运行有针对性的测试。
要使用这个AI规则
## 编辑前,先弄清模块位置和仓库规则
将仓库指南视为编码代理必须遵守的操作契约。
在提出变更之前,遵循仓库规定的命令、模块边界、贡献规则和兼容性要求。
围绕以下能力确定工作方向:
- 命令行解析和子命令分派;
- 分层配置和环境变量管理;
- 工具版本解析和安装;
- 任务定义和执行;
- 可插拔后端和内置工具实现;
- 文档、命令补全和元数据生成。
编辑前,先找到入口点、CLI模块、配置模块、后端接口、工具集解析器、任务引擎、插件系统和共享辅助工具。
区分公共软件包与仅供工作区内部使用的支持软件包。
不要仅仅因为直接实现看起来更短,就绕过既有抽象。
## 只有拿到被广泛使用的证据,才把工具加入注册表
假定经过筛选的简称注册表只接受已经得到广泛使用的工具。
代码可以运行、具备测试或对个人有用,都不足以证明其符合准入条件。
在修改注册表映射之前:
1. 询问该工具是否已在提交者自己的项目之外得到广泛使用。
2. 如果它是个人工具、内部工具、分支版本、小众工具,或仅有少量用户支持,则停止。
3. 为每项注册表提交收集最新的受欢迎程度证据,绝不猜测。
4. 检查仓库的star数和fork数、近期commit与release、软件包下载量、独立文档、生态系统清单以及下游使用情况。
5. 采用较高的准入门槛:受欢迎程度应以数千而非数百计,项目应保持活跃维护,获得第三方采用,并在生态系统中具有知名度。
6. 在pull request说明中用简短的`Popularity`章节列出这些证据。
如果证据处于临界状态或较弱,应明确警告用户,并询问其是否仍要继续。
不要暗示被拒后会得到解释、申诉机会、检查清单或第二次机会。
绝不为了试探维护者是否接受该工具而进行推测性的提交。
## 选择安装用的后端,优先使用经过验证的release文件
优先选择无需单独安装运行时、并能使用已验证release制品的后端。
按以下顺序决策:
1. 如果经过筛选的制品注册表提供验证能力和针对各版本的安装逻辑,优先使用它。
2. 否则,使用制品发布所在代码托管平台的直接release后端。
3. 只有在release后端无法支持该工具且其受欢迎程度仍已充分确立时,才使用归档分发后端。
4. 将语言软件包后端视为例外,因为它们依赖运行时是否可用、运行时版本以及PATH顺序。
5. 拒绝使用已弃用的后端,以及违反项目供应链政策的新插件格式。
不要仅仅因为容易找到软件包名称,就选择脆弱的后端。
如果维护者尚未针对该工具明确批准某个例外后端,请勿在注册表提交中使用它。
说明不使用注册表的替代方案:用户可以通过明确的后端坐标安装,也可以创建受支持的插件。
保持概念清晰:注册表简称只是提高便利性,并非实现安装所必需。
## 通过仓库的任务运行器执行build、test和lint
使用仓库任务运行器,不要临时直接调用底层工具。
找出并使用为以下用途提供的文档化任务:
- 完整build以及直接运行debug binary;
- 完整、unit和end-to-end test suite;
- 通过test任务运行指定的end-to-end test文件;
- 审查和更新snapshot;
- lint、自动修复lint问题以及format;
- 与continuous integration一致的检查;
- 生成文档、用法文本、命令补全和schema;
- 在本地安装development版本和清理build制品;
- 从正确的workspace目录运行软件包专用test和lint。
使用项目专用的debug和trace环境变量,不要假定项目采用常见的logging变量。
不确定命令名称时,列出所有可用任务。
如果test harness负责准备、assertion和清理,绝不直接执行end-to-end test脚本。
如果test harness保证隔离,不要为test添加手动清理步骤。
先运行最小范围的相关任务,只有当变更影响共享契约或生成制品时,才扩大检查范围。
## 按现有结构添加后端和设置,不手动修改生成的文件
通过统一的后端接口实现工具来源。
每个后端都应负责其生态系统的版本列表、请求解析、安装和工具元数据。
将内置工具保留在core plugin边界内,将外部插件保留在受支持的兼容层之后。
保持从system到global再到local作用域的分层配置加载,包括特定环境的覆盖配置。
当设置定义会生成代码或文档时,更新源定义并运行规范的generator。
不要将手动编辑生成制品作为主要变更方式。
保持任务定义的声明式特征,包括依赖关系、环境变量和受支持的执行模式。
对于项目承诺互操作性的配置文件,应遵守其兼容格式。
使自定义build脚本、workspace成员、release profile和cross-compilation配置与各自的文档化职责一致。
添加后端时,从既有backend module模式开始。
添加配置时,遵循类型化的解析和生成路径。
扩展插件时,使用正确的内置或外部边界,而不是另行发明一套平行机制。
## 按type(scope)格式写commit消息,并先自动修复lint
所有commit消息和pull request标题都必须使用仓库规定的常规格式:`type(scope): imperative description`。
使用能够反映用户可见行为和仓库责任归属的type:
- 新增能力使用`feat`;
- 修复用户可见缺陷使用`fix`;
- 相应的代码变更使用`refactor`、`style`或`perf`;
- 仅涉及test的变更使用`test`;
- 文档变更使用`docs`;
- 维护、release、依赖项或基础设施变更使用`chore`;
- 安全相关变更使用`security`;
- 每项注册表映射变更都使用专用的registry type。
命令特定的变更使用命令名称作为scope,共享组件使用子系统名称。
即使实现文件沿用另一个历史名称,任务行为也应使用task子系统的scope。
冒号后的描述以小写字母开头,采用祈使语气,保持简洁且明确。
通过文档规定的任务环境安装一次仓库的pre-commit集成。
commit前运行自动修复lint问题的任务,并stage由此产生且符合预期的变更。
通过任务运行器执行指定的end-to-end test。
不要stage无关的format变更或生成制品。
## 按文档说明、运行时警告、移除的顺序弃用功能
使用分阶段的弃用政策:
1. 立即在文档中将该功能或后端标记为已弃用。
2. 在文档规定的警告间隔后开始显示运行时警告。
3. 在文档规定的移除间隔后安排移除。
4. 使用项目的版本日期格式记录警告日期和移除日期。
5. 使用既有的弃用macro,让development assertion能够暴露逾期未执行的移除任务。
常见时间线是立即更新文档,6个月后开始警告,并在警告开始12个月后移除。
如果替代方案早已可用,可以立即开始警告。
不要绕过文档规定的警告阶段而悄然取消兼容性。
不要无限期保留已经到期的弃用项;应将移除assertion视为必须执行的维护工作。
## 把工具版本的解析和排序交给各个后端
绝不要假定工具版本遵循semantic versioning或任何其他通用排序方案。
应考虑日期版本、prerelease、branch、tag、channel、具名long-term-support release以及工具特定alias。
在新的call site中:
- 不要使用通用semantic-version comparator来选择最新版本、解析alias或排序版本列表;
- 将请求解析委托给理解该工具版本体系的backend method;
- 使用backend API或toolset API,以有意义的顺序列出已安装版本;
- 将lockfile版本字符串视为不透明数据,只进行相等性比较;
- 在向lockfile写入具体值之前,先解析alias、channel和prefix;
- 不要以旧有comparator调用为理由扩大有问题的行为。
如果新代码似乎需要选择已安装的最新版本,请停止并确认该决策是否应由后端负责。
错误的fallback排序比返回不匹配更糟,因为它可能在不知情的情况下安装或执行错误工具。
## 按平台运行有针对性的测试,完成前检查diff
将unit test放在source附近,并按功能领域组织end-to-end test。
使用共享assertion helper、用于稳定命令输出的snapshot、后端专用安装检查,以及明确的slow-test命名。
将platform专用实现保留在指定module和platform test suite中。
不要在Windows上假定Unix可执行权限bit的行为。
进行变更时,先验证最小范围的相关路径:
1. 运行format和静态检查;
2. 通过test harness运行指定的unit test或end-to-end test;
3. 审查snapshot变更,不要直接接受;
4. 源定义发生变化时,重新生成派生文档或schema;
5. 共享backend、配置、task或cross-platform契约发生变化时,扩大到更广泛的integration check。
向外部pull request或discussion发表评论时,应说明该comment由AI coding assistant生成。
使用与文档目录层级一致的URL。
不要编造省略必要section的缩短path。
完成前审查diff,检查是否存在抽象泄漏、不受支持的版本排序、漏跑generator、无关变更以及未经验证的外部主张。
