# Federated Reputation

**URL:** https://meta.discourse.org/t/federated-reputation/203679
**Category:** Feature
**Created:** [September 15, 2021, 8:11pm UTC](https://meta.discourse.org/t/federated-reputation/203679 "2021-09-15T20:11:14Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [September 15, 2021, 8:11pm UTC](https://meta.discourse.org/t/federated-reputation/203679/1 "2021-09-15T20:11:15Z")

</div>

On the SocialHub, @keunes proposed to [federate reputation](https://socialhub.activitypub.rocks/t/federating-discourse/1910) in the sense that **if Discourse supported ActivityPub** , people could use their existing reputation on one or more Discourse instances across the Internet to bypass the initial trust levels 0 and 1 and go straight to 2 (member) level when joining a new board.

> I just created my first post on this Discourse instance, and because I’m new here I can only post two links. Understandable, but rather annoying. So I was thinking: isn’t there a way to fediversify Discourse, particularly my Reputation?
> 
> E.g. in the AntennaPod forum we could set SocialHub as a ‘trusted trust source’ and allow users to benefit from their trust levels gained elsewhere.

Indeed, when you’re a known netizen with a good reputation, the limitations of lower trust levels might come as a burden when joining new forums. OTOH if you gain a bad reputation, this could also prevent you from gaining privileges on new boards (e.g., play as a negative weight on your trust level promotion, although this is easily circumvented by using a new identity).

So the idea is really to facilitate sharing reputation of good behavior across Discourse instances. As a global network of Discourse instances is already existing, with a number of users here on Meta who also dwell in multiple other instances, it becomes increasingly desirable to unify identities across instances for regular users, so that conversations become more fluid. ActivityPub is one way of doing it, and we’re currently exploring ways to create a plugin to add ActivityPub support for Discourse, which could serve as a basis for other federated features, including this one.

### Parallel History

@erlend_sh reminded me of this drive-by proposal from three years ago:

> [@Revitalizing the Discourse Hub](https://meta.discourse.org/t/revitalizing-the-discourse-hub/15029/34):
>
> Thinking of the trust levels system for users, I would extrapolate to identify friendly communities, maybe based on the overlap of users and cross-linking between them. I can’t find an example of bad-behaving communities (and please, don’t tell me any) but I guess a hub would be able to correlate like-minded communities…
> 
> In some future, when one email would enable users to connect to many Discourse instances, the hub might also become a way to keep a public user profile that a newly joined community would tap into to create the user’s profile without bothering her. In some cases though, users might want to keep their accounts and participation separate, as in work/home dichotomy, and this should also be supported. But maybe this goes way beyond what a simple hub would mean.

### Summary of interesting features proposed

#### Opt-in

> [@TheBestPessimist](#):
>
> First thoughts crossing my mind regarding the “reputation migration”:
> 
> - this should be opt-in per forum
> - this should be opt-in per user (see 1)

#### Network of Trust

> [@TheBestPessimist](#):
>
> - there should be an editable whitelist (maybe provided by discourse itself) of allowed forums
> - there should be an editable blacklist of allowed forums

> [@erlend\_sh](#):
>
> A user who has attained TL 2 on Meta should get bumped straight to TL1 when joining any forum that has listed [meta.discourse.org](http://meta.discourse.org) as a Trusted Forum.

> [@Simon\_Manning](#):
>
> If the network of trust were introduced, I would like to see support for a Trusted Trust List as well as Trusted Forum. I.e. a Discourse instance might publish its Trusted Forum list and I could choose to trust [meta.discourse.org/trusted-forums.json](http://meta.discourse.org/trusted-forums.json) on my instance, for example. (Non-recursive, probably)

#### Discoverability

In [post #4](https://meta.discourse.org/t/federated-reputation/203679/4), @erlend_sh proposed to add “communities in common” with other users, and eventually port badges across communities to make it easier for members to discover new communities.

---

<div class="post-metadata">

### Author: ![TheBestPessimist](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thebestpessimist/32/247704_2.png) [@TheBestPessimist](https://meta.discourse.org/u/TheBestPessimist)
#### Post date: [September 16, 2021, 5:26am UTC](https://meta.discourse.org/t/federated-reputation/203679/2 "2021-09-16T05:26:54Z")

</div>

First thoughts crossing my mind regarding the “reputation migration”:

- this should be opt-in per forum
- this should be opt-in per user (see 1)
- there should be an editable whitelist (maybe provided by discourse itself) of allowed forums
- there should be an editable blacklist of allowed forums

1: this raises the question if we want to nag the user about it in the first 5 minutes of using the forum

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [September 16, 2021, 5:53am UTC](https://meta.discourse.org/t/federated-reputation/203679/3 "2021-09-16T05:53:10Z")

</div>

> [@hellekin](#):
>
> people could use their existing reputation on one or more Discourse instances across the Internet to bypass the initial trust levels 0 and 1 and go straight to 2 (member) level when joining a new board.

I thought the Trust Levels were more about learning the rules and mores of the individual forums. Allowing people to skip the two week/15 visit ‘acclimatising’ phase (default) based on other forums rules may not work out so well.

I wouldn’t mind an extra ‘associate member’ trust level that could be applied to forums/users registered to a central directory-hub. Something that would allow me read access to lots of forums, and maybe the option to vote in polls, or Like things - while still needing to sign up to a particular forum for full membership to post and progress in Trust Level, etc.

---

<div class="post-metadata">

### Author: ![erlend\_sh](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/erlend_sh/32/119475_2.png) [@erlend\_sh](https://meta.discourse.org/u/erlend_sh)
#### Post date: [September 16, 2021, 10:47am UTC](https://meta.discourse.org/t/federated-reputation/203679/4 "2021-09-16T10:47:01Z")

</div>

I’m running a handful of small Discord instances and I’m dreading the day when I’ll have to start messing with moderation bots to prevent spam and other malicious behavior.

Most of Discord’s moderation shortcomings could be solved by Trust Levels, which are still hugely underutilized in community software.

Networked (federated) trust levels shared across multiple inter-operating instances enables two important features:

### Network of Trust

A user who has attained TL 2 on Meta should get bumped straight to TL1 when joining any forum that has listed [meta.discourse.org](http://meta.discourse.org) as a Trusted Forum. Essentially the next step after [Let experienced users skip "new to Discourse" features](https://meta.discourse.org/t/let-experienced-users-skip-new-to-discourse-features/63137).

It’s a very straight forward [PageRank](https://en.wikipedia.org/wiki/PageRank)-like system.

### Discoverability

Discord has this handy feature that lets you see which chat communities (servers) you and another user have in common:

 ![image](https://global.discourse-cdn.com/meta/original/3X/f/7/f7c3c97754406238700b38e6122607c0b00a2df6.jpeg)

This reminded me of what I still think is the most appealing use case for our elusive [Discourse Hub](https://meta.discourse.org/t/revitalizing-the-discourse-hub/15029):

> [@Revitalizing the Discourse Hub](https://meta.discourse.org/t/revitalizing-the-discourse-hub/15029/4):
>
> I see the most value in accumulated stats, more akin to StackExchange. Here’s the coolest use case scenario for me:
> 
> - Fellow user checks out my profile on [jmonkeyengine.org](http://jmonkeyengine.org)
> - Because I’ve opted in to Discourse Hub, this user can see that I’ve got a “Global Account” of some sort.
> - Through this global account, this user can know at a glance what other Discourse communities I’m part of, and where I’ve been the most active, like [meta.discourse.org](http://meta.discourse.org) for instance.
> 
> Heck, this could even grow into an open standard for forums. Let me show people all the Vanilla and VBulletin forums they can find me on as well!

A similar form of carrying over badges from other instances would also be very useful. When someone has received their first ‘[Helpful](https://meta.discourse.org/t/a-new-trust-level-the-helpful-member/56894)’ badge (no such badge exists by default yet), every additional instance it is shown on acts as a reminder and affirmation to this person that they are the type of community member that helps others.

---

<div class="post-metadata">

### Author: ![Simon\_Manning](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon_manning/32/198596_2.png) [@Simon\_Manning](https://meta.discourse.org/u/Simon_Manning)
#### Post date: [September 16, 2021, 11:43am UTC](https://meta.discourse.org/t/federated-reputation/203679/5 "2021-09-16T11:43:38Z")

</div>

> [@erlend\_sh](#):
>
> A user who has attained TL 2 on Meta should get bumped straight to TL1 when joining any forum that has listed [meta.discourse.org](http://meta.discourse.org) as a Trusted Forum.

If the network of trust were introduced, I would like to see support for a Trusted Trust List as well as Trusted Forum. I.e. a Discourse instance might publish its Trusted Forum list and I could choose to trust [meta.discourse.org/trusted-forums.json](http://meta.discourse.org/trusted-forums.json) on my instance, for example. (Non-recursive, probably)

---

<div class="post-metadata">

### Author: ![osioke](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osioke/32/238946_2.png) [@osioke](https://meta.discourse.org/u/osioke)
#### Post date: [September 20, 2021, 11:03am UTC](https://meta.discourse.org/t/federated-reputation/203679/6 "2021-09-20T11:03:59Z")

</div>

> [@Simon\_Manning](#):
>
> publish its Trusted Forum list

How do you see this working? Anonymously with no user data or … ?

---

<div class="post-metadata">

### Author: ![Simon\_Manning](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon_manning/32/198596_2.png) [@Simon\_Manning](https://meta.discourse.org/u/Simon_Manning)
#### Post date: [September 20, 2021, 5:31pm UTC](https://meta.discourse.org/t/federated-reputation/203679/7 "2021-09-20T17:31:55Z")

</div>

I’m not sure what user data would be relevant to the trusted forum list specifically, I would envisage Trusted Forums being something that the instance admin choose and, if the admin opt to publish it, requesting [meta.discourse.org/trusted-forums.json](http://meta.discourse.org/trusted-forums.json) (or whatever the URL might be) would produce something along the lines of this:

```plaintext
{
  "trustedForums": [
    "meta.discourse.org",
    "bestforum.com",
    "marvellousdiscussions.org",
    ...
  ]
}

```

Then as an admin of an instance, I could enter “[meta.discourse.org](http://meta.discourse.org)” into Trusted Forums to only trust that instance (not the instances it trusts) or I could instead enter it into Trusted Trust List (with a better name..) to trust that instance and the instances that it trusts.

The json probably wouldn’t actually contain a reference to its own instance, that’s really just to illustrate that trusting the list from another instance should imply trust of that instance as well.

* * *

Since you mention user data, I assume you’re referring to how I see the trust itself working. That’s beyond the scope of what I was commenting on but given @erlend_sh’s idea of bumping a user to TL1, I guess the instance would have to share something like a sha256 hash of the email address with the trusted forums at the point of sign-up (or more likely in a sidekiq job after sign-up)

Though this avoids directly sharing user data, I can immediately see one flaw in that using the json above as an example. If a user has an account on `bestforum.com` and then signs up to `meta.discourse.org`, it would reveal to the first that the user has created an account on the second and could reveal to the second that the user already has an account on the first, which may be undesirable.

I’m not really sure how to deal with that. Having the user opt-in at sign-up can’t really be relied on because an instance which wants to abuse that mechanism could just remove it.

Possibly the “Discourse Hub” could mostly solve that problem by way of it only keeping (and only ever being given) hashed email addresses with associated instances and trust levels. An instance would query the hub with a hashed email address and perhaps use a score-based system with the instances where that hash has been seen and the trust levels attained, so an instance would never see what other instances are involved, just the resulting score.

Though with an obvious operator of such a hub being Civilized Discourse Construction Kit, Inc., this arrangement also still has an important question: do I, as a user of meta plus other instances, want CDCK to be able to see what other instances I’m using? (As it would be possible for an instance+hub operator to connect their own instance users with entries in the hub)

I guess to summarise, how the trust might work is too complicated for this addled brain. 🙂

---

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [September 20, 2021, 7:25pm UTC](https://meta.discourse.org/t/federated-reputation/203679/8 "2021-09-20T19:25:48Z")

</div>

Although I find the “trusted forums” approach interesting and useful, I also see a potential security issue, where attackers would target less policed “trusted forums” to gain access to their actual target – where they could not gain access directly. So if we are to implement such a _transitive trust_ mechanism, it should not be easily _traversable_ and should come with a strong retaliation mechanism that would suspend an aggressor across instances: I see this as a hard constraint that would add a fair amount of complexity, and would better be left for a second phase of development.

OTOH it would (seem to) be easier to maintain a _private list of trusted forums_ where the remote reputation of a member on each of these forums would reinforce its status locally. Maybe the concept of _trust levels_ could be extended to instances as well as users? If an instance, say Meta, has a TL3, then people coming from there could have TL2 initially, with a _decay factor_ if the user does not participate ; this adds another layer of complexity, but I am thinking aloud and wanted to sketch some alternative possibilities to trusting whole instances.

I agree on the discretion regarding who is using which instances. It should be taken into account, although publishing to public instances may be equivalent to publishing the fact you’re using them anyway ; this may apply to private boards though.

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [September 21, 2021, 8:15am UTC](https://meta.discourse.org/t/federated-reputation/203679/9 "2021-09-21T08:15:12Z")

</div>

I’m still punting for a user list on a directory level. 🙂

https://DiscourseDiscovery.org -

Anonymous users will see a directory of forums who have registered to be included in the public list (searchable by category or ‘Forum tags’), and also Search keywords across all instances in the directory.

Sign up to create a DiscourseDiscovery user account. New accounts will start at Hub\_Level\_0, and can progress through the remaining Hub\_Levels by completing certain actions and adapted Discobot ‘Forum Training’ covering all the necessary skills you think people will need.

Different Hub\_Levels will allow access to more features across the directory. Eg. Seeing categories not normally visible to anon users, take actions such as Like, or vote in polls (avatar images could be circled with red to denote associate/Hub\_Level members), or get notifications on topic content, etc. Tapping on an avatar would bring up their DiscourseDiscovery Usercard.

Users can then add any ‘full-member’ forum accounts to a concatenated DiscourseDiscovery User Page (with the option to leave out any they want to). Badges can be tallied here, as well as latest activity, etc, etc.

Forums could also have the options in Security to restrict access to certain things (categories, polls, etc) to full members only. They could also choose whether to be included in the public directory, or a more private one based on a user’s Hub\_Levels (or to not be included at all).

Just some ideas. 🙂
