Skip to content

The vocabulary ​

The domain has one set of words and they are not stylistic preferences. A term below is what the code names its types after, what a commit message says, and what these pages call the thing, and each one carries the synonyms it exists to displace, because the cost of a domain language is paid entirely in the near-misses that creep in beside it.

A bold word inside a definition is another term on this page, so a concept can be followed rather than looked up. A concept with no entry here does not yet have a name.

A term marked core is one nothing else in the vocabulary can be read without: the entities the game is played with, the economy they move in, and the scoring they feed. Those are the terms the single-document exam report carries, so that a document read straight through introduces the words it then uses rather than the whole ingestion pipeline.

52 terms · 52 carry a list of the words they replace · 30 are marked core, the vocabulary the report is written in

Wikimedia Top Read API

The canonical source for daily most-viewed article rankings by project domain.

NeverWikipedia API (generic)wiki API

Wikimedia Client

The integration boundary responsible for all communication with Wikimedia/Wikipedia APIs.

Nevertop-read-only service

Project Domain

A Wikimedia project identifier derived from allowed app domain enums (currently en and it) and mapped to values like en.wikipedia and it.wikipedia.

Neverlanguage onlysite

Top Read Snapshotcore

A daily ranking result bound to a specific Project Domain and retrieval date.

Neverlive rankingreal-time top list

Snapshot Date (UTC)

The canonical date used for Wikimedia lookups and cache validity boundaries.

Neverlocal calendar date

Range Average

The average daily pageviews for the selected Content Article Candidate across a chosen time range in the same Project Domain.

Neverdaily top value

Language Scale Factorcore

