The file worker now UPDATEs the attachment row created by processCreateEvent (swapping sourceUrl interim filename to local path) instead of INSERTing a duplicate. Falls back to INSERT for legacy queue entries. After download, broadcasts dm_message_updated so clients see the attachment transition from remote hotlink to local file in real-time.