Good resume about the outbox pattern.
I would just add a reminder that, even if now you are sure the events are committed inside the business transaction, if the system receives a lot of concurrent accesses, there's still complexity ensuring the events are flushed sequentially into the queue. This usually means creating the event at the end of the business operation, trying to ensure the latest timestamp, using optimistic concurrency property and having a flag per event indicating if it was already synced or not.
Nonetheless, there's still a transaction problem that must be solved via idempotency to all listeners. Even if you ensure the event is created inside the business transaction, the worker is publishing the events into a bus and marking as synced, which can fail and cause multiple submissions of the same event into the bus. Listeners must also track events processed inside their own business transaction so that they can ignore duplicated events.
Small note: your diagrams are ok but for those that use the dark theme in their phones, the arrows are hard to spot. Try to add some background color or use another color for the arrows, instead black. Nonetheless, good article.