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``(``pathkindbreaks)。會破壞 backward 的 變更包含新增必填欄位、收窄型別、移除 enum 值;會破壞 forward 的變更包含移除必填欄位、放寬型別、新增 enum 值。check_compatibilitymode``(``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 分類下的命令提供。