The action-correctness definition includes arguments and risky duplicate writes, but score_case currently checks only whether tool names are present or absent. A run could call create_refund twice with the wrong order ID and still pass that dimension if its final_state string matches.
I would express expected calls as predicates over arguments, count, and ordering, then check the actual persisted refund record separately from the summary state. A fixture with the right tool names but deliberately wrong arguments would keep the implementation aligned with the five-dimension rubric you describe.