Files
Qortal-Hub/docs/reticulum-group-score.md

89 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Reticulum Group Score
Group Score is a public-group discovery signal shown in Reticulum Q-Chat. It is an integer from 0 to 100 that combines four independent signals. Private groups deliberately receive no score: their activity and membership context should not be exposed through public discovery.
## Formula
```text
Group Score = QORT Holdings × 50% + Activity × 30% + Community × 10% + Legacy × 10%
```
The weighted result is rounded and clamped to 0100.
### QORT Holdings — 50%
Holding is normalized against a target of 1,000,000 QORT:
```text
Holding Score = 100 × log(1 + balance) / log(1 + 1,000,000)
```
The score is capped at 100. A logarithmic curve was chosen instead of a linear one so a very large holder cannot flatten the useful differences between every other group. The 50% weight is an explicit product decision from the developer discussion.
### Activity — 30%
Activity combines three seven-day/recent participation signals. Each component scales proportionally to its target and is capped at 100:
```text
Activity Score =
active authors over 7 days (target 50) × 50%
+ messages over 7 days (target 500) × 30%
+ messages over 24 hours (target 100) × 20%
```
One visible user post counts once. Active authors carry the most weight because participation breadth is harder to inflate than message volume; seven-day volume rewards sustained use; 24-hour volume adds recency without letting a short burst dominate. Activity contributes up to 30 points, making sustained participation the second-largest signal after QORT Holdings.
A successfully fetched activity directory that omits a public group is treated as zero activity. If the complete activity request fails, an existing valid snapshot is retained instead of replacing Activity with zeros.
### Community — 10%
Member count maps to ten tiers, then to the shared scale as `tier × 10`:
| Members | Tier / score |
| --- | --- |
| 010 | 1 / 10 |
| 1125 | 2 / 20 |
| 2650 | 3 / 30 |
| 5199 | 4 / 40 |
| 100249 | 5 / 50 |
| 250499 | 6 / 60 |
| 500999 | 7 / 70 |
| 1,0002,499 | 8 / 80 |
| 2,5004,999 | 9 / 90 |
| 5,000+ | 10 / 100 |
Community contributes at most 10 points to the total. A group reaches 9/10 Community points at 2,500 members and the full 10/10 at 5,000 members.
### Legacy — 10%
Legacy starts at zero and awards one total-score point for each completed year since the group was created. It caps at 10 points after ten completed years. This gives established groups modest recognition without preventing a new group from reaching 90/100 through QORT Holdings, Activity, and Community alone.
## Refresh and persistence
Q-Chat starts score discovery when Reticulum Q-Chat loads, not only when Find Groups opens. A snapshot is stored locally and shared by invitation previews, About Group, and discovery.
- Snapshots use six-hour slots based on Qortal network time, producing four scheduled refresh opportunities per day.
- Cached score data may be reused for up to 24 hours when a later fetch is unavailable.
- A newly encountered group can request an out-of-cycle refresh, with a five-minute cooldown.
- Real activity data may replace an assumed zero within the same slot.
- Holding data comes from `/groups/balances?limit=0&reverse=true`; Activity comes from the Reticulum public-group activity directory.
## Display and discovery
Score colors are consistent anywhere Group Score appears:
- 024: red
- 2544: orange
- 4564: yellow
- 6594: green
- 95100: Qortal blue
Find Groups uses deterministic tie-breakers so equal values do not jump unpredictably:
- **Top:** Group Score, Activity, members, newest.
- **Active:** Activity, active authors, seven-day posts, Group Score, members, newest.
- **Newest:** creation time, then group ID.
- **Largest:** members, Group Score, newest.
The implementation and constants live in `src/components/Group/reticulumGroupScore.ts`.