Context token passed to every write-pipeline hook.
All handlers are arity-1 over the token and return {:ok, hook} or
{:error, reason}. The operation, previous unit and failure reason are
fields, not extra arguments: one signature everywhere. Mutating hook.unit
before the write is how data transforms happen.
:op—:create|:update|:delete:arke— the arke definition unit:group— the group definition unit, set while a group module's hooks run:project— the project the write targets:unit— the unit being written:old_unit— the pre-update unit (:updateonly):error— the failure reason (after_rollbackonly)