
OpenClaw Deslop 技能面向 Diff 作用域的 AI 代码杂质清理与评审前置实践【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclawDeslopDiff-scoped AI-slop cleanup是 OpenClaw 仓库中用于在代码评审前清理AI 生成痕迹AI-slop的技能它把清理范围严格锁定在当前分支的git diff内逐一排查注释废话、异常防御代码、类型洗白、冗余中间变量、无契约的兼容垫片与风格漂移并坚持绝对保持行为不变的底线。读完本文你将掌握一套可复用的 Diff 级清理清单、行为中性编辑的判断准则以及如何让 deslop 与自动评审autoreview正确串联形成先清理、后评审的提交前流水线。Deslop 是什么一次只针对当前分支 Diff的清理通道在 AI 辅助编码日益普遍的今天模型生成的代码往往夹带着人类维护者不会写的杂质复述代码本身的注释、为想象出来的状态而写的防御检查、通过类型断言掩盖类型信息的写法、一次性使用的中间变量以及为了兼容而存在的无契约垫片。Deslop 技能将这些统称为 AI-slop并给出了一个纪律严明的清理流程。该技能在仓库中的定义文件是 .agents/skills/deslop/SKILL.md其 frontmatter 明确声明了它的定位名称deslop描述在自动评审autoreview之前对当前分支 diff 执行一次 AI-slop 清理处理注释杂质、防御性检查杂质、类型洗白与风格漂移。技能正文的第一句话就划定了铁律Clean only the current branch diff before review. Preserve behavior absolutely.即只清理当前分支的 diff绝不进行仓库级清理绝对保持行为不变。这两条约束定义了 deslop 的全部工作边界——它是一个外科手术式的清理通道而不是一次大规模重构。清理范围如何界定以origin/main或合并基线为基准Deslop 技能的第 1 条检查清单明确了作用域确定方式Scope the pass togit diffagainstorigin/main, or the branch merge base when it differs. Never run a repo-wide cleanup.翻译成实操语言就是优先以origin/main作为对比基线对当前分支执行git diff当分支的合并基线merge base与origin/main不一致时例如分支基于较旧的提交创建应改用合并基线确保只审查本分支真正引入的变更严禁对整个仓库做一次性清理——仓库级清理会混入与本次变更无关的噪音也让评审者无法判断哪些改动是有意为之。这一按 diff 而非按文件的思路与仓库中 autoreview 技能的 Git 作用域模型一脉相承。.agents/skills/autoreview/SKILL.md 中同样要求显式选择 Git 目标local、branch、commit 三种模式以及--base ref固定基线的用法其评审范围同样是merge-base → HEAD或HEAD → index → working tree。两者共享同一个原则审查和清理都必须锚定在变更边界上而不是漫游整个代码库。逐条拆解检查清单六类必须排查的 AI-slopDeslop 技能的第 2 条清单要求逐一检查 diff 中每一个变更 hunkhunk 是 diff 的最小变更块重点排查以下六类问题。1. 人类维护者不会写的注释Comments a human maintainer would not write, including narration, syntax explanation, and prose that merely restates the code.需要清理的注释包括三种典型形态叙述型narration像写日记一样记录先做 A再做 B然后处理 C把过程描述当作注释语法解释型syntax explanation解释语言语法本身例如给一个map调用注释map 会对数组每个元素执行回调——这对熟悉该语言的维护者是纯噪音复述型prose that merely restates the code把代码逐行翻译成英文散文例如// 如果用户不存在则返回 null紧挨着if (!user) return null。判断标准很朴素这段注释是否提供了代码本身无法传达的领域含义或设计意图如果没有就属于 slop。2. 异常于周边模块的防御性检查与 try/catchDefensive checks ortry/catchblocks that are abnormal for the surrounding module or protect only imagined states.AI 模型在生成代码时有一种常见倾向为根本不会出现的状态补防御。Deslop 要求识别两类问题与周边模块风格不一致的防御同模块其他函数都不做空值检查唯独新代码到处加if (!x)保护只为想象中的状态而写的防御保护的分支在调用链上根本不可能发生属于防御性编程过度。这类问题的处理要格外谨慎删除防御逻辑有可能改变行为因此当清理可能影响行为时技能明确要求leave it alone and report it instead见第 3 条清单下文详述。3. 洗白类型的强制转换type launderingCasts that launder types, especiallyas any,as unknown as T, and widen-then-assert flows. Oxlint already rejects the latter two patterns in governed code.类型洗白指通过类型断言绕过类型系统的约束典型形态包括as any直接把类型降级为any彻底放弃类型检查as unknown as T先经unknown中转再断言为目标类型绕过编译器的直接类型冲突检查widen-then-assert 流程先把一个精确类型的值显式拓宽widen成更宽的类型稍后又用断言把拓宽后的绑定收回窄类型——类型证据在中间环节被丢弃随后又被凭空创造出来。Deslop 特别指出as unknown as T与 widen-then-assert 这两类模式已被 oxlint 在受管辖代码governed code中直接拒绝。这一论断在仓库中有完整的实现证据配置层面config/oxlint/boundary-guards.json 注册了两个自定义规则openclaw-boundaries/no-widen-then-assert和openclaw-boundaries/no-chained-type-assertions均设为error级别实现层面scripts/oxlint-boundary-guards.mjs 中定义了noWidenThenAssertRule其规则描述为Disallow local const flows that explicitly widen a known value before asserting the widened binding to a narrower type禁止先显式拓宽已知值、再断言收窄的局部 const 流并给出了对应的报错信息Binding {{name}} discards type evidence and later recreates it with an assertion. Keep the precise type from initialization through use; parse boundary input once.绑定丢弃了类型证据又用断言重建请从初始化到使用全程保持精确类型边界输入只解析一次。这意味着在 OpenClaw 的受管辖代码中widen-then-assert 与链式类型断言在 CI 阶段就会被 oxlint 拦下deslop 的作用是把 diff 里漏网的类型洗白找出来并遵循能行为中性修复就修否则上报的原则。4. 冗余的中间变量与一次性 helperRedundant intermediate variables or one-use helpers that do not add domain meaning, reduce duplication, or simplify control flow.判断一个中间变量或 helper 是否冗余要看它是否满足至少一条正面价值增加了领域含义例如给魔法值起一个有业务语义的名字减少了重复DRY简化了控制流让分支更清晰。如果只是赋值后用一次且没有带来上述任何价值就是冗余属于清理对象。5. 没有命名契约与移除计划的兼容垫片Compatibility shims, aliases, retries, and fallback branches without a named shipped contract and removal plan.兼容垫片shim、别名alias、重试retry和回退分支fallback branch只有在满足两个条件时才允许存在有命名的发布契约named shipped contract这个垫片对应哪个已发布的接口/版本能被明确指认有移除计划removal plan什么时候、在哪个版本可以删除它。如果一段兼容代码既说不清它为谁兼容也说不清何时退役它就是无根的 slop。清理时同样要先确认删除是否影响行为——垫片类代码往往牵涉 API 兼容性因此多数情况下应当上报给作者而非直接删除。6. 与周边文件冲突的风格漂移Naming, control flow, imports, formatting, and other style that conflicts with the surrounding file.AI 生成的代码常表现出局部风格漂移命名习惯、控制流写法、导入组织或格式与所在文件不一致。deslop 要求清理这些漂移使新代码融入所在文件的既有风格而不是让一个文件里同时存在两套写法。操作纪律行为中立才能动手否则上报Deslop 的检查清单第 34 条给出了完整的操作纪律Make no functional edits. If cleanup could change behavior, leave it alone and report it instead.Fix a finding inline only when the cleanup is trivial and behavior-neutral. Otherwise note it for the author.两条规则合成一个决策树不做任何功能性编辑——清理绝不改变程序行为如果某处清理可能改变行为就保持原样改为在评审中报告只有当清理是琐碎trivial且行为中性behavior-neutral时才就地修复其余非琐碎项记录给作者处理。这与绝对保持行为不变的总原则互为表里。清理注释、删除纯冗余变量、统一命名这类改动通常是行为中性的而删除防御分支、摘除兼容垫片这类改动几乎总是有行为风险的必须留给作者或评审环节做有意的决策。收尾与汇报13 句话的结果摘要检查清单第 5 条要求清理结束后输出简洁的汇报Report the result in 1–3 sentences, including whether anything changed and any non-trivial item left for review.汇报必须包含两个关键信息是否发生了修改anything changed让后续评审者知道 diff 是否被 deslop 改动过遗留的非琐碎项any non-trivial item left for review那些应清理但不敢动的项必须显式转交给评审而不是悄悄跳过。这种极简汇报格式与技能整体的最小干预哲学一致deslop 不追求面面俱到的报告只追求让评审者掌握必要的上下文。与 autoreview 的协作关系前置通道而非替代品Deslop 技能最后给出了它的位置Run$deslopbefore$autoreview, never instead of it. Autoreview remains the required correctness and safety review gate.这句定位非常关键时序上$deslop必须在$autoreview之前运行——先清理噪音让评审者专注于真正的正确性问题职责上deslop绝不替代autoreview。autoreview 仍是必须的正确性与安全性评审门required correctness and safety review gate。在 OpenClaw 仓库中autoreview 技能 .agents/skills/autoreview/SKILL.md 是一套完整的多引擎评审体系默认使用 Codex 引擎支持 Claude、Amp、Pi、Kimi 等可选引擎提供--mode local、--mode branch、--mode commit三种 Git 目标模式默认阈值是 P0阻塞性缺陷可通过--max-priority P1/P2/P3扩展其可执行脚本位于 .agents/skills/autoreview/scripts/autoreview并配有对应的测试同目录下的autoreview_test.py与技能级测试.agents/skills/autoreview/tests 目录。两者组合后的完整提交流水线是开发者在分支上完成改动运行$deslop对origin/main或合并基线的 diff 执行清理只做行为中性的微修非琐碎项记录在案运行$autoreview对清理后的 diff 执行正确性与安全性评审默认 P0 门槛返回scoped-clean/findings/filtered等结构化结论根据评审结论修复或合入。deslop 负责让代码看起来像人写的autoreview 负责让代码是对的——两者各司其职缺一不可。在 OpenClaw 仓库中落地 deslop 的实践建议结合该技能的仓库形态以下是在当前仓库内执行 deslop 式清理的落地路径范围锚定以git diff origin/main或git merge-base HEAD origin/main的对比结果为准只审变更 hunk对应实现参考 .agents/skills/deslop/SKILL.md 第 1 条清单类型洗白拦截受管辖代码中as unknown as T、widen-then-assert、链式断言已被 oxlint 强制拦截见 config/oxlint/boundary-guards.json 与 scripts/oxlint-boundary-guards.mjsdiff 中若仍出现这类模式优先检查是否处于不受管辖的边界目录或直接上报作者评审衔接deslop 完成后立即进入 autoreview可参考 .agents/skills/autoreview/SKILL.md 中--mode local --base merge_base的组合用法含 PR 合并基线推算示例确保评审覆盖完整候选集仓库级约定该技能以及 autoreview的 canonical 来源是openclaw/agent-skills仓库.agents/skills/autoreview/AGENTS.md 明确要求共享变更先在 canonical 仓库验证再同步到下游仓库禁止创建仓库局部行为变体——这意味着 deslop 的检查项应作为跨仓库统一标准来维护而非各仓库各自为政。结语Deslop 的价值不在于删几行注释而在于它把AI 代码杂质清理变成了一道有纪律、有边界、有汇报的工程工序作用域锁定在分支 diff操作底线是行为绝对不变清理决策遵循琐碎且中性才动手的保守原则最终结果用 13 句话透明交接给强制性的 autoreview 评审门。对于任何重度使用 AI 辅助编码、且重视代码可维护性与评审质量的团队这套先 deslop 去噪、再 autoreview 把关的双通道流程都值得直接借鉴——它用最小的干预成本换回更干净、更可信、更像人写的代码提交。【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考