


在大型多语言代码库中修改代码,只跑需要的构建和测试
在混合多种编程语言的大型代码库中修改代码时使用。先研究相似代码,确认可用的工具和硬件,只运行受变更影响的构建和测试,合并前恢复完整 CI,并报告未能检查的内容。
要使用这个AI规则
## 先调研和计划,再做最小的修改并测试
对每项变更都采用可重复执行的流程:
1. 调研请求、相关代码、依赖项接口、现有测试以及已知的故障模式。
2. 制定高层实施计划,并审视其中的假设、边界情况和运维风险。
3. 检查相似代码,了解代码库的组织方式、命名、错误处理和测试模式。
4. 仅在用户要求时展示计划;否则继续实施。
5. 实施满足请求的最小且完整的变更。
6. 从API正确性、清晰度、性能、可读性和意外扩大范围等方面审查结果。
7. 执行格式化、定向构建和相关测试,再针对失败结果反复修正。
不要把起草完成视为任务完成。只有实施结果及其直接影响的行为都经过审查和验证后,变更才算就绪。
## 编辑前先参照最相近的类似代码
阅读代码库级别的贡献指南,以及约束待改文件的所有路径专用说明。查找最接近且正常工作的参照,例如同类、相邻软件包、类似测试或相关工作流;除非任务要求有意偏离,否则遵循其既有结构。
通过权威接口或现有用法验证依赖项API和边界情况。创建新测试前先查找现行测试,并将新增覆盖纳入代码库已有的框架,而不是另建一套并行测试工具。
将调查范围限定在请求的行为上。不要把无关的重命名、目录移动、纯格式化噪声或架构清理混入变更。
## 测试前确认可用的工具和硬件
选择命令前,确认实际可用的编译器、运行时、构建工具、容器、加速器和凭据。要区分能力不可用与产品故障:缺少设备、不支持某种容器运行时或没有工具链,并不能证明代码存在缺陷。
当代码库的标准容器或开发环境受支持且对复现有必要时,应使用该环境。否则,运行当前环境中所有有意义的检查,并确定仍需其他机器或用户操作的最小命令。
绝不能声称无法执行的测试已经通过。应报告准确的限制、在缺少该测试时已完成的验证,以及剩余风险。
## 只构建和测试变更影响到的部分
优先使用代码库提供的预设和辅助脚本,而不是手工拼接命令序列。查明受支持的预设,选择与变更组件和语言级别相匹配的预设,并且只针对相关的构建目标、单元测试、集成测试或编译器检查。
利用依赖关系信息,将共享组件或高依赖组件变更影响到的下游组件纳入范围。对于局部变更,应避免重新构建无关软件包。只有跨领域变更、发布门禁或代码库策略明确要求时,才使用完整构建和完整测试套件。
记录所选范围为何足够。只有明确说明精简检查与变更的关系,这种检查才有价值。
## 按各语言和硬件架构各自的方式测试
按照各自的接口处理每种语言或软件包层。原生库可能需要编译器、语言标准和架构设置,而脚本语言软件包可能需要运行时版本、附加依赖项以及软件包专用的测试入口。不要把一个生态系统的参数传给另一个生态系统。
对于架构敏感的代码,要区分仅限主机的检查、仅编译检查、模拟器或虚拟目标,以及需要实体硬件的测试。应根据变更的行为和受支持的兼容范围选择代表性架构,而不是默认编译所有变体。
共享组件发生变更时,应检查依赖关系图,并验证最可能暴露兼容性回归的使用方。
## 先跑便宜的检查,不要过早停止慢的构建
应预期大型构建、自动生成的测试矩阵和硬件支持的测试套件会耗费大量时间。设置合理的超时,使用受支持的缓存,在迭代期间限制架构和目标,并且仅在风险或发布阶段足以证明成本合理时扩大覆盖范围。
耗时较长本身并不能证明任务已经卡死。不要仅因构建或测试速度慢而将其取消;只有出现明确的失败证据、明确的运维限制或用户指示时,才停止任务。
分阶段安排验证,使低成本反馈最先返回:先进行格式化和静态检查,再进行定向编译和可在主机上运行的测试,最后执行专用环境或硬件相关的测试套件。即使早期迭代使用较小的子集,也要保留最终要求的覆盖范围。
## 迭代时可缩小 CI,合并前必须跑完整 CI
使用变更检测和作业矩阵,运行与受影响组件相关的作业。临时覆盖矩阵或跳过控制项可以降低早期迭代成本,尤其适用于基础设施变更或高依赖区域,但这些设置必须保持可见且可审计。
将缩小后的CI覆盖视为合并阻断条件。合并前,恢复代码库要求的完整配置,并在没有临时覆盖或跳过控制项的情况下成功运行。没有明确指示时,不要移除其他贡献者的覆盖设置,也不要改变其范围。
当工作流要求保留空值而不是移除配置时,应保持覆盖配置在结构上有效。确认必需作业失败或缩小的覆盖范围仍然存在时,结果聚合会以失败状态安全收口。
## 运行格式化和 lint 工具,并报告没跑的检查
提交前,对变更文件运行代码库的格式化器、检查器和提交前检查。先应用通用样式指南,再应用由受影响路径决定的语言、目录或测试专用规则。
审查最终差异,检查是否存在意外文件、生成产物、命名不一致、过时注释或测试缺失。完成最后一次编辑后,重新运行定向验证,确保报告的证据与交付内容一致。
准确报告执行的检查、检查结果、未执行的检查、无法执行的原因以及由此产生的剩余风险。如果缺少所需硬件、工具、权限或CI覆盖,绝不能将变更描述为已得到完整验证。
