Conversation
|
This is very cool, thanks for publishing it. My first thought is - could this be a FASP capability so that you could have shared pack servers? Or at least a protocol for discovering the packs, analagous to |
|
Some of these are discussion points, some are questions. Where they are questions that can be answered by amending the FEP for clarity please do that, there's no need to answer separately here. This can be used as a shared block listA collection could just as easily be used for blocking as following. For example, consider a collection called "AI enthusiasts". Or "Prominent (Israeli|Palestinian) Journalists" (delete as applicable). Whether to use that as a starter pack or a block list is a decision the recipient makes, not the curator. End-run around requiring approvalsIn the description of
What prevents someone from using this to create a shared blocklist where the A mechanism to allow users to share personal block lists of accounts that are harassing them has been asked for, particularly by BIPOC Fediverse users, for years. Given that, I don't think the arbitrary limit of 150 entries makes sense either. FeaturedCollection"Representation of Featured Collections"When describing the properties, please be explicit about the type of those properties, and link to the property definition. For example, is No language designationThere's no property to denote the primary language of the collection (in particular, whatever language the Are
|
|
I don't like that the only piece of identifying information that the |
The "... all actors that are already part of the collection" text -- does that include the actor that was just added? If not, it probably should. Then an actor could have an automatically maintained synthetic collection that is "Collections I am a member of". |
|
Is an actor in a collection notified if some of the collection properties change? The FEP says they're notified if the members of the collection change (a What if the |
|
What should a server do if it receives a featured collection where the value of the |
|
Hi, creator of FediRoster and ActivityPub programmer for Fedidevs here. I was one of the people who received an invitation to provide feedback on an earlier internal draft of this FEP, and my concerns have more or less all been incorporated into this proposal already. Here are some general thoughts: FEPs describing an ActivityPub schema like this have a purpose of defining syntax and semantics, with the latter shaping the former. The fundamental challenge is to define types and processes that are generally applicable and useful for services other than Mastodon too, i.e. not to unintentionally enshrine specific presentation assumptions, but also not to muddy the purpose so much that interoperability becomes fruitless. The promises I see enshrined in this current draft are:
¹ The current draft does not strictly fulfill verifiable ownership. As mentioned in my last comments on the internal draft, my recommendation would be to point to FEP-fe34 for verification, which tl;dr would mean that featured collections attributed to some actor would need to either be hosted on the same origin as that actor or be cryptographically signed by that actor. If neither of those are true, reject the collection as invalid. Now, Mastodon's vision for their own implementation of “packs” (whatever they end up being called) may be more specific than that. From my understanding, Mastodon assumes that these collections will generally be fairly small, be curated by a single person, not be easily transferable (in the sense of ownership) between accounts, and be publicly hosted on their profile as a follow recommendation. It might even be – and to be clear, I'm entirely spitballing – that Mastodon's upper limit for the size of a pack could end up lower for packs created locally vs. packs received from other servers. And if a Mastodon account gets deleted, all its packs vanish with it. Other participating platforms could set themselves apart by offering more sophisticated features, such as collaborative curation, import/export, delegation and transfer of ownership, or interesting branding for the image assets. All that is power user stuff that's likely more complicated than Mastodon will want to accommodate, and it is the very short version of my vision for Fedidevs to keep existing. 🙂 Another related project that could adopt this FEP is Mastodon Listen, a German website that maintains follow recommendation lists based on specific Wikidata queries instead of manual curation. The main aspect that this FEP remains deliberately brief on is how these collections will be discovered and shared. It specifies the possibility to list them on an actor's profile, which I have pushed to make optional, as it is now, instead of mandatory. So currently the FEP permits the existence of “unlisted” featured collections that are, in principle, accessible directly via their URL. (I'll note that this was also one of the first requests mentioned by others in yesterday's Fediforum session about this feature.) I'm sure we could list many ways to share packs besides pinning them to the profile, such as attaching them to timeline posts or bundling them with invite codes, and my understanding is that the Mastodon team is considering all these options. They could be described here if desired, perhaps in a later revision of the FEP, or in a different FEP altogether. I happen to think that servers should give users a way to load a featured collection directly from its URI, like Mastodon already allows for most other objects it can handle, but I'm not dead-set on making that a MUST in the spec, I just think it's a generally sensible idea to allow the sharing of non-public featured collections between parties on different servers. To summarize my stance, I think the current draft hits a happy place in between being too Mastodon-specific and too generalized to be useful. There are details that would still benefit from clarification, but I don't think the schema will need any fundamental changes. |
We definitely plan to add search capabilities for this in fediscovery. I hope that something very similar to |
|
For my understanding – I mainly know you as a Mastodon client developer, is that the lens you're looking at this through? Because I imagine these objects will look rather different in the Mastodon API than in ActivityPub. See also FEP-044f vs. the Mastodon quote post API for comparison.
By using the
In practical terms, implementations need some sort of limit, or you could crash two servers at once by sending one a list of 1000000 accounts to fetch from the other. I don't think there is a universal answer for what that limit should be, although as someone with fond memories of Academics on Mastodon, I definitely understand the use case for follow recommendation lists with a few hundred entries.
There's no need to reproduce the Activity Vocabulary spec in this FEP. The spec already states that Same goes for pagination, this spec builds on established types, there's no point reintroducing them. Good questions on HTML vs. plain text and on multi-language support for name and summary! For Fedidevs, we probably won't need rich text formatting, but I am also interested in the option to include user tags in the description.
This should probably be clarified in the spec, yeah. Since one of the main purposes of the attribution is moderation, I could see a case that it should be unambiguous who to take action on if a collection turns out to be malicious. The wording in the spec “The actor responsible for this collection” is deliberate in the sense that people can collaborate on featured collections all they want (although my understanding is that Mastodon will probably not offer UI affordances for it), and collaborators can of course be listed in the description, but in the end someone will have to stick their neck out and be responsible for the result.
I'm sure this is one of those topics that ActivityPub implementers have litigated ad nauseum, but my first response as an implementer is “oh god no” |
Only to the extent that it makes it easy to spot missing parts of the spec that will cause interoperability and accessibility issues later.
I disagree. I think "Featured" is neutral-to-very-weakly-positive, and the
Given that there's a demonstrated need for shared blocklists I think it's likely the wider developer community will look at this and start thinking about creative ways to use this to implement shared blocklists (https://en.wikipedia.org/wiki/Desire_path). With that I think it's prudent to take some time to view the proposal through that lens and consider the ramifications. Including ways that this proposal might make those safety features easier to implement. An alternative -- for example, rewriting this proposal to restrict
I don't believe that's true. For example, There's also examples in other parts of AP where spec properties are mis-used, causing interoperability issues (most recent example I've had to deal with is custom emojis). That's why I was explicit about asking if So I think it is worth both (a) linking to the relevant properties in every FEP, and (b) cross-checking to ensure the FEP is not changing the semantics of the property.
What's your first response as a potential user of the feature? Those are the people we should be thinking about. |
Thanks for pointing this out. This was indeed an oversight. I tried to copy as much as possible from quote posts, but that FEP included no example for a Changed it to include the full object instead of just the |
|
If I've read the FEP correctly the sequence of work to add a new
Suppose
A few questions about that:
Is that a consideration / concern?
|
|
Suppose I'm @nik@example.com, and I have a collection containing @foo@mastodon.social, @bar@mastodon.social, @baz@mastodon.social. There's a spam wave affecting the Fedi, primarily coming from spam accounts created at @mastodon.social, and the @example.com admins decide to temporarily block mastodon.social. What happens to the three accounts from that domain in my |
|
Because of the verification mechanism an actor is informed when there is a request to add them to a collection (which is not quite the same as actually adding them to the collection, per my other question). They're not informed if they're removed from the collection, I think. Followers are informed, as are the remaining members of the collection. But the account being removed is not informed. Is that a deliberate choice? |
I just want to +1 this. If somebody draws one for the Add activities, showing that it leads to following servers times request to the server that approved being added? I would be very thankful. FEP-8b32 would be how to fix this. Also FEP-markdown allows for mermaid. Use it. |
|
A featured collection appears to be implicitly public. For example, there doesn't appear to be a mechanism to create a featured collection where the membership of the collection is only available to the members of the collection, or only to my followers and the members of the collection, or only to me. To put it another way, there's no mechanism to describe which group the collection is being featured to. Is that a deliberate design decision? If so, please make it explicit in the FEP. There's also no mechanism to express how discoverable the collection is. Is the intent that featured collections are inherently discoverable, and that consenting to membership of a featured collection overrides a user's other discoverability preferences? |
|
What is the type of In the spec it's This suggests that the Assume the sending server does include the entire Is the receiving server supposed to trust this, or is it supposed to fetch the most recent featured collection from the sending server, to present it to the user as part of the obtaining consent flow? |
|
There's no mechanism in Should that be added? That seems necessary as part of providing informed consent. It would also allow servers to provide There's a weak analogy here -- there's no mechanism, when sending a follow request, to explain why you want to follow someone either. I don't think that analogy holds, as a follow is 1:1 interaction, and exposes the followee's content to 1 new account, whereas adding an account to featured collection potentially exposes it to vastly more people. Similarly, when rejecting a |
|
The FEP says:
Does this mean that To put it another way: Suppose @mastodonengineering@mastodon.social creates a Can I, as someone who is interested in Mastodon development, include a reference to this collection in my actor's If the answer to this is "no" then I think this risks several problems.
|
|
Suppose I have a collection that features @foo@example.com, and my server receives a valid Does the server update the collection to reflect this? If yes, is that done "silently" (because the |
Is "This starter pack contains interesting accounts and should be recommended to users" a property of the starter pack you think should be federatable information about the pack? If no, how are users on small servers supposed to find starter packs with accounts they might want to follow? Saying they should search is a bit chicken-and-egg. Also, if the answer is "search" (either locally, or via fedidiscovery, per #1 (comment)), then do starter packs contain enough information to usefully rank the results, in order to meet the goal of "find interesting accounts"? |
|
A pure ActivityStreams implementation of starter packs would be to implement a Group actor. The Group actor's Following collection is essentially a starter pack. This would also open up the possibility of displaying a feed of actors' posts to further improve the decision making process for someone who wanted to follow actors that the Group actor follows. This works with the already existing consent model because many implementations allow an Actor to opt-out of automatically accepting Follow requests. Mastodon also implements opt-in via discoverability http://joinmastodon.org/ns#discoverable. Distinguishing Group actors that are Starter Packs from other types of Group actors may be difficult, but this opens the possibility of a specific software / implementation for ActivityPub that is only focused and scoped around Group actors representing Starter Packs (Following collections) of actors that want to be discovered and accept Follow requests. Software acting in bad faith could be defederated. |
|
Ping @oneiros -- any news? |
Not really. I am still processing the feedback we got here (lots of good ideas/questions btw) and through other channels. And we are working on how we want to all of this to look and work in Mastodon, which in turn could have consequences for federation. Hopefully I can push an update next week. |
There is some confusion as to what is allowed as an `id`. Changing to the stricter interpretation to hopefully keep things simple.
Instead of re-using Mastodon's `featured` collection.
|
Alright. First of all, thanks again for all the feedback and sorry for the long radio silence. I just pushed a few updates, some of which reflect changes in our plans and some of which address feedback:
There were some concerns voiced that the authorization mechanism leads to more messages being exchanged between servers (definitely true!) and that this might overwhelm smaller servers. This was a trade-off made when we designed quote posts. Those have been deployed to production and so far we have not gotten any feedback that servers suffer in any way. I do not believe the proposal here (being very closely modeled after quote posts) should be any worse in this regard. Still, I agree that this is a situation we need to keep monitoring. FEP-8b32 was mentioned as a possible way to reduce the need for some of those requests. I agree this is probably a good idea. I also believe, we could add this to both quote posts and this here in a backwards-compatible way. This makes this doubly interesting to me, but also means we can postpone a final decision here for a while. There were other questions, that I have not addressed yet. To some, I do not have a good answer (yet). But I believe we have enough of a foundation here, to start experimenting with implementing some of these ideas and find out what works, what does not, and what might be missing. |
@oneiros FEP-8b32 was also proposed in mastodon/mastodon#36475. |
There was a problem hiding this comment.
from https://github.com/mastodon/draft-feps/pull/5 there was something about migrating over old discussion points and it looks like that might have ended up not happening, so i'm going to re-review this i guess
summary of points:
- use cases could be more clear/refined. reference to "other uses" goes nowhere... i think an
ActorCollectioncould make sense for addressing "aspects"/"circles"/"privacy lists"/"close friends"/etc? - some "required properties" probably are SHOULD, not MUST -- you can process a collection without them so there's no real reason to hard-require them. you can get by with only
id+orderedItems+attributedToin the minimal case, and thetypearray should include the new class to help signal the purpose of theorderedItems - IRIs should be called out wherever new terms are being defined
- some language could be cleaned up, typos etc
- i'm unsure of why
topicexists
|
|
||
| GoToSocial has pioneered "Interaction Policies" to model a user's preferences for different kinds of interactions. And in [FEP-044f] Mastodon has expanded on this idea with the addition of verifiable "stamps" to prove user's consent. | ||
|
|
||
| This FEP takes those concepts and applies them to a user-curated and federated collection of actors (or any kind of object really) called `FeaturedCollection`. The name was chosen because some platforms already announced they do not plan to use the term "Starter Pack" and to illustrate that other uses are possible. |
There was a problem hiding this comment.
other uses such as...?
calling them "featured collections" implies one specific use, which you call out in the first two sentences of the summary:
- users and/or objects you "would like to recommend to others" ("like to recommend", or simply "recommend"? and recommend how / in what way?)
- find interesting people and content to follow (this is more concrete)
one use i can think of for "collections of actors" in general is to then be able to use those collections for addressing, not simply "featured recommendations". this would behave as a sort of contact list and hook into the status composer, to provide the feature that diaspora* called "aspects", that google+ called "circles", that facebook called "privacy lists", that instagram called "close friends" (limiting you to 1 such collection), and that twitter briefly called "circles". however, this use case ideally needs the ability to make collections private (otherwise, other people could use them for addressing without your permission). in this case, FeaturedCollection seems like the wrong term to use for this variant. i think ActorCollection could work, although it would have problems with items that are as:Hashtag.
|
|
||
| A `FeaturedCollection` MUST have the following properties: | ||
|
|
||
| * `type`: The type of object, MUST be `FeaturedCollection` |
There was a problem hiding this comment.
[type] MUST be
FeaturedCollection
- does this support other term mappings (debatable; you may want to require a certain term definition or context for the sake of non-LD processors)
- does this support multiple types (hint: it really should)
it is possible for these collections to belong to more than one class/set of things. requiring a single type prevents implementing multiple data models for what is fundamentally the same thing.
There was a problem hiding this comment.
Changed wording to "MUST include FeaturedCollection"
|
|
||
| ## Representation of Featured Collections | ||
|
|
||
| Featured collections are represented by a new object type, `FeaturedCollection`. `FeaturedCollection` is a subtype of `OrderedCollection` and inherits all of its properties. |
There was a problem hiding this comment.
FeaturedCollection
what is the IRI for this term? it should be mentioned here, at least in parentheses, and ideally defined in a section of this FEP (and then you can refer to the definition)
so something like:
"a new object type, FeaturedCollection (https://w3id.org/fep/xxxx/#FeaturedCollection)." (could be hash vs slash, could be in the mastodon namespace, could be ActorCollection pending the "other uses" discussion thread above...)
There was a problem hiding this comment.
Added in parentheses.
| * `type`: The type of object, MUST be `FeaturedCollection` | ||
| * `id`: URI that uniquely identifies this object | ||
| * `name`: The name of the collection | ||
| * `summary`: A description of the collection |
There was a problem hiding this comment.
is it really a problem to not have a summary? you can argue name is useful to require (although i would argue it is possible to continue processing even without a name), but summary being a MUST is iffy.
There was a problem hiding this comment.
I really believed it was necessary to have one (if I want to convince others to follow someone, I should maybe give a reason?), but I was recently asked to drop this requirement from Mastodon's code, so there is no need to have this required here anymore. Moved it to the optional section.
| * `summary`: A description of the collection | ||
| * `attributedTo`: The actor responsible for this collection | ||
| * `published`: The date and time at which the object was published | ||
| * `totalItems`: The number of items in this collection |
There was a problem hiding this comment.
likewise for totalItems, this is a SHOULD imo. you don't need to be told this if you can just count them yourself (Array.length or similar)
| * `sensitive`: Set to `true` if either description of the collection or individual items could be seen as being offensive or otherwise problematic | ||
| * `updated`: The date and time at which the object was updated *if* it was updated after initial creation | ||
| * `tag`: This can be used to include a list of `Hashtag` objects that help categorize this collection. If the `summary` includes any (microsyntax) hashtags, their corresponding `Hashtag` objects SHOULD be included here. | ||
| * `icon`: An image that represents the collection. This SHOULD be a square image that can be used in list views and similar alongside the `name`. |
There was a problem hiding this comment.
[icon] SHOULD be a square image
s/SHOULD/MUST. as:icon is defined as specifically being 1:1 square aspect ratio.
There was a problem hiding this comment.
Ah, I did not realize. Thanks, I changed the wording accordingly.
| * `updated`: The date and time at which the object was updated *if* it was updated after initial creation | ||
| * `tag`: This can be used to include a list of `Hashtag` objects that help categorize this collection. If the `summary` includes any (microsyntax) hashtags, their corresponding `Hashtag` objects SHOULD be included here. | ||
| * `icon`: An image that represents the collection. This SHOULD be a square image that can be used in list views and similar alongside the `name`. | ||
| * `image`: A larger image that can be used as a page header or as part of a link preview. Similar considerations apply as with OpenGraph images. |
There was a problem hiding this comment.
Similar considerations apply as with OpenGraph images.
what are these considerations? be more explicit
There was a problem hiding this comment.
We discussed this before (I think in the private repo) and IIRC Julian came up with a couple of links, none of which I was comfortable including here as authoritative sources.
Happy to amend this, but I personally have a hard time coming up with a better wording. Also it might be worth pointing out that Mastodon will not use this in the initial implementation.
There was a problem hiding this comment.
I guess it could be fine to leave it unspecified...
There was a problem hiding this comment.
Yeah, there isn't really anything good to point to. The OpenGraph spec at https://ogp.me/ says nothing of note, the general recommendations you find online (1.91:1 aspect ratio, recommended resolutions) are just something that Facebook originally came up with and that have informally evolved since then. I think “similar to link previews” is more or less the important bit, people can figure it out from there.
There was a problem hiding this comment.
I guess the wording I'd go with then is something like this:
* `icon` (`https://www.w3.org/ns/activitystreams#icon`): An icon that represents the collection. An `icon` can be used in list views alongside the `name`. Activity Streams 2.0 requires that the icon's representation MUST have a 1:1 square aspect ratio and be suitable for display at small sizes. Publishers SHOULD provide at most 1 icon.
* `image` (`https://www.w3.org/ns/activitystreams#image`): An image that can be shown alongside the collection, possibly as a page header or as part of a link preview. Unlike an `icon`, an image's aspect ratio and size are not constrained to be 1:1 or small. Publishers SHOULD provide at most 1 image.I'm realizing there aren't any cardinality assumptions included in the text of the FEP, so it would be a good idea to call those out explicitly too wherever there might be any silent assumptions being made.
| * `icon`: An image that represents the collection. This SHOULD be a square image that can be used in list views and similar alongside the `name`. | ||
| * `image`: A larger image that can be used as a page header or as part of a link preview. Similar considerations apply as with OpenGraph images. | ||
|
|
||
| It is worth emphasizing that both `icon` and `image` are separately optional. Providers of `FeaturedCollection`s may choose to supply both, only one, or neither. Applications displaying `FeaturedCollection`s may also elect to show or omit either or both images, depending on what makes sense in their UI design and the specific situation. This FEP considers these images decorative in nature, meaning they should not be the only source of important information. |
There was a problem hiding this comment.
worth emphasizing
this crosses from "emphasis" to "redundancy" imo. this paragraph could be reworked into something clearer by focusing on not just these two properties, but on the intended processing model itself. for example:
Applications publishing collectionss can omit non-required properties, so applications consuming collections should be prepared to handle some of these properties being missing. For example,
iconandimageare decorative in nature, and may be omitted. Depending on what makes sense in their UI design and the specific situation, consumers may wish to either show default icons or images, or otherwise display collections without these elements.
|
|
||
| This FEP also introduces two new properties that MAY optionally be used in a `FeaturedCollection`: | ||
|
|
||
| * `discoverable`: If present and set to `false` this signals that this collection is not meant to be discovered by search or similar means and MUST NOT be shown to new users during onboarding. |
There was a problem hiding this comment.
discoverable
is this http://joinmastodon.org/ns#discoverable? if so, note that
There was a problem hiding this comment.
I do not think it is, and I updated the draft to reflect this. There are subtle differences, e.g. http://joinmastodon.org/ns#discoverable is meant to be used on an actor and has severe consequences in many different areas of search and discovery. This here is much more narrow and focused. I also suspect the exact meaning might still change a bit.
But I might be thinking too much like a programmer here and not like an ontologist?
There was a problem hiding this comment.
I'd say it's the other way around, actually -- you're thinking too much like an ontologist and not like a programmer :P
This complicates the term definition then, because discoverable on an actor and discoverable on a featured collection might both be used in the same document. I think your two courses of action here are either to say:
- http://joinmastodon.org/ns#discoverable is applicable to multiple types (accounts, posts, featured collections); or
- define a new term that is similar but more specific.
- You may want to ease the burden for non-LD users by using a different shorthand term than
discoverable, to more clearly signal the difference; otherwise, you would have to scope the definition to only a specific part of the document (which can be confusing to expand correctly, since it requires tracking changes to the active context for a given node).
- You may want to ease the burden for non-LD users by using a different shorthand term than
There was a problem hiding this comment.
- http://joinmastodon.org/ns#discoverable is applicable to multiple types (accounts, posts, featured collections); or
OK, you convinced me.
| This FEP also introduces two new properties that MAY optionally be used in a `FeaturedCollection`: | ||
|
|
||
| * `discoverable`: If present and set to `false` this signals that this collection is not meant to be discovered by search or similar means and MUST NOT be shown to new users during onboarding. | ||
| * `topic`: A single `Hashtag` object that represents the main topic or category of this collection. |
There was a problem hiding this comment.
topic: A singleHashtagobject that represents the main topic or category of this collection.
what's the point of this property? how does this differ from as:tag? why is it important to specify a "main" one?
There was a problem hiding this comment.
We will experiment with a single topic per collection in Mastodon's UI. For our purposes this must be a single hashtag and it must be totally unambiguous which one. That is why I do not think it should be buried in tag.
It is totally optional and if it turns out nobody uses or likes this, we might reconsider and remove it.
|
one other thing: with quote stamps there was an alternative option to have a "quotes" collection on the post which would contain whatever is officially acknowledged by the author/owner of the post. this was put aside because mastodon wanted to avoid the need for a "quotes" collection for verifying individual posts/relations. (i would still argue that the presence of a "quotes" collection doesn't mean it has to be public, but that ship has kind of sailed.) in the case of "featured collections", is there a similar concern with having a property on the actor "has been featured in these collections"? it seems like the kind of thing someone might reasonably want to promote -- "i've been added to these lists", basically. |
Also addresses some feedback with clarifications and added the use of `url`.
|
Per #1 (comment) I'm realizing there aren't any explicit mentions of assumed cardinality, so it would probably be a good idea to call out all properties that could have multiple values but are expected to have at most 1 value. |
* Add JSON-LD context file * Update context in example * Update URIs of new vocab to match other Mastodon extensions * Re-use existing `discoverable` term * Remove `featuredObjectType`. It was a very narrow solution to a more general problem that introduced additional problems in implementations, which made it hard to justify.
| "published": "2025-08-14T12:12:12Z", | ||
| "updated": "2025-08-14T13:17:25" | ||
| } | ||
| ``` |
There was a problem hiding this comment.
Featured items in this collection are embedded and have an id property. Are consumers expected to trust these objects, or fetch them by id?
Is id required on FeaturedItem? Can FeaturedItem originate from a different server than FeaturedCollection?
|
|
||
| Very large lists of items do not make much sense from a UX perspective. E.g. not many users will want to blindly follow a couple of hundred of unknown accounts. And forcing remote servers to potentially fetch a lot of unknown actors is a vector for Denial of Service (DOS). That is why fediverse software SHOULD both impose a limit to the number of items that can be added to a featured collection and that they will handle when dealing with remote collections. The proposed maximum of items is 150 but implementations MAY have different limits. | ||
|
|
||
| All properties mentioned are expected to have at most one value unless stated otherwise. |
There was a problem hiding this comment.
This sentence is not very clear. What would it mean for a property to have zero values?
|
|
||
| Similarly, when a `FeaturedItem` is added to a `FeaturedCollection`, this can also be distributed in the form of an `Add` activity. | ||
|
|
||
| `Remove` activities can be sent in case of removal from one of the mentioned collections. |
There was a problem hiding this comment.
Providing examples of these Add and Remove activities would be helpful.
| To do so a new activity type `FeatureRequest` is introduced. It has two mandatory properties: | ||
|
|
||
| * `object`: The actor to be included in the featured collection | ||
| * `instrument`: The featured collection |
There was a problem hiding this comment.
I believe that actor property should also be mandatory (RFC-2119 REQUIRED?), because all activities have this property.
It is not possible to determine who sent an activity if its object is not an actor (the text previously mentioned this possibility).
Related question: can an actor request to include an object that is attributed to another actor?
| "object": "https://other.example.com/users/bob", | ||
| "instrument": "https://fedi.example.com/users/alice/featured/23" | ||
| } | ||
| ``` |
There was a problem hiding this comment.
The actor property is missing in this example.
| "actor": "https://other.example.com/users/bob", | ||
| "object": "https://fedi.example.com/users/alice/featured/23/requests/2", | ||
| } | ||
| ``` |
There was a problem hiding this comment.
The id property is missing in this example.
|
|
||
| In response the actor can either issue an `Accept` or a `Reject` activity. In case of automatic approval, those can be issued immediately. In case of manual approval, a user needs to be notified and asked before the answer can be sent. | ||
|
|
||
| In both cases, `Accept` or `Reject`, the object of the activity is the `FeatureRequest`. In case of an `Accept` the activity MUST also include a `result` property pointing to a `FeatureAuthorization`. |
There was a problem hiding this comment.
| In both cases, `Accept` or `Reject`, the object of the activity is the `FeatureRequest`. In case of an `Accept` the activity MUST also include a `result` property pointing to a `FeatureAuthorization`. | |
| In both cases, `Accept` or `Reject`, the object of the activity is the `FeatureRequest`. In case of an `Accept` the activity MUST also include a `result` property pointing to a `FeatureAuthorization` object. |
| * `type`: The type of object, MUST be `FeatureAuthorization` | ||
| * `id`: URI that uniquely identifies this object | ||
| * `interactingObject`: The featured collection | ||
| * `interactionTarget`: The actor that was featured |
There was a problem hiding this comment.
Shouldn't this object have an attributedTo property? Are consumers expected to identify the actor who issued the authorization based on the value of interactingObject?
| * `type`: The type of object, MUST be `FeatureAuthorization` | ||
| * `id`: URI that uniquely identifies this object | ||
| * `interactingObject`: The featured collection | ||
| * `interactionTarget`: The actor that was featured |
There was a problem hiding this comment.
Is FeatureAuthorization a public object (to: https://www.w3.org/ns/activitystreams#Public)?
| "interactingObject": "https://fedi.example.com/users/alice/featured/23", | ||
| "interactionTarget": "https://other.example.com/users/bob" | ||
| } | ||
| } |
There was a problem hiding this comment.
How to determine if the actor has a permission to revoke the given FeatureAuthorization?
(This is related to the previous question about attributedTo)
This is a first draft of how we could approach federating Starter Packs. Huge parts are closely modeled after our quote posts FEP.
The following are additional remarks I would like to point out, some giving a bit more background and some highlighting areas with open questions.
Prior art
Starter Packs were of course pioneered by Bluesky. So we had a look at that, but there were also some initiatives last year to bring them to the fediverse.
We specifically looked at this issue on Github that includes a great discussion about how to represent Starter Packs in ActivityStreams.
We also looked at Fedidevs, a service that picked up those ideas to offer Starter Packs as a dedicated service outside of existing fediverse software.
Goals
Non-goal (for now)
While this would be nice to have it is surprisingly hard to implement. There are questions around when is a Starter Pack actually finished (imagine someone creates one and then slowly adds users one by one) and when to insert it into feeds if you need to check consent first and so on.
We decided it is not worth tackling this initially, as it has limited value. Entries in a timeline / feed scroll by and are replaced by the latest posts quickly. That means they are easy to overlook and/or forgotten quickly.
It is much more important to us that Starter Packs can be easily found, ideally across servers.
Naming
As explained in the draft I did not name the new object type "StarterPack" because a) others have already announced they want to use a different term and b) because I envision other use cases.
Representation of Starter Packs
As I said, we looked at this existing proposal which includes many good and important ideas.
But we still decided to make some changes:
OrderedCollection. Some people spend a lot of time curating these things and the order of entries might be important to them.attributedTois mandatory.iconand animagesensitive(in case that for example the description, account descriptions or images might be problematic)Limiting the number of entries
Arbitrary numbers of items would introduce a vector for Denial of Service. And also from a UX perspective it makes sense to limit the number of items.
Bluesky has a limit of 150 entries. I just copied that for now, but I personally believe we might get away with a much lower number. I can totally see that for example people in larger communities or organizations would love to curate lists of all members. But from a new user's perspective I think the larger the number of entries the lower the likelihood that they would hit a "Follow All" button.
I would love to read what thoughts others have on this question.
Placement in the "featured collection"
Mastodon already has a per actor "featured collection", which currently includes individual posts that are being featured.
We wanted to reuse and build on that.
But this leads to the awkward situation that we want to put
FeaturedCollections into the "featured collection" which is at least a tiny bit weird 😬Modeling consent
I mentioned this several times already: When it comes to signaling, validating and retracting consent I tried to copy as much from our quote posts FEP as possible. Months of consultation and discussion went into this. Also we recently enabled our implementation on our servers and are making our first real-world experiences with it.
It just made no sense to re-invent the wheel here, especially not in a way that is significantly different.
I tried to address the fact that (simple) implementations need not be very complex, but of course it is never trivial to implement.