


开发自动运行AI代码审查与修复的工具,且不丢失用户代码
在开发或修改一个于后台运行AI代码审查和修复的工具时使用。先读构建定义和职责文档,不让不可信分支的配置执行命令,保护正在运行的作业,并阻止不安全的推送或发布。
要使用这个AI规则
## 修改代码前,先读构建定义和职责文档
修改代码前,先阅读仓库入口、包结构图、构建定义和责任归属文档。将生成的副本和便捷摘要视为指向权威来源的线索,而不是相互竞争的事实来源。
### 熟悉仓库
- 找出可执行入口、实现包、共享基础设施和构建系统。
- 从构建定义获取当前命令列表,不要把可能过时的命令复制到指南中。
- 确定每项外部行为、配置键、环境变量和运维不变量分别由哪个文档或源文件负责。
- 明确标示主机专用适配器。固定对外部CLI版本的假设;当worktree状态使高层命令不可靠时,使用稳定的API后备路径。
### 验证关卡
- 交付前执行格式化和lint,包括生成产物的漂移检查。
- 迭代时运行聚焦测试,随后执行变更边界所要求的权威单元、集成、竞态和端到端测试套件。
- 对进程、I/O、配置、Git、守护进程和已记录fixture的行为优先使用端到端测试;对纯helper使用单元测试,以提高速度并缩小定位范围。
- 完成非微小变更后,构建真实的可执行文件。
- 修复缺陷和开发功能时采用测试驱动开发;把未解决工作留在问题跟踪系统中,不要藏进无关编辑。
## 取消时停止所有子进程,并显式传入Git目录
长时间运行的自动化必须在每个受支持的操作系统上管理好自身的取消、后代进程、共享状态和文件系统影响。
### 进程规范
- 将取消上下文传递给长时间运行、子进程和网络工作。
- 为清理、探测和HTTP调用派生有上限的超时。
- 将可取消子进程置于进程树边界内,使取消操作终止全部后代,而不只是直接子进程。
- 正常退出、出错和取消时都要回收进程组;继承的管道和泄漏的孙进程不得比一次运行存活更久。
- 通过一个幂等wrapper应用平台专用的子进程加固,确保后台工作绝不会打开多余控制台。
- 用标准同步原语保护共享可变状态,并明确goroutine、channel、worktree和临时目录的所有权。
### 文件系统与Git规范
- 使用跨平台路径helper、应用拥有的状态根目录以及有文档说明的文件模式。
- 当平台alias可能使等价路径的比较结果不同时,解析符号链接。
- 对bare仓库的Git操作必须经过显式传入Git目录的helper;在加固的Git设置下,绝不能依赖当前目录发现。
- 只有所有权和生命周期记录证明安全时,才能移除或替换状态。
## 只由可信分支的配置决定运行哪些命令
能够选择命令或可执行智能体的配置就是代码。只能从可信revision加载,并把贡献者可控制的配置和指令视为不可信数据。
### 可信输入
- 通过一次全新fetch解析可信默认分支,并在读取控制代码执行的设置前固定确切commit。
- 无法fetch、读取或解析可信commit及其当前配置时立即中止。如果契约允许,能够读取的可信tree没有配置也可以是有效状态。
- 命令selector、智能体selector、文档策略、项目指令退出选项和仓库命令权限,只能从可信副本读取。
- 仓库命令权限默认禁用。已push的分支绝不能自行启用执行权限或削弱可信策略。
- 分离不执行代码的功能设置,使分支专用行为不会跨越执行边界。
### 失败时默认关闭
- 将用户或仓库内容放入智能体prompt前,净化对抗性控制文本并隐去秘密。
- 启动前,确认所有指令抑制选项在所选适配器上确实生效。
- fetch、解析或授权失败后,绝不能伪造可信状态。
- 添加回归测试,证明已push内容无法自行授权命令、替换可信策略或绕过失败时默认关闭的行为。
## 常驻服务只运行一个,作业进行中拒绝停止
机器级服务需要分别防护单例所有权、socket安全、恢复过程和破坏性生命周期命令。
### 单例与恢复
- 恢复工作或绑定socket前,先获取操作系统排他锁,并在整个进程生命周期内持有它。
- 将仍被持有的内核锁视为存活所有者的证据;不要为这种锁自创过期启发式规则。
- 移除现有socket前先探测,并分别限制连接和健康检查超时。
- 只能通过显式模式启动服务执行。继承的环境变量不得把普通探测重新解释为worker。
- 启动清理必须感知状态:绝不能移除作业记录为pending或running的worktree或资源。
### 生命周期控制
- 存在active作业时拒绝stop、restart和update,除非运维人员提供明确的破坏性override。
- 不允许非交互confirmation flag绕过active作业防护。
- 列出阻塞作业,并以进程及其父进程归属信息审计每次生命周期调用。
- 将CI监控上限视为空闲超时:仅在已验证的上游进展出现时重新计时,绝不缩短现有deadline;无法检查进展时安全失败。
- 孤儿abort操作必须幂等。等待智能体的时间戳仅用于观察:只在关卡确实暂停时设置,绝不能用它改变关卡的解决方式。
## 分开审查会话和修复会话,并把改动与明确的目标对比
审查必须将完整变更与可从源中验证的意图比较,不允许不可信文本、交付时机或修复者理由扭曲判断。
### 意图与发现
- 保留意图来源。将明确意图视为权威验收标准,将推断意图只视为低置信度线索。
- 对两者应用相同的净化、秘密隐去和禁止执行防护。
- 如果修复者的变更违背明确标准,将其转为请求用户确认的发现并暂停运行。
- 在交付前审查中,只排除由后续流水线阶段负责的结果;继续执行外部或预先存在的生命周期要求。
- 发现的动作缺失或未知时默认关闭:将其分类为请求用户确认,绝不能当作可自动修复。
### 会话与修正规范
- 每次运行保留一个持久审查会话,并另设一个持久修复会话;两个角色绝不能共享状态。
- 会话只在审查循环内复用,仅持久化最低限度的身份信息,绝不保存prompt或transcript。
- 不支持resume或resume失败时,丢弃该身份,并以全新状态重复同一角色的轮次。取消后不要重试。
- 每次重新审查都必须对完整分支diff进行全面的对抗性审查。
- 一轮修正中先应用全部修正,再运行一次仅限变更区域的聚焦验证。权威full-suite测试和lint关卡交给专用阶段。
## 生成的文档从源文件重新生成,使用统计中不放提示词和代码
每项事实只保留一个负责来源,从源重新生成派生指南,并将本地详细诊断证据与有上限的远程分析分开。
### 文档与生成内容
- 概览文档保持简洁;把详细参考事实放到指定负责位置,并从指南链接过去。
- 责任范围移动时更新所有权图。
- 编辑生成式智能体指南的源,通过批准的构建重新生成产物,并让lint在出现漂移时失败。
- 当源指南和使用位置的命令输出表达同一运维契约时,两者必须一起修改。
- 如果一次智能体处理同时负责文档和lint,每项结果必须恰好消费一次;输出被跳过、无效或不可信时,改用独立处理。
- 文档编辑仅限本次变更导致过时的内容;不要重新引入全语料库扫描。
### 保护隐私的可观测性
- 只读界面不得发送pageview;其远程命令事件必须同时受状态变化和有上限的时间间隔控制。
- 变更事件保持完整精度,而详细性能证据只能存放在本地。
- 调用计量中绝不能保存prompt、输出、diff、秘密或原始命令参数;远程分析绝不能接收运行标识、路径、会话身份或逐次调用记录。
- 只在终止事件上发送有上限的聚合计数。
- 计量定义和计时边界只能有一个权威实现。不可用值用null表示,不得伪造为0;必要时从会话累计值的差量计算每轮用量。
## 强制推送前先核对远程分支,并为每个发布构建签名
首要不变量是保护用户代码。拒绝不安全的同步或交付,不要尝试可能覆盖未观察工作内容的巧妙恢复。
### 仓库与分支安全
- 将pull request的base路由与可选fork push目标分开。托管平台无法端到端支持fork路由时,应跳过创建,而不是打开错误的self request。
- 常规同步仅限干净的严格fast-forward,或锚定到确切流水线head、且已证明等价分歧的移动。
- 被动状态检查不得fetch或变更。受阻路径不得reset、stash、merge、rebase、force、switch、删除或更新外部remote。
- 持久化已push的确切commit、不含credential的目标身份和generation,然后在应用同步前立即复查所有可变假设。
- 用恢复reference保护尚未发布的终态工作。恢复只能通过严格fast-forward移动干净worktree;保留本地工作时,必须通过compare-and-swap更新关卡,且不得触发新流水线。
- 从最新fetch的权威remote reference推导rebase base。未push的默认分支commit会悄然扩大变更时,暂停处理。
- force push前重新读取remote head,仅在新分支、相同head、与上次观察相比未变的head,或remote新增commit已由patch identity证明等价时继续。任何查询或证明失败都必须默认关闭。
- lease锚点应是本次运行实际观察到的最后一个head,绝不能改成force前刚fetch到的tip。
### 发布与依赖安全
- 对有永久签名契约的平台,在归档或计算checksum前,用固定应用身份、加固runtime和安全timestamp为每个正式产物签名。
- 签名credential仅限发布作业使用,导入临时存储,并在成功和失败时都移除。
- 签名缺失或含糊、身份或架构错误、身份要求可变、缺少加固或缺少timestamp时,发布验证必须失败。
- 公证、打包格式和通用二进制文件应视为独立范围,除非发布契约明确包含它们。
- 添加依赖前,查阅其当前权威文档,并与用户讨论该变更。
- 在格式化、lint、聚焦测试、集成测试、完整套件、构建检查、文档检查和发布专用验证都有实际结果前,不得宣称已准备就绪。
