feat(federation): startup sweep reconciles drifted 1-on-1 DM federatedIds — heals pre-fix re-attaches (reattach-dm-reconcile spec §3.3)

This commit is contained in:
Jannis Braun
2026-07-03 12:36:17 +02:00
parent 0bb4ef8cad
commit 011a9be92a
3 changed files with 155 additions and 1 deletions
@@ -13,7 +13,7 @@ import { generateThumbnail } from './thumbnail.js';
import type { FederationRelayRequest, FederationRelayResponse, FederationRelayEvent } from '@backspace/shared';
import { startupBootstrapSync, onPeerDeactivated } from './federationPeerActivation.js';
import { probePeerReachable, recoverOrDetectReset, detectResetOnNeedsAttentionPeers, detectResetForPeer } from './federationRecovery.js';
import { backfillReplicatedProfileAssets, sweepDeadIncarnationArtifacts } from '../routes/federation.js';
import { backfillReplicatedProfileAssets, sweepDeadIncarnationArtifacts, reconcileDriftedDmFederatedIds } from '../routes/federation.js';
import { invokePermanentFailureCallback } from './federationRollback.js';
import { refreshPeerEpochs, getInstanceId } from './federationEpoch.js';
import fs from 'node:fs';
@@ -1312,6 +1312,14 @@ export function startFederationWorkers(): void {
console.error('[federation-worker] Dead-incarnation sweep error:', err);
}
// Heal any 1-on-1 DM channels whose federatedId drifted from their members'
// current identities (reattach-dm-reconcile spec §3.3).
try {
reconcileDriftedDmFederatedIds();
} catch (err) {
console.error('[federation-worker] DM federatedId reconciliation error:', err);
}
// Backfill any replicated user avatars/banners still stored as absolute URLs
// (legacy data from before file replication, or rows whose home was offline
// on a previous attempt). Best-effort and idempotent — safe to re-run.