ActionError
Why an interaction stopped.
An action error is returned, not thrown — it rides out in ApplyResult.error alongside whatever the interaction managed to apply before it hit the problem. That is the deliberate shape of the contract: an interaction stops where it failed, and the writes that already landed stay landed.
identity is the stable, message-free string conformance fixtures assert against; the message is free-form context and never part of the contract. The closed set:
malformedAction— a verb whose fields do not make sense together:insertgiven both or neither ofvalue/values,updatewith no selector,upsertwhosevaluelacks its key field,keywithoutequalsmalformedPointer— apath,fieldor$eventpointer that will not parsepathMismatch— the path walks through a value that is not a containernotAnArray,notAnObject,notABoolean,notANumber— the target exists but has the wrong shape for the verb
verb and path locate the failing action, and at is its index trail through nested sequences — [1, 0] is the first action of the second action of the top-level sequence.