duck-simplify 🦆 是一个复杂度削减与语义重复/分叉审查技能。其核心理念是:更小的形态,相同的行为;防止分叉,而不仅仅是防止重复。
用途
在代码审查、设计和调试场景中,提供“复杂度最小化”视角,包括语义重复与分叉审查。目标是找出最高价值的简化点,同时不削弱安全性、正确性或明确需求。
该技能仅提供复杂度削减指导,最终实现决策仍由用户负责。它继承 references/GUARDRAILS.md 中的共享护栏,并附带技能特定的差异说明。
主要能力
标准模式审查
- 识别复杂度热点:层次、分支、配置面、间接层。
- 在给出建议前验证证据,例如调用方、分支数量、配置使用情况。
- 最多输出 3 条最高影响的简化建议。
- 优先选择删除/复用/标准库/原生能力,其次才是新增抽象。
- 如果简化会削弱信任边界、可访问性或明确需求,则拒绝并建议安全替代方案。
- 不标记那些提升可读性的微小重复或低风险字面量/常量。
标准模式的发现前缀包括:
- 🪶 yagni:抽象/配置尚不必要
- 📚 stdlib:自定义代码可由标准库替代
- 🧱 native:依赖/自定义层可由平台特性替代
- ✂️ shrink:相同行为可用更少行数实现
- 🗑️ delete:死代码/推测性代码可直接删除且无需替换
- ❓ question:缺少意图,无法判断
标准模式输出格式为每行一条发现:
<prefix> <path[:line|scope]> — <complexity cost>. Fix: <smaller shape>.
最后一行汇总:
totals: <n> findings, <n> questions.
net: -<N> lines possible.
Dry 模式审查(DRY/去重/分叉聚焦)
- 确认存在语义重复,而非仅语法重复。
- 当存在“分叉”可能时,纳入 Diverges 信息,并给出 Extract start。
- 优先选择最小的安全提取边界。
Dry 模式的前缀包括:
- 🟡 risk:有意义的重复,未来可能分叉
- 🔵 nit:值得清理的轻微重复
- ❓ question:缺少上下文,无法选择提取方案
Dry 模式输出格式为每行一条发现:
<prefix> <path[:line|scopeA<->scopeB]> — <duplicated behavior + drift risk>. Diverges when: <future change trigger>. Extract start: <path:line>. Fix: <extraction boundary>.
Dry 模式最后一行汇总:
totals: <n> findings, <n> questions.
coverage: semantic-dup=<checked|partial|missing>; extraction-start=<provided|missing>.
使用方式
该技能在审查/设计/调试上下文中激活,用于复杂度最小化视角,包括语义重复/分叉审查。
调用时会先澄清范围:
- 当上下文不完整时,提出 1-3 个有针对性的澄清问题。
- 当证据缺失时,明确陈述假设。
- 必需项:代码/提案范围。
- Dry 模式必需项:两个或更多候选范围,且疑似存在语义重复。
- 可选项:约束条件(截止时间、可读性规范、团队偏好)。
- 若约束不清晰,提出一个有针对性的澄清问题。
随后进行简化审查并输出发现。
适用场景
- 用户说“simplify this”。
- 用户问“is this overengineered”。
- 用户说“DRY this”。
- 用户要求“divergence review”。
- 需要在审查、设计或调试中采用复杂度最小化视角。
限制
- 不负责安全/回滚严重性判定,该职责属于 duck-risk/duck-review。
- 不负责测试缺口判定,该职责属于 duck-triage。
- 不负责最终 PR 线程格式化,该职责属于 duck-review。
- 不标记提升可读性的微小重复或低风险字面量/常量。
- 若简化会削弱信任边界、可访问性或明确需求,则拒绝并建议安全替代方案。
- 仅提供复杂度削减指导,最终实现决策仍由用户负责。