Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
We Distribute
  1. Home
  2. Technical Discussion
  3. Deleting a post vs deleting an entire comment tree

Deleting a post vs deleting an entire comment tree

Scheduled Pinned Locked Moved Technical Discussion
deletionthreadiverseactivitypub
66 Posts 15 Posters 41 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mariusor@metalhead.clubM mariusor@metalhead.club

    @nutomic I solved this by having an the instance be an actor that is an intermediary for all operations. All activities get CC'ed to the followers of the user actor, and of the instance actor. (replace instance with community/group, whatever you use as an aggregate element for your implementation)

    This should cover all interested parties imho.

    The potential downside is that instances need to explicitly operate between themselves with follow operations (which conveniently also solves the problem of unwanted interactions with less savory corners of the fediverse).

    Like I said, a problem of addressing. 😛

    nutomic@lemmy.mlN This user is from outside of this forum
    nutomic@lemmy.mlN This user is from outside of this forum
    nutomic@lemmy.ml
    wrote on last edited by
    #24

    I'm sure that approach works as well. This would have been worth discussing 4 or 5 years ago when I was just implementing federation in Lemmy for the first time. By now FEP-1b12 is already an established standard which is used by various platforms, and it would be completely unfeasible to replace it with something else.

    mariusor@metalhead.clubM 1 Reply Last reply
    1
    • nutomic@lemmy.mlN This user is from outside of this forum
      nutomic@lemmy.mlN This user is from outside of this forum
      nutomic@lemmy.ml
      wrote on last edited by
      #25

      I fail to see what the fundamental difference is. If you are unsure about the target with Delete/Object, you can also resolve the context of Object to figure that out. Anyway the instance where the Group is hosted is always the authority, so the state there is the correct one.

      Actually I would rather think of this from a different perspective, namely from the perspective of the mod who clicks the remove button. That would happen when a post is offtopic or violates the rules, and then the intent clearly is to remove all replies as they are not useful. It wouldnt make sense to leave up a single reply two levels deep just because it wasnt included in the context for some reason.

      1 Reply Last reply
      1
      • silverpill@mitra.socialS This user is from outside of this forum
        silverpill@mitra.socialS This user is from outside of this forum
        silverpill@mitra.social
        wrote on last edited by
        #26

        @julian This sounds like an implementation detail to me. Some fedi platforms delete a child object when its parent is deleted, others don't.

        If you want to make the removal of a subtree explicit, I'd recommend a Remove where object is an array (similar to what @mariusor suggested):

        Remove(object: Note[], target: Context)
        

        This also helps with migrating away from Announce(Delete). I saw your FEP draft, will provide more feedback once I read it in full.

        @rimu @nutomic @melroy @BentiGorlich

        julian@activitypub.spaceJ 1 Reply Last reply
        0
        • nutomic@lemmy.mlN nutomic@lemmy.ml

          I'm sure that approach works as well. This would have been worth discussing 4 or 5 years ago when I was just implementing federation in Lemmy for the first time. By now FEP-1b12 is already an established standard which is used by various platforms, and it would be completely unfeasible to replace it with something else.

          mariusor@metalhead.clubM This user is from outside of this forum
          mariusor@metalhead.clubM This user is from outside of this forum
          mariusor@metalhead.club
          wrote on last edited by
          #27

          @nutomic if you're implying that I should have spoken sooner, I'm pretty sure I did. I remember exchanging messages with both you and @dessalines when you started lemmy...

          I have no specific memory about this topic, but to my recollection lemmy federation was pushed as fait-accomplit at one point without me seeing any previous research on your guys part.

          nutomic@lemmy.mlN 1 Reply Last reply
          0
          • silverpill@mitra.socialS silverpill@mitra.social

            @julian This sounds like an implementation detail to me. Some fedi platforms delete a child object when its parent is deleted, others don't.

            If you want to make the removal of a subtree explicit, I'd recommend a Remove where object is an array (similar to what @mariusor suggested):

            Remove(object: Note[], target: Context)
            

            This also helps with migrating away from Announce(Delete). I saw your FEP draft, will provide more feedback once I read it in full.

            @rimu @nutomic @melroy @BentiGorlich

            julian@activitypub.spaceJ This user is from outside of this forum
            julian@activitypub.spaceJ This user is from outside of this forum
            julian@activitypub.space
            wrote on last edited by
            #28

            silverpill@mitra.social mm I may have been premature regarding phasing out Announce(Delete).

            nutomic@lemmy.ml made it clear that it wasn't going anywhere, and I will remove the "backwards compatibility" label from it in my draft.

            1 Reply Last reply
            1
            • mariusor@metalhead.clubM mariusor@metalhead.club

              @nutomic if you're implying that I should have spoken sooner, I'm pretty sure I did. I remember exchanging messages with both you and @dessalines when you started lemmy...

              I have no specific memory about this topic, but to my recollection lemmy federation was pushed as fait-accomplit at one point without me seeing any previous research on your guys part.

              nutomic@lemmy.mlN This user is from outside of this forum
              nutomic@lemmy.mlN This user is from outside of this forum
              nutomic@lemmy.ml
              wrote on last edited by
              #29

              Back then I didnt understand federation so well yet, so its possible that I didnt get what you were saying. And once I got the federation working there wasnt much reason to redo it in a different way which would effectively do the same thing.

              1 Reply Last reply
              0
              • thisismissem@hachyderm.ioT thisismissem@hachyderm.io

                @nutomic > Make the target of the Delete an array

                It technically is because of JSON-LD (everything can be an array), however, software may not support it because it's pretty common for devs to treat AP as JSON instead of JSON-LD, so doing an assessment of compatibility would be suggested

                trwnh@mastodon.socialT This user is from outside of this forum
                trwnh@mastodon.socialT This user is from outside of this forum
                trwnh@mastodon.social
                wrote on last edited by
                #30

                @thisismissem @nutomic it's not a JSON-LD thing. it's the lack of schematic constraint within the Activity Vocabulary. any property not defined as "functional" can have more than one value.

                1 Reply Last reply
                0
                • mariusor@metalhead.clubM mariusor@metalhead.club

                  @julian as long as it's in the spec, I don't really care.

                  If we all bow to inferior implementations the ecosystem will stagnate. Mastodon's quirks have done enough damage in my opinion. My choice is to be brave and build for the future.

                  PS. Not to brag or anything (🤞) but my implementation can operate on activities with arrays as object, actor, etc.

                  One thing where you can lead the way (because the threadiverse would really benefit from it) is to accept arrays in inReplyTo (where you put all the ancestors of the current post, not just the parent).

                  @helge

                  trwnh@mastodon.socialT This user is from outside of this forum
                  trwnh@mastodon.socialT This user is from outside of this forum
                  trwnh@mastodon.social
                  wrote on last edited by
                  #31

                  @mariusor @julian @helge i don't think "all the ancestors" makes sense for inReplyTo. by doing that, you are claiming that your post is a response to every post in the thread above it. multiple inReplyTo still makes sense but should be used only where you are actually responding to certain things. if you want ancestors, define a property "ancestors" which is a list of ancestors ordered in a specific way (like in the mastodon api)

                  mariusor@metalhead.clubM 1 Reply Last reply
                  0
                  • trwnh@mastodon.socialT This user is from outside of this forum
                    trwnh@mastodon.socialT This user is from outside of this forum
                    trwnh@mastodon.social
                    wrote on last edited by
                    #32

                    @julian @rimu @nutomic @melroy @BentiGorlich is this a problem? it seems to only be a problem if you require the others to behave exactly as you do. the same "issue" applies to any activity in general. say you send a Delete; the others can do what they want:
                    - purge all children
                    - orphan all backlinked objects
                    - replace with a tombstone
                    - rewrite content to say "this post is deleted"
                    - ignore your activity as unauthorized or invalid or spam

                    the intent could be clearer...

                    trwnh@mastodon.socialT 1 Reply Last reply
                    0
                    • trwnh@mastodon.socialT trwnh@mastodon.social

                      @julian @rimu @nutomic @melroy @BentiGorlich is this a problem? it seems to only be a problem if you require the others to behave exactly as you do. the same "issue" applies to any activity in general. say you send a Delete; the others can do what they want:
                      - purge all children
                      - orphan all backlinked objects
                      - replace with a tombstone
                      - rewrite content to say "this post is deleted"
                      - ignore your activity as unauthorized or invalid or spam

                      the intent could be clearer...

                      trwnh@mastodon.socialT This user is from outside of this forum
                      trwnh@mastodon.socialT This user is from outside of this forum
                      trwnh@mastodon.social
                      wrote on last edited by
                      #33

                      @julian @rimu @nutomic @melroy @BentiGorlich the complicating factor here is not what other people do, but that you would be using the terms incorrectly or imprecisely according to their definition. this happens all the time in natural language where people sometimes use words they don't fully understand or use them with definitions not matching consensus. it's how we get people saying "literally" for things that are not literal, and other such slang.

                      julian@activitypub.spaceJ 1 Reply Last reply
                      0
                      • trwnh@mastodon.socialT trwnh@mastodon.social

                        @julian @rimu @nutomic @melroy @BentiGorlich the complicating factor here is not what other people do, but that you would be using the terms incorrectly or imprecisely according to their definition. this happens all the time in natural language where people sometimes use words they don't fully understand or use them with definitions not matching consensus. it's how we get people saying "literally" for things that are not literal, and other such slang.

                        julian@activitypub.spaceJ This user is from outside of this forum
                        julian@activitypub.spaceJ This user is from outside of this forum
                        julian@activitypub.space
                        wrote on last edited by
                        #34

                        trwnh@mastodon.social it's less so that I want receivers to do what I want (the ship has sailed on that), but rather that we have the opportunity to provide some guidance on preferred behaviour.

                        What's clear here is that there are going to be two separate actions, "Delete object and all children, recursively", or "Delete object but retain children".

                        We're discussing the best way to represent those two actions.

                        cc rimu@piefed.social nutomic@lemmy.ml silverpill@mitra.social

                        1 Reply Last reply
                        0
                        • jenniferplusplus@hachyderm.ioJ This user is from outside of this forum
                          jenniferplusplus@hachyderm.ioJ This user is from outside of this forum
                          jenniferplusplus@hachyderm.io
                          wrote on last edited by
                          #35

                          @julian @mariusor @helge
                          fwiw, letterbook is fine with that
                          https://github.com/Letterbook/Letterbook/blob/6bf60b1b3d37a8b5d49a1d2554bfd5e4468f00de/Source/Letterbook.Api/ActivityPub/ActorController.cs#L309

                          1 Reply Last reply
                          1
                          • trwnh@mastodon.socialT This user is from outside of this forum
                            trwnh@mastodon.socialT This user is from outside of this forum
                            trwnh@mastodon.social
                            wrote on last edited by
                            #36

                            @julian @rimu @nutomic @silverpill well, you typically have no authority over "children", so you can't actually delete them. you can treat them as deleted locally (equivalent to garbage collection for orphan references), but as far as the outside world is concerned, you just deleted one object.

                            i think people should be more aware that orphaned references can and will happen. i'd personally leave them be. link rot is a thing, and those links aren't necessarily invalid, they're just stale.

                            trwnh@mastodon.socialT 1 Reply Last reply
                            0
                            • trwnh@mastodon.socialT trwnh@mastodon.social

                              @julian @rimu @nutomic @silverpill well, you typically have no authority over "children", so you can't actually delete them. you can treat them as deleted locally (equivalent to garbage collection for orphan references), but as far as the outside world is concerned, you just deleted one object.

                              i think people should be more aware that orphaned references can and will happen. i'd personally leave them be. link rot is a thing, and those links aren't necessarily invalid, they're just stale.

                              trwnh@mastodon.socialT This user is from outside of this forum
                              trwnh@mastodon.socialT This user is from outside of this forum
                              trwnh@mastodon.social
                              wrote on last edited by
                              #37

                              @julian @rimu @nutomic @silverpill put another way, there is no difference between a link that doesn't resolve because the resource was deleted and a link that doesn't resolve because the server was down or a link that doesn't resolve because you don't have authorization to see it. it's just a link that doesn't resolve, as far as you're concerned.

                              the same thing applies to moderation, not just deletion. a direct link might resolve, but the link is omitted from a curated view.

                              trwnh@mastodon.socialT 1 Reply Last reply
                              0
                              • trwnh@mastodon.socialT trwnh@mastodon.social

                                @julian @rimu @nutomic @silverpill put another way, there is no difference between a link that doesn't resolve because the resource was deleted and a link that doesn't resolve because the server was down or a link that doesn't resolve because you don't have authorization to see it. it's just a link that doesn't resolve, as far as you're concerned.

                                the same thing applies to moderation, not just deletion. a direct link might resolve, but the link is omitted from a curated view.

                                trwnh@mastodon.socialT This user is from outside of this forum
                                trwnh@mastodon.socialT This user is from outside of this forum
                                trwnh@mastodon.social
                                wrote on last edited by
                                #38

                                @julian @rimu @nutomic @silverpill essentially the difference between the two actions only exists internally, not externally.

                                whether to use a Delete or a Remove is a separate issue of semantics and authority.

                                whether to use an array of objects is a separate issue of batching and partial failure. semantically, there is no issue. "john deleted 10 posts" makes sense as a statement.

                                julian@activitypub.spaceJ 1 Reply Last reply
                                0
                                • trwnh@mastodon.socialT trwnh@mastodon.social

                                  @julian @rimu @nutomic @silverpill essentially the difference between the two actions only exists internally, not externally.

                                  whether to use a Delete or a Remove is a separate issue of semantics and authority.

                                  whether to use an array of objects is a separate issue of batching and partial failure. semantically, there is no issue. "john deleted 10 posts" makes sense as a statement.

                                  julian@activitypub.spaceJ This user is from outside of this forum
                                  julian@activitypub.spaceJ This user is from outside of this forum
                                  julian@activitypub.space
                                  wrote on last edited by julian@activitypub.space
                                  #39

                                  trwnh@mastodon.social nobody's deleting anything. We're only dealing with removing content.

                                  (Which I now realize I worded incorrectly in OP, heh)

                                  That it's a Delete is incidental (and unfortunate wording)

                                  1 Reply Last reply
                                  0
                                  • trwnh@mastodon.socialT This user is from outside of this forum
                                    trwnh@mastodon.socialT This user is from outside of this forum
                                    trwnh@mastodon.social
                                    wrote on last edited by
                                    #40

                                    @julian you used the word Delete throughout, so i used the same word. either way, you might consider a policy of treating a context deletion as orphaning all items in the context and then you can optionally garbage-collect them. or not. it's up to you, really!

                                    julian@activitypub.spaceJ 1 Reply Last reply
                                    0
                                    • trwnh@mastodon.socialT trwnh@mastodon.social

                                      @julian you used the word Delete throughout, so i used the same word. either way, you might consider a policy of treating a context deletion as orphaning all items in the context and then you can optionally garbage-collect them. or not. it's up to you, really!

                                      julian@activitypub.spaceJ This user is from outside of this forum
                                      julian@activitypub.spaceJ This user is from outside of this forum
                                      julian@activitypub.space
                                      wrote on last edited by julian@activitypub.space
                                      #41

                                      trwnh@mastodon.social yes that's the point. I can't enforce behaviour from anyone but we can signal intent.

                                      That's all this discussion is about. Whether we should Remove(Context) or Delete(Object)+with_replies.

                                      1 Reply Last reply
                                      1
                                      • trwnh@mastodon.socialT This user is from outside of this forum
                                        trwnh@mastodon.socialT This user is from outside of this forum
                                        trwnh@mastodon.social
                                        wrote on last edited by
                                        #42

                                        @julian with_replies doesn't make sense, but neither does Remove(Context). if the intent is to signal "we locally cleared our cache" then i'm not sure that's relevant to anyone else?

                                        1 Reply Last reply
                                        0
                                        • trwnh@mastodon.socialT trwnh@mastodon.social

                                          @mariusor @julian @helge i don't think "all the ancestors" makes sense for inReplyTo. by doing that, you are claiming that your post is a response to every post in the thread above it. multiple inReplyTo still makes sense but should be used only where you are actually responding to certain things. if you want ancestors, define a property "ancestors" which is a list of ancestors ordered in a specific way (like in the mastodon api)

                                          mariusor@metalhead.clubM This user is from outside of this forum
                                          mariusor@metalhead.clubM This user is from outside of this forum
                                          mariusor@metalhead.club
                                          wrote on last edited by
                                          #43

                                          @trwnh I'm not sure how much time you spent thinking about this, but I have and I *do* think that it makes sense, thank you for your input. Also it does not violate any constraints in the specification, though if you know of one I'd love to hear it.

                                          The advantage of having all ancestors there is that the object can be disseminated to all the instances in that list, and be added to all the replies collections of its ancestors. As such when you retrieve any of those ancestor replies collections you have the full thread from their point downwards and you don't need to fetch other replies collections up the chain.

                                          @julian @helge

                                          trwnh@mastodon.socialT 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          Powered by NodeBB Contributors
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups