在相关工作送达您手中前,先识别出智能体采取的捷径行为。

为通过测试而跳过用例、隐藏错误、留下存根代码、忽略类型检查。Anti-slop 会校验智能体所做的每项变更,并将结果反馈给开发智能体。

任务在结账时应用优惠券代码。正在审核
质量门控
开发人员 质量门控尝试执行 2已通过
Anti-slop
不产生新的代码债务已通过
0 个被拦截的任务 · 0 个新引入的任务 · 1 个被修改的任务 · 14 个现有任务
开发人员 质量门控尝试执行 1已拦截 · 已发送至 开发人员
Anti-slop
不产生新的代码债务需要修复
2 个被拦截的任务 · 2 个新引入的任务 · 1 个被修改的任务 · 14 个现有任务
  • 测试被跳过src/checkout/coupon.test.ts:88it.skip('rejects an expired coupon', …)
  • 错误被吞没src/checkout/apply-coupon.ts:41} catch {}
发现的问题
  • 已修复测试被跳过Anti-slop
  • 已修复错误被吞没Anti-slop

任务视图是 Coroid 门户的复现。其中的任务、文件及发现结果仅为示意。

规则数量
106
规则类别
13
默认阻断的规则
44
阻断变更的现有问题
0

它检测的对象。

规则分为不同类别。每类规则可起到阻断、提示或仅记录的作用,组织负责人或项目所有者可调整其行为。

测试用例
聚焦或跳过的测试用例、被删除的用例、被移除或弱化的断言、无法触发失败的用例,以及掩盖不稳定测试的重试操作。
  • .only
  • .skip
  • expect(true).toBe(true)
抑制项
新的代码规范禁用项、被忽略的类型错误、强制转换为 any 的类型,以及未被纳入覆盖率统计的代码。
  • @ts-ignore
  • as any
  • eslint-disable
构建与 CI
被移除或允许失败的测试步骤、被下调的覆盖率阈值、无测试用例却通过的运行结果、被跳过的提交钩子,以及被提交的构建输出。
  • continue-on-error: true
  • --passWithNoTests
测试证据
未执行任何测试的运行结果、测试用例数少于上次成功运行、部分运行结果被标记为完成,以及用缓存结果冒充新运行结果。
  • Tests: 0 total
  • --onlyChanged
生产代码
占位符实现、调试代码、“真实实现中”这类注释、面向人员的说明、模拟数据,以及导入测试代码的生产代码。
  • throw new Error('Not implemented')
  • debugger;
错误处理
错误被隐藏或用默认值替代、权限检查失败时仍允许访问、无限制的重试操作。
  • except: pass
  • .catch(() => {})
安全性
硬编码的机密信息、已关闭的TLS验证、已移除的身份验证防护机制、允许携带凭证的通配符CORS配置,以及基于字符串拼接生成的SQL语句。
  • rejectUnauthorized: false
  • verify=False
架构
新增的导入循环、跨越声明边界的导入、重复的代码块、变更后未被使用的代码,以及已弃用的模式的新副本。
依赖项
清单文件已更新但锁文件未同步、同一功能已有库却引入第二个、版本未锁定,以及超出规格要求的升级操作。
  • "latest"
缓存
未包含租户信息的缓存键、永不过期的内存缓存,以及本应在运行时读取却写在构建期的数值。
注释
评论重复下一行内容,用于描述编辑内容、含糊表述或与旁边的代码相矛盾。
  • // Updated to
  • // should work
变更范围
规范未涉及的文件、仅涉及格式调整的变更,以及任务不需要的重命名操作。
Agent轨迹
Agent的执行过程,例如删除导致失败的测试,或将预期值修改为失败运行所输出的结果。

只有变更引入的问题才会被阻断。

大多数代码库已存在部分此类模式。Anti-slop会按来源分类展示所有发现结果,确保现有技术债务不会阻碍无关工作。

新引入
本次变更中新出现的内容。若违反阻塞规则,该发现结果会将变更内容退回给开发者Agent。
已触及
原本就存在的内容,位于变更所编辑的行或函数中。系统会记录该内容,待变更规范提出要求时再予以修复。
现有
代码库中其他位置的内容。它会被记录为Factory中的技术债务,您可据此创建任务来修复某条规则对应的发现结果。

移动代码不视为新引入,复制代码才属于新引入。

您可以决定变更可被允许的程度。

