FEP-4f05: Soft Deletion
-
Hi all,
Some discussion regarding NodeBB's handling of soft deleted posts and Discourse's parallel implementation prompted the creation of this FEP, which attempts to describe how the concept of soft deletion can be published without the introduction of new activities—using
as:Deleteas-is and relying on a backreference check for Tombstone in order to signal a soft delete.https://codeberg.org/fediverse/fep/src/branch/main/fep/4f05/fep-4f05.md
-
Hi all,
Some discussion regarding NodeBB's handling of soft deleted posts and Discourse's parallel implementation prompted the creation of this FEP, which attempts to describe how the concept of soft deletion can be published without the introduction of new activities—using
as:Deleteas-is and relying on a backreference check for Tombstone in order to signal a soft delete.https://codeberg.org/fediverse/fep/src/branch/main/fep/4f05/fep-4f05.md
@Claire, in Feb 2002, you created a topic where you mentioned soft deletes. While this isn't strictly related to
Undo(Delete), this FEP recommends thinking of a receivedDeleteas an instruction to invalidate the cache, and re-fetch, which would give you a better answer as to how to handle the receivedDeleteorUndo(Delete).Perhaps this might help.
-
Hi all,
Some discussion regarding NodeBB's handling of soft deleted posts and Discourse's parallel implementation prompted the creation of this FEP, which attempts to describe how the concept of soft deletion can be published without the introduction of new activities—using
as:Deleteas-is and relying on a backreference check for Tombstone in order to signal a soft delete.https://codeberg.org/fediverse/fep/src/branch/main/fep/4f05/fep-4f05.md
>Request the object (via its id) from the origin server directly
Couldn't
Deleteactivity itself indicate the type of operation?For example, if
Deletecontains embeddedTombstone, then treat it as a soft delete. Otherwise, treat it as a hard delete.>The Forums and Threaded Discussions Task Force (ForumWG) has identified a common nomenclature when referring to organized objects in a threaded discussion model.
I find this nomenclature a bit confusing. Commented on the linked issue.
-
>Request the object (via its id) from the origin server directly
Couldn't
Deleteactivity itself indicate the type of operation?For example, if
Deletecontains embeddedTombstone, then treat it as a soft delete. Otherwise, treat it as a hard delete.>The Forums and Threaded Discussions Task Force (ForumWG) has identified a common nomenclature when referring to organized objects in a threaded discussion model.
I find this nomenclature a bit confusing. Commented on the linked issue.
The assumption is that the object is not embedded. If it is, then it stands to reason that the embedded object can be used as is. I'll call it out in that section, thanks.
-
Hi all,
Some discussion regarding NodeBB's handling of soft deleted posts and Discourse's parallel implementation prompted the creation of this FEP, which attempts to describe how the concept of soft deletion can be published without the introduction of new activities—using
as:Deleteas-is and relying on a backreference check for Tombstone in order to signal a soft delete.https://codeberg.org/fediverse/fep/src/branch/main/fep/4f05/fep-4f05.md
What would happen if you receive a
Deletefor an object that you believe to have been soft deleted, but now it shows up as an object instead of aTombstone? Like, it was undeleted by the time you receive theDeleteor something?Likewise, you receive an
Undo(Delete)and when you fetch the referenced object, it returns back aTombstoneinstead of the object?It'd be good to document those cases, because I think the answers are:
- If you receive a
Deleteand the object returns an object, not a 410 / 404 orTombstone, then you discard theDelete - If you receive an
Undo(Delete)and the object returns a 404, 410 orTombstone, then you discard theUndo(Delete)
- If you receive a
-
Hi all,
Some discussion regarding NodeBB's handling of soft deleted posts and Discourse's parallel implementation prompted the creation of this FEP, which attempts to describe how the concept of soft deletion can be published without the introduction of new activities—using
as:Deleteas-is and relying on a backreference check for Tombstone in order to signal a soft delete.https://codeberg.org/fediverse/fep/src/branch/main/fep/4f05/fep-4f05.md
Hi @devnull
this regards soft deletion + context collections (as a collection of posts). This topic started at
https://codeberg.org/silverpill/feps/issues/19
I'm curious what should happen if the context contains three elements
ap-obj,reply, andreply2.reply2is a reply ofreply. Nowreplyis deleted. How many elements does the context then contain?@silverpill said that for mitra the context would contain 1 element
ap-obj.The scenario as Gherkin:
Background: Given A new user called "Alice" And A new user called "Bob" And An ActivityPub object called "ap-obj"Scenario: Reply to reply with parent reply deleted Given "Alice" replied to "ap-obj" with "Nice post!" as "reply" And "Bob" replied to "reply" with "Good point!" as "reply2" When "Alice" deletes "reply" Then For "Alice", the "context" collection of "ap-obj" contains "?" elements -
Hi @devnull
this regards soft deletion + context collections (as a collection of posts). This topic started at
https://codeberg.org/silverpill/feps/issues/19
I'm curious what should happen if the context contains three elements
ap-obj,reply, andreply2.reply2is a reply ofreply. Nowreplyis deleted. How many elements does the context then contain?@silverpill said that for mitra the context would contain 1 element
ap-obj.The scenario as Gherkin:
Background: Given A new user called "Alice" And A new user called "Bob" And An ActivityPub object called "ap-obj"Scenario: Reply to reply with parent reply deleted Given "Alice" replied to "ap-obj" with "Nice post!" as "reply" And "Bob" replied to "reply" with "Good point!" as "reply2" When "Alice" deletes "reply" Then For "Alice", the "context" collection of "ap-obj" contains "?" elementsHey Helge.
Per my understanding, when processing a deletion of
reply, you would not presume deletion of any or all downstream objects. Only the referenced object is deleted.Deleting multiple objects at once would require multiple activities, or perhaps a single (and as-yet undefined) "batch" style activity.
-
It is not about deleting the objects, it's about if they are in the context collection or not.
If I understand you correctly, we would have before Alice deletes her reply
context[ap-obj] = [ap-obj, reply, repl2]and
context[ap-obj] = [ap-obj, repl2]afterwards
-
It is not about deleting the objects, it's about if they are in the context collection or not.
If I understand you correctly, we would have before Alice deletes her reply
context[ap-obj] = [ap-obj, reply, repl2]and
context[ap-obj] = [ap-obj, repl2]afterwards
Yes, that's correct. Deletion of one object will not affect membership of downstream objects in the context collection.