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

Deleting a post vs deleting an entire comment tree

Technical Discussion
65 15 69
  • @trwnh @julian This is a trust and safety issue, so it's more than just "do what you will". People post things that may endanger themselves or others, and when the details are repeated in the discussion tree deleting the original post is ineffective. Servers that handle this badly can and should be sanctioned - so yes, collectively we can and probably will enforce behaviour. It's pretty important that the intent is explicit.

    @mat @julian i understand the situation you're describing, but what kind of notification are you trying to send regarding this? are there any expected behaviors from your audience? there is a far larger problem here: you don't have any consistency guarantees within the distributed system that is the fediverse, precisely because everyone has a different understanding. what are you trying to get your peers to understand?

    typically, publishers can Delete, and forum mods can Remove from the thread.

  • @mat @julian i understand the situation you're describing, but what kind of notification are you trying to send regarding this? are there any expected behaviors from your audience? there is a far larger problem here: you don't have any consistency guarantees within the distributed system that is the fediverse, precisely because everyone has a different understanding. what are you trying to get your peers to understand?

    typically, publishers can Delete, and forum mods can Remove from the thread.

    @mat @julian if the redaction is coming from the author, they can send a Delete to anywhere they expect to have stored a copy.

    if the redaction is coming from the aggregator, they can send a Remove to anywhere relevant.

    but these are always going to be best-effort, because of 2 main reasons:

    - you don't have a way to track everyone who has a copy.
    - your peers might not agree with what "badly" means.

    generally, the answer to "how do i delete a tree" is "you can't", because trees aren't real.

  • @mat @julian if the redaction is coming from the author, they can send a Delete to anywhere they expect to have stored a copy.

    if the redaction is coming from the aggregator, they can send a Remove to anywhere relevant.

    but these are always going to be best-effort, because of 2 main reasons:

    - you don't have a way to track everyone who has a copy.
    - your peers might not agree with what "badly" means.

    generally, the answer to "how do i delete a tree" is "you can't", because trees aren't real.

    @mat @julian for something that exists outside your authority, the only thing you can do is refuse to acknowledge it. i can't delete stuff from other people, and other people can't remove stuff from my thread. if they delete something and i don't remove it, then i have a broken link. if they don't delete something and i remove it, then you can't access it unless you discover it some other way. you can navigate from the offending post to the thread, but the thread will not show the offending post

  • @mat @julian if the redaction is coming from the author, they can send a Delete to anywhere they expect to have stored a copy.

    if the redaction is coming from the aggregator, they can send a Remove to anywhere relevant.

    but these are always going to be best-effort, because of 2 main reasons:

    - you don't have a way to track everyone who has a copy.
    - your peers might not agree with what "badly" means.

    generally, the answer to "how do i delete a tree" is "you can't", because trees aren't real.

    @trwnh @julian Yes everything will be best effort. In this situation it's valuable to send a message "please hide the tree under this post", using whatever vocabulary. When it's working, peers will hide posts that the original author never even saw. Perhaps some people will still see parts of the tree, but the fewer the better. "You can't do it perfectly" is importantly different from "you can't".

    The point is, the current situation is ambiguous on a technical level. I send a delete message, but there's no way for a receiver to know my intent: did I want just that post deleted, or the entire tree?

    I absolutely can enforce that all my peers agree on what "badly" means, by defederating from servers that disagree. The predictable problem here is that when I start doing that, everyone's gonna end up in a fight about what the spec means.

    I don't really mind whether the spec says instances SHOULD or MAY hide the reply tree, or if it adds a field to specify one or the other, but it should be explicit. There's a real need here, but if the answer is MAY, then the need should be addressed some other way, such as reply control.

  • @trwnh @julian Yes everything will be best effort. In this situation it's valuable to send a message "please hide the tree under this post", using whatever vocabulary. When it's working, peers will hide posts that the original author never even saw. Perhaps some people will still see parts of the tree, but the fewer the better. "You can't do it perfectly" is importantly different from "you can't".

    The point is, the current situation is ambiguous on a technical level. I send a delete message, but there's no way for a receiver to know my intent: did I want just that post deleted, or the entire tree?

    I absolutely can enforce that all my peers agree on what "badly" means, by defederating from servers that disagree. The predictable problem here is that when I start doing that, everyone's gonna end up in a fight about what the spec means.

    I don't really mind whether the spec says instances SHOULD or MAY hide the reply tree, or if it adds a field to specify one or the other, but it should be explicit. There's a real need here, but if the answer is MAY, then the need should be addressed some other way, such as reply control.

    @mat @julian if the intent is "please hide the tree under this post", then Remove(object=[n posts],target=thread) is the most straightforward way to say that in a single statement: "removed n posts from this thread"

    this is something that isn't currently widely supported, but it should be. the main challenge is that not everyone understands Remove, and not everyone is equipped to handle batches. it can be overcome, but also is a more general issue.

  • @mat @julian if the intent is "please hide the tree under this post", then Remove(object=[n posts],target=thread) is the most straightforward way to say that in a single statement: "removed n posts from this thread"

    this is something that isn't currently widely supported, but it should be. the main challenge is that not everyone understands Remove, and not everyone is equipped to handle batches. it can be overcome, but also is a more general issue.

    @mat @julian i think that "defederate everyone who disagrees" will likely result in isolated clusters of each software only federating with other instances of the same software. maybe friendica and misskey can reach some limited consensus among themselves, but are friendica and misskey admins prepared to defederate every mastodon/pixelfed/pleroma/etc server over this?

  • @mat @julian i think that "defederate everyone who disagrees" will likely result in isolated clusters of each software only federating with other instances of the same software. maybe friendica and misskey can reach some limited consensus among themselves, but are friendica and misskey admins prepared to defederate every mastodon/pixelfed/pleroma/etc server over this?

    @mat @julian one of my... "favorite"... examples of this kind of breakdown is that there is no specified way to remove a follower. if you accept someone's follow, then how do you revert? do you Undo Accept, do you Reject Follow, do you Remove from followers? even when two peers agree on a method (say Reject Follow at any point), they might still fail to agree for other reasons. one nasty bug between misskey and pleroma is that misskey generates ids for Follows that pleroma considers invalid.

  • @mat @julian if the intent is "please hide the tree under this post", then Remove(object=[n posts],target=thread) is the most straightforward way to say that in a single statement: "removed n posts from this thread"

    this is something that isn't currently widely supported, but it should be. the main challenge is that not everyone understands Remove, and not everyone is equipped to handle batches. it can be overcome, but also is a more general issue.

    trwnh@mastodon.social said in Deleting a post vs deleting an entire comment tree:
    > Remove(object=[n posts],target=thread)

    That would indeed be the most explicit, but that isn't needed from threadiverse because that information is already contained when you set object to the context itself.

    It's even resolvable! So there's no need to send your own array of items that might be out of date by the time it is delivered.

    Hence why I advocate for Remove(Context)

  • @julian what does Remove(Context) mean here?

  • @julian what does Remove(Context) mean here?

    trwnh@mastodon.social it signals that the actor is removing the context from the targeted audience.

    The audience can optionally announce it, and receivers synchronizing with that audience (per 1b12) should follow suit and remove the context as well.

  • @julian like removing a whole thread from the forum? Remove(object=thread, target=forum)? this seems like something altogether different than removing posts from a thread.

    removing threads from a forum is possible but if the thread is owned by the forum then the forum can also delete them.

    the part that differs between impls is whether Delete(thing that is a context) should do anything to objects where context = the Delete.object, right? i think it makes the most sense to just orphan them.

  • @julian like removing a whole thread from the forum? Remove(object=thread, target=forum)? this seems like something altogether different than removing posts from a thread.

    removing threads from a forum is possible but if the thread is owned by the forum then the forum can also delete them.

    the part that differs between impls is whether Delete(thing that is a context) should do anything to objects where context = the Delete.object, right? i think it makes the most sense to just orphan them.

    trwnh@mastodon.social specifically however, is that you're not deleting the context. Just removing it.

    NodeBB has the concept of a context not belonging to an audience (the "uncategorized" pseudo category.) in those specific situations, contexts would be removed from the audience, not deleted.

    Lemmy and Piefed don't have these concepts, so they simply delete them. So therein lies some of the confusion I believe.

  • @julian the confusing thing to me, though, is that both Delete and Remove already don't imply anything about posts in the thread if the thread is deleted/removed from the forum.

    by default, if you Delete a thread, the forum might still have a broken link to the now-deleted thread, and the posts also have broken links to the thread.

    by default, if you Remove a thread from the forum, the posts still exist within the thread.

  • @julian the confusing thing to me, though, is that both Delete and Remove already don't imply anything about posts in the thread if the thread is deleted/removed from the forum.

    by default, if you Delete a thread, the forum might still have a broken link to the now-deleted thread, and the posts also have broken links to the thread.

    by default, if you Remove a thread from the forum, the posts still exist within the thread.

    @julian if the intent is to signal what happens when nodebb moves a thread to "uncategorized", then i think the simplest thing is for nodebb to treat "uncategorized" as a forum in itself, still. you already assign them an id of -1, so you are in effect treating the "uncategorized" category as a category still.

  • @julian if the intent is to signal what happens when nodebb moves a thread to "uncategorized", then i think the simplest thing is for nodebb to treat "uncategorized" as a forum in itself, still. you already assign them an id of -1, so you are in effect treating the "uncategorized" category as a category still.

    @julian i'd say the confusion is primarily that we've shifted topic around several different things and i'm still not sure which is the intended topic of the discussion :x

    - deleting posts that are in a thread
    - removing posts from a thread
    - implications for downstream posts in a thread when some ancestor in the reply chain is deleted/removed
    - deleting a thread that is in a forum
    - removing a thread from a forum
    - moving a thread to the "uncategorized" forum
    - ...?


