宣告式動作後置條件

動作之後,代理(或重播框架)通常有具體的預期:「應出現寫著『Saved』的對話框,且 Submit 按鈕應停用」。expect_poll / assert_eventually 輪詢*單一條件*,卻沒有與動作綁定的 後置條件規格*概念,也不對照 *before 基準做差異(因此無法表達「一個*新*對話框出現了」 ——只能表達「存在對話框」)。trajectory_eval 的評分準則是整條軌跡層級,而非每步畫面 狀態。postcondition 補上這個缺口:用一個小型 JSON 子句規格,對照 after 觀測(可選擇與 before 觀測做差異)評估,回傳逐子句的通過 / 失敗報告。

子句:appears / disappears``(對照 ``before)、enabled / disabledtext_present / text_absent,以及 count``(``equals / min)。純標準函式庫, 作用於元素字典;規格為純 JSON,可帶入 action 檔 / MCP / 排程器。不匯入 PySide6

無頭 API

from je_auto_control import check_postcondition, compile_postcondition

spec = {"appears": {"role": "dialog", "name": "Saved"},
        "disabled": {"name": "Submit"}}
report = check_postcondition(after_elements, spec, before=before_elements)
if not report.ok:
    print("失敗子句:", report.failed)

# 把規格轉成判定函式以驅動 expect_poll
predicate = compile_postcondition({"text_present": "Saved"})

check_postcondition 回傳 PostconditionReport``(``ok / clauses[{type, ok, detail}] — / failed)。appears 只有在元素位於 after 且*不*在 before``(確為新元素)時才成功;``disappears 需要 before 幀。compile_postcondition 回傳 after -> bool 判定函式,可與 expect_poll / assert_eventually 搭配。

執行器指令

AC_check_postcondition``(``after / spec / before{ok, clauses, failed}) 以 MCP 工具 ``ac_check_postcondition``(唯讀)及 Script Builder 指令 Check Postcondition (位於 Native UI 分類下)形式提供。