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