refactor
GitHub执行保持行为不变的结构化重构,提取、简化或移动代码,并通过测试和哈希对比验证行为一致性。
触发场景
安装
npx skills add boshu2/agentops --skill refactor -g -y
SKILL.md
Frontmatter
{
"name": "refactor",
"description": "Execute one behavior-preserving structural transformation and report evidence. Triggers: \"refactor this\", \"simplify without changing behavior\"."
}
Refactor — one structural experiment
Refactor changes structure while preserving observable behavior. It performs one caller-selected transformation and reports the result.
Prompt
Refactor billing-service/internal/retry/backoff.go: extract the exponential backoff calculation out of RetryRequest into its own function, no other behavior change. Record a baseline, run go test ./internal/retry/... before and after, and report the diff summary, commands, results, and anything not checked.
It's working if
- The report names the preserved behavior and cites
go test ./internal/retry/...run both before and after. git diff --stattouches onlyinternal/retry/backoff.go, never an unrelated file.- Golden-output hashes get captured and compared byte-for-byte whenever the changed surface produces output, e.g.
sha256sumbefore and after. - The report's
behavior not checkedlist is present in the output even when empty, naming any surface the gates skipped.
Procedure
- Name the preserved behavior and the focused acceptance surface.
- Record an honest baseline, including any reproducible ambient failures.
- Apply one bounded transformation: extract, rename, inline, simplify, encapsulate, move, or delete dead code.
- Run the focused check and the smallest package-level regression check justified by the changed surface.
- Return the diff summary, commands, results, and behavior not checked.
Do not combine a newly discovered behavior fix with the structural change. A red result is evidence for the caller; this skill does not revert, narrow, retry, commit, validate, or route subsequent work automatically.
Seam experiments before commitment
When the transformation needs a seam — an extraction boundary, interface, or module split — and more than one candidate seam exists, probe before you cut. Run the probe in disposable isolation (a scratch branch, worktree, or copied tree the caller's policy allows): rough in the seam, see what it forces — signature churn, import cycles, test rewrites — then discard the probe and keep only the knowledge. Stop condition: at most two probes; if the second candidate seam also fights back, report both findings to the caller instead of trying a third. Cutting the first imaginable seam directly into the working tree is the premature seam failure mode: the wrong boundary calcifies because reverting it now costs more than living with it.
Neutrality gates
"Behavior-preserving" is a claim to execute, not assert. Gate the transformation on behavior-identical proof:
- The focused check and the package-level regression check pass both before and after, with the same set of pre-existing failures — no new red, and no quietly vanished red either (a test that stops running is a behavior change).
- For output-producing surfaces (generators, serializers, formatters, reports), hash the outputs: capture golden-output hashes over identical inputs before the change and compare byte-for-byte after. A hash mismatch is a behavior diff to surface and explain, never to shrug at; the caller decides whether to keep, narrow, or reverse the change.
- Observable error messages, exit codes, and public signatures on the changed surface are part of behavior unless the caller excluded them.
A neutrality gate that was skipped or narrowed after the fact is the post-hoc neutrality failure mode — the diff decides what got tested. Name any surface the gates did not cover in the report's behavior-not-checked list.
References
版本历史
-
8061085
当前 2026-09-09 05:20
新增 Prompt 示例与 It's working if 验收标准;细化 Neutrality gates 的行为验证要求。
-
7b07a7d
2026-08-19 22:03
清理重构技能中的提交和自动回退权限声明;修复版本变更摘要生成逻辑以保留便携式元数据并增强YAML验证。
- 3f402e5 2026-07-24 22:10


