Synthetic rows exist to ask the host a question the feed cannot answer. Two properties follow from that. They must never be treated as "missing from the feed", because they were never in it — so the missing-booking engine shields them. And they must not block the real event if the OTA later exports it — so promotion runs before the duplicate guards: a real event whose UID is unclaimed and which overlaps exactly one synthetic row adopts that row (synthetic_promoted).
Lemon learned the second property the hard way: an earlier version left synthetic rows frozen and skipped every real event underneath them, so a host had to fix dates by hand.