Skip to content

RFC: Content ratings - #66

Open
LaurensDeV wants to merge 3 commits into
KSAModding:mainfrom
LaurensDeV:rfc-content-ratings
Open

LaurensDeV wants to merge 3 commits into
KSAModding:mainfrom
LaurensDeV:rfc-content-ratings

Conversation

@LaurensDeV

@LaurensDeV LaurensDeV commented Sep 15, 2026 •

Copy link
Copy Markdown

What

An RFC for a thumbs up / thumbs down rating per listing.
A small write endpoint collects votes and aggregates them, the indexer copies the public aggregate into ratings.json in the generated repository, and the snapshot attaches it as an optional rating field with a rounded score and a vote count bucket, the way RFC 0052 handles download counts.
Ratings fail open and never affect installing, dependency resolution or any other automated decision.
It came up in Discord, and there is no Pre-RFC thread for it.

RFC checklist

  • RFC number allocated and the filename matches the rfc: field in the front matter
  • Discussion thread linked in the front matter
  • Claims about game behavior cite a class and method
  • If this merges an acceptance: DECISIONS.md updated, status: Accepted, and any superseded RFC marked

Notes for reviewers

The real decision is the RFC 0025 non-goal.
A write endpoint is a service somebody has to keep running, so this RFC proposes narrowing that non-goal to "anything whose failure degrades installing, updating, or resolving dependencies".
If the stewards would rather keep the non-goal absolute, the RFC says it should be rejected, not implemented in a weaker form.

Feedback wanted on: the narrowing itself, and whether it needs a supersedes entry or only a DECISIONS.md row; a random client token as the voter identity; and the requirement that the endpoint runs on an org-owned account with at least two people holding credentials.

@LaurensDeV
LaurensDeV marked this pull request as ready for review September 15, 2026 19:05
@LaurensDeV
LaurensDeV requested a review from a team as a code owner September 15, 2026 19:06
@renancamm

renancamm commented Sep 15, 2026 •

Copy link
Copy Markdown

Hey @LaurensDeV, thanks for pushing this forward!
As I commented in discord, I think we all agree we need a way to collect signals from users that a content is low quality, and be able to later filter them out somehow.

But I’m not sure if the thumbs up and thumbs down is the main mechanism that we should use for this. In the original design, the main signals that I was expecting to use were “n of download, frequency of update” for positive signal, and a report action (that we never fully specified if it was a serious flow or a quick action).

if everyone prefers to go with the thumbs up and down, fine for me. But I just wanted to express my opinion that this isn’t something that I would do if it was up to me.

@MrJeranimo MrJeranimo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if I agree with this RFC, but I will not outright reject this RFC as I want to see what the other maintainers want to say.

Comment on lines +30 to +31
The index will list content of varying quality, including abandoned listings, listings broken by a game update, and the occasional deliberate junk entry.
Nothing in the design so far gives a user any way to tell these apart before installing, and nothing gives index maintainers a way to notice them at all short of someone complaining in Discord.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Info]
There is manual yanking and reviews by the owners of the content, but you are right that the only other way is to complain to the maintainers.

```

`vote` is `1`, `-1`, or `0` to withdraw.
`version` is the release the voter had installed at the time, recorded verbatim as the `version` of that release, which RFC 0031 normalizes to SemVer 2.0.0, and is used as described under "Versions" below.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Must Fix]
On line 103 when you talk about the published format, version is not listed there, nor is there any labeled way for storing which version got X amount of votes in that format.

Comment on lines +184 to +190
A random opaque token is generated on first launch and persisted by the client.
It is not an account, it is not tied to anything, and a user who clears it can vote again.

This is friction, not authentication, and the RFC states that plainly rather than implying a guarantee it cannot make.
The mitigations are per-identity deduplication, a rate limit per source address, and ignoring votes from tokens first seen less than 48 hours ago.

For this to be a privacy-respecting design rather than a tracking one, the token must not be sent anywhere except the vote endpoint, and the aggregate job must not retain source addresses beyond the rate-limiting window.

@MrJeranimo MrJeranimo Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Personal Opinion]

I am not sure if I agree with this idea. As you say, it doesn't fully prevent spamming or vote manipulation, just delays it/makes it annoying. Personally I feel that since the main two ideas behind why we should have the voter system are

  • Have some form of content control (mainly due to bad content and deprecation)
  • Know what content is good.

For the Good Content we already have some stuff implemented and planed,

  1. Download count: This is just attention and may not always work, but usually attention = good/useful.
  2. Instance sharing: This is essentially just a Mod Pack. want to share your instance, make it a mod pack and all the Mods, Vehicles, and Saves, will be shared with the user. Everything else isn't needed. This can be a great way for people to find content they like.
  3. Social Media: If KSA gets big enough, social media will probably handle sharing info on what content is good. Also not the best as it is usually attention based, but at least it is less for us to maintain.

For the content control side a built in reporting system might be better,

  1. We can have authentication, the reporting can be done through GitHub or some other platform, which may prevent spam.
  2. It gives the users an area to write what is wrong.
  3. We don't have to store and upkeep the data.

I know there are drawbacks to the reporting system like manual moderation, but the same would happen with the rating system (manually seeing why content is downvoted so much) and we already planned to have some form of reporting.

Ratings now follow the RFC 0052 pattern: the indexer copies the endpoint's public aggregate into ratings.json in the generated repository, and the snapshot attaches it as an optional rating field, so clients keep the one-fetch contract of RFC 0033.

Ids and version ordering cite RFC 0031, per-game-version ratings cite RFC 0017, download counts cite RFC 0052, and the RFC 0025 section answers the places the non-goal was already applied and cites RFC 0048 as the precedent for amending without superseding.

The reference implementation moves from Workers KV, whose free plan allows 1,000 writes a day to different keys, to D1.
@MrJeranimo
MrJeranimo requested a review from a team September 20, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Inbox

Development

Successfully merging this pull request may close these issues.

3 participants