# Benchmark-informed sample histories All users, names, receipts, and histories are synthetic. No private Roblox analytics or real player records are imported. The game IDs and Roblox experience IDs are demo identifiers, not claims about those games' performance. ## Public references checked 3 November 2026 - [GameAnalytics 2026 Roblox Benchmark Report](https://www.gameanalytics.com/reports/2026-roblox-report): its sample covers 500+ large titles with at least 1 million monthly active users. Median exact-day retention is D1 10.3%, D7 1.6%, D30 0.5%. Average game session length is 9.8 minutes at the median, 7.3 at p25, and 14.7 at p90. These are benchmarks for established games, not a representative census of new releases. The report also describes strongly concentrated payer spending; its USD figures are not converted into Robux in this prototype. - [Roblox retention documentation](https://create.roblox.com/docs/production/analytics/retention): D1, D7, and D30 refer to returning on the exact day, not cumulative return. New cohorts need complete observation windows. - [A creator's report of high session length and low retention](https://devforum.roblox.com/t/high-session-length-but-low-retention-rate/1752184): approximately 20-minute sessions with 12% D1 retention. This is self-reported, not audited or a platform benchmark. It illustrates that long sessions and strong retention are separate properties. - [A creator's report of weak onboarding](https://devforum.roblox.com/t/how-do-i-improve-average-playtime-and-day-1-retention/4565940): approximately 5.4-minute sessions with 0.58% D1 retention over a week. Another self-reported example; it establishes possible variation rather than a calibration target for all games. ## Current scenarios (sample version 3) The generator is `scenario_seed.py`, with configuration and personality traits in `sample_scenarios.py`; `realistic_seed.py` retains shared COPY/reset helpers. It uses fixed per-game random seeds and the current UTC time. The three games preserve their internal IDs and have different actual catalogs, events, activities, player fields, and acquisition curves: | Game | Genre | Trajectory | Players | | --- | --- | --- | ---: | | Willow's Park | Social hangout and collecting | Stable acquisition and returning core, weekend variation | 8,000 | | Orbit Racers | Round-based competitive racing | Acquisition and returning activity decline after the middle of the window; later sessions shorten, checkpoint completion falls, automatic offers increase, and currency rewards outpace sinks | 9,000 | | Dungeon Workshop | Co-op dungeon RPG and crafting | Small earlier audience, then an accelerating Home-recommendation acquisition wave over the last four complete days; the new audience has more one-visit newcomers | 16,000 | These are deliberately fictional scenarios, not claims about real Roblox rankings. `acquisitionSource=home_recommendation` is simulated provenance, not data fetched from the Roblox discovery algorithm. Stable does not mean perfectly flat: natural daily/weekday variation and payer bursts remain. The current UTC day is partial and is excluded from the daily/weekly reports. Eight latent personalities have different session duration, return frequency, soft-currency spending, progression, purchase intent, budget, and product preference. Their weights and labels differ per genre: - Tourists/newcomers visit once and usually leave quickly. - Social regulars spend longer with other players, progress more slowly, and rarely pay. - Collectors accumulate sets/cosmetics and show more deliberate shopping. - Competitors have stronger race results and more repeat rounds; spending is independent of their skill. - Free-to-play grinders accumulate time, progression, and currency while recording zero Robux spend. - Budget buyers favor low-price purchases and have a finite lifetime budget. - Impulse buyers can spend during a short visit without becoming regular players. - Rare whales spend in bursts with much larger budgets and a preference for bigger products; cozy-game cosmetic whales and racing/RPG power spenders have different budgets and behavior. The Players table includes Playstyle by default, a Behavior column template, and genre-specific fields. Profiles display the playstyle tag. Text fields remain sortable/displayable but are excluded from numeric graphs and Hall of Fame selectors. Labels are simulation ground truth for the mockup, not an implemented behavioral classifier for production. Prompt source is selected before the outcome. Product, source, persona intent, remaining budget, and the current scenario affect the outcome. Each bought prompt links to one real synthetic receipt at the same time; closed and unresolved interactions have no invented receipt. Prompt timings stay inside the parent session. Activity runs have their own ordered progression and never stand in for product-prompt records. Player snapshots preserve full copies, including cash-earned/spent balance identity, exact cumulative receipt totals, and meaningful per-genre values. CCU is counted from the same simulated session intervals. Missing reports/checks are rare and remain in the Settings diagnostic log. Known zeros remain zero; absent data displays N/A. `sample_report.py` validates the resulting stable/declining/surge trajectories against the preceding seven complete days, eight personalities per game, free-to-play spending, no session overlaps, sale timing, snapshot balances/receipt totals, and descending mature retention. Do this before generating the final reports. ## Rebuild only the bundled sample games ```powershell .venv/Scripts/python.exe mockups/manage_database.py reset-sample ``` This deletes and replaces child datasets only for `willow-v1`, `orbit-v1`, and `dungeon-v1`, in one transaction. Internal game IDs are preserved, unrelated games are untouched, and ordinary `init`/`seed` calls keep existing data. Player and record IDs change, so old player-detail links may no longer resolve. After rebuilding, validate first, then refresh reports, and finally start the dashboard. Stop an existing dashboard worker while replacing the samples so it cannot cache a half-finished scenario. Rebuilding is transactional, preserves internal game IDs, and clears sample report caches. Run the validation report and tests: ```powershell .venv/Scripts/python.exe mockups/sample_report.py .venv/Scripts/python.exe mockups/manage_database.py refresh-reports .venv/Scripts/python.exe -m unittest discover -s mockups/tests -v ```