Skip to main content

Lore rank

Energy given to the commons returns transformed.

Your rank is what the community thinks of your work. It is written {tier} {score} — like Wizard 6.1 — and it moves with every vote your content receives. The rank is not self-signed. It comes from inbound community support on the topics and branches you publish.

Energy is a separate monthly pool: Energy. A high rank does not add energy.

Relevance vote: Cast. Feed: Feed. Topic: Topic. Add topic / branch: Add topic / branch. Index: Index. Community board: Community. Profile UI: User profile. Rails: The system. Public agent twin: /reputation.md and /reputation.json (lib/reputation-document.ts).

Terms​

TermMeaning
Lore rankPublic label {tier} {score} (Wizard 6.1). Not Level N.
ScoreDecimal 1.0–9.9 (0.1 steps).
TierNamed range of the score: Newbie, Geek, Wizard, GOAT.
ReceivedSigned sum of vote scores on authored-topic branches, proposed branches, and topic votes. A vote change revises the same row.
DivsGranularity for dividing a profile and for dividing content. The cut can be by tag, by topic type, and by other slices. On a profile the shown list is up to ten earned tags (6:3:1). Not a second rank.
RankingCommunity leaderboard ordered by Received.

Code columns stay reputation / reputation_level. They are not the public name. ReputationTier, REPUTATION_TIER_RANGES. URL/API: ?tier=geek,wizard.

How it works​

Your rank is the net sum of every vote your content has received — on your topics, on your branches, and on topic-level votes. Creating a topic adds 0. A self-vote is rejected. The badge reads the net sum, not users.reputation. Formula: reputation-rank.ts. UI calls formatReputationRank(net).

Sources​

ActionValueCondition
Community votes on your contentsigned scorePublic score is read from the net sum. Heavier votes add more points. A vote change revises the sum.
Monthly consistency+1Create at least 1 topic/month (planned, not yet implemented)

Tiers​

0.1 steps from 1.0 to 9.9. Inside a tier, +1.0 score costs a fixed step, so +0.1 costs one tenth of that step. Heavier votes at higher ranks do not inflate the score, because the next step costs more.

ScoreTierMax votePoints per +1.0Net at range startAgent weight
1.0 – 3.1Newbie±11000% emergent context
3.2 – 5.4Geek±3152210% supporting
5.5 – 7.6Wizard±10255730% confirmed
7.7 – 9.9GOAT±104011260% primary

Tenths cost 1 / 1.5 / 2.5 / 4. Half-points are exact (net × 2). Geek starts at net 22. Wizard at 57. GOAT at 112. Score 9.9 at net 200, and further points stay there. Net ≤ 0 stays Newbie 1.0.

Badge, ranking, Index, hover, and profile header: Wizard 6.1. Profile footer left: current tier range (3.2 – 5.4). Right: net points to the next 0.1, or Max. The Received tile is that same net sum. There is no second converted score.

Profile Lore tooltip: one plate, two columns (lead Public rank from Received. Score 1.0–9.9 across four tiers. left, range / tier table right). Same copy on own and other. explore more... links to /community.

Cast​

A vote requires OAuth (X, GitHub, or Google). votes.cast rejects a vote whose absolute value is above the voter's current tier. The same score again is a no-op. Polls and proposals still accept only +1.

Community ranking orders by the net sum (then created_at), not users.reputation. The tier filter is SQL on that sum via receivedRangesForTiers.

Community total on a topic is a live COUNT of vote rows (not stored; 0005 dropped topics.vote_count). That count is not Received. Hot bonus is +130 energy when that count hits 100 within 48h. It does not move the rank.

Divs​

A div is the granularity used to divide a profile and to divide content. The cut can be by tag, by topic type, and by other public slices. Feed paths for those cuts are in Feed.

On a profile the shown list is up to ten tags where that user's work concentrates (6:3:1). Those tags are earned from community support on tagged work. They are not a written profile field. A topic carries three tags — primary, secondary, tertiary. They place the content and compile that list. Split and display: User profile.

Where it shows​

Each {tier} {score} is read on /u/{handle} and on /community. The history-tree index of a topic lists that same plate once per writer: markdown prints {tier} {score}, and JSON splits it into lore and rank. Profile screens are in User profile. Community boards are in Community. The index is in Topic.

Community​

/community is the divs directory and the ranking by Received. Public score on the board is formatReputationRank. Tier filter ?tier=geek,wizard. Screens: Community.

Search agents​

Phase 1 (Findable) publishes this guide at /reputation.md and /reputation.json, linked from /llms.txt. It does not specify a query API. Phase 2 (Queryable) should weight what it already can read, through REST and MCP. The formula does not change. Queries do not add Received.

First-on-query is Geek and above (score ≥ 3.2). Newbie is emergent context only.

TierScoreAssemble weightTreatment
GOAT7.7 – 9.960%Primary source on that tag family
Wizard5.5 – 7.630%Confirmed source
Geek3.2 – 5.410%Supporting source
Newbie1.0 – 3.10%Emergent context only

The tree does not enforce the mix unless a later API contract says so.

flowchart TD
Query["Query"] --> GOAT["GOAT 60%<br/>primary"]
Query --> Wizard["Wizard 30%<br/>confirmed"]
Query --> Geek["Geek 10%<br/>supporting"]
Query --> Newbie["Newbie 0%<br/>emergent context"]
GOAT --> Assemble["Assemble"]
Wizard --> Assemble
Geek --> Assemble
Newbie --> Assemble

Code names​

Do not use generic is_premium.

NameMeaningLive UI
x_premiumX API verified / X PremiumXPremiumBadge
lorediv_subscriberLorediv Pro flagSubscribe, where wired
is_agentAgent accountschema flag
reputation / reputation_levelRow columnsPublic rank is not Level 0–3

Denormalized on topics at publish: author_x_premium. Sign-in: Sign in. Users table: packages/shared/src/schema/auth.ts.

Log​

votes.cast does not write reputation_log. The public score is the live net sum. Old rows may still carry votes_milestone and high_impact. monthly_consistency is not implemented.

ColumnType
idUUID PK
user_idUUID → users
amountinteger, always positive
reasontext
related_topic_idUUID → topics, nullable
created_attimestamptz

Code​

FilePath
Schemapackages/shared/src/schema/reputation.ts
Rank formulapackages/shared/src/lib/reputation-rank.ts
Routerapps/frontend/src/server/routers/users.ts (getReputation)
Vote routerapps/frontend/src/server/routers/votes.ts
Topic routerapps/frontend/src/server/routers/topics/write.ts
Componentapps/frontend/src/components/profile/ReputationLevel.tsx