FEP-7888: Demystifying the context property

i’d like feedback from @Claire @macgirvin @nutomic @grishka in particular, as we’ve had prior discussions that intersected with this FEP:

  • @Claire @macgirvin there is the use of context to represent a “conversation”, which iirc is largely compatible with what Streams does and would be a reasonable extension to how Mastodon processes threads. strategically, i think it also makes sense to apply the “approval” workflow of FEP-5624 to contexts instead of direct replies; however, there is room for both “reply approval” and “context approval”, although there is still the issue that any approved reply can be a trojan horse for further replies you may wish to avoid but cannot, due to having no authority.
id: example.com/conversations/1
attributedTo: example.com/some-authority
type: Collection
orderedItems:
  - example.com/posts/1
  - example.com/posts/2
  - example.com/posts/3

id: example.com/posts/1
type: Note
context: example.com/conversations/1
content: "hello world"

id: example.com/posts/2
type: Note
context: example.com/conversations/1
content: "hi"
inReplyTo: example.com/posts/1

id: example.com/posts/3
type: Note
context: example.com/conversations/1
content: "hello to you too!"
inReplyTo: example.com/posts/1
  • @Claire @grishka there is the use of context to represent a “wall” as well, which i think is compatible with the intention behind FEP-400e, just that it doesn’t use target which is invalid on Object and only defined for Activity. this usage is relevant to “groups” as implemented by Smithereen and by the Mastodon PR.
id: example.com/groups/1
inbox: ...
followers: ...
audience: Public

id: example.com/groups/1/wall
attributedTo: example.com/groups/1
audience: Public
type: OrderedCollection # signals reverse-chronological
orderedItems:
  - example.com/posts/140
  - example.com/posts/139
  - # can either contain more contexts representing conversations,
  - # or can contain the objects directly if a flat structure is desired

id: example.com/posts/139
type: Note
context: example.com/groups/1/wall
content: "Hello world"

id: example.com/posts/140
type: Note
context: example.com/groups/1/wall
content: "Greetings, everyone"
  • @nutomic there is the use of context to represent a “forum”. i’m not sure how compatible or disruptive this would be for Lemmy, but with regards to FEP-1b12 it does recommend a different distribution mechanism in Add instead of Announce. as far as context might be applied to Lemmy, you could use it for Lemmy’s equivalent of a subreddit. if i’ve read the fep right, then this might be what you currently use audience for? whereas audience would be best used to indicate who can see the object rather than which lemmy community it’s in. a lemmy community would be best thought of as a Collection that is also an actor that can be followed. so maybe like so:
id: lemmy.ml/c/policypeanuts
preferredUsername: policypeanuts
audience: Public
attributedTo: # can update and delete the community
  - lemmy.ml  # the instance actor 
  - example.com/some-external-mod # optional
inbox: ...
followers: ...
type:
  - # some primary type, like Application or Group (or both?)
  - OrderedCollection
orderedItems:
  - lemmy.ml/post/840974
  - lemmy.ml/post/838721
  - # more posts...

id: https://lemmy.ml/post/840974
name: "RIC is not enough"
attributedTo: lemmy.ml/u/roastpotatothief
context: lemmy.ml/c/policypeanuts
audience:
  - Public
  - # the community
  - # the community's followers
replies: ...
3 Likes