JSON-Schema 相容性檢查
我們能*依*某個 JSON Schema 驗證(json_schema)並*產生*結構(action_lint/schema),但無法回答
「使用舊結構的消費者,是否仍能讀取以新結構寫入的資料?」—— 也就是依 Confluent/Avro 的 backward /
forward / full 規則分類變更(新增必填欄位、移除欄位、收窄型別、移除 enum 值)。本功能補上此分類器。
範圍:json_schema 理解的物件結構子集 —— properties / required / type / enum。純標準
函式庫;不匯入 PySide6。每個函式皆為純函式(兩個結構 dict 輸入、報告輸出),因此在 CI 中完全具決定性。
無頭 API
from je_auto_control import (
check_compatibility, is_backward_compatible, diff_schemas,
)
report = check_compatibility(old_schema, new_schema, mode="backward")
# {"compatible": False, "mode": "backward",
# "changes": [...], "breaking": [{"path": "email", "kind": "field_added",
# "breaks": ["backward"]}]}
if not is_backward_compatible(old_schema, new_schema):
block_release()
diff_schemas 把每個變更分類為 SchemaChange``(``path、kind、breaks)。會破壞 backward 的
變更包含新增必填欄位、收窄型別、移除 enum 值;會破壞 forward 的變更包含移除必填欄位、放寬型別、新增
enum 值。check_compatibility 依 mode``(``backward / forward / full)篩選;
is_backward_compatible / is_forward_compatible / is_full_compatible 為布林捷徑。
執行器命令
AC_check_compatibility 接受 old / new 結構與選用的 mode,回傳
{compatible, mode, changes, breaking}。它以 MCP 工具 ac_check_compatibility 以及 Script Builder
中 Data 分類下的命令提供。