Publish imported source items as local ActivityPub posts #26

Closed
opened 2026-09-28 16:54:34 +00:00 by Michael Westergaard · 1 comment
Owner

Problem

FediProfile currently republishes ActivityPub posts by Announce of their remote IDs. RSS, Atom, and Bluesky items have no ActivityPub object to Announce. They need a local, stable object and normal follower delivery.

Scope

  • Map normalized imported items from #25 to locally owned ActivityPub objects with durable IDs, correct attribution and a link to the original. Define what content/media can be copied versus linked; never imply the source author is the FediProfile actor.
  • Publish Create on first observation, Update on a changed item, and Delete/retraction on source removal or explicit detachment according to a documented lifecycle policy. Keep the profile outbox, public recent-post view, and follower deliveries consistent across retries and account deletion.
  • Reuse the existing federation transport/queue boundary; persist publication state transactionally enough to prevent duplicate or lost activities after restart.
  • Distinguish imported posts from ActivityPub AutoBoost, which must keep its existing Announce behavior.

Acceptance

Functional tests cover first publication, edits, duplicate polls, detach/retraction, follower delivery, retry/restart, and no regression for ActivityPub links. Pin the ActivityPub object/activity contract and test with a receiving peer in manually run integration where needed. Document provenance and attribution in the UI/API.

Depends on #25. RSS, Atom, and Bluesky source tickets depend on this publication path.

## Problem FediProfile currently republishes ActivityPub posts by Announce of their remote IDs. RSS, Atom, and Bluesky items have no ActivityPub object to Announce. They need a local, stable object and normal follower delivery. ## Scope - Map normalized imported items from #25 to locally owned ActivityPub objects with durable IDs, correct attribution and a link to the original. Define what content/media can be copied versus linked; never imply the source author is the FediProfile actor. - Publish Create on first observation, Update on a changed item, and Delete/retraction on source removal or explicit detachment according to a documented lifecycle policy. Keep the profile outbox, public recent-post view, and follower deliveries consistent across retries and account deletion. - Reuse the existing federation transport/queue boundary; persist publication state transactionally enough to prevent duplicate or lost activities after restart. - Distinguish imported posts from ActivityPub AutoBoost, which must keep its existing Announce behavior. ## Acceptance Functional tests cover first publication, edits, duplicate polls, detach/retraction, follower delivery, retry/restart, and no regression for ActivityPub links. Pin the ActivityPub object/activity contract and test with a receiving peer in manually run integration where needed. Document provenance and attribution in the UI/API. Depends on #25. RSS, Atom, and Bluesky source tickets depend on this publication path.
Author
Owner

Implemented in commit 6430cea on michael. Imported items now publish as locally owned ActivityPub Notes with stable IDs, source attribution and provenance, Create/Update/Delete lifecycle handling, consistent recent-post/outbox state, and durable follower delivery jobs. Tests cover first publication, updates, duplicate polls, detach/retraction, retry/restart, deletion, and ActivityPub object/activity contracts. Forgejo CI run 1101 and integration run 1102 passed.

Implemented in commit 6430cea on michael. Imported items now publish as locally owned ActivityPub Notes with stable IDs, source attribution and provenance, Create/Update/Delete lifecycle handling, consistent recent-post/outbox state, and durable follower delivery jobs. Tests cover first publication, updates, duplicate polls, detach/retraction, retry/restart, deletion, and ActivityPub object/activity contracts. Forgejo CI run 1101 and integration run 1102 passed.
Sign in to join this conversation.
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
klafbang/fediprofile#26
No description provided.