A per-language constant that multiplies raw pageviews to lift each language onto one common reference scale (the reference language's factor is 1.0; lower-volume languages get a factor > 1). A single factor per language drives both tier granularity and synergy balance, so the tier model and synergy table are tuned once and reused for every language.

Neverper-language tier tableper-language synergy tablecross-league multiplier

Normalized Viewscore

Raw pageviews multiplied by the Language Scale Factor. This is the input to the universal tiered base-points model, never raw pageviews directly.

Neveradjusted viewsweighted views

Base Pointscore

The view-driven score of one article for a day, computed from its Normalized Views by the universal geometric model: max(0, log₂(views / 2000)) up to a 150k kink, then linear above at +1 point per 50,000 views. Continuous and decimal-valued (the "+1 per doubling" rule is just the headline at the rungs); crosses zero at 2,000 views. Concave (diminishing) in the mid-field, convex at the top so the volatile daily elite is rewarded. Excludes synergy and events.

Neverraw pointspageview points

Content Article Candidate

A title eligible for display after applying the shared content filter (namespace and denylist rules).

Neverraw top-ranked title

Top Read Entry

A normalized item containing article title, filtered rank, source rank, daily views, and 30-day average views for one selected candidate.

Neverraw API response row

Top Read List

An ordered list of top filtered entries shown on landing (currently size 5) for one Project Domain and Snapshot Date (UTC).

Neverraw top snapshot

Filtered Snapshot Volume

The total views obtained by summing all filtered entries from the 1000-item daily snapshot.

Neverraw-1000 sumtop-5-only sum

Filtered Rank

The rank position after non-content entries are removed from a Top Read Snapshot.

Neverraw rank

Source Rank

The original rank returned by the Wikimedia Top Read API before filtering.

Neverdisplayed rank

Playercore

A person with an account, identified by a sign-in and a username. A player holds one Team in each League they belong to, and nothing they own in one league counts in another.

Neverusermanagercoach

Teamcore

A player's single entry in one League: a name, a Credits balance, the Contracts it holds and the Formation it fields. Ownership, scoring and standing are all team-level and never player-level, so a player with teams in three leagues is playing three separate games.

Neversquadclubrosterprofile

Leaguecore

The competition a set of Teams play in. It fixes one Wikipedia language edition, one Season, one League Visibility, one Invite Policy and the Language Scale Factor frozen at the moment it was founded, and every price and every point inside it is computed against those.

Neverroomlobbygrouptournament

Global Leaguecore

The one public League every player is enrolled in by naming their first Team. Its id is the fixed string global and nobody may leave it, so it is where a player plays before they have joined or founded anything else.

Neverdefault leaguemain leaguehome league

League Admincore

The player who created a League. The admin may close it before its Season ends, and under the admin Invite Policy is the only one who may hand out its Invitation Code.

Neverownermoderatorhost

Seasoncore

The stretch a League runs for, chosen at creation from two weeks, one, two, three or six months and starting the moment the league is created. The player picks a length and never an end date. The two-week floor is the shortest season in which a LONG Contract Tier can still reach Expiry Settlement.

Nevergameweekmatchdayroundcampaign

League State

Whether a League can still be played: active while its Season runs, ended once its end date has passed, derived and never written, and closed when its League Admin ended it early. Inactive names the two endings together. Neither ending deletes anything, a season that cannot be read back afterwards is not a season. See docs/domain/league-lifecycle.md.

One ofactiveendedclosed

Neverarchiveddeletedfinished

Article Availabilitycore

The ownership status of an article at the time detail is shown.

One ofFree AgentOwned by ViewerOwned by Other Team

Nevergeneric unavailable flag

Owner Team

The team that currently owns a non-free article. This is always shown when availability is not Free Agent.

Neverholderassignee

Viewer Team Context

The team id representing the authenticated player's active team in the selected league.

Neverviewer player idsession subject id

Contractcore

A Team's holding of one article for a committed term: signed at a Purchase Price, running from its purchase date to its expire date, and leaving by exactly one of Early Sell or Expiry Settlement. An article is never held loosely, only under a contract, which is why the contract and not the article is what scores, what is priced and what is placed on a Position.

Nevertransferplayer cardownership record

Formationcore

A lineup that assigns contracts to the positions required by a Formation Schema.

Neverlineuproster

Positioncore

A named slot in a formation (e.g., LW, CM, GK) where an article contract can be placed.

Neverslotrole

Formation Schemacore

A named layout that defines which Positions are required and which Chemistry Links exist between them.

Neverformation typelayout only

Bench

Where a Team's Contracts sit when they are not placed on a Position. It has no limit of its own, only what is left of the team's contract cap after the placed ones, and it is where every edit that displaces a contract puts it, so no edit can lose one. A benched contract is still paid for and still settles; it scores nothing. See docs/domain/lineup-rules.md.

Neverreservessubstitutesspares

A schema-defined connection between two Positions that carries a Chemistry Level for the articles placed there.

Neveradjacency lineedge

Chemistry Levelcore

A four-step rating (Excellent/Good/Weak/Empty) assigned to a Chemistry Link that drives UI color and an additive score contribution (flat points), not a multiplier. Chemistry is only evaluated between schema-adjacent Positions, not between every pair of owned articles.

Nevercolor tiersynergy multiplierall-pairs synergy

Daily Performancecore

One Team's score for one Snapshot Date (UTC): the Base Points of the articles placed on its Positions, plus the flat points its Chemistry Links carry, stored once per team per day. It is the only thing Standings are built from.

Nevermatchfixturegameweekresult

Scoring Collectorcore

The nightly batch that scores every Team in every League on the previous day's pageviews. It reads each team's placed articles from the backend, fetches per-article views and the link graph from Wikimedia, and posts back raw facts rather than points, because the scoring model has one implementation and the collector is not it. See docs/architecture/scoring-pipeline.md.

Neverscoring jobcronscorer

Standingscore

A League's table: cumulative Daily Performance points, descending, with each team's movement against the order as it stood before its own last scored day. Nothing else is weighted in, not credits, not team value, not days played, and ties are broken by nothing. The API and its DTOs call the same table leaderboard. See docs/domain/standings-and-podium.md.

Neverrankingscoreboardleague position

Podium

The top three of the Standings, shown for the whole Season rather than at the end of it: live and with movement while the league is active, final and still once it has ended. Withheld entirely in a league nobody has scored in yet, where every team is tied on zero and a first row would be a fiction.

Neverwinnersmedal tablefinal ranking

Marketcore

The screen a Team signs Contracts from: search across articles, the Article Availability of each, and the Article Genie for the article a player cannot name. Every contract begins here.

Nevershopstoretransfer marketauction

Contract Tiercore

The committed duration picked when a Contract is signed: SHORT is 3 days, MEDIUM 7, LONG 14 (ADR 0005). The tier is what Contract Price charges for and what Early Sell prorates against, and a renewal rolls the same length forward rather than choosing a new one.

One ofSHORTMEDIUMLONG

Nevercontract length in weeksplansubscription

Creditscore

What a Team pays for Contracts with, and the only currency in the game. Never a stored balance: credits are derived on every read from the team's own contracts, starting budget minus every Purchase Price paid, plus every payout already settled back (ADR 0007). Affordability is enforced inside the statement that writes the contract, not above it.

Nevercoinsmoneywalletbudget

Contract Pricecore

The credits required to hold an article, D × BasePoints(Normalized_30-day-average_Views)^k × contract_days (ADR 0005, derived from the scoring curve's own BasePoints shape, not raw views; days-based; supersedes both the original linear /1000 × weeks form and an intermediate convex-in-raw-views form). Priced on the smoothed 30-day average, never daily views, this is the deliberate decoupling that makes daily spikes cheap-but-fleeting and sustained popularity expensive. The k exponent applies convexity to the already-log-compressed points value (not to raw, power-law-skewed views), so giants/top-tier articles cost progressively more per marginal point than mid-tier ones without the price curve diverging from the value it buys.

Neverdaily-view pricespot pricelinear-in-views priceconvex-in-views price

Purchase Price / Current Pricecore

Purchase Price is the Contract Price locked at signing. Current Price is the same formula re-evaluated with live 30-day-average views, at the contract's original tier duration, a "replacement cost" number (ADR 0003). It's the shared basis for both exit paths: prorated for an Early Sell, or a full Expiry Settlement against Purchase Price at natural term completion.

Neverfixed price onlysingle priceresale price (ambiguous about which exit path)

Early Sellcore

Voluntarily exiting a contract before its committed term ends: Current Price × (remaining days / tier days) credited, pays only for the unused portion of the term, at today's rate (ADR 0003). Proration is the sole anti-exploit guard (there is no minimum hold): holding 3 of 14 days recovers only 11/14, so a partial hold can never return the full price plus free days of points.

Neverresalecash out (ambiguous with Expiry Settlement)

Expiry Settlementcore

The "sold to system" outcome when a contract completes its full committed term without renewal: the team is credited the full Current Price, i.e. Purchase Price + (Current Price − Purchase Price) (ADR 0003). The buy already debited Purchase Price, so expiry returns the whole stake plus the mark-to-market P&L, net profit if views rose over the whole hold, net loss if they fell (crediting only the delta, as an earlier draft did, would wrongly forfeit the stake). Can only trigger by holding the entire term, so it can't be reached via early exit. This is the mechanism that makes buying a viral/trending-spike article at its peak genuinely risky: a spike that fully reverts before the term ends turns into a real loss at settlement, not just "no profit." Runs via a daily Cloudflare Cron sweep on the backend (single money-writer, ADR 0004), idempotent on a contract status guard.

Neverexpiry (bare)auto-sellcontract end (without specifying settlement)

Renewal Electioncore

The owner's choice, in the final 24h of a Contract's term, to renew rather than let it reach Expiry Settlement (ADR 0003). The default is to let it expire and the choice locks for expiry once the window closes. Renewing rolls the term forward at the Current Price plus the Renewal Premium.

Neverright of first refusalauto-renewextension

Wealth Ceiling

The point at which extra credits stop buying more daily points. Stale pending re-derivation (ADR 0003): the previous ~2,400-credit figure (cost of the top-11 team for one week) was calibrated against the now-removed income-floor economy; under mark-to-market settlement, wealth includes unrealized position gains/losses, not just spend, so the ceiling needs redefining before the number can be trusted again.

Neverbudget caphard cap

Renewal Premium

A +10%-per-consecutive-renewal cost premium on holding the same article, resetting after dropping it for at least one cycle (ADR 0003, retained). The economy's anti-hoard sink, unaffected by the removal of the transaction fee, since it solves a different problem (hoarding one article vs. daily churn).

Nevertaxpenalty

Article Geniecore

The market-page assistant that finds articles a player cannot name exactly (ADR 0006). It serves two intents through one input: chemistry scouting ("find me a relation between OpenAI and Portugal") and tip-of-the-tongue recall ("the female mathematician who worked at NASA"). It never invents a title, it seeds a bounded list of real articles from search and uses an LLM only to narrow it through questions. When the daily model quota is exhausted the Genie is asleep and the market falls back to the ordinary search bar.

NeverAkinator assistantAI searchchatbot

Genie Turn

One question-and-answer exchange with the Article Genie, carrying the surviving Candidate Set forward. A turn asks either a filter question, which partitions the set, or a preference question, which only re-ranks it.

Neverpromptmessageround

Candidate Set

The bounded list of real article titles the Article Genie narrows. Seeded from search results and, when the player names anchors, from articles linked in either direction with those anchors. Ranked by mutual links first and Contract Price second, so cheap well-connected articles outrank expensive ones with the same chemistry.

Nevercandidates (bare)search resultsshortlist

League Visibilitycore

Whether a league is public (any player may join) or private (joining requires its Invitation Code, or being the League Admin). Visibility governs joining only, a private league's page and standings stay readable by anyone with its id. The Global League is public. See docs/domain/league-visibility.md.

Neverleague privacyclosed leaguelocked league

Invitation Code

The five-character code that opens a private league: digits and capitals minus the look-alikes (0 O 1 I L U). Only private leagues have one, a public league is joinable by anyone, so there is nothing for a code to guard. It is a credential, so it never travels on a league DTO; only the endpoint that checks the league's Invite Policy serves it (ADR 0008).

Neverinvite tokenjoin keyleague passwordaccess code

Invite Policy

Who may hand out a league's Invitation Code: members (anyone fielding a team) or admin (only the League Admin). Chosen when the league is created.

Neverinvite permissionsharing setting

Rendered from CONTEXT.md, which is where it is edited and where the entity relationships and the resolved ambiguities are also kept.

Built from the repository's own documentation. Source on GitHub.