← barometer

How the score works

Sources

Reddit: top and new posts from each service's community subreddits over the last 30 days. Each post is labeled −1 / 0 / +1 toward the service itself (subreddit drama and off-topic count as 0), then weighted by log-engagement. Labels are cross-checked by independent re-labeling; current agreement is 95–97%.

App stores: reviews from verified official apps only (App Store RSS + Google Play), last 30 days. Stars map directly: 1–2★ → −1, 3★ → 0, 4–5★ → +1. Third-party clone apps are excluded even when they outrank the real one.

Formula

net    = Σ(wᵢ·sᵢ) / Σwᵢ          w = log(1+score+comments), s ∈ {−1,0,+1}
raw    = 50·(1+net)              → 0..100
score  = (n·raw + 25·50)/(n+25)  Bayesian smoothing toward neutral 50
corpus < 50 → source excluded

Barometer = weighted mean of sources: reddit .35, stores .25
            (weights renormalized over present sources)

The LLM layer only labels individual posts; it never invents percentages. The number is arithmetic over labels.

Known biases — read scores accordingly

  • Reddit skews negative (people come to complain); stores skew positive (apps prompt happy users). Compare services to each other and to their own past, not to an absolute ideal.
  • Store feeds cap at ~500 most recent reviews, so for very large apps the window is effectively "last 500 reviews".
  • Hate-subreddits (e.g. r/FuckPolyBuzz) are excluded: negative by construction.
  • Services without a verified official app get no store source at all — a smaller denominator, not a penalty.

Measured memory

One week of talking, then we check what stuck

We run the same scripted week against every service: a fresh, private companion character, 14 sessions over 7 virtual days, 81 messages of ordinary life — work trouble, a move abroad, pets, team changes. Then 43 probe questions test what the companion actually remembers. An LLM judge grades every answer PASS / PARTIAL / FAIL against the script; the score is arithmetic over those labels — the judge never invents percentages.

CategoryProbesWeightWhat it tests
single_session_user81.0facts you told it, same session
single_session_assistant21.0what it said itself
single_session_preference41.0your stated tastes
multi_session62.0recall across days
temporal62.0when things happened
knowledge_update62.0facts that changed mid-week
abstention51.5declining to invent unknown facts
persona31.0staying the same character
emotional31.0emotional continuity

Read the number honestly. Each published score is a single run (n=1) on a paid plan — the exact tier is named on every card — driven through the real web UI. The “week” is compressed into hours of real time, so time-decay effects are understated. Alongside the main score every card shows three plain metrics: answers right (MPA — of the memory questions with a known answer, how many it got right), doesn't make things up (FAA — how often it admitted not knowing instead of inventing an answer to a trap question), and combined (FAMA — recall and honesty folded into one number).

  • Fresh private character, identical canonical card and greeting for every service.
  • Paid tier noted on every run; free tiers may behave differently.
  • Only full-week runs are published; pilots and contaminated runs are discarded.

Freshness — our staleness promise

Every score shows the date it was computed and the exact observation window it covers. Sources record their own pull dates. If a recompute is more than 10 days old, every page says so out loud instead of quietly serving stale numbers — an outdated score presented as current is a lie with extra steps.

last computed 2026-08-22 · window 2026-07-232026-08-22 · Reddit data pulled 2026-08-22 · store reviews pulled 2026-08-22

Open data & code

The scoring arithmetic, the exact labeling rubric, and every window's data — per-post sentiment labels included — are published on GitHub. Data is CC BY 4.0: reuse it anywhere with attribution. Spotted a mislabeled post? Open an issue.

github.com/role-play-arena/barometer