Gli ultimi otto messaggi ricevuti dalla Federazione
  • @reiver i think the disjunction between Object and Link was actually unnecessary. https://github.com/w3c/activitystreams/issues/666

    i also think there's too much emphasis on types when there really shouldn't be -- it's the *properties* that you end up using almost all of the time. pretty much the only types that actually matter are the Activity types (because you can't infer those).

    read more

  • @haitchfive

    I don't think it was me, but — it seems interesting.

    https://github.com/ha1tch/quertfy

    .

    read more

  • @reiver Did you and I discuss queryfy a while ago, or was it one of my other projects?

    Just wondering whether I owe you a heads up since queryfy has been bumped up to v0.3.0

    read more

  • With ActivityPub / ActivityStreams...

    To me, it feels like there should have been something that is a common parent of both 'Object' and 'Link'.

    That just had the "name", "nameMap", and "preview" fields (along with "id" and "type, of course) — since that is what 'Object' and 'Link' share in common.

    I'll just call this common parent: 'Entity'.

    ...

    It could have even been an opportunity to talk about how to handle unknown types.

    read more

  • @soapdog@toot.cafe hmm... just thinking aloud here.

    You posit in another post that the network effects inflate exponentially:

    > Push models are resource hogs that approach exponential growth in a large network like the fediverse

    That's not true. If you post a message then it sends a copy to each follower. That's linear growth. If you collapse recipients via shared inboxes you can reduce that further.

    If you're referring to the torrent of requests that happen if your post is shared (the "thundering herd" problem) then that's actually a PULL happening from those requesting instances!

    Secondly, in a pull model of AP, you would need to continually poll servers of all your followers so as to approach a real-time effect. You'd be polling servers over and over again, and many of them would have nothing new, with so much wasted traffic.

    If your expectations include semi real-time updates, the push model is much more performant, in my humble opinion.

    read more

  • @evan @mariusor @silverpill i think we probably need to revisit the user story of creating multiple objects at once, or more accurately, the user story of minting and binding multiple identifiers at once.

    read more

  • read more

  • @evan @mariusor @silverpill re: ids though the RDF ecosystem (and jsonld) doesn't use "null", it uses blank node identifiers (those prefixed with _: are special cased by the prefix expansion algorithm). this can allow for "transient" activities or "anonymous" objects (and the graph data model auto assigns _:b1, _:b2 and so on when "id" is missing; the canonicalization algorithm assigns _:c14n0 and _:c14n1 and so on)

    this is maybe not the best way to create replies collections though...

    read more
Post suggeriti
  • 0 Votes
    3 Posts
    21 Views
    セキュリティアップデート: Hollo 0.6.19 リリース FedifyのHTMLパースコードにおけるセキュリティ脆弱性に対応したHollo 0.6.19をリリースしました。 この脆弱性 (CVE-2025-68475) は ReDoS (正規表現によるサービス拒否) の問題であり、攻撃者がフェデレーション操作中に特別に細工されたHTMLレスポンスを送信することで、サービス停止を引き起こす可能性があります。悪意のあるペイロードは小さい (約170バイト) ですが、Node.jsのイベントループを長時間ブロックする可能性があります。 すべてのHollo運営者の皆様には、直ちにバージョン 0.6.19 へのアップグレードを強くお勧めします。 項目 詳細 CVE CVE-2025-68475 深刻度 高 (CVSS 7.5) 対応 Hollo 0.6.19 にアップグレード #Hollo #セキュリティ #fediverse #ActivityPub
  • 0 Votes
    2 Posts
    24 Views
    @dansup I can’t wait
  • 0 Votes
    6 Posts
    33 Views
    Honestly? Neither am I. This post is mostly a trial balloon to see what people think about the abstract high level idea of potentially talking cross-protocol with BlueSky users.
  • 0 Votes
    1 Posts
    16 Views
    Apologies in advance if I misrepresented anybody or missed any crucial bits of information. Jesse Karmani (jesseplusplus@mastodon.social), Ted Thibodeau Jr. (tallted@mastodon.social, and Julian Lam (julian@activitypub.space) in attendance Julian provided an update on adoption of FEP 7888 Both Piefed and Lemmy have adopted 7888, and will begin publishing resolvable context collections in their next release Jesse opened a PR to Mastodon, which received preliminary approval from Gargron@mastodon.social (ed. it was later merged, rolled back, updated, a new PR opened, which was then merged) This PR is the first of two planned pull requests. The first generates the outgoing context (the same as what Lemmy/Piefed have done recently) The seconds handles incoming contexts and backfills Jesse was asked whether it would conflict with existing reply-tree crawling methods, but the two are complementary. She expects additional discussion before the PR is opened. Julian noted that it would be helpful if statistics/analytics were gathered by the Mastodon team to see how conversation contexts and backfill works at scale; admits that existing implementations and testing has been small scale and may not reflect real-world usage. Julian noted that Lemmy's implementation (nutomic@lemmy.ml) does not paginate their resolvable context implementation. All objects are listed in one OrderedCollection Jesse noted that she followed Mastodon's pagination convention for collections. Context inheritance Julian asked for opinions on whether contexts were inherited in existing implementations. Notes that NodeBB inherits parent context, but checks further up the known parent chain for further contexts Julian admits that not everybody can and should do this, is also not sure anymore whether NodeBB actually does this. Julian notes the ideal implementation would be every object referencing their immediate parent, which would lead to the entire collection referring to the same context collection. Jesse: Decodon inherits immediate parent context only Ted: notes that this is a reinvention of inReplyTo Julian and Jesse note that there are marked differences between crawling the reply chain. A short discussion about how netnews and usenet handled reply chains was had. Julian notes that Lemmy will not inherit context. Every object will point back to its own server's context collection. This was a conscious decision by Nutomic as each instance is meant to consider its own representation of remote content as the canonical representation ActivityPub.Space Julian made a short shout-out to a new site called ActivityPub.Space, meant to be a hub for AP development discussions ("A federated space for ActivityPub discussions so that they don’t just get lost in ephemeral replies") A short double-back to NNTP and how they approach "eventual consistency" Ted: “Cloud of NNTP servers are all hosts of articles and replies.” Strictly speaking it’s not a reply tree as replies can be inReplyTo multiple parents