变更规范会告知开发者Agent在作业时可清理哪些内容。

  1. 精准式仅处理规范所需的内容。其他问题仅会被记录,不会自动修复。
  2. 平衡式默认也会修复变更所触及行上的小问题。
  3. 修复式也会清理变更所编辑函数内的发现结果。

开发智能体需遵循相同的规则。

Anti-slop并非仅在最后给出判定。Agent在编写变更内容时会遵循相关规则,且无法违背这些规则。

  1. Agent会以您的变更规范以及隔离的模式为依据开展工作,并采用指定的替代方案进行处理。
  2. 每次编辑后它都会识别快速规则,在QA运行前只有一次机会修复阻塞性发现。
  3. 智能体无法接受自己的发现结果。当某个智能体判定测试有误并作出更改时,必须由审核人批准该变更。
  4. 仓库文件.coroid/anti-slop.yml可用于添加规则和排除生成的路径。该文件从变更的基准位置读取,因此变更无法放宽自身规则。

让您已在运行的智能体遵守相同规则。

使用自有编码智能体的工程师也可应用所在组织的规则。

AGENTS.md 代码片段
下载供智能体使用的指令片段,其中包含项目的变更规范、隔离模式和重要规则。
Coroid MCP服务器
anti_slop_rules用于描述已发布的策略,anti_slop_scan则用于扫描同步项目的分支。二者均为只读属性。
Coroid Check 在拉取请求中的应用
启用pull request检查功能后,该系统会对开发人员创建的GitHub拉取请求执行相同检查,并在对应行标注每项发现结果。

它已在我们自己的代码上通过测试。

Coroid由一人与百个智能体共同打造,因此在应用于其他项目前,anti-slop已在Coroid自身的仓库中经过验证。

对所有源文件的扫描

我们模拟智能体编写代码的过程,扫描了Coroid仓库中的所有11,536源文件。扫描发现规则误判了6种模式。修复后,阻塞性问题的数量从5,366降至2,253。

仍被拦截的内容正是规则旨在识别的对象,例如我们通知代码中的一条注释:“在实际实现中,需获取用户的 FCM 令牌。”

Rules a model judges

两条规则要求模型逐行分析:一是针对代码已排除情况的防御性校验,二是检测与相邻代码矛盾的注释。它们仅提供参考建议。在600来自真实合并变更的候选代码行中,它们标记出了无被错误判定,其成本最多仅为US$0.0015每次扫描的费用。

在质量控制模块中将其启用即可。

所有者和管理员可为整个组织默认设置或单个项目开启 anti-slop 功能。开启后,该项目后续的运行流程便会应用该功能。

  1. 打开质量控制模块,选择组织默认设置或指定项目。
  2. 开启 anti-slop。它会在策略中添加五项预期。
  3. 选择变更管控规则以及受影响的代码组。关闭该功能后,相关设置将自动保留以供下次使用。

它新增的五项要求

  • 测试仍能验证此次变更
  • 不会发布未完工或仅用于测试的内容
  • 不会产生新的结构性技术债务
  • 变更仍符合既定范围,且风格与现有代码库保持一致
  • 新依赖项真实且可信。
阅读 anti-slop 指南
质量控制
您可以指定每个项目需要进行的检查项。相关设置一旦生效,会立即应用于新提交的工作。
门店页面自定义设置
它在任务 QA、拉取请求及发布验证阶段执行。
每次变更均会进行校验
若变更未通过校验,会在他人审核前退回给开发者。
  • Anti-slop如果变更导致测试用例失效、错误被忽略、占位符被直接发布或产生结构性技术债务,系统会将该变更退回。
  • 单元测试系统会在每次变更后,自动查找并运行代码库中的单元测试。
  • 浏览器测试2 / 3与默认配置不同系统会针对变更内容执行指定的浏览器操作流程测试。
  • 翻译与默认配置不同该检查项会验证变更后的字符串是否已被翻译,同时确认其中的占位符及复数形式是否匹配。
  • 代码库校验系统可运行用户自定义的命令,例如代码格式化、文件大小检查、数据库迁移、集成测试以及安全扫描等。
QA
  • 全面 QA全面校验开启Thorough QA后,系统会根据规范生成实时的验证证据与截图;若未开启,则采用标准QA流程。

审核已通过验证的工作成果。

为单个项目启用anti-slop功能,在正式操作前查看其返回的结果。