冪等鍵儲存
resilience.RetryPolicy 在重試時*重新執行*,``work_queue`` 只對進行中的參照去重 —— 沒有東西快取
第一次的結果,讓重複請求能回傳*相同*回應而不重跑副作用。這是 Stripe 的冪等模式:註冊一個鍵、把工作
執行一次,並為任何重複請求重播已儲存的回應。
純標準函式庫(hashlib / json);不匯入 PySide6。時鐘可注入,儲存為記憶體內並具 JSON 持久化,
因此 TTL 過期與重播在 CI 中完全具決定性。
無頭 API
from je_auto_control import IdempotencyStore, request_fingerprint
store = IdempotencyStore(ttl=86400)
state = store.begin("order-42", request_fingerprint(payload))
if state["status"] == "completed":
return state["response"] # 重播 —— 不要重跑
result = charge(payload) # 副作用只執行一次
store.complete("order-42", result)
begin 回傳 {status, response},status 為 new``(首次)、``in_progress``(完成前的重複)或
``completed``(重播已儲存回應);以不同 ``request 指紋重用同一鍵會拋出 IdempotencyConflict
(Stripe 的 HTTP-400 行為)。complete 記錄回應,``get`` 讀取有效記錄,``save`` / load 以 JSON
持久化。request_fingerprint 是 payload 的穩定、與順序無關的 SHA-256。
執行器命令
AC_idempotency_begin 在具名儲存中註冊/查找 key``(可選 ``request 做衝突偵測);
AC_idempotency_complete 儲存 response。兩者使用具名實例登錄(如斷路器/隔艙),並以 MCP 工具
(ac_idempotency_begin / ac_idempotency_complete)以及 Script Builder 中 Flow 分類下的命令提供。