An audit record needs before, after and an actor

A log line saying that an order was updated answers none of the questions asked during a dispute.

AuditLog::record([
    'subject_type' => Order::class,
    'subject_id'   => $order->id,
    'action'       => 'order.total_adjusted',
    'actor_type'   => 'user',           // or 'system', 'api_client'
    'actor_id'     => $actor?->id,
    'before'       => ['total_cents' => 4900],
    'after'        => ['total_cents' => 4400],
    'reason'       => $request->input('reason'),
    'ip'           => $request->ip(),
    'request_id'   => $request->header('X-Request-Id'),
]);

Recording only the changed fields rather than the whole model keeps the table proportional to the changes rather than to the data, which matters on a wide table. The reason field is the one that turns an audit log into something a person can read, and requiring it for manual adjustments is a product decision rather than a technical one.