樂觀並行版本儲存

http_conditional 以 ETag 做*讀取*快取(If-None-Match / 304),但從不用於*寫入*並行 (If-Match / 版本檢查)。沒有本地的 compare-and-swap / 版本化記錄儲存來做「只在版本未變時更新」。 本功能補上 ETag 故事的寫入面。

純標準函式庫(json);不匯入 PySide6。版本為單調整數,儲存為記憶體內並具 JSON 持久化,因此行為 在 CI 中完全具決定性。

無頭 API

from je_auto_control import VersionedStore, VersionConflict, if_match_header

store = VersionedStore()
version = store.put("db.host", "prod-1")          # 版本 1
record = store.get("db.host")                      # {"value": ..., "version": 1}
try:
    store.put("db.host", "prod-2", expected_version=record["version"])
except VersionConflict:
    reload_and_retry()
header = if_match_header(version)                  # HTTP If-Match 用 '"1"'

put 僅在 expected_version 與當前版本相符時寫入(0 要求鍵不存在,省略則為盲寫)並回傳新版本, 過時寫入時拋出 VersionConflictget 回傳 {value, version};``delete`` 同樣受保護;``save`` / load 以 JSON 持久化。if_match_header / check_if_matchhttp_conditional 搭配,橋接到真正的 HTTP If-Match 寫入。

執行器命令

AC_cas_put 回傳 {ok, version}``(衝突時 ``{ok: false, error});``AC_cas_get`` 回傳 {record}。 兩者使用具名實例登錄,並以 MCP 工具(ac_cas_put / ac_cas_get)以及 Script Builder 中 Flow 分類下 的命令提供。