Skip to content

Piero Bosio Social Web Site Personale Logo Fediverso

Social Forum federato con il resto del mondo. Non contano le istanze, contano le persone

Topic removal from a category/community

Technical Discussion
29 5 63
  • Hey rimu@piefed.social question to you about post removal...

    If a remote user posts to a local community, and the local mod deletes it (let's say it's spam of off topic), does the local community federate a delete out?

    Technically you're not deleting the content, just removing it from the community.

    Is there a different action Piefed takes?

  • Hey rimu@piefed.social question to you about post removal...

    If a remote user posts to a local community, and the local mod deletes it (let's say it's spam of off topic), does the local community federate a delete out?

    Technically you're not deleting the content, just removing it from the community.

    Is there a different action Piefed takes?

    @julian @rimu Always wondered about that. Is that the same for other AP sites?

  • Hey rimu@piefed.social question to you about post removal...

    If a remote user posts to a local community, and the local mod deletes it (let's say it's spam of off topic), does the local community federate a delete out?

    Technically you're not deleting the content, just removing it from the community.

    Is there a different action Piefed takes?

    Yes, a Delete activity is sent to all instances with actors that follow the category/community. Those instances then delete their local copy. In Lemmy/PieFed there is no distinction between deletion and removal.

    The deletes are soft so it is possible to un-delete by sending an Undo activity. PieFed keeps soft-deleted posts (topics, in NodeBB language) for a few days then after a week deletes the content from the database.

    All of these activities are enclosed in an Announce and the http POST is signed using the community key. So in a way the content 'belongs' to the community, not to the original author. With that model of ownership the idea of removal redundant - a post without a community is not a post.

    Tangentially - it would be good to come up with a way to move a topic to another category and federate that so the move can happen on other instances, too. We could go off-piste and create a Move activity, or use Remove (from old topic/comm) followed by Add (to new topic/comm) to do the same thing. I feel more inclined to go with Move as it's a single atomic operation that either succeeds or fails, despite it not being in the spec.

    The AP spec is so badly stretched by various implementation-specific differences that I don't think it's worth being ideological about adherence to it it anymore.

  • Yes, a Delete activity is sent to all instances with actors that follow the category/community. Those instances then delete their local copy. In Lemmy/PieFed there is no distinction between deletion and removal.

    The deletes are soft so it is possible to un-delete by sending an Undo activity. PieFed keeps soft-deleted posts (topics, in NodeBB language) for a few days then after a week deletes the content from the database.

    All of these activities are enclosed in an Announce and the http POST is signed using the community key. So in a way the content 'belongs' to the community, not to the original author. With that model of ownership the idea of removal redundant - a post without a community is not a post.

    Tangentially - it would be good to come up with a way to move a topic to another category and federate that so the move can happen on other instances, too. We could go off-piste and create a Move activity, or use Remove (from old topic/comm) followed by Add (to new topic/comm) to do the same thing. I feel more inclined to go with Move as it's a single atomic operation that either succeeds or fails, despite it not being in the spec.

    The AP spec is so badly stretched by various implementation-specific differences that I don't think it's worth being ideological about adherence to it it anymore.

    There are lots of other uses for Move. A community whole could move instances, a user could move instances, etc.

  • There are lots of other uses for Move. A community whole could move instances, a user could move instances, etc.

    Yeah you're right, Move has some prior art for account migrations so it's worth some thinking through.

    I'd like to work together on this though. I'm working through context ownership and inheritance first, but once that FEP is drafted I can move on to this.

  • Yes, a Delete activity is sent to all instances with actors that follow the category/community. Those instances then delete their local copy. In Lemmy/PieFed there is no distinction between deletion and removal.

    The deletes are soft so it is possible to un-delete by sending an Undo activity. PieFed keeps soft-deleted posts (topics, in NodeBB language) for a few days then after a week deletes the content from the database.

    All of these activities are enclosed in an Announce and the http POST is signed using the community key. So in a way the content 'belongs' to the community, not to the original author. With that model of ownership the idea of removal redundant - a post without a community is not a post.

    Tangentially - it would be good to come up with a way to move a topic to another category and federate that so the move can happen on other instances, too. We could go off-piste and create a Move activity, or use Remove (from old topic/comm) followed by Add (to new topic/comm) to do the same thing. I feel more inclined to go with Move as it's a single atomic operation that either succeeds or fails, despite it not being in the spec.

    The AP spec is so badly stretched by various implementation-specific differences that I don't think it's worth being ideological about adherence to it it anymore.

    rimu@piefed.social said in Topic removal from a category/community:
    > All of these activities are enclosed in an Announce and the http POST is signed using the community key. So in a way the content 'belongs' to the community, not to the original author.

    Oh that's right! That makes sense. Having the community sign the activity (and the Announce wrapper) would effectively differentiate it from a simple author-initiated content deletion.

    The impetus for this question was that occasionally I will move topics out of a category for being off topic. Federated copies don't see this change reflected, so both Move and Delete are things I want to federate out in lockstep with Piefed and Lemmy.

  • Yes, a Delete activity is sent to all instances with actors that follow the category/community. Those instances then delete their local copy. In Lemmy/PieFed there is no distinction between deletion and removal.

    The deletes are soft so it is possible to un-delete by sending an Undo activity. PieFed keeps soft-deleted posts (topics, in NodeBB language) for a few days then after a week deletes the content from the database.

    All of these activities are enclosed in an Announce and the http POST is signed using the community key. So in a way the content 'belongs' to the community, not to the original author. With that model of ownership the idea of removal redundant - a post without a community is not a post.

    Tangentially - it would be good to come up with a way to move a topic to another category and federate that so the move can happen on other instances, too. We could go off-piste and create a Move activity, or use Remove (from old topic/comm) followed by Add (to new topic/comm) to do the same thing. I feel more inclined to go with Move as it's a single atomic operation that either succeeds or fails, despite it not being in the spec.

    The AP spec is so badly stretched by various implementation-specific differences that I don't think it's worth being ideological about adherence to it it anymore.

    @rimu Still, I think it would be nice to deprecate Delete and slowly migrate to Remove(target: context), since both PieFed and Lemmy implement the context collection now.

    My server rejects Delete if its actor is different from object's owner, and I have to treat Announce(Delete) as a special case where the normal processing logic doesn't apply.

  • @rimu Still, I think it would be nice to deprecate Delete and slowly migrate to Remove(target: context), since both PieFed and Lemmy implement the context collection now.

    My server rejects Delete if its actor is different from object's owner, and I have to treat Announce(Delete) as a special case where the normal processing logic doesn't apply.

    Possibly although the differences of federation between the threadiverse and the rest of the fediverse go way beyond deletes. FEP 1b12 is a whole thing, chipping away at it piece by piece would be slow going.

  • Possibly although the differences of federation between the threadiverse and the rest of the fediverse go way beyond deletes. FEP 1b12 is a whole thing, chipping away at it piece by piece would be slow going.

    Personally I think 1b12 doesn't need to be changed or hacked around. It doesn't specifically call for federating out deletes so I'd think any solution we come up with together would work with that FEP, not go against it.

    cc silverpill@mitra.social (if your app notifies you of new replies without a direct mention I'll stop tagging you too)

  • Personally I think 1b12 doesn't need to be changed or hacked around. It doesn't specifically call for federating out deletes so I'd think any solution we come up with together would work with that FEP, not go against it.

    cc silverpill@mitra.social (if your app notifies you of new replies without a direct mention I'll stop tagging you too)

    I also think that backfill will have a side effect of connecting the threadiverse and the rest of the fediverse.

    Exposing context collections will mean consumers will be able to see both *verses. Once Mastodon starts consuming them I predict you will start seeing much more engagement from the microblogs.

    The same would apply if Piefed or Lemmy begin consuming them as well.

    That is an angle I had not even considered until now!

  • Personally I think 1b12 doesn't need to be changed or hacked around. It doesn't specifically call for federating out deletes so I'd think any solution we come up with together would work with that FEP, not go against it.

    cc silverpill@mitra.social (if your app notifies you of new replies without a direct mention I'll stop tagging you too)

    @julian

    if your app notifies you of new replies without a direct mention I'll stop tagging you too

    Inclusion in to or cc is enough to generate a notification.

  • Possibly although the differences of federation between the threadiverse and the rest of the fediverse go way beyond deletes. FEP 1b12 is a whole thing, chipping away at it piece by piece would be slow going.

    rimu@piefed.social silverpill@mitra.social I gave this a bit more thought and I am coming around to the idea that Remove could work.

    I am assuming that when Piefed sends Announce(Delete(Object)) this is only understood by Piefed? Not Lemmy (and certainly not NodeBB, yet)...

    In that case, a move to a simpler Remove(target: context) signed and acted on by the community actor, would send a more explicit message that the object was removed from the community.

    The "1b12-speaking" portion of it would be an Undo(Announce(Create)), although once again I am not even sure if that action is understood by Piefed/Lemmy.

  • only understood by Piefed? Not Lemmy

    No, that's a Lemmy thing too.

  • only understood by Piefed? Not Lemmy

    No, that's a Lemmy thing too.

    Oh okay. I wasn't sure about that since I don't think it's documented in the FEP, though it's been awhile since I've given it a read through.

  • only understood by Piefed? Not Lemmy

    No, that's a Lemmy thing too.

    rimu@piefed.social Do you send the Undo(Announce(Create)) as well for microblog compatibility?

  • Looks like for Mastodon we just do a bare Delete.

  • Looks like for Mastodon we just do a bare Delete.

    rimu@piefed.social got it, thanks. How do you reconcile the Delete coming from outside your domain? I would figure Mastodon would drop those Deletes.

    Edit: that was confusing wording... I mean — how do you sign a Delete for an object that doesn't belong to your instance?

  • We only federate the deletion if it is in one of our local communities.

    The activity is signed by the person who did it, so if Mastodon detects that the person deleting is not the author and doesn't know how to find out if someone is a moderator or not, that's their problem.

    Mastodon has been dropping the ball on groups support for years so I didn't even bother to find out if they handle it well - I bet they don't.

  • We only federate the deletion if it is in one of our local communities.

    The activity is signed by the person who did it, so if Mastodon detects that the person deleting is not the author and doesn't know how to find out if someone is a moderator or not, that's their problem.

    Mastodon has been dropping the ball on groups support for years so I didn't even bother to find out if they handle it well - I bet they don't.

    @rimu

    so if Mastodon detects that the person deleting is not the author and doesn’t know how to find out if someone is a moderator or not, that’s their problem.

    It is not their problem. If your actor Deletes an object that is owned by a different server, then your implementation of ActivityPub standard is incorrect:

    https://www.w3.org/TR/activitypub/#delete-activity-inbox

    The side effect of receiving this is that (assuming the object is owned by the sending actor / server) the server receiving the delete activity SHOULD remove its representation of the object with the same id

    @julian

  • @rimu

    so if Mastodon detects that the person deleting is not the author and doesn’t know how to find out if someone is a moderator or not, that’s their problem.

    It is not their problem. If your actor Deletes an object that is owned by a different server, then your implementation of ActivityPub standard is incorrect:

    https://www.w3.org/TR/activitypub/#delete-activity-inbox

    The side effect of receiving this is that (assuming the object is owned by the sending actor / server) the server receiving the delete activity SHOULD remove its representation of the object with the same id

    @julian

    I think Announce(Delete(Object)) skirts around that, though. Maybe not if you're being technical about it, but the shape of the activity is different enough to mean something else in 1b12-land:

    • A community/group-actor announced a Delete
    • The object may or may not belong to the same domain as the community/group-actor or Delete actor
    • Verify that the community/group-actor and Delete actor are same-origin (might not need this if cross-instance moderation is a thing)
    • Verify that the Delete actor is a moderator of the community/group-actor as per 1b12

Gli ultimi otto messaggi ricevuti dalla Federazione
  • Thank you, @julian.

    One thing I am concerned about is how that affects forums and communities.

    But then I think, so what if a NodeBB forum or PieFed community wanted to highlight people because those people represented the values of that community (even if they were not necessarily a part of it)?

    This is something that no forum software that I am aware of does because we always think of forums as only something we join into.

    And it is so amazing to me that the FediVerse and the social web movement could provide a forum or group the opportunity to grow in the opposite direction—sending people outwards for new shared experiences.

    read more

  • @julian I forgot, why do you want to delete a context? If it's your thread, isn't it enough to just Delete the top-level post?

    read more

  • mradcliffe@nokoto.org apart from the technical details, this approach also is extremely easy to explain to laypeople.

    "Follow who this person follows" :heavy_check_mark:

    read more

  • I think that my comment on GitHub that Group Actors acting as Starter Packs really comes from how I approach my social network.

    I rely on my friends and peers to discover new topics and meet new people.

    Friends and peers as Starter Packs work great on a small microblog instance like Mastodon, Misskey, or Sharkey because the federated feed/bubble lists topics written by the amazing people that they are following. This approach is ideal for small instances, but flagship, large and relayed instances make it much harder as the topics are much too diverse. 

    When a small instance I was part of shutdown, I was really at a loss because I relied heavily on that feature without following people myself i.e. I'm lazy. And so to figure out who to follow, I went back to my peers’ and friends’ following Collection. Note to self, I need to remember to continually discover more people from people I follow now that I am on my own single-actor instance.

    This is why I come to the conclusion that people are Starter Packs. Or in other words, Actors are Starter Packs. And more specifically, anyone or thing with a publicly-available following Collection is a Starter Pack. 

    But making a public directory of everyone is not a good idea and discoverability is hard.

    Starter Packs should be (Group) Actors because

    Consent is built-in with the Follow Accept/Reject.People that want to explicitly allow followers already have this option.Implementations should use Mastodon’s discoverability property to also limit who a Starter Pack may follow.Revoking consent is mostly built-in with either Remove Follow, Block Undo, or Reject Follow.Discoverability is built-in:The following Collection is available.Group Actors can make posts when their following Collection is updated.Amazing UX designers can make the following Collection more usable in their software.Starter Packs that are used in bad faith can be defederated like any other bad faith Actor or instance.The barrier to implementation is much lower than tacking on anything new to the specification.
    read more

  • Currently I am grappling with the specifics behind how to federate out the deletion of a topic in a category (or in ForumWG terms, the deletion of a context from an audience.)

    For those unaware, a context is essentially an OrderedCollection containing all objects within its purview.

    Deleting a note or other object is easy. If you are same-origin as the object, you Delete(Object), done.

    Deleting a context is more difficult... you can't rely on other implementors to store references to your contexts, since it is essentially meaningless to them. Furthermore, if a context is deleted, then when a Delete(Context) is federated out, receivers will have no idea what they're seeing, will try to retrieve the object, and find a 404. So it doesn't even work at all.

    Even worse, you can't really delete other peoples' contexts (or for that matter, their content) since you're not same-origin.

    Finally, I realized I'm looking at this the wrong way — I'm not deleting contexts, I'm simply removing them from an audience. Remove works perfectly fine when the context continues to exist (as it can be referenced and duck typed). Remove also works for remote content; the same-origin check applies to the audience you're removing from.

    If you're deleting a context, you have to be the same-origin, and you really should just federate out deletion of the local members in that collection, via regular Delete(Object).

    I suppose federating out self-destruction of a context would be the most complete but it is quite difficult to do when it is no longer resolvable...

    read more

  • Yes I'm fine with that. It doesn't make much difference in the end.

    read more

  • Thanks Rimu. Will give this a shot.

    Upon reflection, since Deletes aren't wrapped in an Announce, then I would recommend that any Move activity we use not be wrapped in Announce either.

    read more

  • @julian if you give me any specific examples of when you would want to use null, i can recommend better alternatives. generally, it's always possible that there is missing information.

    read more
Post suggeriti