


在不越权的前提下,修改含生成代码的多模块仓库
让AI在含生成代码的多模块仓库中工作时使用。先阅读本地规则,修改规范而不是生成文件,做出按模块测试的小而兼容的修改,并把发布和流水线交给有权限的人。
要使用这个AI规则
## 编辑前先阅读根目录和各文件夹的说明
首先找到对可修改文件具有约束力的仓库指南。应将项目文档和目录内的分层指令文件视为本地规范的权威依据,而不是依赖通用的技术生态假设。
- 阅读根目录指南,以及目标目录中更具体的适用指令。
- 查看与任务相关的仓库概览、贡献指南、开发环境设置、测试指南和发布文档。
- 当仓库级指南与模块专用指南不一致时,遵循距离目标最近且适用的指令。
- 从持续维护的项目文件中核实被引用的规则,不要依赖记忆中的命令。
- 找到所有权文件,并确定负责受影响区域的评审者。
- 编辑前明确受支持的工作流程、必要审批和验证要求。
- 只有在权威依据互相冲突,或影响重大的决定仍未解决时才提问。
## 找出负责此修改的模块和审查人
在选择实现位置前,先理解代码库的划分方式。在多模块仓库中,构建边界、依赖清单、生成区域、示例、测试和发布单元可能因目录而异。
- 找到负责公开行为的模块,以及它所依赖的底层组件。
- 区分手写实现与生成代码、模板、规范、测试数据和示例。
- 检查模块清单,理解直接依赖与间接依赖的边界。
- 根据所有权规则确定代码、服务和共享基础设施的维护者。
- 追踪变更会影响单个软件包、一组模块还是共享的兼容性范围。
- 遵循既有目录布局和命名模式,不要另造一套平行结构。
- 除非经验证的依赖关系要求协同修改,否则不要把无关模块纳入变更。
## 使用项目指定的工具版本和任务命令
使用仓库和目标模块声明的工具链。受支持版本、任务运行器、生成器和环境准备方式由项目决定,不能根据本机安装的最新版本自行推断。
- 从持续维护的规则或配置中确认当前受支持的语言和工具版本。
- 如果仓库管理的任务还会执行额外设置,应优先使用它,而不是直接调用语言命令。
- 在文档工作流程所要求的模块或工作区目录中运行命令。
- 保留权威任务执行的环境选择、兼容性选项、生成资源和其他设置。
- 只有文档工作流程明确要求时,才全局安装前置工具。
- 使生成器和编译器版本与项目固定或支持的版本保持一致。
- 缺少前置条件时,应将其报告为具体阻碍,不要悄悄改变工作流程。
## 发布、修改CI或使用凭据前先获得许可
智能代理可以读取代码、解释行为、提出变更、实施已授权的编辑、添加测试、改进文档,并协助分析问题或评审。影响更大的操作仍须获得人员的明确授权。
- 未经批准,不要触发发布、批准发布阶段或公开软件包。
- 不要把修改持续集成、部署流水线或工作流程控制作为其他变更的附带操作。
- 未经明确授权,不要更改许可证、法律声明或合规政策。
- 不要超出已授权任务使用认证信息、访问外部服务或更改远程状态。
- 除非状态变更已获授权,否则问题分类、标签建议和重复项判断都应停留在建议层面。
- 在执行破坏性操作或更改受保护环境前停止,并请求必要的决定。
- 对范围内的常规实现和验证继续自主推进,不要要求多余的确认。
## 不直接改生成文件,而是修改规范后重新生成
生成的软件包需要采用不同于手写代码的变更路径。手动编辑生成结果通常会被覆盖,还可能使实现偏离作为权威依据的规范。
- 通过仓库标记、清单、位置文件或文档化的目录规则识别生成文件。
- 当项目要求依据规范重新生成时,不要手动修改生成结果。
- 如果规范、模板或生成器输入是文档规定的权威来源,就修改该来源。
- 使用项目规定的生成命令和所需工具版本。
- 检查生成后的差异,查找意外文件、纯格式变动或无关的API变更。
- 按仓库模式将手动扩展点与生成区域分开。
- 如果无法执行或未获准执行重新生成,应说明限制,不要把临时编辑伪装成持久修复。
## 做保持向后兼容的小修改
优先进行遵循现有代码规范并保持兼容性的聚焦变更。如果两种方式都能满足要求,小而易于评审的修补比大范围重构更安全。
- 先阅读附近实现,再选择辅助函数、名称、错误模式和文件位置。
- 除非破坏性变更已获明确批准并完成文档记录,否则保持向后兼容。
- 遵循本地关于公开名称、缩写、注释和公开API文档的规范。
- 使用保留有效上下文且不会暴露机密信息的描述性错误。
- 保留所有必要的版权和许可证声明。
- 遵循模块依赖政策,不要为了本地已有的功能新增外部依赖。
- 将无关清理与请求的变更分开,让评审者能够清楚判断意图。
## 先构建并测试目标模块,必要时再扩大范围
先运行能够覆盖受影响模块的最小命令,只有共享行为或仓库政策确有要求时才扩大验证范围。命令成功只有在覆盖变更路径时才有意义。
- 使用模块文档规定的任务或语言命令构建目标模块。
- 先运行直接相关的单元测试,再运行更广的软件包或工作区测试套件。
- 按模块要求加入类型检查、静态分析、格式检查和生成文件验证。
- 确认测试选择范围确实包含预期的软件包和测试用例。
- 尝试集成测试或真实环境测试前,先检查必要的环境变量。
- 如果命令跳过了目标,或结果依赖不可用的外部状态,不要声称已经完成验证。
- 记录运行过的命令、观察到的结果和无法完成的检查。
## 编写不依赖网络和执行顺序的测试,以及能运行的示例
测试应证明行为变更,并能在不同机器上可靠运行。示例应遵循仓库的可执行示例规范,展示受支持的用法。
- 复用模块中已经确立的断言库和测试结构。
- 修复缺陷时,在应用修复前确认新测试会因预期原因失败。
- 单元测试不得依赖网络、认证信息、随时间变化的状态或执行顺序。
- 将测试数据存放在指定位置,并保持最小规模。
- 把真实环境测试设置隔离在获准使用的环境文件中,绝不要提交机密值。
- 当断言说明能实质改善诊断时添加说明。
- 按预期的命名和软件包结构放置示例,并确认它们能在文档化的测试流程中编译或运行。
## 行为改变时更新模块说明和变更记录
文档也是实现范围的一部分。如果不更新会让用户、维护者或发布工具获得不完整或误导性信息,就应进行更新。
- 当设置、受支持行为或公开用法发生变化时,更新模块概览。
- 按项目的文档风格添加或修订API注释。
- 在规定的变更历史中记录用户可见的变化。
- 仓库政策有要求时,为新的公开API提供示例。
- 使设置、生成、迁移和发布指引与实际命令保持同步。
- 确认引用仍然有效,且不会把读者引向私有或过时的位置。
- 行为和工作流程未变化时,避免无意义的文档改动。
## 从指定分支提交审查请求,提交前检查全部差异
使用仓库批准的贡献路径,并让完整变更便于检查。贡献应将实现、测试、文档和理由联系起来,同时不得更改受保护的共享历史。
- 从获准的基础分支开始工作,并通过经授权的派生仓库或远程仓库发布。
- 打开变更请求前,检查分支的完整差异。
- 使用描述清楚的标题,并在有相关工作时加以引用。
- 包含能够防止今后回归的测试,以及政策要求的文档。
- 除非维护者要求采用其他历史策略,否则通过可追踪的后续变更处理评审意见。
- 确认所有必需的自动检查,并调查失败原因,不要绕过检查。
- 未经明确授权,不要更改受保护分支、发布分支或共享历史。
## 审查是否有破坏兼容的修改和生成文件的错误
代码评审应优先关注正确性、兼容性、生成完整性、测试质量、安全性和可维护性。应使用项目专用指南,而不是通用的样式检查清单。
- 确认变更属于所选模块并遵循其架构。
- 查找会破坏API或行为兼容性的变更,包括细微的默认行为变化。
- 在相关情况下,确认测试覆盖成功、失败、边界和可重复性。
- 确认生成文件来自获准的来源和生成流程。
- 检查依赖和清单变更中是否存在违反政策或不必要的新增项。
- 检查文档和变更记录是否完整准确。
- 将发现项交给相应负责人,并区分阻断性缺陷与可选改进。
## 私下报告安全问题,并附上测试结果进行交接
安全问题报告、发布、流水线审批、许可证和认证信息需要专门处理。用基于证据的交接完成常规工作,并把受保护的操作留给有权限的人员。
- 通过项目规定的非公开渠道报告安全问题,不要发到公开的问题区或讨论区。
- 绝不要在公开产物中包含机密值、非公开联系方式或敏感的复现信息。
- 将发布触发、部署审批和许可证决定留给获得明确授权的维护者。
- 说明重要的实现选择,并将其与适用的项目指南关联起来。
- 汇总变更路径、执行过的测试、观察到的结果和仍然存在的限制。
- 需要进一步评审时,指出适当的代码或服务负责人。
- 如果外部访问、不可用工具或审批边界妨碍了完整验证,应明确说明。
