智能体可以快速生成看似合理的代码,其中部分代码会采用细心工程师不会采用的捷径:为让测试通过而跳过测试、吞掉错误、留下存根、屏蔽类型检查、采用代码库中已有的功能的替代实现方式。Anti-slop该检查会在每次代码变更中排查这类问题,在你看到变更前就将其退回给开发智能体。
它只是你“质量策略”中的一项检查质量策略并非独立的评分项。只要变更不引入任何阻碍因素,就算通过检查。
排查范围
规则被分为不同类别。每条规则要么阻断、提示要么记录相关信息信息。
- 测试——针对性或跳过的测试、被删除的测试、被移除或弱化的断言、无法触发的测试。
- 禁用项——新的代码规范禁用项、类型忽略项以及
any类型转换。 - 构建与CI——被移除或中和的测试步骤、被降低的阈值、“无测试也通过”、未绑定到提交的GitHub Action。
- 测试凭证——将缓存结果冒充为实际运行结果、未执行任何测试、将部分运行结果报告为完整运行。
- 生产代码——调试残留代码、占位符、模拟数据、给开发人员的备注、被误发到生产环境的测试代码。
- 错误处理——吞掉错误、隐藏故障的回退机制、开放权限检查。
- 依赖项——不存在或标记为恶意的软件包、命名与热门软件包相似的新型软件包、安装时会运行代码的软件包、清单文件被修改但锁文件未同步更新。
- 安全——代码中包含机密信息、TLS检查被关闭、授权检查被移除、直接从网络下载并运行的脚本。
- 注释、架构、变更范围、缓存以及 智能体操作记录——记录智能体的操作,比如测试失败后立刻修改测试代码。
“Anti-slop规则”中的每条规则Anti-slop规则从Quality Control中的Anti-slop行打开后,可查看该规则匹配的内容、其重要性以及它在组织默认配置或项目中的具体作用。
只有变更引入的问题才会导致检查不通过。
大多数代码库中已经存在部分此类模式。Anti-slop会将所有发现的问题分为三类:
- 新增——本次变更中新出现的。
- 已触及——原本就已存在,只是本次变更修改了相关行或函数。
- 现有——代码库中其他位置已存在的。
只有属于阻断类规则的新增发现项才会导致检查失败。已触及和现有的发现项会被记录下来,方便你在Factory的“技术债”板块跟踪,也可在此创建任务修复相关规则的问题,但它们不会阻碍无关工作。移动代码不算作引入新内容;复制代码才算。
已提出
- 预警关卡
审阅者智能体
- 关联的扫描工具
已分配
可修复
退回给开发人员作为返工内容
其他情况
附在pull request中
已解决
已修复
该变更解决了问题
已采纳
确实如此,但此处无需处理。请说明原因。
已忽略
属于误报或不适用的规则。请说明原因。
每周技术债清理
现有技术债虽不会阻碍流程,但无需长期留存。在Quality Control中打开项目,展开Anti-slop并开启每周技术债清理。每周Coroid会扫描项目的默认分支,为发现的技术债创建小型清理任务,每次处理少量文件。同时,开放的清理任务数量最多不超过同时开放的任务是设定的数量(默认值为2),因此清理工作不会挤占人员负责的业务任务。每次变更都支持撤销操作。
清理规则按项目设置。其日程安排在Factory中展示,注明由Quality Control负责管理;需在此处修改,而非在Factory中调整。
此前“新任务”模块提供“每周技术债清理”模板。基于该模板创建的日程会继续运行,名称会与开关一致;若技术债清理功能取代了原有模板,可在Factory中暂停该日程。
开启方法
在Quality Control中,选择组织默认配置或特定项目,然后开启Anti-slop。它会新增五项要求:
- 测试仍能验证变更的有效性。
- 不会发布未完成或仅用于测试的内容。
- 不会产生新的结构性技术债。
- 变更范围符合预期,且代码风格与当前代码库保持一致。
- 新增依赖项真实可靠。
变更会立即生效:该项目下一次运行,或遵循默认配置的所有项目运行时会纳入该检查。行内的设置可决定变更管控规则,即阻断类规则和判定类规则的组合;关闭该功能后,下次开启时仍会保留这些设置。
选择变更管控规则
该规则会告知开发智能体变更可涉及的范围:
- 精准匹配— 仅处理规格要求内的内容;其他问题会被记录,但不会修复。
- 平衡处理(默认) — 同时修复变更所涉及的代码行中的小问题。
- 全面修复— 同时清理变更所编辑的函数内部的违规项。
智能体在提交前会遵循相同规则:它会提前获取既定规范和你的隔离模式,每次编辑后都会参照快速规则,且在进入QA环节前只有一次修复阻断性违规项的机会。
使其适配你的代码库
- 规则覆盖— 在Anti-slop规则中打开对应规则,可设置其为阻断、提醒、仅记录或停止执行,适用于组织默认配置或单个项目。
- 规则包— 包含你自定义的编码规范、禁用导入项和依赖项、文件大小限制,或是你已使用的工具生成的结果(SARIF格式)。每次保存都会生成新版本,系统会保留所选用的版本。
- 隔离— 指你不希望再被复制的编码模式,每种模式都配有对应的替换方案。智能体会被要求不得传播这些模式,新出现的副本会被标记出来。
- 排除路径— 在Quality Control → Anti-slop中,指定无需经过anti-slop检查的生成文件或第三方依赖文件,每行对应一种模式(
dist/**、vendor/**)。它们可用于已提交的构建输出:若文件大小超过扫描器设定的512 KiB阈值且符合某规则要求,则该规则的检查将无法执行。 - 仓库文件 —
.coroid/anti-slop.yml在仓库中可添加规则并排除generated/、vendor/、node_modules/和__generated__/目录。该文件从变更的根目录读取,因此变更无法放宽自身规则,修改它需经过审批。 - 锁文件和翻译目录— anti-slop会统计它们的变更情况,但不会读取其内容。目录是指
.coroid/i18n.json在变更根目录声明的文件;全球化检查会读取这些文件。你自定义的规则若引用了这些文件,同样会读取它们。
新增依赖项
模型有时会推荐不存在的软件包,通常是两个真实名称的近似组合。攻击者会在npm和PyPI上注册此类名称,以便下次安装时运行其代码,这种攻击被称为slopsquatting。云安全联盟对此有相关描述:其所引用的研究中,223万个代码样本里近五分之一都引用了不存在的软件包。
Anti-slop会查询变更所添加的每个依赖项在package.json、需求文件或pyproject.toml:
- 阻断项— 指不在公共注册表中的软件包,或是 OSV标记为恶意的软件包。此类变更会在你看到前先返回给开发智能体处理。
- 提醒项— 指发布时间不足30天、下载量极少、名称与热门软件包相差一两个字母的软件包,或是安装时会运行代码的npm软件包。若PyPI软件包被标记为恶意,也会触发提醒,因为Coroid无法确定需求项具体安装的是哪个版本。
若无法访问注册表,检查结果中会说明此情况,并基于可查询的软件包做出判断。它不会搁置变更。
Coroid查询的名称范围
查询名称时会将其发送到公共注册表,因此所有者或管理员可以选择哪些名称可以离开 Coroid,并在Quality Control → Anti-slop → 检查新增依赖项。该设置适用于组织内的所有项目。
- 公共npm和PyPI,除非仓库指定了其他注册表— 所有新增依赖项都会被查询,除非
.npmrc、需求文件、pip.conf、uv.toml、Pipfile或Python工具设置中,除了清单文件外或在其上级文件夹中指定了其他注册表或索引。选择该选项时需确认你的仓库外没有设置私有注册表,比如用户配置或CI配置中,同时会记录确认时间和确认人。作用域限定npm软件包(@scope/name)仅在.npmrc为其作用域指定了公共注册表时才会被查询。 - 仅当仓库指定了公共注册表时— 此为默认设置。只有当
.npmrc设置了registry=https://registry.npmjs.org/,且需求文件中仅有唯一一条--index-url https://pypi.org/simple行,或是Poetry依赖项指向pypi.org源时,才会查询软件包。大多数仓库不满足上述条件,因此大多数新增依赖项不会被检查。 - 关闭— 不查询任何名称,也不会识别出虚构的软件包。
只有新增依赖项的名称才会离开Coroid。它们会被发送至registry.npmjs.org和pypi.org,用于api.npmjs.org查询npm下载量,以及api.osv.dev(使用 npm 版本)用于恶意包报告。您的代码绝不会被发送出去。
结果会保存最多一天,因此每次变更无需重复查询同一名称。
发现结果与验收
任务的发现结果会显示在其质量板块中,位于 Factory 内。如果开发代理在变更进入审核流程前就修复了阻塞性发现结果,该板块会以审核前被 anti-slop 捕获标注,列出其捕获的规则,并在查看具体位置与时间下展示每条发现结果对应的文件、行号以及触发该结果的检查项。Factory 中的技术债板块会统计过去30天内审核前被捕获的捷径类问题数量,并向负责人和管理员展示尚未针对此类问题设置检查的项目,同时提供启用 anti-slop。
要验收某条发现结果,需填写原因和有效期;该验收记录会对应到具体的发现结果。代理无法验收自身产生的发现结果。若代理判定某条测试有误并修改了相关代码,必须由审核员批准该变更后,检查才能通过。
评判规则
两条规则会逐行询问模型:一是针对代码中不可能出现的情况的防御性检查,二是与相邻代码矛盾的注释。它们仅提供建议,不会阻断流程。启用评判规则会为新检查开启该功能,每次运行有决策次数限制;可在检查设置中关闭该功能。
你自己的代理
同样的规则也可指导你自己运行的代理:
- 下载 AGENTS.md 代码片段,位于Anti-slop项目的设置中 位于Quality Control,会将项目的变更规范、隔离规则和顶级规则整理为一个可粘贴到代理指令中的板块。
- 通过 Coroid MCP 服务器,
anti_slop_rules会描述你发布的政策,而anti_slop_scan会以只读模式扫描同步项目的某个分支。