···189189 }
190190 }
191191192192+ /// Resolve without touching the cache. Used by the backfill validation path
193193+ /// to avoid populating the cache with entries that may be rejected.
194194+ pub async fn resolve_no_cache(
195195+ &self,
196196+ did: &Did<'_>,
197197+ ) -> Result<(Url, PublicKey<'static>), IdentityError> {
198198+ self.resolve_uncached(did).await
199199+ }
200200+201201+ /// Insert a pre-resolved identity into the cache.
202202+ /// Called after backfill validation accepts a DID, to warm the cache for
203203+ /// the resync worker that will pick it up shortly.
204204+ pub fn insert_resolved(&self, did: Did<'static>, pds: Url, pubkey: PublicKey<'static>) {
205205+ self.cache.insert(did, pds, pubkey);
206206+ }
207207+192208 /// Evict `did` from the identity cache.
193209 ///
194210 /// Called when a `#identity` firehose event is received, after all