关于 principle-make-operations-idempotent
一项开发技能,指导将状态变更操作设计为重复运行或崩溃恢复后都能收敛到目标状态。它建议比较实际状态与目标,只应用必要差异,并识别中断留下的过期产物。
主要功能
- 01将当前状态与目标状态协调
- 02只应用必要的差异
- 03确保重复运行安全
- 04识别崩溃后遗留的过期产物
- 05检查每个中断点的恢复行为
适用场景
- 01确保可重试命令安全
- 02从中断中恢复生命周期操作
- 03避免处理循环产生重复效果
- 04测试临时文件和未完成记录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ backnotprop/ pstack --skill principle-make-operations-idempotent安装后在 Claude Code 中输入/principle-make-operations-idempotent确认已加载。
详细介绍
让操作具备幂等性
设计操作时,应确保无论执行多少次,或上一次执行停在何处,最终都会收敛到正确状态。每个会修改状态的操作都应回答:“如果执行两次会怎样?如果上一次执行到一半时崩溃了会怎样?”
原因: 命令、生命周期操作和处理循环都运行在崩溃、重启和重试司空见惯的环境中。如果部分状态会影响下一次运行的结果,每次重启都会变成一次调试。
思路: 根据当前状态推导每一步,而不是根据上一次运行原本打算做什么。读取当前状态,将其与目标状态进行比较,只应用差异。以这种方式编写的步骤可以安全地重复执行,因为重复执行时已无事可做。
运行留下的任何内容,例如锁、临时文件、写了一半的记录或已认领的任务,都必须能被下一次运行识别为过期。判断过期时,应依据无论上一次运行停在何处都始终成立的证据,而不只是常见情况下的证据。如果标记无法由下一次运行判断,每次崩溃都会导致需要手动清理。例如,先写入临时路径,再将其重命名到目标位置;或者根据内容而非创建顺序比较产物。
测试:
- 如果连续执行两次,会怎样?
- 如果上一次运行在每个可能的时刻崩溃,会怎样?
- 重新执行能否收敛到相同的最终状态?
如果任何一个答案都“取决于留下了什么状态”,那么该操作就需要一个协调步骤。
评论
支持 Markdown