In the Outbox pattern, the publisher should not mark an event as completed. The outbox is just a reliable log of events that happened.
Each consumer (service/handler) is responsible for tracking whether it has processed the event.
You don’t have to update the publisher when a new consumer is added.
One failing consumer doesn’t affect the others.
Retries can be handled independently for each consumer.
If you really need a global “completed” flag, only set it after all consumers confirm they are done. In most systems, though, the outbox itself stays unchanged and only consumers record their own status.