From db1625dc0d833d93c9a66edb78d3e21a241d4716 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Fri, 15 May 2026 10:58:13 +0200 Subject: [PATCH] =?UTF-8?q?fix(ap):=20use=20Note=20id=20(not=20Create=20ac?= =?UTF-8?q?tivity=20id)=20in=20CreateActivity::receive=20=E2=80=94=20fixes?= =?UTF-8?q?=20Delete=20sync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/adapters/activitypub-base/src/activities.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/adapters/activitypub-base/src/activities.rs b/crates/adapters/activitypub-base/src/activities.rs index 1b2f41c..203a3a9 100644 --- a/crates/adapters/activitypub-base/src/activities.rs +++ b/crates/adapters/activitypub-base/src/activities.rs @@ -341,7 +341,14 @@ impl Activity for CreateActivity { tracing::info!(actor = %self.actor(), "ignoring activity from blocked domain"); return Ok(()); } - let ap_id = self.id.clone(); + // Use the Note's own id, not the Create activity id (which ends in /activity). + // Delete activities reference the Note id, so they must match. + let ap_id = self + .object + .get("id") + .and_then(|v| v.as_str()) + .and_then(|s| Url::parse(s).ok()) + .unwrap_or_else(|| self.id.clone()); let actor_url = self.actor.inner().clone(); data.object_handler .on_create(&ap_id, &actor_url, self.object)