# Welcome

Welcome to the documentation for PMsky! PMsky is a platform that enables *peer moderation* on [Bluesky](http://bsky.social) and the wider [AT Protocol](https://atproto.com).

* Homepage: [pmsky.social](https://pmsky.social)
* Bsky: [@pmsky.social](https://bsky.app/profile/pmsky.social)
* Github: [@pmsky-social](https://github.com/pmsky-social)
* Platform (coming soon): [app.pmsky.social](https://app.pmsky.social)

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-type="content-ref"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Why Peer Moderation?</strong></td><td>Learn about the motivation.</td><td><a href="/pages/O7PeegXjEwCbJU29QUmH">/pages/O7PeegXjEwCbJU29QUmH</a></td><td><a href="/pages/O7PeegXjEwCbJU29QUmH">/pages/O7PeegXjEwCbJU29QUmH</a></td></tr><tr><td><strong>How does it work?</strong></td><td>Learn about the pieces.</td><td><a href="/pages/GjPVPM7XQQ7o5S60PIBG">/pages/GjPVPM7XQQ7o5S60PIBG</a></td><td><a href="/pages/GjPVPM7XQQ7o5S60PIBG">/pages/GjPVPM7XQQ7o5S60PIBG</a></td></tr><tr><td><strong>Who's building this?</strong></td><td>Learn who's behind the curtain.</td><td><a href="/pages/vvaMb27vYIqdQRJHleng">/pages/vvaMb27vYIqdQRJHleng</a></td><td><a href="/pages/vvaMb27vYIqdQRJHleng">/pages/vvaMb27vYIqdQRJHleng</a></td></tr></tbody></table>


# Why Peer Moderation?

Moderation usually is done by privileged moderators, and in most cases this is handled entirely by the platform itself. &#x20;

While this is important for any platform, it can also lead to problems when moderation decisions clash with the company's interests, or when the platform is bought by a billionaire with their own ideas of what constitutes free speech.

Bluesky introduced [composable moderation](https://bsky.social/about/blog/4-13-2023-moderation) to augment their moderation capabilities and allow third parties to participate in the moderation process.  This has flourished, with community-specific labelers like [Blacksky](https://bsky.app/profile/blacksky.app), automated models like [Xblock](https://bsky.app/profile/xblock.aendra.dev), and self-labeling like the [Pronouns labeling system](https://bsky.app/profile/pronouns.adorable.mom).

However, third party moderation also has its own drawbacks.  Early on in Bluesky's journey of composable moderation, @aegis.blue gained prominence as one of the first large third-party labelers.  It didn't take long before one of the people behind this labeler was involved in a personal dispute, and ended up abusing their power over the labeler.&#x20;

Whether moderation is done by the platform itself or third-party labelers, in both cases these decisions are made behind closed doors, by small groups of people. &#x20;

PMsky offers a new option, where moderation can happen based on consensus rather than consolidated opinions.

You can also [read more about Bluesky's approach to moderation](https://docs.bsky.app/blog/blueskys-moderation-architecture).


# How does it work?

There are two main pieces to the initial architecture.

A platform, where users vote on labels that have been applied to users and posts.

Labelers, built independently to leverage those votes to publish labels on Bluesky.

## The Platform

The platform will be a simple interface for users to interact with potential content labels. It will allow anyone with an account on Bluesky to create and view proposed labels, and vote them up or down depending on whether they agree or disagree with the label.

Those votes will then be published to a PDS (either the user's, or aggregated for privacy) under a `social.pmsky.*` lexicon to allow labelers to consume these votes.

## The Labelers

Once votes are published to the atmosphere as records, labelers can consume them and begin building a picture of the labels that users agree or disagree with. They'll be able to define what consensus looks like, and publish labels accordingly.

This allows for flexibility depending on the situation, where self-identification might require a low threshold of votes, while other labels might require a supermajority of consensus. &#x20;

It also would allow for "bidirectional" labels where, for example, if pmsky users are voting on whether an account is authentic or not, a labeler could be defined to publish "Impersonation", "Contested Authenticity", and "Authentic" labels, all derived from the same set of votes.

## Big Picture

The goal of this architecture is flexibility for different use cases. What works for one situation might not work for another. PMsky simply aims to provide the tools for labelers to be built on top of the ideal of peer participation.


# Who's building this?

The initial work for this project is being done by [Drew McArthur](https://drewmca.dev) ([@drewmca.dev](https://bsky.app/profile/drewmca.dev)).

For full transparency, this is part of my thesis for a degree in [Media and Public Engagement](https://www.colorado.edu/cmci/ma-media-and-public-engagement).  A goal of my studies has been to explore how groups make decisions in the absence of leadership making decisions for them.  In this context, the question is how moderation can work in the absence of a privileged group of moderators. &#x20;

This should not create any conflict of interest, since the main requirement of the degree project is public engagement.  So long as this project is co-designed with the community it serves, I'll be satisfying those requirements.  Users of this platform will not be the subjects of any external research or publications.  The purpose of this project is solely to produce tools that are useful.


# Request Access

The platform will go through a closed round of alpha testing before being released to the public.

If you'd like to participate, you can request access by sending your handle either:

* via email, to <request@pmsky.social>,
* or via DM to [@pmsky.social](https://bsky.app/profile/pmsky.social).

Upon approval, your handle will be added to a whitelist, and you'll be notified when the platform is available to you. Thank you for your interest!

All that's required is your bsky handle, but I'd also appreciate hearing things like:

* How did you find PMsky?
* Why do you want to try it out?
* What are you hoping the platform can do?

And any other thoughts you might have!


# Provide Feedback

One of the main motivations for this project is greater user agency and participation.  Your feedback is extremely valuable at this stage, and we would love to receive any and all comments, questions, opinions, skepticisms, critiques, worries, requirements, desires, and other thoughts that come to mind!

You can always DM @pmsky.social on bsky, email <e@pmsky.social>, or submit anonymous feedback via this form:

[Form for PMsky Feedback](https://forms.gle/Wo7dTkNcFFRujZEN6)&#x20;


# Lexicon

This page describes the lexicon defined and used by pmsky

PMsky defines two main record types: labels, and votes. The former is heavily based on the definition in use by ATproto itself [here](https://github.com/bluesky-social/atproto/blob/a8f06939f94b3a5efee4b56c4de0e36502ff15fd/lexicons/com/atproto/label/defs.json#L5).

## Proposals

```
// social.pmsky.proposal
```

These records closely mirror that of an Atproto Label, defined in `com.atproto.label.defs#label`. They have a *subject*, which is another record they apply to, and a *value*, which is the text of the proposal itself. There is also a `type`, which determines which type of proposal the record is. The two current types of labels are `POST_LABEL` and `ALLOWED_USER`, respectively referring to a label on a bsky post and whitelisting a user to the pmsky platform.

See the full definition here: <https://github.com/pmsky-social/app/blob/main/lexicons/proposal.json>

## Votes

```
// social.pmsky.vote
```

Votes are similar to labels, in that they have a *subject* they apply to. They also have a *value*, which is either `1` or `-1`.

See the full definition here: <https://github.com/pmsky-social/app/blob/main/lexicons/vote.json>


# Privacy

Moderation can be a sensitive subject.  Generally on ATProto, the data you create is yours, and public.  But, especially when it comes to harassment, a user might not want the labels they create, or the votes they submit to be published on the network.

When you create a label, we treat that as the platform's label.  That means the AT record shows up in the PDS for @pmsky.social, rather than your own.  It also means that once created, you can no longer delete a label.

When you vote on a label, we only save *that you voted* on that label, not *how* you voted.  We also track that someone voted that label up/down, and publish that as a record to the @pmsky.social PDS.

## Tradeoffs

This privacy has tradeoffs.  It means that other users have to trust the platform not to manipulate votes, for example.  As the platform grows, it might be the case that only public votes are counted, or that they're more trustworthy.  There is a spectrum between complete privacy and a more complete featureset, and we'll aim to have flexibility to allow the user to decide for themselves how their participation fits into the wider picture.

## Future Directions

In the future, we'll allow for users to publish these records to their own PDS if they wish to have public votes (e.g. for user-specific labeling, publish X label if Y user(s) voted on it).

Another feature is semi-private voting, where the platform saves how you vote internally to allow you to change your votes.  As-is, voting is irrevocable since we're going for safety & privacy over convenience at first.  If enabled, this would be a setting you can enable, not something you're opted into without notice.


# Trust & Safety

In building infrastructure around moderation, trust and safety are paramount.  To reduce the potential of issues with the platform, we're taking a number of steps to minimize risk as the platform is developed.

## Initial Labels and Users

At first, only a small set of labels will be allowed, hardcoded into the app.  Over time, users will be able to introduce labels, which will be added to the set of allowed labels based on other users' votes on those proposals.  Additionally, the initial set of users will also be limited during initial testing.  Again, new users can be proposed & voted on to be added to the whitelist.

## Opt-in Nature of Labeling

The larger ecosystem of labeling on bluesky makes it fairly resistant to abuse.  A labeler can publish incorrect or negative labels, but only those who subscribe to it will see those labels on their feed. &#x20;

In the case of labelers that leverage pmsky vote data, those labelers will serve small use cases and be independent from the platform, rather than providing one monolithic labeler.  This provides users with fine-grained control over their labeler experience on bluesky, and puts the onus on labelers for adequately mitigating anti-social behavior.  The worst case scenario for a user is the same as the baseline on bluesky, where they are not subscribed to any 3rd party labelers.&#x20;

## Layers of Protection

For users that do subscribe to labelers driven by pmsky data, there are two main layers of protection: the platform itself, and the labelers built on top of pmsky.

### Protection on PMsky

We already require a bluesky account to interact with the platform, but as activity ramps up we can require verified emails, accounts over a certain age, or even implement reputation systems to weigh or eliminate votes from problematic accounts. &#x20;

### Labeler-Level Protection

Part of the ethos driving pmsky is one of building blocks and interoperability.  This allows for some labelers to assume more risk while others make their decisions more conservatively.  The end-user is then able to subscribe to labels that fit their apetite, fine-tuning their personalized signal-to-noise ratio.  As the platform grows, more sophisticated labelers will be built with better mechanisms to defend against harassment and gaming the system. &#x20;

## Potential Threats

### Targeted Harassment

The hope is that pmsky allows users to mitigate harassment via community labeling & defense, however it's also possible that the platform is abused to produce harassment itself.  Like any other system, its mechanisms can be gamed such that unsavory or misleading labels are published. &#x20;

This can be mitigated with high consensus levels, reputation systems, or public votes.  For example, if a label requires a 90% level of agreement, it only takes 10% of users to block that label from being published.  Public votes also allow labelers to associate accounts with problematic behavior, and reputation systems could be built based on voting and other behavior on the platform.

### Sybil attacks

A [sybil attack](https://en.wikipedia.org/wiki/Sybil_attack) involves a bad actor using multiple fake identities to carry out abuse of a system.  A bluesky account is required to vote on pmsky, but a bad actor could programmatically create hundreds or thousands of accounts to manipulate votes.  This can be mitigated by requiring email verification, or putting up roadblocks based on account age, activity, reputation, etc. &#x20;

To mitigate these behaviors, pmsky will begin as a closed platform, evolving to invite-only over time.  It will not be open to the public until sufficient safeguards have been put in place.


