`after_action` hook does not trigger with atomic changes

Your atomic callback is bypassing the change/3 behavior. If you want it to do the “normal” behavior on atomic execution, then you need

  def atomic(changeset, opts, context), do: {:ok, change(changeset, opts, context)}