关于 sonarqube-ai-slop-gate
SonarQube AI Slop Gate 是面向自托管 SonarQube Server 的配置参考技能,帮助团队用质量门禁检查 AI 生成代码。内容涵盖版本与版本许可、AI Code Assurance、扫描配置及可能令门禁漏检或错误放行的默认行为。
主要功能
- 01说明版本许可与版本周期
- 02配置 AI Code Assurance
- 03揭示质量门禁的测量盲点
- 04指导新代码与分支设置
- 05整理扫描器属性与覆盖率导入
- 06涵盖服务器运行与数据持久化
适用场景
- 01部署或审查自托管 SonarQube Server
- 02配置针对新代码的质量门禁
- 03将扫描步骤接入 CI 并阻止不合格合并
- 04排查门禁漏检或错误通过
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill sonarqube-ai-slop-gate安装后在 Claude Code 中输入/sonarqube-ai-slop-gate确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdaica-do-not-rely-on-autodetection.mdaica-flag-projects-through-the-api.mdaica-qualify-the-gate-explicitly.mdaica-the-builtin-ai-gate-is-lenient.mdaica-use-the-agentic-profile.mdblind-fudge-factor-skips-small-changes.mdblind-java-duplication-threshold-is-fixed.mdblind-no-new-code-complexity-metric.mdblind-pull-requests-hide-file-level-issues.mdblind-suppression-comments-turn-the-gate-green.mdblind-test-code-escapes-duplication.mdnewcode-pick-the-definition-deliberately.mdnewcode-shallow-clones-break-blame.mdops-persist-data-and-skip-h2.mdops-set-host-limits-before-first-boot.mdplat-ai-features-are-edition-gated.mdplat-community-build-cannot-see-pull-requests.mdplat-versions-are-calendar-based.mdscan-declare-test-sources.mdscan-exclude-narrowly.mdscan-host-url-defaults-to-the-cloud.mdscan-import-coverage-reports.mdscan-name-the-branch.mdscan-use-project-analysis-tokens.mdscan-wait-for-the-quality-gate.md详细介绍
SonarQube AI Slop Gate
使用自托管 SonarQube 为 AI 生成的代码设置门禁时,它会迫使你做出哪些决定,以及如何解决这些问题。每条规则都会指出并纠正错误的默认设置;对于模型本来就做对的事情,则没有对应规则。
以日期为准,而非版本。 SonarQube 每两个月发布一个版本,因此本文中的所有说法都已于 2026 年 7 月 根据 docs.sonarsource.com 核实,所依据的版本为 SonarQube Server 2026.3(当前 LTA 为 2026.1)。撰写本文时,2026.4 已发布,但文档仍默认指向 2026.3,因此这些规则描述的就是该版本——plat-versions-are-calendar-based 会介绍发布节奏本身。对于任何与版本相关的信息,在信任之前都请再次核实,并从不带版本号的路径阅读文档(/latest/<page> 无法解析);在任何文档 URL 后附加 .md,即可返回其 Markdown 源文件。
这项技能旨在防止的故障,是门禁放过所有问题。基于 2024 年知识搭建的 SonarQube 配置会分析错误的分支、上传到错误的服务、在门禁未通过时仍以成功状态退出,并且完全跳过重复率和覆盖率条件,而 AI 辅助工作产生的小型提交最常包含这些问题。这些故障都不会自行显现;整个过程中,仪表板看起来始终正常。
适用场景
在以下情况下使用这项技能:
- 搭建自托管 SonarQube Server,或检查现有实例,目的是持续发现 AI 生成代码中的缺陷,而不是事后再进行报告
- 设计或收紧质量门禁,尤其是在决定要衡量新代码还是整体代码,以及查明哪些条件被悄悄跳过时
- 将扫描步骤接入 CI:配置扫描器属性、令牌、分支和拉取请求参数、导入覆盖率报告,或确保流水线确实会阻止合并
- 设置 AI Code Assurance——标记项目、使质量门禁符合要求,或查明项目为何显示“AI Code Assurance is off”
- 门禁放过明显包含重复或未经测试的生成代码的更改,却没人能解释原因
这项技能不适用于:
- SonarQube Cloud——其版本边界、令牌模型和若干 AI 功能有所不同;尤其是 Agentic AI 门禁仅面向 Cloud 编写了相关文档
- IDE 连接模式、SonarLint,或 SonarQube CLI 的本地 Agentic 分析
- 编写自定义分析器规则或插件——本文介绍的是如何配置随附规则,而不是编写新规则
- 对代码好坏进行一般性的代码审查判断;本文关注的是让工具衡量你认为它在衡量的内容
规则类别
| # | 类别 | 前缀 | 涵盖内容 |
|---|---|---|---|
| 1 | 版本与版本类型现状 | plat- | 许可证支持的功能;CalVer 和 LTA 升级路径;各项 AI 功能所需的版本类型 |
| 2 | AI Code Assurance | aica- | 项目标记、门禁资格、已弃用的自动检测、Agentic 配置文件 |
| 3 | 门禁未衡量的内容 | blind- | 抑制注释、调整系数、测试代码豁免、缺失的指标、PR 检查盲区 |
| 4 | 新代码与归属信息 | newcode- | 完整克隆要求;选择与分支模型相符的定义 |
| 5 | 扫描器配置 | scan- | 默认会导致放行的属性——主机 URL、等待门禁结果、测试范围、覆盖率、排除项 |
| 6 | 运行服务 | ops- | 首次启动前的内核限制;升级后仍需保留的数据库和卷 |
快速参考
1. 版本与版本号的实际情况
plat-community-build-cannot-see-pull-requests— 先解决这个问题。 Community Build 仅限主分支;PR 门禁需要 Developer Editionplat-versions-are-calendar-based—YYYY.N.P,而非 10.x;升级不能跳过中间的 LTAplat-ai-features-are-edition-gated— AI Code Assurance 属于 Developer;AI CodeFix 属于 Enterprise;Advanced Security 是单独的 SKU
2. AI Code Assurance
aica-flag-projects-through-the-api— 不存在sonar.*属性;这是通过 UI 或set_contains_ai_code设置的服务端状态aica-qualify-the-gate-explicitly— 严格条件不会授予任何资格;普通的 “Sonar way” 不符合资格,且升级到 10.7 会移除 assuranceaica-do-not-rely-on-autodetection— 仅支持 Copilot,且将在 2026.1 弃用;应改为有意标记aica-the-builtin-ai-gate-is-lenient— 七项条件、可靠性评级为 C,且没有整体代码覆盖率下限aica-use-the-agentic-profile— 2026.3 的 Java、JS/TS、Python“Sonar agentic AI”配置;其他语言使用 Sonar way
3. 门禁无法衡量的内容
blind-suppression-comments-turn-the-gate-green— 最具对抗性的情况。NOSONAR会删除问题,而用于跟踪此情况的规则默认未启用blind-fudge-factor-skips-small-changes— 代价最高的意外默认设置。 新增行数少于 20 行时会跳过重复率和覆盖率条件,且默认启用blind-test-code-escapes-duplication— 完全不会测量测试代码中的重复率,而生成式复制粘贴最集中于此blind-no-new-code-complexity-metric— 不存在new_cognitive_complexity;通过规则S3776将其纳入new_violations进行门禁检查blind-java-duplication-threshold-is-fixed—sonar.cpd.java.minimumTokens不起作用;IaC 和 CSS 完全没有重复代码检测blind-pull-requests-hide-file-level-issues— PR 上不会运行整体代码条件,因此合并通过后,主分支可能立即变红
4. 新代码与 Blame
newcode-shallow-clones-break-blame— 使用fetch-depth: 0,否则新代码会悄然回退为使用分析时间戳newcode-pick-the-definition-deliberately— PR 门禁使用参考分支;天数上限为 90 天;指定分析只能通过 API 设置
5. 扫描器配置
scan-host-url-defaults-to-the-cloud— 现代扫描器默认使用https://sonarcloud.io,而非 localhostscan-use-project-analysis-tokens—sonar.login已弃用;将 CI 限定为使用项目分析令牌scan-wait-for-the-quality-gate— 默认值为false,因此质量门禁未通过时,流水线仍会通过scan-declare-test-sources—sonar.tests没有默认值;未设置时,测试会被当作生产代码进行度量scan-import-coverage-reports— SonarQube 从不计算覆盖率;未导入报告意味着该条件不进行任何评估scan-exclude-narrowly—sonar.exclusions会改变所有指标的分母;优先使用sonar.cpd.exclusionsscan-name-the-branch— 缺少分支参数时,所有分析结果都会发布到 main
6. 运行服务端
ops-set-host-limits-before-first-boot—vm.max_map_count=524288,是旧版指南所述数值的两倍ops-persist-data-and-skip-h2— H2 没有升级路径,丢失历史记录会重置所有新的代码基准
建议顺序
各类别按重要性排列——类别 1 中的错误会使整个方案失效,类别 6 中的错误则会在启动时直接导致失败。但这并不是实际执行的顺序。对于全新设置,请按以下顺序进行:
1 → 6 → 5 → 4 → 2 → 3。 确认许可证能够满足需求,启动服务端,配置扫描器,定义“新”的含义,应用 AI Code Assurance 机制,最后阅读类别 3——在宣布质量门禁已完成之前,因为其中列出了绿色判定可能毫无意义的原因。
使用方法
遇到相关决策时,阅读对应的参考文件。每条规则都会指出它所纠正的错误默认值,然后展示规范配置。