用途
本技能用于处理一种其他审查方式覆盖不到的场景:一个逐步构建、从未被整体审查过的 Python 模块。问题不在于某一行代码,而在于贯穿整个文件的重复结构形态。按 diff 范围工作的审查工具(代码审查命令、简化 agent、PR 机器人)天然只关注近期改动,而整模块的状态传递恰恰不在任何 diff 中。
本技能关注的是“如何执行这次审查”,这比目标形态更重要。结果代码应长什么样属于 python-conventions-taudelta;测试应覆盖什么属于 python-testing-conventions-taudelta。下面的循环、oracle 规则和停止规则与语言无关,示例使用 Python。
主要能力
- 提供四个停止条件,帮助判断是否根本不该重构。
- 提供两个仅依赖标准库的 AST 脚本:
python3 <skill>/scripts/count_shapes.py <module.py>...:统计匿名元组返回与参数、dict 字段/参数。python3 <skill>/scripts/find_mutations.py <module.py>...:统计所有属性赋值,即实际被修改的内容。
- 给出五类值得统计的结构形态及其对应缺陷含义。
- 定义 BASELINE → CHECKPOINT → REFACTOR → VERIFY → CHECKPOINT 循环,每次提交只处理一个属性。
- 定义 oracle 规则:测试套件是 oracle,入口点测试冻结,其余测试只允许改调用形式,并通过回滚验证。
- 针对测试无法覆盖的变更,定义第二 oracle:对比只读命令的前后输出。
使用方式
技能本身不运行任何东西、不写入任何东西、不联网。它读取你通过脚本指向的模块。循环产生的提交由你在自己的仓库中逐个完成。
先判断是否要重构:若当前结构未阻碍工作、重构服务于推测的未来需求、唯一理由是“可测试性”、或代码对项目当前阶段已足够好,则不要重构。
在移动第一行代码前,用 AST 脚本(而非 grep 或印象)统计要消除的具体形态,并提交该脚本,使其可复现。
按循环执行:BASELINE(全套测试通过、取计数、分类测试套件、必要时取第二 oracle 快照)→ CHECKPOINT(提交,保持工作树干净)→ REFACTOR(一个属性、一个形态、一次提交)→ VERIFY(全套测试、重新计数、应用 oracle 规则)→ CHECKPOINT(提交并说明移动了什么、验证了什么)。
适用场景
- 一个增量构建、从未整体审查过的 Python 模块。
- 问题不是某一行,而是文件中反复出现的结构形态。
- 需要一次可验证为“保持行为不变”的重构。
限制
- 技能不运行、不写入、不联网。
- 无法复现的计数不能作为基线。
- 测试套件无法覆盖的变更需要第二 oracle,且两次快照必须背靠背采集。
- 文件拆分是另一个独立决定,通常不属于本次审查;对于作为
python3 <path>运行、无安装步骤的脚本,单文件是承重设计,拆分是退步。 - 安装时本文件被复制到
~/.agents/skills/python-refactor-audit,从不符号链接;编辑已部署副本属于本地漂移。应编辑源仓库、推送,并重新运行skills add <that source> --global --skill python-refactor-audit刷新各项目副本。若从他人仓库安装,源属于对方,应在其处提 issue 或 PR。