Steam Market Research 7
Summary
Steam Market Research 7 independently checked Fable’s first four Steam studies against the September 5 catalog and newer review histories, then investigated language attention, catalog variety, game lifetimes, developer career sequences, and updates after long gaps. The strongest earlier descriptive findings survived, especially prior traction and several build-related categories; historical window errors, revenue proxies, selected samples, and causal overreach weakened sharper prescriptions. The owner rejected research questions that descriptions could not reliably answer, steering the work toward measurable observations. New studies found substantial low-English review activity, modestly broader advertised variety despite rapidly growing supply, persistent but often small late review streams, and important differences between maintaining a response floor and repeating a peak. The final recommendation favored updating SNKRX under the owner’s zero-effort assumption, principally for existing players, without promising a lasting revival.
Scope, independent data, and research continuity:
- The owner opened by asking for a “thorough investigation” of Fable’s findings from Steam Market Research 1–4, using Astra’s independently collected data from sessions 5–6 to verify, disprove, amend, corroborate, and detail them. All four earlier summaries were read, along with selected original reports and scripts; later corrections in Fable’s sessions 3–4 took precedence over abandoned early claims.
- The authoritative catalog is
/home/adn/a327ex/steam-research/2026-09-05/catalog.sqlite, with/home/adn/a327ex/steam-research/2026-09-05/exports/games.parquet. It contains 184,664 game apps, including 128,972 marked released and 55,692 upcoming. Its 23-storefront collection is a documented public-catalog snapshot, not every app ever registered on Steam; delisted, unpublished, unlisted, or otherwise unobserved games can be absent. - Existing session 6 histories are in
/home/adn/a327ex/steam-research/career-history-2026-09-06/reviews.parquet. The initial historical comparison used 15,445 surviving Steam-purchase reviews from 24 selected paid games. Other session 6 outputs remain in siblingcontinuation-2026-09-06,portfolios-2026-09-06, andbuild-destinations-2026-09-06directories. - The independent Fable verification assessed 52 finding families. Its principal market cohort was 38,493 paid games outside Steam’s explicit-content descriptors, released in 2023–2025. Checks varied outcome formulas, fixed review thresholds, seven versus twenty returned tags, release/date and current-price strata, developer weighting, and description definitions.
- Throughout the session, reviews measured public response rather than revenue, buyers, nationality, artistic value, or gameplay truth. Current cumulative totals give games unequal accumulation time. Historical records are surviving reviews returned now, with creation timestamps; deleted or filtered reviews are missing, and recommendation values can have been edited later.
Fable verification: prior traction, observed release count, and career censoring:
- Prior traction was the strongest replicated finding. Taking one first 2023–2025 follow-up per developer name, developers whose 2020–2022 catalog included a 556-review game had 288/629 follow-ups reach 556 reviews, or 45.8%; those with earlier releases but none above that line had 142/2,840, or 5.0%. Removing the price-based estimator still left roughly a ninefold difference. Using Fable’s revenue formula gave 63.2% versus 9.2% in the known-price comparison.
- A simple “game five becomes a coin toss” story did not survive. For names first observed from 2015 onward, 556-review rates were 7.7% on release one, 10.0% on release two, 10.1% on three, 9.4% on five, and 6.8% on ten. On game five, the rate was 3/704 = 0.4% after only sub-50-review predecessors, 26/703 = 3.7% with a 50–555 predecessor, and 140/392 = 35.7% with an earlier 556-plus game.
- This supported Fable’s selection/prior-traction explanation but did not establish that practice contributes nothing. Earlier success may itself embody learning, and the first recorded Steam release need not be a developer’s first game.
- The raw proportion with another observed release was 23.6%; it rose to 33.0%, 36.4%, 43.3%, and 52.1% when the first observed release had at least three, five, eight, or ten years of follow-up. Treating young one-title catalogs as finished careers substantially overstated permanent non-continuation.
- One-title developer names supplied 39.3% of recent 556-review games in the free-inclusive career sample; first observed games supplied 47.9%. They could not simply be discarded as noise. Sokpop’s Simmiland was verified as its second recorded Steam release, with 1,796 current reviews: meaningful traction preceded Stacklands, although Steam import order is not the full development chronology.
- Detailed outputs:
/home/adn/a327ex/steam-research/fable-verification-2026-09-06/prior_fixed_thresholds.csv,career_hit_curves.csv, andcontinuation_windows.csv.
Fable verification: climbers, gaps, pivots, cadence, and persistence:
- After entering a state with at least two games, developers with two or more moderately reviewed predecessors, each 50–555 reviews and no larger game, produced a 556-review game within three years in 6.7% of cases. All-sub-50 catalogs did so in 0.6%. Among those releasing again, this became 11.3% versus 1.4%, closely reproducing Fable’s “one in eleven” climber finding.
- Following moderate traction, breakouts versus non-breakouts were more likely to price upward by at least 25% (58.8% versus 33.8%), had higher median current next prices ($14.99 versus $5.99), longer median release gaps (619 versus 260 days), and somewhat more primary-tag changes (82.7% versus 73.9%). “Longer-cooked” remained an interpretation: a release interval can contain overlapping work, employment, experiments, or inactivity.
- After earlier 556-plus work, another 556-review outcome occurred in 29.1% of paid transitions less than six months apart versus 54.1% after four years or more; one latest transition per developer gave 25.3% versus 52.9%. The association survived in reduced form with date/current-price comparisons. It did not prove that followers never decay, that waiting is costless, or that non-returners would have shared returners’ results.
- Keeping versus changing the primary tag after stronger prior work gave nearly identical developer-weighted rates, 43.6% versus 42.8%. A title-based sequel screen was separately favorable, 58.0% versus 41.7%. After only quiet prior work, tag changes correlated with reaching 50 reviews at 17.8% versus 12.1%, a smaller difference than the release-weighted account implied.
- Cadence findings depended heavily on defining “serious” developers by ever attaining fifty reviews. With that filter, any-hit rates were 41.0% for one release every one-to-three years, 35.2% for one-to-three annually, and 33.0% above three annually; the alleged halving at the fastest cadence did not reproduce. Without the outcome-defined filter, the rates were 23.6%, 24.4%, and 22.8%. These data did not identify an optimal production schedule or income floor.
- First-game positivity barely distinguished three-year continuation: 26.7% at 85% positive or higher versus 26.9% below 70%, requiring ten reviews. Response scale did distinguish it: 21.3%, 30.3%, and 28.5% after low, moderate, and 556-plus results. “Persistence is a trait” was unsupported because no personality traits were measured. Horror, Visual Novel, and Simulation retained favorable first-observed-release comparisons; Horror’s 50-review rate was 46.3%, versus Action’s 25.5% and Precision Platformer’s 17.7%.
Fable verification: a concrete launch-window error and historical look-ahead:
- Original code treated
m1as the first nonempty calendar histogram bucket andm3as the first three nonempty buckets after discarding zero months. These are not consistent first-30-day and first-90-day windows. Late-month launches get short first periods; sparse games can take much longer than ninety days to accumulate three nonempty months. Weekly histories also used a different clock. - BYTEPATH had sixty surviving Steam-purchase reviews in its partial launch month versus 71 in its first thirty days. SNKRX had 109 versus 590. Fable’s reported 117 for SNKRX came from the launch-calendar histogram bucket in a different review population, not its first full month. Across the 24 histories, the median calendar fragment was only 16.7 days. Lost At Sea had four reviews by day ninety but six across its first three nonempty months.
- The error undermined precise launch-momentum bands, slow-start classifications, tail ratios, and personal projections until reconstructed. It did not imply that launch momentum itself is uninformative.
- Current predecessor counts also created look-ahead: five of eighteen selected transitions changed their low/moderate/556-plus prior-best band when reconstructed before the later launch. Before Azalea, Horizon’s Gate had 231 surviving reviews, rather than 1,212 now; before The Last Wind Monk, The Inner World had 199 rather than 920. Fable had tried historical sensitivities in some analyses, but those did not fix every table or the calendar-bucket defect.
- Equal-age day-90 comparisons changed several apparent declines: Horizon’s Gate → Kingsvein was 166 → 165; Say No! More → Reignbreaker 235 → 244; Let Them Come → Onslaught 88 → 178. Bad Dream: Coma → Afterlife remained substantially smaller, 91 → 17. These were selected cases, not a market-wide success rate.
- Personal forecasts presented as 40–60%, 74%, or 94% were rejected as uncalibrated. Selected developer classes, an estimated launch count, and a conditional outcome table do not combine into a defensible probability for the owner’s next game. The key evidence is in
history_windows.csvunder the Fable-verification directory.
Fable verification: revenue conversion, price, market growth, and concentration:
- Fable’s
reviews × 35.9 × current priceestimator was calibrated on two games by one developer. Its 25–55 range was not a measured market-wide confidence interval, and 556 reviews did not establish 25,000 buyers. The formula’s $50,000 line required about 466 reviews at $2.99 but only 93 at $14.99, building part of the apparent price gate into the outcome. - Fixed review thresholds nevertheless preserved a price association. For current prices up to $5, $5–7, $7–12, and $12–20, the proportions reaching 100 reviews were 5.6%, 12.8%, 16.4%, and 36.5%; corresponding 556-review rates were 1.3%, 4.0%, 5.3%, and 15.1%. Higher-priced observed games generally received more response even with broad controls; this was not an experiment in repricing the same game.
- Recorded releases approximately doubled, 10,181 in 2021 versus 20,253 in 2025. In the paid non-explicit cohort, sub-ten-review shares rose from 45.4% to 56.2%, but the absolute number reaching 100 reviews also grew, from 1,530 to 2,277. Growth did not consist exclusively of very quiet releases.
- The top 5% of released games supplied 93.1% of filtered reviews. Fable’s roughly flat median for games already above ten reviews was recognizable under his formula, around $13.6K for 2019 versus $11.8K for 2025, but neither number was measured income or the median across all releases. Delisting, current prices, and unequal review accumulation limited cohort interpretation.
- Neither graphics nor production scope was causally isolated. Reviewer playtime concerns engagement among selected reviewers, not development scope; price may itself change after success. Those gaps prevented causal explanations from inheriting the numerical confidence of the descriptive tables.
Fable verification: genre labels, rare pairs, supply waves, and multiplicity:
- With twenty returned tags in the 2023–2025 paid non-explicit cohort, Roguelike Deckbuilder had 412 games, 36.9% reaching 100 reviews, and 1.76 times quarter/price expectation. Online Co-Op + Roguelite had 173, 45.7%, and 1.92 times expectation; Auto Battler 657, 22.4%, and 1.50; Action Roguelike 2,966, 17.1%, and 1.20. Arcade and Precision Platformer were weaker at 0.63 and 0.54 times expectation.
- Minimalist’s low raw rate, 9.6% among 3,290 games, became nearly ordinary after date/price comparison, 0.98 times expectation. Seven-tag membership looked weaker, making the claim definition-sensitive. Online Co-Op + Roguelite remained favorable after removing its three largest games, 76/170 above 100 reviews. Local Co-Op + Action Roguelike was materially different: 28/133 crossed 100 and its adjusted comparison against other action roguelikes was about 0.83 times expectation. Neither dataset measured implementation effort.
- Card Game + Base Building exactly reproduced Fable’s six-of-eight result under seven tags. At twenty tags, 22/43 crossed 100 reviews, or 19/40 excluding the three largest games; constituent comparisons remained favorable. But “zero 2026 entrants” became eighteen January–August entrants, only two above 100 reviews and neither also 80% positive. Older evidence was stronger than young-cohort confirmation.
- Roguelite + Mystery weakened from five of nine above 100 reviews with seven tags to 17/111 with twenty, becoming ordinary overall and weak against its constituents. Retro + Idler retained a favorable 40/119 above 100, thirty also 80% positive, but 131 newer members contradicted “nearly empty.” Loot + Idler reached 35/104 above 100, with only twelve also 80% positive. These were verification findings, not recommendations that the owner make idlers.
- Fable’s screening rules generated 10,804 eligible rare-pair comparisons and 347 nominally significant formula results. Only three survived a .05 Benjamini–Hochberg adjustment; the named card/base-building, retro/idler, and roguelite/mystery cells did not. A selected small-cell p-value did not justify “proven whitespace,” even where broader evidence remained favorable.
- Supply waves were real: seven-tag Idler first-half releases rose from 93 in 2023 to 593 in 2026, close to Fable’s count; broad Shop Keeper membership rose from forty in 2025 H1 to 250 in 2026 H1. Younger games’ smaller current totals did not establish saturation. Vampire Survivors lacked Bullet Heaven even among its twenty returned tags, directly corroborating tag blindness.
- Named luck-machine/build-adjacent successes were independently visible: Nubby’s Number Factory 18,062 reviews, CloverPit 24,589, Slots & Daggers 7,361, BALL x PIT 24,571, Scritchy Scratchy 14,898, and RACCOIN 4,202. Their existence, and large R.E.P.O./PEAK/RV There Yet totals, did not supply an unsuccessful-game denominator or validate a retrospective taxonomy as a predictive “crystal ball.”
Fable verification: advertised options, vocabulary, features, timing, and unresolved claims:
- Numeric option claims appeared in 6.5% of games clearing Fable’s formula versus 3.2% of sub-ten-review games, or 12.8% versus 7.3% within build tags. Auditing descriptions found simultaneous soldier counts, enemy abilities, overlapping per-character/total counts, and sums of unlike systems. A stricter largest-individual-count rule excluding units and nearby enemy contexts still found a favorable association: 128 games claimed 300-plus options; 78 with adequate detailed comparisons produced 1.76 times the expected 100-review count.
- Favorable controlled vocabulary associations persisted for “synergies,” “playstyle,” “build,” and “expand”; “levels,” “score,” and “reflexes” remained unfavorable, while “experiment” became nearly ordinary. This described product positioning and response, not what would happen if otherwise identical store copy changed words. Advertised quantity did not establish meaningful build depth or the causal value of adding items.
- Controller support and ten or more supported languages were associated with 1.73 and 2.05 times expected 100-review counts; demo presence was much weaker, 1.08. Achievement support correlated strongly, but the independent catalog lacked achievement counts and could not verify a thirty-achievement rule.
- Using Valve’s actual 2023–2025 sale schedules, seasonal-sale launches reached 100 reviews at 7.7%, versus 16.6% on ordinary dates outside adjacent-week groups. Comparisons within year, month, price band, and primary tag gave about 0.52 times expectation, supported for 1,783 of 3,079 sale releases. The immediately preceding week was near ordinary expectation; September fell to about 0.95 times expectation, while Thursday retained a modest association. Launch selection prevented a causal timing prescription.
- “Quality cannot rescue cold starts” was not established. Recommendation rates among selected reviewers are not interchangeable with quality, and conditioning on launch momentum may block a route through which quality affects response. Of 4,070 reviews created within ninety days, 143 were edited later; edits do not prove recommendation changes but rule out assuming frozen original sentiment. Valve’s narrow statement about scores above 40% not directly affecting algorithmic visibility did not exclude conversion, recommendations, or word of mouth.
- Art-tier probabilities were not independently rescored; Fable’s 74% came from an outcome-balanced sample, not a catalog probability. Localization supply could be checked but demand shares and returns could not; “Japanese is dead weight” remained unsupported. Catalog-wide tail prevalence, update/revival rates of 5.6% and 14.3%, Next Fest incremental traffic, complete Early Access/graduation comparisons, complaint prevalence, and AI-art rejection effects lacked the necessary independent data at this stage.
- The verification passed 1,024 checks. Its durable entry points are
/home/adn/a327ex/steam-research/fable-verification-2026-09-06/findings.md,claim_register.csv, andREADME.md; the saved manifest contained 69 artifacts. No fresh bulk catalog collection or image downloading was needed.
Research-direction discussion and the owner’s evidence boundary:
- Asked for interesting directions beyond previous sessions, the assistant proposed keeping build discovery alive, meaningful new formats, catalog variety, finished games’ continuing lives, single-player games as shared activities, and traditions missed by English-centered interpretation. It initially preferred build discovery, connecting it to the owner’s interest in meaningful builds and spacious works.
- The owner rejected the strongest explanatory promises: “You can't reliably get this kind of detail from the data.” He considered avenues three and four viable and six “particularly interesting,” but found one, two, and five hard to measure reliably in sufficient detail.
- His example was that SNKRX could arguably be a precursor to Vampire Survivors and the broader VS-like genre, a relationship descriptions alone would be highly unlikely to recover. The assistant accepted the correction: similarity, ancestry, and influence differ, and a convincing-looking family tree could be wrong. No claim that SNKRX’s influence had been established was made.
- The retained questions became narrower: whether catalog growth spreads across more advertised activities; how dated review arrivals distribute across game lifetimes; and which games have substantial non-English review activity with relatively little English review activity. Explanations of mechanics, originality, creative traditions, or causes would require separate evidence instead of being promised from metadata.
- The owner first authorized the language study with “Go ahead,” then requested the other retained avenues. Later he separately asked to discuss developer lives before collection, approved all seven proposed career avenues, and explicitly requested game and developer links wherever available.
Language attention: sampling, collection, and stopping behavior:
/home/adn/a327ex/steam-research/language-attention-2026-09-07/contains the study. The frame was 13,536 paid games released in 2019–August 2026, outside Steam’s explicit-content descriptors, with at least 100 snapshot reviews. Selection used three release periods and four review-count bands, without names, English-looking descriptions, or language support influencing inclusion.- A 24-game pilot validated global and English review counts. Larger Steam pages sometimes exposed usable aggregate properties and scored-language subsets; smaller games needed separate all-language and English API summaries. Four independent store/API comparisons agreed within the stated tolerance. The frozen main design selected forty games in each of twelve strata, 480 total.
- The collector stopped on a read timeout at Indivisible after 458 successful observations, following the zero-retry, stop-on-error rule; there was no HTTP 429. Analysis retained the complete balanced prefix of 456 games, 38 per stratum, with two completed extras marked supplementary. The failed game was not replaced and the additional planned per-language API profile pass did not run.
- The completed primary sample used 200 store-property observations and 256 API observations, covering 6,681,746 aggregate reviews, 3,417,300 marked English. Returned scored-language subsets existed for 200 games; unreported languages remained an explicit remainder, never assumed zero. This subset coverage favored larger games and could not support a population estimate of all named-language majorities.
- Collection used a scoped policy with a 1,400-request cap, at least two seconds between starts, no retries, a 4 MB response cap, and a single locked collector. It ended after 768 requests and passed 2,134 verification checks. No reviewer identities or media binaries were collected; collection was closed.
Language attention: prevalence, availability, and category concentration:
- Weighted to the eligible population, 49.9% of games had a non-English majority (approximate 95% interval 43.7–56.2%); 21.9% had at most 25% English reviews (16.7–27.1%); and 13.3% had at most 10% English (8.9–17.6%). These were estimates of game proportions, not raw sample percentages or shares of buyers.
- A stricter discovery screen required at least 500 non-English reviews, fewer than 100 English reviews, and at most 10% English. Twenty-four sampled games met it, corresponding to 4.7% of the frame (2.7–6.7%), roughly 634 games with a sampling range around 367–901. Both absolute count and percentage mattered: low English share alone can coexist with thousands of English reviews.
- Of 51 observed games at or below 10% English, 38 listed English support. Weighted, around 63% of this low-English group supported English; among all English-supported games, an estimated 8.8% were still at or below 10% English reviews. Availability therefore explained only part of the pattern, without identifying translation quality, timing, or its causal effect.
- Low-English weighted estimates were 28.1% for RPG and 33.0% for Visual Novel, versus Strategy 16.5%, Simulation 16.2%, Adventure 12.9%, and Action 6.5%. Tags overlapped: excluding Visual Novel/FMV from RPG reduced its estimate to 18.8%. Excluding those narrative tags from the whole sample still left 9.0%; excluding Sexual Content/Nudity/Hentai tags left 11.3%.
- There was no convincing release-era trend: the ≤10%-English estimates were 13.6%, 13.2%, and 12.3% across 2019–2022, 2023–2025, and January–August 2026, with overlapping uncertainty. Ten Roguelike Deckbuilders and six Auto Battlers were too few for narrower genre rankings. This identified an underrepresented part of Steam, not a sudden new movement or a reconstructed creative tradition.
Language attention: concrete discoveries beyond the English review view:
- Traveler of Wuxia had 3,148 reviews, 84 English (2.7%), and listed English support. Its pitch described Wuxia deckbuilding, martial-arts card combinations, teammates, events, and progression across deaths. Simplified Chinese supplied 86.7% of reviews and Traditional Chinese 10.2%; English positivity was 86.9%, close to Simplified Chinese’s 84.9%.
- Dream of Corpse Lady had 2,080 reviews and 100 English (4.8%), with English support. It advertised a puppet-army deckbuilder with follower talents, artifacts, and powers accompanied by curses. Simplified Chinese supplied 88.2% of reviews; positivity was 93.1% there and 92.0% in English. Its exactly 100 English reviews put it outside the stricter fewer-than-100 screen, while leaving it a useful supplementary example.
- Pass the Fear had 2,937 reviews, 178 English (6.1%), with English support; its advertised shooting/multiplayer builds used weapon parts, relic fusion, Tarot cards, and interacting effects. English positivity was 87.6% versus 77.6% in Simplified Chinese, which supplied 86.1% of reviews.
- Fickle Card Legend had 965 reviews but five English (0.5%), despite listed English support. It advertised real-time side-scrolling card battles, Warrior/Mage/Taoist progression, and equipment; overall positivity was only 67.7%, and its dominant language was unresolved. Tetra Project — 原石计划 had 530 reviews and one English, without English support; it described grid tactics, cards, randomized runs, teammates, environmental interactions, and mod support.
- 轮回修仙路 had 2,943 reviews, 31 English (1.1%), no listed English support, and 96.4% Simplified Chinese reviews. It advertised cultivation, alchemy, forging, spirit creatures, and reincarnation, with activities consuming lifespan and later lives retaining parts of progression, relationships, and equipment. Legend of Mortal supplied a much larger narrative/martial-arts example: 33,661 reviews, 497 English (1.5%), no listed English support.
- Eastern Exorcist had 6,099 reviews, 333 English (5.5%), and English support, with 88.3% Simplified Chinese. Millennium Dream had 2,588 reviews and 52 English, with English support; it advertised walking and photography through childhood environments using a Chinese Dreamcore aesthetic, and 95.6% of reviews were Simplified Chinese.
- Other-language examples included Chushpan Simulator, 2,460 reviews and 75 English, 95.2% Russian, advertising work and street/social life in Uryupinsk; and Love Delivery, 2,407 reviews and 36 English, 96.9% Korean, a romance/life-management example. These broadened the evidence set without becoming recommendations to pursue those genres.
- Traveler of Wuxia, Dream of Corpse Lady, and Tetra Project were highlighted as useful build-game references. Their descriptions supplied inspection leads, not verified depth or originality. Among eighteen low-English games with a confirmed single non-English majority, sixteen were Simplified Chinese, one Russian, and one Korean; thirty-three other low-English games lacked enough breakdown data, so that ratio was explicitly not generalized.
Language attention: small English audiences and differing reception are separate findings:
- Across 389 games with at least fifty English and fifty non-English reviews, the median absolute recommendation gap was 2.5 percentage points; 41 games had gaps of at least ten points. Low English attention often coexisted with favorable English reception, rather than rejection by English reviewers.
- Monster Hunter Wilds supplied a large-denominator disagreement: English 84,802 reviews at 70.4% positive; Simplified Chinese 49,452 at 21.3%; Japanese 18,785 at 30.6%; Traditional Chinese 15,057 at 45.1%; Korean 11,068 at 57.6%. Counts established the difference but could not identify performance, localization, expectations, events, or other causes.
- Legend of Mortal demonstrated why “non-English” is not one audience: Simplified Chinese 17,122 reviews at 61.6% positive; Traditional Chinese 11,796 at 93.5%; Korean 3,705 at 94.8%; Japanese 532 at 98.7%; English 497 at 92.4%. Script/language labels were not converted into country labels.
- Poly TD offered the opposite English/non-English direction: 62.5% positive among 56 English reviews versus 83.9% among 522 non-English reviews, with the smaller English denominator retained.
- Durable outputs include
/home/adn/a327ex/steam-research/language-attention-2026-09-07/findings.md,annotated_discoveries.csv,selected_examples.csv, andREADME.md, plus aggregate observations, profiles, sampling probabilities, and inspected language charts.
Catalog variety: supply expansion versus comparable advertised breadth:
- The owner authorized the two remaining avenues after the language results. Catalog analysis reused paid games outside explicit-content descriptors, comparing all returned tags, a fixed set of 181 activity/genre tags, and short descriptions. Full-cohort counts were paired with equally sized samples to prevent more releases from mechanically implying more variety.
- Eligible releases rose from 7,959 in 2021 to 15,674 in 2025, up 96.9%. Distinct activity-tag pairs rose from 5,549 to 7,074, up 27.5%, but expected distinct pairs in equal 3,000-game samples rose only from 3,812 to 3,980, up 4.4%. Pairs represented at least five times rose 6.9%, from 999 to 1,068. The ten most common primary activity labels fell from 59.7% to 56.8% of assignments.
- January–August 2025 versus 2026 gave the same broad reading: release count grew 42.4%, comparable pair richness 3.7%. There was modest broadening and redistribution within familiar advertised territory, far less than proportional to supply growth.
- Older tag coverage was a major confounder: the median 2019 game had nine tags, and 35.2% had five or fewer; by 2021 the median was twenty and only 1.8% had five or fewer, declining to 0.4% in 2025. Valve’s June 2020 Tag Wizard was consistent with changed tagging practice, but the snapshot could not attribute the difference to it.
- Recent 2021–2025 checks remained modest: exactly-twenty-tag games showed about 2.6% comparable richness growth, exactly three activity tags per qualifying game about 4.5%, and games with at least 100 reviews about 10.2%. These selected different populations and were sensitivities, not interchangeable estimates.
Catalog variety: familiar labels, newly observed pairs, and description similarity:
- Adventure (+897 primary-label releases), Action (+835), Strategy (+709), Horror (+521), RPG (+388), and Action Roguelike (+321) together accounted for about 47.6% of net 2021–2025 growth. Horror’s primary-label share rose from 2.5% to 4.6%, Action Roguelike from 1.1% to 2.6%; Idler and Incremental reached about 1.3% each, while generic Action and Puzzle lost share.
- Of 2025’s observed activity pairs, 2,490 were absent from the 2021 cohort; only 268 occurred in at least five 2025 games and eleven in at least twenty. These additions supplied only 4.5% of all 2025 pair occurrences. Repeated examples included Desktop Companion + Idler, Management + Shop Keeper, Job Simulator + Management, and Idler + Loot. New tag combinations were not automatically newly invented activities.
- Equal 3,000-game nearest-neighbor comparisons used tag overlap and short-description wording, then excluded shared developers, shared publishers, and prolific-credit effects through further variants and smaller replications. With different developer credits, median nearest tag similarity changed from 0.421 in 2021 to 0.429 in 2025; nearest short-description similarity changed from 0.156 to 0.153. There was no general increase in textual sameness.
- Exact repeated puzzle descriptions, variants, and separate editions existed, often sharing credits or publishers. They did not establish that the entire market was becoming clones. Conversely, different wording did not prove mechanically different games, and English-oriented descriptions missed some variety highlighted by the language study. Current tags also could not reconstruct historical storefront positioning.
- The result was deliberately limited to advertised variety, without judging whether developers had become more or less creative.
/home/adn/a327ex/steam-research/catalog-variety-2026-09-07/findings.mdand its scripts/tables document the analysis, which passed 48 checks and included an inspected chart.
Game lifetimes: a bounded random history sample and valid clocks:
- The lifetime study froze sixty randomly selected games across release eras 2016–2018, 2019–2021, and 2022–2024, with five per cell in four current-review bands: 0–49, 50–199, 200–999, and 1,000–9,999. Games with at least 10,000 reviews were excluded to keep collection bounded. The frame contained 65,839 games, 98.6% of otherwise eligible app identities but a much smaller fraction of review volume.
- Collection completed 51,127 surviving all-language Steam-purchase review records in 604 requests, with no request errors. It saved arrival histories without reviewer accounts or text. Forty-eight of sixty histories matched API summary totals exactly; the largest discrepancy was four reviews. Cursor exhaustion and source-count tolerances were checked.
- Cloudbase Prime’s recorded release date was about 300 days after its earliest surviving review; Curious Expedition’s was about 472 days later. Early reviews included Early Access flags. Both were excluded from release-anchored comparisons, leaving 58 valid dates, while a separate first-surviving-review clock was retained.
- Exact-day launch windows, zero-activity months, complete recent calendar years, and comparable opportunities for late events were kept explicit. A late review could be written by an existing owner rather than a newly acquired player; curves alone could not identify updates, recommendations, or promotion as their cause.
Game lifetimes: accumulation beyond launch and continuing quiet activity:
- Among 44 valid-date sampled games with at least fifty current reviews, the weighted median first-year total was 1.50 times the first-ninety-day total: about one-third of year-one reviews arrived during days 91–365. The first-review clock gave essentially the same result; exact-summary-matching cases gave 1.45. Current outcome bands were not launch-time predictors.
- Unweighted shares of first-year reviews arriving after day ninety were 28.6% for currently 50–199-review games, 36.7% for 200–999, and 48.9% for 1,000–9,999. A special cheap-game tail advantage was not established: first-year/day-90 ratios were 1.50 at current prices up to $5 and 1.49 above $5, in only fourteen and 27 valid cases.
- For 42 games with mature second-year windows, the weighted median year-two count was 41% of year one; only three had more reviews in year two. Nevertheless, among the 44 valid-date games with at least fifty current reviews, 43 added ten or more reviews after year one, 33 added fifty, 29 added 100, and fourteen added 500. These were observed counts, not population percentages.
- The current first-year share of accumulated reviews had a weighted median of 50%, but differed by age: roughly 44% for 2016–2018 games, 42% for 2019–2021, and 68% for 2022–2024. It could not become a forecast that half of eventual response always arrives after year one.
- For games currently at fifty to 9,999 reviews, weighted recent-year estimates for September 2025–August 2026 were: any review 88.1% (95% interval 79.0–97.2%); at least twelve 55.2% (41.0–69.4%); reviews in at least nine months 49.6% (36.2–63.0%); and all twelve months 24.8% (16.4–33.3%). Five games per original cell made intervals approximate.
- Recent-year median counts by current band were one, four, 22, and 237. Eight of fifteen sub-50 games had any recent review, but none had twelve; all fifteen in the 1,000–9,999 band had at least twelve and activity in nine months, thirteen in all twelve. Across the whole weighted frame, the recent median was only two reviews because very quiet games were numerous. Continued activity was not synonymous with a large continuing audience.
Game lifetimes: persistent streams, gradual strengthening, and burst thresholds:
- Madness Cubed had 10/27/101 reviews by days 30/90/365 and 83 in the latest full year: a small persistent stream without requiring a spectacular revival. Superfighters Deluxe had 180/246/634 and 280 recently, illustrating a stronger launch followed by continuing smaller activity.
- V-Rally 4 had 62/69/103 at those ages and 185 recently; it gradually strengthened without passing the sharp-burst screen. It was the only latest-year total above year one among 42 non-overlapping comparisons. Yao-Guai Hunter had 437/667/1,114 and 237 recently. Warstride Challenges had 81/95/120 and fourteen recently; This Means Warp had 102/136/215 and 22. A late spike could coexist with a small later baseline.
- The principal late-burst screen required a three-month block after year one, at least twenty reviews, and at least four times the preceding six months’ monthly rate. It found seven games among 58 valid dates: Yao-Guai Hunter (February 2025, 104 prior-six-month reviews → 283 next-three-month reviews), Warstride Challenges (July 2023, 4 → 45), This Means Warp (May 2023, 35 → 76), 旅者 Travelers (January 2023, 1 → 53), Vox Machinae (February 2022, 28 → 75), 沙雕之路 (April 2026, 13 → 35), and Christmas Nightmare (October 2025, 11 → 32).
- Loosening the screen to fifteen reviews and three times the rate found eleven games; tightening to fifty reviews and six times found four. There was no threshold-independent revival probability. A mature first-two-year opportunity window left only three cases among 42 qualifying fifty-plus games, too few for a precise era trend.
- The durable distinction was continued accumulation, gradual strengthening, and abrupt bursts. A burst detector captured only the last.
/home/adn/a327ex/steam-research/game-lifetimes-2026-09-07/findings.mdand accompanying data/scripts/charts preserve the study, which passed 1,272 checks and closed collection.
Developer lives: approved questions, response definitions, and sampling limits:
- The owner requested a final research direction into how developers’ lives on Steam evolve: consistently successful catalogs, one-hit catalogs, sequences that become strong after a hit, and other permutations. He asked to discuss before starting, then authorized all seven proposed avenues and required concrete game/developer links.
- The approved questions separated floor after a first hit, information added by repeated hits, different one-hit patterns, quiet releases following prior strength, early versus late breakthroughs, genuinely consistent catalogs, and new launches coinciding with renewed back-catalog attention. No-follow-up and immature-follow-up states remained visible.
- Broad analysis covered 93,013 included games across 59,259 credited developer names. Quiet meant fewer than 100 reviews; moderate 100–999; strong at least 1,000; large at least 10,000. These were response bands, not profitability or value judgments. Games younger than one year were excluded from mature-sequence statistics, and nearby thresholds were checked.
- Broad career shapes used September 5 cumulative counts; dated launch-time histories were a separate illustrative investigation. Steam credits could not establish complete personal careers, retirement, other employment, development duration, or who was working elsewhere. Public developer links were recorded creator pages when available and developer-filtered Steam pages otherwise.
- Outputs are in
/home/adn/a327ex/steam-research/developer-lives-2026-09-07/, includingfindings.mdandcase_atlas.md. The atlas contains eighteen developer pages and 88 games with dates, review counts, recommendation percentages, and maturity flags. All eighteen developer links were checked successfully; the study passed 1,182 verification checks.
Developer lives: a durable floor versus a repeatable peak:
- A fixed five-year follow-up examined 1,268 developers whose earliest released game currently above 1,000 reviews dated from 2015–August 2020. Only 529, or 41.7%, released another included game within five years. Among returners, 83.2% had a next game at 100 reviews, 45.4% at 1,000, and 54.1% had any subsequent 1,000-review game in the window. Including non-returners made that last outcome 22.6%.
- Of 129 developers with at least three follow-ups, exactly their first three were compared: 72/129 = 55.8% kept all three at 100 reviews, but only 22/129 = 17.1% kept all three at 1,000. The median weakest follow-up had 165 reviews; the median three-game median was 547. Continued meaningful response was much more common than repeatedly clearing the higher line.
- Big Robot illustrated moderate work after a peak: AVSEQ 30 → Sir, You Are Being Hunted 2,875 → The Signal From Tölva 791 → The Light Keeps Us Safe 128.
- BeautiFun Games had a different surrounding catalog: Nihilumbra 2,296 → Megamagic 23 → Professor Lupo and his Horrible Pets 35 → Professor Lupo: Ocean seven. Both were one-hit under the chosen line, but that label obscured the difference.
- Daniel Mullins Games showed why comparing only with one’s own peak misleads: Pony Island 14,761 → The Hex 4,480 → Inscryption 134,744. The middle game was smaller than its predecessor while still substantially reviewed.
Developer lives: repeated hits, their magnitude, and one-hit permutations:
- Taking one latest qualifying transition per developer with at most ten mature games, one earlier strong game corresponded to 36.5% next-game strong outcomes among 705 cases, median next reviews 530; two earlier strong games gave 51.6% among 192, median 1,102; three or more gave 60.5% among 114, median 1,547.
- Comparisons within similar eras, prior peak sizes, and current next-game price groups reduced the repeated-hit observed/expected ratio to about 1.13, with support for 244/306 repeated-hit cases. More detailed matching lost substantial coverage. Two or more strong games but no prior peak above 4,999 gave a 35.0% next-strong rate in 123 cases; one 10,000–19,999-review peak gave 72.0% in fifty cases. Magnitude mattered considerably, and the latter group also had higher current next-game prices.
- Among 1,170 catalogs whose sole currently strong game was at least three years old, 700 had no subsequent included release, 61 only a follow-up less than one year old, 230 one mature follow-up, and 179 at least two. The largest category was not repeated failed attempts. Nolla Games had one included paid title, Noita, with 80,977 reviews; its store record did not establish inactivity.
- A narrower 683-catalog set with three-to-ten mature releases, an older start, and at least one strong game separated: 101 all-strong catalogs; fifty with quieter work followed only by strong releases; 173 with repeated strong games and other uneven results; 49 with quiet work between strong games; 63 one-hit catalogs followed consistently by moderate games; 23 followed only by quiet games; 82 followed by mixed quiet/moderate games; and 142 with zero or one mature post-hit follow-up.
- These were unfinished sequences, not permanent developer identities. Another launch or continued accumulation could change their classification. “Always successful,” “one-hit,” and “failed to match the last game” needed both absolute response and chronology to be useful.
Developer lives: quiet intervening games and late breakthroughs:
- After one immediately preceding quiet game, developers with no older strong work reached 100/1,000 reviews next in 10.5%/2.3% of 4,047 cases. With one older strong game, the rates were 50.0%/11.1% in 54 cases; with multiple older strong games, 62.5%/37.5% in sixteen. Older strength remained informative, but the later rows were small.
- After two consecutive quiet games, the one-older-hit group contained only 21 cases: 23.8% reached 100 next and 9.5% reached 1,000. A seeming rebound after three quiet games was only three strong outcomes among seven cases and did not justify a general rule. A separate three-year continuation study found another included release after 9.5% of quiet states without earlier strength, 42.3% with one earlier strong game, and 64.1% with several; these were observed release rates, not motivations or retirement estimates.
- Blendo Games traced Flotilla 202 → Air Forte eight → Atom Zombie Smasher 1,108 → Thirty Flights of Loving 1,282 → Quadrilateral Cowboy 896 → Flotilla 2 29 → Skin Deep 1,659. The 2018-to-2025 quiet-to-strong return was visible; the causal effect of the gap was not.
- Suspicious Developments illustrated a moderate interlude: Gunpoint 10,274 → Morphblade 264 → Heat Signature 6,851 → Tactical Breach Wizards 11,457. Morphblade was moderate, not quiet, despite appearing small beside the larger titles.
- In the five-year first-strong study, 29/36 developers whose first qualifying game came fourth or later returned, and 22/29 returners repeated strength: 80.6% continuation, 75.9% conditional repeat. First-game breakthroughs had 37.9% continuation and 55.1% conditional repeat. The late group was small and selected for already having persisted through multiple launches, so its advantage could not be interpreted as a benefit of delaying success.
- David Szymanski had The Moon Sliver 988, The Music Machine 494, and A Wolf in Autumn 405 before DUSK 22,045. Later included work ranged from DUSK ’82 380 to Iron Lung 10,141, Chop Goblins 2,873, Squirrel Stapler 2,046, and Butcher’s Creek 1,529. A 500-review line would change the first-hit index.
- Endlessfluff Games offered a smaller-scale example: Legend of Fae 105 → Valdis Story: Abyssal City 2,275 → Fae Tactics 1,168. Later first-strong games typically had current prices 1.5–1.65 times those of predecessors, and about 28% had different current publisher labels; historical prices, arrangements, and causal mechanisms remained unobserved.
Developer lives: consistency across mature catalogs:
- Among 426 catalogs with four-to-ten mature releases and at least one strong game, 186 (43.7%) kept every game above 100 reviews, 35 (8.2%) kept every game above 1,000, and sixteen also kept all games at or above 80% positive. Among 99 catalogs with a 10,000-review peak, 62 maintained the 100-review floor and 27 the 1,000-review floor.
- Harvester Games had The Cat Lady 4,792 → Downfall 1,455 → Lorelai 1,440 → Burnhouse Lane 1,029: unequal totals with a substantial floor.
- Freebird Games had To the Moon 69,477 → A Bird Story 8,206 → Finding Paradise 18,101 → Impostor Factory 11,953 → Just a To the Moon Series Beach Episode 3,782. A dominant early peak coexisted with a substantial continuing catalog.
- Erik Asmussen / 82apps had three mature qualifying games: Robot Roller-Derby Disco Dodgeball 2,253, Factory Town 4,140, and Factory Town Idle 1,231. Factory Town 2: Paradise was dated July 2026 and its 149 snapshot reviews were excluded from mature statistics instead of being used to declare consistency over.
- Reported franchise continuity correlated with a higher floor, but missing franchise metadata prevented a clean comparison with unrelated IP. Same-publisher status did not show a clearly superior floor. Neither finding supported instructing the owner to remain within a franchise or publisher arrangement.
Developer lives: historical reconstruction and back-catalog attention:
- New historical collection covered six contrasting catalogs: Erik Asmussen, Endlessfluff, Blendo, Big Robot, BeautiFun, and Abbey Games. It added 32,974 surviving review records from 26 games; with existing histories, the comparison contained 48,419 records across fifty games and eleven complete included-paid catalogs. This deliberately selected historical sample was kept separate from broad population tables.
- Among 26 eligible later launches, isolated from other included paid launches by at least 180 days each side and with older games at least a year old, fifteen coincided with increased older-game reviews over the next ninety days. Seven gained at least ten; median increase was five reviews, or 2.5 after requiring at least five pre-event reviews.
- Concrete prior-90-day → following-90-day older-catalog counts were: Blendo’s Skin Deep 32 → 58; Abbey Games launching Reus 2 40 → 61; a327ex launching SNKRX, with BYTEPATH as the older game, four → twelve; Factory Town Idle 111 → 91; and Studio Fizbin launching Reignbreaker 204 → 149.
- Seasonally aligned earlier windows gave a modest positive association, but changing underlying rates remained a confounder. Independent controls supported only eighteen of 49 eligible game/event pairs, giving 280 subsequent reviews versus 244 expected, around 1.15 times. Coverage and selected cases made this unsuitable as a general launch multiplier; no customer transfer or dependable causal back-catalog lift was established.
- In eight of 38 selected transitions, current cumulative counts assigned more prior strong games than reviews dated before the later launch did. Neither of Blendo’s two earlier games now above 1,000 had 1,000 surviving pre-Quadrilateral Cowboy reviews. Rad Codex had 809 surviving Horizon’s Gate reviews before Kingsvein, versus 1,212 now.
- Equal-age year-one counts sharpened different trajectories: Abbey’s Renowned Explorers 845, Godhood 343, and Reus 2 1,776; Blendo’s Quadrilateral Cowboy 290, Flotilla 2 thirteen, and Skin Deep 1,551. Current totals alone understated the newer rebounds. Historical tables identified unsuitable release clocks and incomplete original-reception evidence.
- The retained reading for the owner’s interest in a varied body of work was maintaining a continuing level of response versus continually matching the largest work. Substantial uneven catalogs existed alongside genuinely quiet subsequent sequences; neither should erase the other.
SNKRX late-update question: decision frame and feasibility:
- The owner’s final research question was whether to update SNKRX after roughly five years without updates. He explicitly asked to assume it “takes no effort for me whatsoever,” acknowledged that assumption was false, removed competing uses of time from comparison, and asked first whether the data could answer correctly or what approach would be used. After the feasibility explanation, he authorized the investigation.
- Existing histories alone could not answer reliably because there was no verified comparison population of substantial updates after approximately five years without one. Fable’s revival definition started at six months of low review activity; low review activity and lack of updates were different states, so his revival rates did not answer this question.
- The agreed approach was to find attempts independently of outcomes; verify gaps through announcements and changelogs; distinguish substantial content, maintenance, beta activity, paid expansions, and new releases; measure equal 30/90/365-day windows and later baselines; examine seasonal/control comparisons; and separately inspect evidence of existing owners valuing an update. The default was a substantial free gameplay/content update with an ordinary Steam announcement, keeping repricing and paid expansions distinct.
- A fixed ninety-game news sample came from a 7,118-game older paid-game frame, supplemented by SNKRX and targeted candidates. This helped find quieter attempts and exposed false positives: announcements about other games, maintenance changes, intervening updates, and Early Access exits. Sparse/empty news feeds could not prove no updates. Sylvio supplied a quiet relevant case from that sampling pass.
- The strict five-year sample remained too thin and heterogeneous for a reliable personal probability or causal estimate. Seven useful neighboring late-update cases were retained with explicit qualification, instead of representing them as exact replicas of SNKRX. The investigation was research only; no SNKRX code, update, or announcement was created.
SNKRX late-update investigation: dates, collection, and the game’s remaining response:
- The last announced SNKRX patch was Maintenance Update #3 on July 24, 2021. The July 1, 2022 announcement cancelled the rewrite; it was not a later game patch. The owner’s roughly five-year no-update premise was therefore accurate.
- Steam review date filters were tested against SNKRX’s already collected history: 118 returned records exactly matched the saved range, with terminal pagination and no missing/new IDs. This enabled targeted event windows instead of downloading every review ever written for the comparator games.
- Collection returned 8,372 records around seven late updates: Sylvio thirteen; Steredenn 63; Rogue Legacy 1,801; Crypt of the NecroDancer 2,859; Audiosurf 717; VVVVVV 857; Nuclear Throne 2,062. All event windows reconciled with Steam’s filtered totals; cursor chains were terminal and unique, event/late windows were recounted, and the date-filter check matched exactly.
- The scoped collector completed 241 requests, all HTTP 200, at a minimum observed spacing just over two seconds. Collection closed, the root bulk-catalog network policy remained paused, and the trajectory figure was visually checked. Announcement histories, aggregate seasonal and pre-event summaries, review-window records, event results, and selected textual evidence were retained.
- SNKRX’s previously collected history contained 4,197 surviving Steam-purchase reviews. It received 128 new reviews during September 2024–August 2025, currently 83.6% positive, and 87 during September 2025–August 2026, 88.5% positive: about seven reviews monthly in the latest year. These were newly written reviews, not counts of newly acquired players.
- Individual positive reviews dated December 28, 2025 and April 6–7, 2026 explicitly wanted more updates or regretted their absence. Other evidence requested characters/larger levels, reported a pause-menu failure costing runs, and criticized NG+ progression, reroll economics, or unclear difficulty explanations. The reported bug was not independently reproduced. A positive November 16, 2024 reviewer regarded the game as complete and rejected perpetual-update expectations. These views demonstrated interest and disagreement, not the proportion of all owners wanting changes.
Late-update comparators: seven qualified cases and measured outcomes:
- Sylvio / Stroboskop returned on July 6, 2022 after about 4.85 years between documented updates. Ninety-day Steam-purchase review counts were three before → zero after; annual counts ten → three. Its changes included running, custom bindings, accessibility/gameplay adjustments, and fixes. Zero new reviews did not prove nobody benefited or that the update harmed the game, but ruled out assuming an automatic revival.
- Steredenn / Pixelnest received its September 22, 2023 update after about 4.7 years between substantive patches. Ninety-day counts were eight → fourteen; annual counts 32 → 31. Its first month increased two → nine, followed by no larger annual total.
- Rogue Legacy / Cellar Door Games described a four-year return. The first public beta, June 21, 2018, was the primary event anchor, preceding the July 24 stable anniversary release. Primary ninety-day counts were 121 → 237; annual counts 802 → 623. Using the later stable date instead changed the comparison to 192 → 142 and 781 → 878, demonstrating why public access and event timing mattered.
- Crypt of the NecroDancer / Brace Yourself Games updated on June 30, 2022 after 1,721 days, about 4.7 years. Ninety-day reviews increased 258 → 587; annual totals 1,301 → 1,558. Paid SYNCHRONY DLC arrived 35 days later, contaminating longer windows; post-day-90 review activity averaged roughly the prior year’s daily rate.
- Audiosurf / Dylan Fitterer had about 5.1 years between announced fixes before February 15, 2020. Ninety-day counts were 112 → 107, annual totals 345 → 372: a smaller update with little obvious raw ninety-day increase.
- VVVVVV / Terry Cavanagh released version 2.3 on August 31, 2021 after seven years between major releases, with community/source work in between. Ninety-day counts were 125 → 140, annual totals 441 → 416; first-month counts increased thirty → seventy. The long major-release gap was not seven years of complete development inactivity.
- Nuclear Throne / Vlambeer released update 100 on December 5, 2025, eight years after numbered stable update 99, with beta maintenance intervening. Ninety-day counts increased 154 → 875; a full subsequent year was unavailable. These seven qualifications were preserved rather than collapsed into an exact five-year-gap success rate.
Late updates: large bursts, seasonal checks, and direct existing-owner benefit:
- Nuclear Throne’s first thirty days rose from 53 to 593 reviews. Its official anniversary announcement accompanied new content/options, expanded co-op, languages, and other improvements alongside discount/promotion activity. Previous-year equivalent ninety-day windows rose only 151 → 211, versus 154 → 875 during the update year. The seasonal difference strengthened the event association without separating code from publicity and discounting.
- After day ninety, Nuclear Throne averaged 2.28 reviews daily versus 2.09 during the preceding year: a striking burst and only modestly higher later baseline. Crypt’s free update also showed a burst, but the near-term DLC and roughly unchanged later daily rate weakened any lasting-revival attribution. Steredenn and VVVVVV likewise had first-month increases without substantially greater following-year totals.
- Same-season prior-year comparisons generally made several event responses look stronger than simple before/after ratios, but candidate control games had unknown discounts, concurrent updates, sparse news, and different audiences. The work did not produce a credible causal estimate or personal revival percentage for SNKRX.
- Selected reviews offered direct accounts of existing-owner value: an Audiosurf owner remembered the game through an article about the update; a longtime Crypt owner said the quality-of-life update prompted a first review, and another praised faster loading; a Nuclear Throne player reviewed after a decade because of the content update, while another welcomed custom options; a VVVVVV reviewer thanked the update and praised high-refresh presentation.
- The highlighted positive accounts were created and last edited on the same day near the event, making their temporal connection clearer than later-edited recollections. They remained selected examples, not audience prevalence. Existing owners who had already reviewed could return without adding another review, while late first reviews could come from longstanding owners. New-review totals therefore both missed some benefits and mixed renewed-owner engagement with new-player activity.
- Comparator scale also limited transfer: before their updates, Sylvio had 105 surviving reviews, Steredenn 536, VVVVVV 4,743, Nuclear Throne 13,721, and Crypt 18,168. SNKRX’s 4,197-review base was much larger than the quietest examples but its recent flow much lower than the largest roguelikes. Neither a Sylvio-like nonresponse nor a Nuclear Throne-like burst could be assumed.
SNKRX recommendation under the owner’s stated assumption:
- The assistant’s answer was yes under zero effort and no competing use of time: there was more evidence for some existing players valuing an improvement or returning than for treating five years’ absence as making an update pointless. Renewed attention was plausible; a lasting audience revival was not confidently predicted.
- The recommendation specifically favored improving the experience for people who still enjoy SNKRX and investigating concrete frustrations or more of what fans value. It did not determine the feature list, prove that a broad rewrite would help, or estimate sales/profitability. Restoring the real effort and opportunity costs would be a different decision question.
- There was an observed downside, not a hypothetical checklist: Steredenn’s late update broke Linux launching and needed hotfixes, while Sylvio needed an ammunition-behavior correction. Keeping a previous version available was suggested in response to those demonstrated regressions. The contemporaneous Steredenn thread preserved the issue and developer response.
/home/adn/a327ex/steam-research/late-updates-2026-09-07/README.mdis the report entry point.event_results.csvcontains calculated windows/results,selected_review_evidence.csvcontains dates/IDs and interpretations, andreview_trajectories.pngvisualizes the different patterns. The analysis and collection finished before the owner ended the session.
Durable artifacts, completion, and summary provenance:
- Six new research directories hold the substantive work:
/home/adn/a327ex/steam-research/fable-verification-2026-09-06/,language-attention-2026-09-07/,catalog-variety-2026-09-07/,game-lifetimes-2026-09-07/,developer-lives-2026-09-07/, andlate-updates-2026-09-07/. They retain reports, scripts, population/sample specifications, membership/evidence tables, validation results, and charts; bounded newly collected review data remain available in their study directories. - A publication bundle at
/home/adn/a327ex/steam-research/session-7-publication-2026-09-07/index.htmlcollects 276 report/chart/table/specification/script files, approximately 35 MB, for the session archive. Raw API pages and large Parquet datasets remain local. The six prominent inline figures cover Fable verification, selected language profiles, catalog variety, game lifetimes, developer sequences, and late-update trajectories. - The established bulk catalog stayed paused; subsequent network work used separately scoped, bounded collectors and ended closed. The language timeout was preserved as a stop rather than hidden through retries or replacement. No media bulk downloads, game changes, personal success forecasts, or causal revival percentages were produced.
- The owner concluded, “You may end this session, name it Steam Market Research 7,” and explicitly requested a subagent to read the generated Markdown log and create the summary because the parent had compacted. This summary follows the full generated conversation from the initial Fable-verification request through that end-session message, including substantive exchanges, final findings, corrections, and relevant tool evidence. Some original tool outputs were already truncated in the source log; no missing text or unreadable reasoning was reconstructed, and no withheld memory-file contents were used as summary material.
New Steam Market Research session, Find out where you stored the current data from your Steam Market Research 5/6 logs, then read through the summaries of 1 through 4. 5 and 6 were done by you, 1 through 4 were done by Fable. I'd like you to check what results Fable found with his data and then independently verify, prove, or disprove, amend, corroborate, detail, etc, his results with your own data. A thorough investigation of his findings with your own data.
GPT-6 Astra high
I’ll locate the current Steam dataset and the summaries for sessions 1–6, then map Fable’s findings to checks I can run against the newer data. I’ll distinguish what the data confirms, what needs revision, and what it cannot establish.
exec ([memory: sealed target])
[sealed content withheld: memory]
exec ([memory: sealed target])
[sealed content withheld: memory]
exec ({"code": "text(await tools.exec_command({cmd:\"cat steam-research/README.md; rg --files -g AGENTS.md -g CLAUDE.md ste...)
Script completed
Wall time 0.1 seconds
Output:
Warning: truncated output (original token count: 25331)
Total output lines: 1
{"chunk_id":"65e5b5","wall_time_seconds":0.000003812,"exit_code":0,"original_token_count":42972,"output":"Warning: truncated output (original token count: 42972)\nTotal output lines: 1362\n\n# Steam metadata snapshot — September 5, 2026\n\n**Complete within the documented public-catalog scope.** Network collection is closed. Image files, the image downloader, and its download queue remain deleted. No media binaries are included.\n\nThe clean game dataset contains **184,664 Steam game apps**: **128,972 released** and **55,692 upcoming**. There are separately **148 store-listed mods** and **355 other app records. All **185,173 discovered IDs** are accounted for through direct records or explicit redirects. These counts refer to Steam app identities, not a manual deduplication of game titles or editions.\n\n## Coverage and snapshot meaning\n\nAll 23 selected public storefront catalogs were enumerated completely: US, BR, JP, CN, DE, GB, FR, CA, AU, KR, TW, HK, RU, UA, TR, IN, SG, MX, AR, TH, ID, VN and ZA. Collected unique-ID counts match the maximum totals Steam reported for each catalog. A few totals increased during collection; the additional IDs were captured. The source response ranges are recorded in `coverage.json`.\n\nDetailed regional responses were collected for US, BR, JP, CN and DE. The other regions supplied catalog coverage and additional-game metadata. The separate Steam search audit remains a partial cross-check; its discovered package constituents are retained as non-game records. It is not the basis of the completeness claim.\n\nPrimary metadata was fetched from **2026-09-05T19:09:38.986403+00:00** through **2026-09-05T20:53:33.945370+00:00**. This is a September 5 collection window, not an atomic snapshot of a changing service. Fully delisted, unpublished, unlisted or exclusively available outside the checked storefronts can be absent. Nothing here claims to enumerate every app ever registered with Steam.\n\n## Available per-game data\n\nAvailability below refers to the clean, preferred per-game record (normally US, with regional fallback). It is not a count of every regional observation. All original returned JSON fields are preserved. The complete inventory contains **297 observed JSON field paths**, including container and nested-array paths, with per-game presence/nonempty counts and observed types.\n\n| Group | Data | Coverage |\n|---|---|---|\n| Identity/status | App ID, name, store URL/slug, item type, visibility; free, coming-soon and Early Access flags | 184,664 records; 18 names are blank |\n| Descriptions | Short description and full BBCode description | 183,399 short; 184,536 full |\n| Tags | Up to 20 returned tags, tag IDs/names, weights and rank | 184,621 games; 430 distinct tags |\n| Creators | Developer, publisher and franchise arrays; names and Steam creator-clan IDs where provided | 184,417 developer; 183,942 publisher; 36,967 franchise |\n| Release information | Steam/original/original-Steam/EA-exit timestamps; planned-release text and flags; platform release dates where supplied | 143,967 Steam timestamps; 16,045 original; 7,536 original-Steam; 774 EA-exit |\n| Review summaries | Review count, percent positive, numeric score and label; filtered/unfiltered/language-specific scopes kept separate | 184,664 filtered summaries; 158 unfiltered; 5,211 English-specific |\n| Purchase options | Package/bundle IDs and names, current/undiscounted price strings, formatted prices, discounts, included-game counts, edition/gifting/grouping fields | 110,402 games with purchase options; 110,092 with a best option |\n| Platforms/devices | Windows/macOS/native Linux flags, VR support and Steam device compatibility codes | 184,664 platform objects; codes may be Unknown |\n| Features | Player-mode, feature and controller category IDs, with Steam category labels | 184,660 nonempty category objects |\n| Languages | Language IDs, additional-language IDs, support/full-audio/subtitle flags | 184,559 language arrays; 184,482 with at least one supported language |\n| Content/ratings | Content-descriptor IDs; rating agency, rating, age gate, required age and descriptors where supplied | 43,085 content-descriptor arrays; 8,661 rating objects |\n| Related apps | Demo, standalone demo, playtest, parent and related-app references where returned | 38,507 related-app objects |\n| External links | URLs with link types and labels | 87,871 games |\n| Media references only | Artwork filenames/URL patterns, original and overridden assets; screenshot filenames/order/content grouping; trailer names/categories/formats/references | 184,654 artwork objects; 184,354 nonempty screenshot galleries; 168,253 trailer objects |\n| Provenance | Source country, fetched time, exact request and raw response; discovered IDs, catalog membership and redirect mappings | All primary records; 7 redirecting IDs in 33 country mappings |\n\nThe review summary includes zero-review games. Separate English-specific and unfiltered summaries are only present for the counts above; their absence is not a zero count. No other review-language breakdown should be inferred.\n\nMissing values remain missing. Where Steam omits false-valued status flags, the normalized free/coming-soon/Early-Access columns use the protocol defaults. A planned release timestamp is not evidence a game has launched. Device compatibility codes can mean Unknown. Prices are current storefront observations, and bundle prices are not standalone game prices. Asset modification times are not game update dates.\n\n## Not collected\n\nIndividual review text, review dates/histories, reviewer playtimes, owners, unit sales, revenue, wishlists, current-player counts, historical price/discount series, development duration, team size, marketing effort, achievement lists/counts and system requirements are not part of this dataset. Feature-category flags such as Steam Achievements support are retained. No image, trailer, audio or game binaries are present.\n\n## Files and formats\n\n- `2026-09-05/catalog.sqlite`: complete relational dataset, including all app types. Its `games` table is the app master; filter `type=0` for games. Views include `released_games`, `upcoming_games` and `mods`.\n- `2026-09-05/exports/games.parquet`: one row per game, with normalized columns and the full original preferred Steam item in `data_json`.\n- `2026-09-05/exports/other_apps.parquet`: the 503 non-game records, including the 148 mods.\n- Other Parquet tables: regional purchase/review observations, tags and labels, creators, languages, feature categories and labels, media URL references and associations, catalog membership, raw-page provenance and app aliases.\n- `2026-09-05/exports/games.csv.gz`: compact normalized game columns; use Parquet/SQLite for full nested metadata.\n- `2026-09-05/field_inventory.csv` and `.json`: exhaustive per-game JSON field inventory and availability counts.\n- `2026-09-05/exports/schema.json`: exact export table columns, SQLite types, keys and filtering.\n- `2026-09-05/raw/`: gzip-compressed response envelopes, with request parameters and timestamps, preserving detailed regional responses.\n- `2026-09-05/coverage.json`, `validation.json`, `alias_repair.json`, `metadata_complete.json`, `exports/manifest.json` and `provenance.json`: coverage, successful checks, normalization repair, completion, export row counts and code provenance.\n\nPrimary Steam sources are StoreQuery, StoreBrowse, Steam tag data, and store-category metadata. Protocol definitions were inspected through a mirror of Steam protocol schemas. No previous research logs or market-analysis outputs were imported; no third-party game estimates are included.\n\nChecks passed for database integrity, matching catalog counts, accounted-for app IDs, canonical-ID consistency, tag counts and definitions, relationship integrity, review-count/percentage ranges, duplicate primary keys, and removal of image files/downloader/queue. Parquet row counts were verified after writing.\n\n## Reuse\n\nThe collectors are resumable and retain raw responses before importing them. Network collection is disabled in `network_policy.json`; metadata requests use pacing and stop on HTTP 429. No image downloader remains. The Python scripts and the local `.venv` with PyArrow are retained for reproducible metadata processing and exports.\nfatal: not a git repository (or any parent up to mount point /)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n\nFILE a327ex-site/logs/fable-test-steam-market-research-1.md bytes 228227\nTitle: Fable Test — Steam Market Research 1\nDate: 2026-07-07 19:44:20\n\n# Fable Test — Steam Market Research 1\n\n## Summary\n\nFirst-principles Steam market research for a327ex, built from primary data only (Steam's own endpoints + SteamSpy bulk), deliberately indifferent to indie-marketing discourse (no howtomarketagame/Reddit/GDC/newsletters read — inputs = raw data + model priors). Greenfield: no prior Steam tooling existed in the repo. Built a resumable crawler + analysis pipeline under `E:/a327ex/steam-market/` (uv venv, SQLite stores, 8 reports in `reports/`). Session ran on Fable, got flagged/downgraded to Opus mid-way twice; ended before running the final 8 requested analyses.\n\n**Data infrastructure (`steam-market/`, NOT a git repo — new top-level dir):**\n- `scripts/steamspy_all.py` — SteamSpy bulk catalog (`api.php?request=all`), 1 page/min. Final: 82,233 games (owners buckets, playtime medians, dev/publisher, CCU).\n- `scripts/search_scrape.py` — Steam search index (`search/results/?infinite=1`, category1=998 games-only). KEY DISCOVERY: the search HTML embeds release date, top ~7 tag IDs per game, review count + positive %, price/discount, platforms — so tag-space analysis needs ZERO per-game calls. Final: 115,281 unique games (full catalog).\n- `scripts/histogram_crawl.py` — `appreviewhistogram/<appid>` monthly review rollups since launch (trajectory analysis). Ran to ~24K/34,654 (≥50-review queue).\n- `scripts/appdetails_crawl.py` — `api/appdetails` raw JSON (descriptions, categories, achievements, languages, DLC, demos). Stratified queue: ALL 5,596 window hits + 4,000 random window-failures + 3,000 window-mids + reviewed tail. Ran to ~15K.\n- `scripts/reviews_sample_crawl.py` — sub-10-review split + purchase-type (key-farming) split.\n- `scripts/reviews_lang_crawl.py` — per-language review counts, 728 games × 7 langs.\n- `scripts/demo_hist_crawl.py` — demo review histograms (~1,485 demos) for Next Fest detection.\n- All crawlers checkpoint per-row in SQLite `done`/`meta` tables → fully resumable by re-running the script. `scripts/common.py` = shared catalog loader (needs `sys.stdout.reconfigure(encoding='utf-8')` for Windows cp1252).\n\n**Revenue estimator (in-house, discourse-free), `scripts/calibrate.py`:** Calibrated ONLY on a327ex's own two games from `posts/snkrx_log.md` daily tables. Result: `revenue ≈ reviews × 35.9 × base_price` (band K=25–55). Satisfying cross-check: units/review ≈ 45 for BOTH SNKRX (day-55) and BYTEPATH (lifetime), 3 years apart. Steam's search review counts are score-ELIGIBLE (exclude key activations) → outcome analyses are farming-resistant (verified: SNKRX search 3,618 < purchase 4,194 < all 4,333). SteamSpy owner buckets UNDERCOUNT known truth (SNKRX bucket 50–100K vs 80K+ sold by day 55) → demoted to weak-check only.\n\n**Report 01 — delta map (base rates):** Volume DOUBLED (9.4K releases 2021 → 19.1K 2025, ~24K/yr 2026 pace) but median reviewed game held flat ~$13K since 2019; growth went into failure mass (≤9-review share 46%→55%). Paid-release hit rates eroded mildly: ≥$50K 16.0%(2021)→13.5%(2025). F2P flat ~15-18%.\n\n**Report 02 — tag scan + `scripts/drill_tags.py`:** Market baseline P(≥$50K)=14.3%. His 2021 tag neighborhood is bottom-decile (Arcade 5.5%, Minimalist 5.4%, Abstract 5.1%, Score Attack 3.7%, Precision Platformer 4.5%). Roguelite×co-op is top-decile with TINY supply: Online Co-Op+Roguelite 54.9% (33% at ≤$10), +Action Roguelike 50%, Roguelite+Loot 50% (42% at ≤$10), n=34-66 over 3 years vs 4,428 arcade games. Gold rushes decaying on schedule (Desktop Companion 47→9%, Shop Keeper 55→16%, Boomer Shooter 71→14%) EXCEPT Roguelike Deckbuilder (durable 24-46% across 3yr, Balatro effect). PRICE GATE: most tags' P(≥$50K) halves below $10; tags that HOLD at ≤$10 = FMV, Bullet Heaven, Idler, Auto Battler, Horror.\n\n**Report 03 — trajectories:** Classified 17,955 review-histogram curves. Launch-spike share rose 2%(2014)→17%(2023); median m12/m3 ≈ 1.74×. CHEAP GAMES HAVE LONGEST TAILS ($3-5: 2.26× vs $25+: 1.64×) → minimal-marketing long-tail model structurally favored at his price. Long-tail tags: Classic, Local Co-Op, Moddable, Level Editor, Physics.\n\n**Report 04 — anomalies (resource-normalized) + COMPOUNDING (the biggest finding):** Prior-hit devs (≥$50K in 2020-22) re-hit ≥$50K on 57.6% of 2023-25 releases (median $104K); veterans WITHOUT a prior hit: 6.4% (median $6K); first-time self-pub: 8.6%. **9× gap.** a327ex is in the 57.6% bucket (SNKRX + 2K+ followers). Advantage is PORTABLE across niche-switching (52.7% switchers vs 61.0% stayers). Still, 25% of ALL ≥$50K games are first-time self-pubs (market open). Outsider-viable tags (fs/all≈1.0): FMV, Cozy, Romance, Cooking. Publisher-dominated: Colony Sim 0.42, Roguelike Deckbuilder 0.47.\n\n**Report 05 — art gate (blind capsule scoring):** Scored 355 header images blind (4 niches × fail/mid/hit, tiers 1-5, no outcome knowledge). P(hit|art≥4)=74% vs P(hit|art≤2)=14%. Art is the strongest per-game gate — EXCEPT Idler (P(hit|art≤2)=27%, its hits mostly DON'T have good art: Nodebuster $2.99/$1.1M, Gnorp $6.99/$1.8M, Digseum $2.99/$676K, Fill Up The Hole art-tier-1/$121K). Horror tolerates ugly art at the top end (streamer-driven: The Complex/Eclipsium/MIMESIS $700-850K). This is the key asymmetry between his two candidate projects.\n\n**Report 06 — language gaps:** FMV=85% Chinese reviews (the \"spectacular FMV numbers\" are China live-action dating sims, wrong stack for him). Turn-Based 47% CN. CN localization among winners 74-98% = table stakes not edge. Japanese ≤4% demand everywhere = dead weight. REAL GAP: Idler 20% Russian review share but only 50% RU localization. Day-one CN+RU+PT-BR recommended.\n\n**Report 07 — feature signatures (stratified):** Hits vs failures: achievements>30: 44%/8%, full controller: 47%/20%, ≥10 languages: 41%/11%, DLC 46%/5% (post-hoc), self-pub 46%/82%. Demo 29%/18% = WEAK (counter-discourse).\n\n**Build-depth analyses (`scripts/build_tags.py`, `depth_claims.py`)** — run at his request (he likes items/passives/characters/abilities depth): ANY build tag h50 17.2% vs NO build tag 12.8%. At ≤$10 the alive build genres = Bullet Heaven 31.9%, Loot 23.0%, Roguelike Deckbuilder 18.3%, Auto Battler 10.5%. **Loot+Idler = live gold rush (42.6%, 36.6% at ≤$10, supply 34×).** ART-INDEPENDENT depth measure: mined numeric content claims (\"120+ items\", \"40 characters\") from raw descriptions — genre-controlled, hits advertise numeric depth ~2× as often, LARGE depth (300+) ~3×; dose-response among hits: 300+ total claims → $595K median vs $218K no-claim. Strongest nouns: characters 3.0×, items 2.6×, weapons 2.4× (favors SNKRX roster structure). Explained the Loot tag with examples (Megaloot, Overlooting, Loot of Baal, This Ain't Even Poker Ya Joker — sub-$10 winners take the loot-acquisition loop on a cheap chassis).\n\n**Next Fest analysis (`scripts/nextfest.py`) — resolved the \"demos don't matter\" challenge:** Fest calendar reconstructed BOTTOM-UP from synchronized demo-review peaks (weeks of 2025-02-20 [42 demos], 2025-06-05 [25], 2025-10-09 [16], 2024-10-10 [11] = the actual Next Fests, zero date priors). Demo checkbox nearly worthless (quiet demo slightly MORE common in failures). But a demo that got NF traffic: 10.2% of hits vs 0.7% of failures = 14× — strongest single outcome correlate measured. Yet doesn't scale winners (NF-spike hits $246K vs no-demo $218K median). Conclusion: participation free, only conversion counts; NF correlates with clearing the bar, not distance past it. Also refined demo-listing bias: hit/fail ratio shrank 2.0×(2023)→1.5×(2025) as demos became universal.\n\n**His decisions this session:**\n- Two candidate projects: (1) a more incremental-like BYTEPATH remake (best-fit in the dataset — art-immune niche, no low-price penalty, 900-node tree = honest depth claim, sequel-shaped into his followers; Nodebuster likely aesthetically descends from a BYTEPATH prototype), and (2) a roguelite with lots of build options. NOT making a pure idle game.\n- Correction he prompted: he was right that Arcade/Minimalist/etc were ALREADY bottom-decile in 2019-21 (ran the then-vs-now check: 2nd-8th pctile then too, 0.25-0.40× baseline). What actually changed: Roguelike fell 1.56×→1.09× baseline, Action Roguelike 1.16×→1.01× — the tailwind regressed, the dead tags were always dead. Corrected §2 of synthesis.\n- Warned him \"same deal as before\" (cheap action roguelite, $5) is the exact crowded-out spot; build depth is the engine, POSITIONING is the multiplier (turn-based roguelite 46%, roguelite+co-op 47-55%, RL deckbuilder 38.9%, loot-led 33.6%). Art gate returns the moment he leaves the incremental lane.\n\n**Process/feedback:**\n- Removed the \"Long Responses\" rule (NeoVim MarkdownPreview) from `E:/a327ex/.claude/CLAUDE.md` at his request — obsolete under Claude Code Desktop. Saved memory `feedback_deliver_in_chat.md`: deliver analyses FULLY in chat (session logs get published; content locked in files is lost to log readers), never launch NeoVim for answers.\n- Clarified end-session semantics: `/end-session` is archival only (writes/commits/pushes the log), does NOT terminate the conversation or kill background crawlers — the tab/process staying open is what keeps them alive. If tab left open, crawlers finish here; if closed, next session resumes them from SQLite checkpoints by re-running scripts.\n\n**8 analysis directions he picked for NEXT session (held for continuation):** (1) sequel vs new IP — decompose the compounding effect; (4) EV model for his actual next release; (5) gold-rush EARLY detection — predict the next Roguelike Deckbuilder [his TOP interest]; (6) whitespace map — rare-but-adjacent-to-winners tag combos [his 2nd]; (7) genre migration graph; (9) update-cadence effect (sawtooth detection); (10) description mechanic-mining; (12) review-text sentiment for build games [ONLY one needing a fresh crawl — kick off early]. Natural clustering: 1+4+7 = \"your decision\" set, 5+6 = \"find the wave\" set, 9+10 = quick add-ons. All data-ready except 12.\n\n---\n\n> Hi, I'm testing your capabilities, Fable, and I'd like to start on another task. Since 2021 I have not paid attention to the Steam market that much. I used to be extremely on top of it and know all the details about what you \"had\" to do to be successful in the market, but 5 years have passed and I'd like to update myself. Most of what I did involved collecting data on all Steam games and writing various scripts to answer questions I had and understand trends better. I'd like you to do some of that work today, however, I'd also like *you* to generate most research directions and questions and then useful answers that exploit openings in the market that other people might not have noticed. To do this, I'd like you to avoid reading ANY AND ALL Steam marketing research blog posts, such as howtomarketagame and similar. This isn't because those blogs aren't good, but it's because their own analysis is already what's on the minds of every indie developer, and I'd like insights that other people likely have not found, which means your analysis has to be fundamentally different from theirs. But again, you shouldn't read any of it because…15331 tokens truncated…80% positive. January–June 2026 had 132/33/22; July–August had 67/11/10. Corresponding other-build counts were 1,196/234/140, 953/138/79, and 565/64/35.\n- Date/current-price observed-to-expected ratios for reaching 100 reviews were 1.38, 1.19, and 0.97. Ratios for the joint 100-review/80%-positive benchmark were 1.50, 1.39, and 1.49. The newest cohort's adjusted review-volume advantage disappeared while its joint reception association persisted through 10 positive-reception cases among 11 substantially reviewed games.\n- That 10/11 fraction has a small denominator; its approximate 95% interval was 62%–98%. No stable 90.9% future positivity rate was inferred.\n- Including deck-tagged games missed by the old strict screen gave joint counts of 48/203, 26/151, and 11/81. Restricting to explicit deck language gave 34/135, 20/111, and 9/49, with adjusted ratios 1.50, 1.49, and 1.78. The favorable association was not solely created by the original wording filter.\n- Raw joint rates favored deckbuilders in all 27 combinations of three periods, three review thresholds, and three positivity thresholds. These were correlated sensitivity checks, not 27 independent replications.\n- Hybrid results were heterogeneous. Auto-battler hybrids had joint counts 10/17 in 2025, 1/18 in first-half 2026, and 2/7 in July–August. Party/tactics was close to the within-deck reference; pooling any hybrid produced only 1.14 times expectation using top-20 tags and 1.05 using top-ten.\n- Inventory Management's 10/27 joint count motivated a semantic audit. Only seven explicitly advertised packing, layout, formations, or wiring; six reached 100 reviews and four met the joint benchmark. Inventorix, Toy Smash Kaboom!, SealChain, Moonsigil Atlas, Turnbound, Wireworks, and Papercraft Tactics illustrated varied mechanics and mixed reception, not a proven spatial-build market advantage.\n\n**Configuration-rule pilot and design distinctions:**\n\n- Sampled 60 descriptions across five exclusive families and three periods, four per cell. Numerical outcomes and prices were hidden during labeling; names and embedded store quotations were still visible. Frozen labels and manifests preserve the original sample.\n- Labels: 29 concrete configuration rules, 25 generic configuration promises, six ambiguous. Joint-benchmark counts were 7/29 versus 2/25, but both groups had median five reviews, and median description lengths differed, 379 versus 231 words. Reputation, scope, and family also differed.\n- A narrower frozen explicit-interaction label produced 3/18 joint matches versus 7/42 without that label: exactly 16.7% in each. The attractive broad-label difference did not establish an interaction premium, so the pilot was not scaled into an asserted catalog-wide depth measure.\n- Design examples included positional projectile modifiers in D.P.S: Weapons Testing Facility 2; dice-triggered effects in Dice Gun Commando; card shape as a resource in Moonsigil Atlas; and trigger/condition/effect construction in Card Coder and Faith in Despair.\n- Sacrifice and competing uses broadened the prior conditional-value idea: King's Well trades spent cards against retained poker bonuses, Flowers and Deities lets units become spell fuel, and The Royal Writ can permanently lose a card that advances too far. Meaningful configuration can arise from opportunity cost and preservation as well as positive synergies.\n- These examples were useful design references even where review totals were tiny. No claim that a compelling advertised rule guarantees substantial reception was made.\n\n**Public writing and the move from genres to careers:**\n\n- Read public writing on small games, SNKRX development, creativity, competition, luck, Offerings to God, Writing and Gamedev, authorship, reusable work, and games as places. Relevant context included BYTEPATH (2018), SNKRX (2021), It Follows, technical infrastructure, and the owner's broader books-and-games ambitions.\n- Distinguished small production from a small experience: short production cycles can serve experimentation and skill, while games remain spacious to explore. Reusable systems and artistic capabilities are outputs that Steam review statistics do not measure.\n- Proposed seven directions: developer portfolios; time and attention a game asks from players; shared participation around single-player games; game lifetimes; catalog expansion and variety; highly engaged players' expressed experiences; and substantial work beyond familiar English-language references.\n- The owner selected portfolios. The other proposed directions remained options, not unrequested follow-on projects. Public writing informed the research questions without rewriting the owner's prose or turning the study into a revenue-maximization prescription.\n\n**Portfolio construction and source corrections:**\n\n- Reconstructed 93,013 eligible paid games across 59,259 normalized developer names, after exclusions for multiple/missing credits, ambiguous identities, and promotional titles. A listed developer may be an organization; neither a name nor a small catalog proves a solo maker.\n- Found that Steam creator/clan page IDs are unsafe unique developer identities: one page grouped 93 differently named developers. Rebuilt identity around normalized literal credit names rather than merging by page IDs. Name changes may split a career, and homonyms/staff changes remain unresolved.\n- Main follow-up study used 6,721 latest qualifying pairs ending in 2023–2025, one vote per developer, with recorded gaps from 30 to 3,650 days. These are next included paid games, not exhaustive personal careers or development durations.\n- Independently verified The King of Fighters XV: snapshot date December 12, 2024 conflicted with SNK's official February 17, 2022 Steam launch announcement. `date_overrides.json` and `source_data.load_games()` applied a local correction; the raw source remained unchanged and tables were regenerated.\n- One pair in the original 24-case direction pilot became invalid after that correction. It stayed explicitly invalid rather than being replaced to restore a desired sample size. This was a targeted date audit, not verification of every release date.\n\n**Portfolio results: concentration, continuity, quieter work, and gaps:**\n\n- Shape analysis included 7,427 catalogs with 2–10 releases. Among 1,248 with a 1,000-review peak, the median peak share was 76.9%; 565, or 45.3%, had at least 80% of reviews in one game. Yet 1,065, or 85.3%, had another game reaching 100 reviews, and 568, or 45.5%, another reaching 1,000; median second-largest count was 847.\n- Among 307 catalogs with a 10,000-review peak, median peak share was 79.6%, 93.2% had another 100-review game, and 78.2% another 1,000-review game; median runner-up was 4,595. Concentration and a substantial body of other work commonly coexisted.\n- The first title was the largest current game in 45.9% of the 1,248 catalogs; a release-quarter-relative measure reduced that share to 32.9%. Accumulation time affects peak position; this does not establish a causal learning effect.\n- For predecessor current-review bands under 10, 10–99, 100–999, 1,000–9,999, and 10,000+, follow-up 100-review rates were 99/2,668 (3.7%), 389/2,345 (16.6%), 609/1,125 (54.1%), 378/458 (82.5%), and 113/125 (90.4%). Follow-up medians were 2, 17, 116, 742, and 3,148.\n- Among 583 strong-predecessor pairs, 486, or 83.4%, had a smaller follow-up, with median follow-up/predecessor ratio 24.2%. Nevertheless 491, or 84.2%, reached 100 reviews and 276, or 47.3%, reached 1,000. Being smaller than a previous high point is different from receiving little attention.\n- With a quiet immediate predecessor under 100 reviews and at least two earlier included games, an older 1,000-review work distinguished later response: 52/103 (50.5%) reached 100 versus 189/2,100 (9.0%) without that older work; medians 107 versus seven. Small-catalog and current $5–$20 restrictions retained large descriptive differences.\n- Among returning developers with strong predecessors, the five release-gap groups had 100-review rates 70.8%, 88.6%, 79.3%, 85.5%, and 86.1%. Broader adjusted ratios approximately 0.80, 0.96, 1.06, 1.01, and 1.04 gave no simple monotonic expiry clock. Returner selection, omitted work, date errors, and unknown production history prevent inferring that long gaps are beneficial or costless.\n- Among first included 2010–2020 releases, 43.0% in the current 1,000–9,999 band and 46.4% in the 10,000+ band had no later eligible paid game. That is not a retirement rate: free work, joint projects, name changes, other platforms, and delisting can be absent.\n- Named catalogs illustrated different shapes: Gunpoint 10,274 → Morphblade 264 → Heat Signature 6,851 → Tactical Breach Wizards 11,457; Pony Island 14,761 → The Hex 4,480 → Inscryption 134,744; and Hopoo's major Risk of Rain works alongside DEADBOLT. Terry Cavanagh, increpare, and Sokpop supplied further counterexamples to treating every app as a comparable major project.\n- All those bands are today's review totals, not what existed at the next launch. They do not measure transferred players, effects of practice, or the owner's personal probability. The immediately preceding game is an incomplete description of an existing catalog.\n\n**Tag distance and portable authorship:**\n\n- BYTEPATH → SNKRX had only 0.059 top-ten tag overlap and was mechanically labeled distant. Audits found sequels and related games among other distant pairs. Of 23 valid outcome-hidden sampled distant pairs, 15 changed advertised activity, six were related variations, and two unclear; no genre-hopping penalty was estimated from the automated metric.\n- The owner emphasized shared build-heavy design as his through-line. Subsequent description review corrected the implication of radical mechanical separation: BYTEPATH and SNKRX also share continuous forward movement, left/right steering, and automatic shooting. They are not a clean experiment in moving followers across unrelated underlying activities.\n- Bounded review evidence included an explicit SNKRX request for an a327ex tower-defense game with stated purchase intent; other passages recognized configurations across both games, anticipated future work, or described finding Path of Exile-like build discovery in BYTEPATH. These establish that such preferences exist, not how prevalent they are or whether stated intent became a purchase.\n- Counterexamples separated recognition, willingness to try, and enjoyment. One reviewer liked both games before discovering the common maker; another recognized SNKRX but disliked BYTEPATH's controls, interface, and sensory effects. Shared builds need not compensate for everything a new activity asks of a player.\n- Rad Codex supplied a recognizable class-combination identity. A saved screen found 129 of 279 English Kingsvein reviews mentioning Rad Codex or earlier RPGs, not 129 verified returning customers. Some recognized continuity while starting with Kingsvein; another Horizon's Gate enthusiast disliked the newer emphasis on terrain/push combos and perceived restrictions on roleplaying choices.\n- Zachtronics' own Zachademics account connected Eliza with its technology-focused work. Selected reviews described reputation motivating a visual-novel trial, recognizable themes, qualified approval, and rejection. Desert Fox reviews similarly showed continuing interest in dream logic and mood alongside objections to changed interaction and pacing.\n- The resulting interpretation was that build exploration can be a portable artistic identity, but which pleasures travel matters: freedom, surprising interactions, role expression, tactical constraint, power, or low-friction experimentation. No evidence established that followers would enjoy every genre merely because it contained builds.\n\n**Bounded historical review collection and rejected shortcuts:**\n\n- Selected a327ex, Rad Codex, Tuatara Games, Studio Fizbin, Desert Fox, and Eliza for bounded cases. Collected 16,960 unique public reviews across 27 games. The primary paid comparison used 15,445 Steam-purchase records from 24 games; three currently free titles supplied separate context.\n- Total request accounting was 226 collection calls plus ten probes, 236 below the announced 250 cap; the review cap was 25,000. Requests were paced at least two seconds apart, with no retries and stop-on-error/429 rules. No account IDs, profile metadata, or media were collected.\n- Preserved sanitized response pages, cursors, request metadata, review tables, and policy/status files. Collection, free-context, and probe policies ended with `active:false`. The root paused bulk-collection `network_policy.json` remained unchanged.\n- Review histogram totals did not reconcile with applicable review counts: BYTEPATH summed to 328 against 306 Steam-purchase/317 all-acquisition summaries; SNKRX to 4,469 against 4,197/4,337. Parameter probes did not resolve semantics, so histograms were rejected as the historical count source.\n- Used original creation timestamps of currently returned reviews. Deleted or filtered-out records are missing; current text and votes may have been edited. This reconstructs surviving review arrivals, not historic sentiment, sales, complete original reviews, or player-level transfer.\n- Main 24-game collection matched 22 endpoint totals exactly, with Coma and Kingsvein each one record short. Currently free titles required separate treatment: a Steam-purchase filter could return zero despite all-acquisition reviews. Restored their career context without mixing acquisition channels into paid headline comparisons.\n\n**Historical results and quiet intervening releases:**\n\n- Horizon's Gate → Azalea → Kingsvein: earlier/later current counts 1,212/303, but day-90 counts 166/165. Kingsvein started faster at day 30, 141 versus 88; first-year counts were 225 versus 296.\n- Say No! More → Lost At Sea → Reignbreaker: current counts 1,757/440, day-90 counts 235/244, and first-year counts 379/417. Let Them Come → Bare Butt Boxing → Onslaught: current counts 1,082/216, but day-90 88/178; the latter's full first year was immature.\n- Bad Dream: Coma → Faded Stories: Full Moon → Afterlife remained much smaller at equal age: current 1,966/31, day-90 91/17. Age explained part of the disparity without erasing it.\n- Three of these four selected later releases matched or exceeded the earlier prominent game's day-90 count despite having only one fifth to one quarter of its current total. This was not a representative 75% success estimate or evidence that the intervening experiment caused the later result.\n- Seven of 18 paid transitions changed predecessor review bands when evaluated using surviving records dated before the later launch. Examples: Voidspire before Alvora 58 rather than current 271; Alvora before Horizon 53 rather than 135; Horizon before Azalea 231 rather than 1,212; Say No! More before Minute of Islands 217 rather than 1,757.\n- Whole-catalog context remained useful at actual launch dates: before Kingsvein, Azalea had 33 surviving reviews, Horizon's Gate 809, and the selected earlier paid catalog 1,179. Before Reignbreaker, Lost At Sea had 24, Say No! More 1,226, and the earlier paid catalog 3,014.\n- Quiet works were not equivalent failures: Azalea had 39/40 positive recommendations, Lost At Sea 20/43, Bare Butt Boxing 9/13, and Full Moon 33/41. Azalea's official page explicitly described a short adventure; low counts alone did not establish small scope or intent for the others.\n- BYTEPATH/SNKRX surviving-review arrival counts at days 1, 7, 14, 30, 90, and 365 were respectively 24/13, 61/52, 66/99, 71/590, 85/2,298, and 134/3,322. SNKRX started below BYTEPATH and reached about 27 times its day-90 count. BYTEPATH had 219 surviving reviews dated before SNKRX and 87 later. No causal account of the surge was attempted.\n\n**Final destination study: classification and comparison design:**\n\n- Analyzed 75,860 eligible games across three time cohorts and 34 overlapping activity groups. The headline period was 2023–2025; 2019–2022 and 2026 January–August remained separate. The 75,860 is the eligible population, not a claim that every game matched a confirmed host activity.\n- Replaced sole dependence on the old genre-oriented build classifier with an activity-independent strict screen for advertised builds, decks, genuine configurable loadouts, synergies, and class combinations, plus a broader tuning/lineup/skill-tree screen. Require a top-ten host tag and activity language in the short description/early full description for headline host membership.\n- A frozen 96-case description audit hid numerical outcomes and prices. Revisions removed cosmetic customization, graphics-engine descriptions, a wooden-deck pun, and blackjack house rules. The original audit remained intact; the retained strict cases were a development diagnostic, not an independently validated accuracy rate.\n- Strict wording is not gameplay truth or a measure of actual player expectation. For example, 2023–2025 Action RPG counts changed from 71 strict to 161 broader candidates; sports from 17 to 90; racing from five to 63. Sparse wording does not demonstrate scarce configuration mechanics.\n- Main comparisons used three to five nearest different-developer peers within the same confirmed activity and current-price band, released within 90 days, or 30 days for 2026. Require at least three controls; missing prices form a separate group. Comparison games lack a detected strict promise, not necessarily builds.\n- Tightened matching after coarser date/price adjustment overstated several apparent advantages. Saved peer identities and repeated matching-window, neighbor-count, description-length, definition, creator-history, and leading-title/developer/publisher removal checks. Unsupported cases were excluded from matched numerators and denominators.\n- Final sparse screen required host N at least 100, at least ten strict games but at most 15% prevalence, at least five 100-review games across five developer names, at least 80% matching support, at least five supported qualifying games, and observed/expected ratio at least 1.5. Action RPG, sports, board/dice/tabletop, city/colony, and RTS passed; familiar RPG/RTS configuration prevents interpreting every pass as an unexpected opening.\n\n**Destination results: conventional families and weak broad premiums:**\n\n- Strict advertised-build shares in confirmed 2023–2025 hosts: deckbuilding 589/724 (81.4%), autobattler 88/201 (43.8%), action roguelike 461/1,696 (27.2%), top-down/arena shooting 135/825 (16.4%), tactical RPG 132/895 (14.7%), tower defense 86/699 (12.3%), and Action RPG 71/739 (9.6%). These use the revised classifier and host definition, so are not interchangeable with the earlier continuation counts.\n- Main 100-review observed/expected ratios: deckbuilding 117/60.7 = 1.93 across 496 supported builds; autobattler 25/14.3 = 1.75 across 78; Action RPG 29/15.9 = 1.83 across 67; top-down shooting 27/14.5 = 1.87 across 134; tactical RPG 42/33.4 = 1.26 across 130; action roguelike 110/93.8 = 1.17 across 460; tower defense 15/13.4 = 1.12 across 86.\n- Platforming yielded six observed versus six expected among 32 supported builds; puzzle seven versus 6.6 among 45; management 15 versus 15 among 49; broad horror six versus ten among 25. No stable broad additional review-count premium was established for these areas.\n- Matching-setting ranges were 0.90–1.07 for platforming, 0.95–1.19 for puzzle, 0.98–1.13 for management, and 1.02–1.26 for tower defense. These ranges are method sensitivity, not confidence intervals; no conclusion that builds are artistically unwelcome followed.\n\n**Sports: clearest uncommon lead, with limits:**\n\n- Strict sports matches: 17/666 (2.6%). Six of 17 (35.3%) reached 100 reviews versus 98/649 (15.1%) \n"}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nfor n in (2,3,4):\n p=Pa...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"94d276","wall_time_seconds":0.000004185,"exit_code":0,"original_token_count":8714,"output":"\nSESSION 2 \n \nContinuation of the Steam market research (session 1 = \"Fable Test — Steam Market Research 1\"). Completed ALL 8 analysis directions picked last session (5, 6, 1+4+7, 9, 10, 12 → reports 08–14 in `steam-market/reports/`), plus two owner-prompted drill-downs (the Vampire-Survivors tag-vocabulary objection → a tag-free breakout detector; the SNKRX dead-game→big-update→revival+reprice question → a revival census with news-feed attribution), and ended with a strategy meeting that settled his next-three-releases sequencing: **BYTEPATH remake → SNKRX update+reprice → 062026**, per his own proposal, endorsed over my initial order.\n\n**Crawler resumption & infra:**\n- Resumed histogram (finished: all 34,654 games ≥50 reviews now have monthly trajectory data) and appdetails (~19K+ rows, long tail still crawling at session end) from SQLite checkpoints; old session's still-alive crawlers caused Steam 429s until the owner killed them there.\n- New crawls this session: `reviews_text_crawl.py` (analysis #12: 3,862 build-tag games — all 2,262 window hits + 800 mid + 800 low — 100 top-helpful + 50 negative English reviews each, 52,043 reviews), `revival_news.py` + `cadence_news.py` (Steam GetNewsForApp feeds).\n- **Steam Web API path bug**: `/ISteamNews/v0002/GetNewsForApp/` 404s — correct order is `/ISteamNews/GetNewsForApp/v0002/` (interface/method/version). First news crawl silently stored nothing (all 404s treated as delisted); wiped poisoned DBs, fixed, re-ran. Also: uv-managed venv python.exe is a trampoline — every crawl shows TWO python processes (trampoline + real interpreter); not duplicates.\n\n**Report 08 — gold-rush detector (#5, his top pick):** Per-tag quarterly panels (demand flow from monthly rollups, top-1 concentration, supply, follower h50). 311 concentrated triggers 2015–2026 found mechanically with zero named priors; rediscovered FMV/Balatro/Supermarket Sim/Exit 8/DUSK/Phasmophobia/Buckshot/VS. Findings: (1) **rushes mostly don't pay** — median window-vs-pre h50 = −3pt for ALL trigger classes (most spikes are AAA launches); (2) the conditional structure: quiet-tag (pre<20%) triggers +2/+5pt vs hot-tag −10pt; **durable rushes are FORMAT triggers** (repeatable loop: FMV +32, Trading/Supermarket +20, Old School/DUSK +19, Thriller/Unheard +16, Conspiracy/Golden Idol +12, Gambling/Buckshot +10) while **experience triggers decay** (Undertale, INSIDE, Before Your Eyes, Draw & Guess) — format-vs-experience is judgeable at trigger time; (3) the market clones faster now — 2026 sim-format rushes flood in ~1 quarter (Shop Keeper 13→103/Q); deep formats resist (RL Deckbuilder held 32% through 23→69/Q flood); (4) current edge: no open build-lane rush except the standing Balatro wave (273 followers, h50 32%), and **the price gate holds INSIDE waves** (RLD ≤$10 followers 16% vs >$10 50%; Crime 9/39; Shop Keeper 9/37). Monthly re-run recipe documented.\n\n**Report 09 — tag-free breakout detector (his VS objection):** He challenged tag-dependence (\"took Valve 5 years to add Bullet Heaven\"). Confirmed worse: VS doesn't carry Bullet Heaven in top-7 tags EVEN NOW (vote inertia + top-7 truncation); proxy-tag measurement understated new-format follower rates 3–4× (Bullet Heaven true 2022 cohort 57% vs proxies 14–17%). Built `breakout.py`: v90 = first-90-day reviews per game, ranked within release quarter, no tags in the signal. **EA-date bug found**: Steam resets catalog release date to the 1.0 date (VS shows \"Oct 20, 2022\"); fixed by anchoring on min(catalog month, first histogram month). Validation: every known trigger at #1–2 of its quarter (VS #2 of 2021Q4 behind Halo Infinite; Lethal Company+Love Is All Around = 2023Q4 #1+#2; Balatro+Supermarket Sim = 2024Q1 #1+#2). Tag-invisible discoveries: (a) **co-op physics/horror virals are the dominant ≤$10 money lane 2025-26** (R.E.P.O. ~$48M, PEAK ~$38M, RV There Yet ~$8.5M — Co-op/Horror tags too big to spike); (b) **a live un-named format cluster in HIS lane: \"luck-machine build roguelites\"** — Nubby's Number Factory $2.9M, CloverPit $4.4M, Slots & Daggers $1.2M, BALL x PIT $7.9M, Scritchy Scratchy $1.6M, RACCOIN $1.0M, Gamble With Your Friends $2.6M — 7 games in 5 quarters, $5–15, art-light, second wave already shipped; (c) Megabonk $20.4M = survivors-refresh still pays at $10. Full 14-thread cluster taxonomy delivered when he asked \"are those the only 2 clusters?\" (co-op virals, luck-machine, job/shop sims, inspection horror, idler steady-state, Chinese domestic, RLD mainline, survivors-refresh, physics toys, nostalgia re-releases, streamer horror, cozy organizing, extraction shooters, premium narrative).\n\n**Report 10 — whitespace map (#6, his 2nd pick):** Tag pairs 4–40 occupants where the conjunction beats its BEST component (binomial p<.05). Macro axes: co-op/multiplayer × systems genre (Co-op+Base Building 88%), cozy × mechanics, anime × western genre, adult. His shortlist: **Local Co-Op + Action Roguelike 48% @ median price $7** (Brotato $5.6M; solo-feasible co-op via Remote Play Together, no netcode; n26=3 open); Roguelike+Inventory Management 45% (backpack-likes, closing); **Retro+Idler 36%, median price $5 = BYTEPATH's exact cell, near-empty** (Stone Story $956K, Tiny Aquarium $625K, FACEMINER $397K; failures are shovelware so serious-entry rate much higher); Roguelite+Mystery 45% n26=0 (Blue Prince anchor); **Card Game + Base Building 75% (6/8 hits), zero 2026 entries**. Owner drill-down on the last two: Retro+Idler full game list 2020–26; Card×Base Building didn't exist before April 2024, 8 games/20 months (Deck of Haunts $830K = villain-protagonist haunted-house inversion; Kingdom's Deck $165K @ $10; SkyBrew $338K), widened 66-game lineage from Stacklands ($3.4M) and Emberward ($1.3M); two sub-formats (cards-as-build-resource-for-defense; cards-as-settlement-economy); effort-selection caveat (high-design-cost cells inflate rates; low-cost cells deflate).\n\n**Report 11 — sequel vs new IP / migration / EV model (#1+#7+#4):** (1) Compounding decomposed: sequel-of-hit 74.0%/med $207K, sequel-of-non-hit 62.0%, new IP 55.9%/med $96K — **mostly the dev, not the franchise**; tag-overlap dose-response FLAT (advantage fully portable). (2) **Gap decay INVERTED**: 5-year gap = 71.5%/med $449K vs 1-year 53.1%/$70K; survives within price bands — his 5-year absence costs nothing, followers don't rot. (3) Migration: STAY 63.6% vs MOVE 55.9%; Action Roguelike origin exports at 75%; best mover destinations Exploration/Horror/TB Tactics; Simulation origin worst (27%). (4) EV backbone — his class (prior-hit selfpub gap≥3) by price: **≤$7 16.4%/med $12K; $8–12 38.9%/$31K; $13–20 59.4%/$110K** — third independent confirmation of the price gate, now inside his own dev class; cheap winners all had viral/streamer/idle channels (Lethal Company, Brotato, Chilla's Art/Szymanski repeatable $300–500K@$8 model, Rusty's Retirement). EV table: card×base-building and $13–15 positioned roguelite lead on P×median; BYTEPATH remake leads on fit+EV/month; \"$5 same deal as before\" is the dominated row; data volunteers SNKRX 2 at ~74%×band (noted, not pushed).\n\n**Revival analysis (owner's SNKRX update+reprice question):** He clarified \"SNKRX sequel\" meant the promised free update + reprice (\"Dead-no-update-game → big update → revival + reprice?\"). Census (`revival.py`): 4,976 dormant paid games ≥200 reviews; 280 ever revived = **5.6%**; 50% sustained; median spike 29× dormant flow but median only +114 reviews/12mo (p90 +2,290); revivals after 4+ years dormant: only 10 in catalog (Caster: 46mo dead → sustained). Indie update-revival comparables: Children of Morta +5.9K reviews, Knock on the Coffin Lid +1.8K/~$1.6M, HAAK, Sker Ritual. SNKRX baseline: 8.7 reviews/mo dormant (alive trickle), last news item literally \"Rewrite Update Cancelled\" (July 2022). News attribution (`revival_news.py`, reweighted for the census-vs-sample imbalance — raw 46% was a sampling artifact): **P(revival | dormant + ANY update) ≈ 11.5%; + BIG update ≈ 14.3%** (spike-coincident only 6.6%); only 37% of revival spikes coincide with updates at all (rest = streamers/sales/virality); ~57% of landings sustain. His honest bracket: 15–35% with his assets (large owner base, 2K+ followers, announced dormancy) minus the weakened YouTuber channel — **he disclosed some YouTubers won't cover his games anymore (\"Status addicts\" post)**. Reprice logic: $3→$10 multiplies a landed revival ~3.3× (~$130K → ~$430K/yr for a median-shaped sustained revival). No price HISTORY exists in any data source — reprice effects unmeasurable retroactively.\n\n**Report 12 — review-text sentiment for build games (#12):** 41,003 substantive reviews. **Praise is noise, complaints are signal**: fails' negatives = product rejection (price/value 14.7%, abandoned-EA 4.1%, bugs 24.7%); hits' negatives = engaged friction (grind 6.7%, balance/RNG 5.0%, difficulty) — complaint type is a maturity ladder. Sticky-vs-bounce: bouncers (<2h) complain UI/clarity 10% + price 15.1% (NOT depth); invested (>20h) complain bugs 27.9% + grind 10.1% + balance. \"Build shallowness\" explicitly named ≤0.4% (felt as \"repetitive\"/\"one viable build\"). Positive themes anti-discriminate (small-game positives are advocacy essays — style confound). Lessons: legible first hour; grind/balance tuning for 20h+; ship finished; bugs = biggest single lever (17–28% everywhere).\n\n**Report 13 — description mechanic-mining (#10):** Monroe log-odds on 22,000 English descriptions. **Hit copy describes a world you ACT ON** (co-op z=11.3, craft, build, expand, hundreds, workshop, playstyle, befriend, recruit, synergies z=4.4 within build games, combos, perks, modifiers, experiment + pedigree words sequel/franchise/award-winning); **fail copy describes a test you're SUBJECTED to** (levels z=−22.8, simple, puzzle, score, obstacles, controls, reflexes, precision, arcade) — the fail vocabulary is literally his 2021 tag neighborhood as prose. **Emerging vocab: \"incremental\" 7.1× (23→162 docs), \"short incremental\" 9.5× (1→28) — a named microformat crystallizing NOW in his BYTEPATH lane** (naming moment ≈ wave midpoint). No \"balatro-like\"/\"8-like\" anywhere in prose — format vocabulary lags in descriptions too; only VS gets named as inspiration.\n\n**Report 14 — update cadence (#9) + revival attribution:** 1,800 games stratified by launch velocity, news-feed update counts. **0 vs 1–3 vs 4–9 first-year updates = identical tails (~1.6× m12/m3) in every stratum; only 10+/year shows +6–19%** (confounded upward) — \"just keep updating\" unsupported below monthly cadence; his old weekly regime is the only band that shows anything. Never-updated games (1.66×) BEAT update-then-quit-early games (1.52×): visible abandonment reads worse than silence.\n\n**Strategy meeting:** His fixed slate: SNKRX update (in progress) + 062026 (SNKRX visuals, different gameplay). Assessment: SNKRX update = micro-launch it, reprice $7.99–9.99 AT the update; 062026 = price $9.99–14.99 not $4.99 (dominated row), consider local co-op (the one cheap co-op cell), Next Fest demo, CN+RU+PT-BR, 30+ achievements, ship finished; flagged the slate concentration (both projects = same SNKRX-verse bet) and the two unclaimed data-favored lanes (short incremental / card×base-building, latter noted as a natural Invoker direction). My proposed order: SNKRX update → 062026 → BYTEPATH. **He counter-proposed BYTEPATH first → SNKRX → 062026; I endorsed his as better**: captures the \"short incremental\" naming window (~Sep launch vs 2027), *compacts* the update→062026 synergy chain, spends 5 years of launch-rust on the lowest-stakes vehicle, works as a calibration shot for his true post-YouTuber conversion baseline (the 2021 follower-conversion experiment he always wanted), and nearly guarantees the 2026 ship-gate. One conditional: if the SNKRX update is nearly done, finish it first. Calendar sketch: BYTEPATH Jul–Sep ($5.99–7.99), SNKRX update+reprice Oct–Nov, 062026 → Feb 2027 behind a fest demo at $9.99–12.99. Decisions left open: 062026 exact price, local co-op yes/no, reprice level ($7.99 leaned), unpicked analyses #2 (price elasticity) and #3 (week-1 escape velocity) offered as decision-relevant follow-ups.\n\n**Context/process notes:** Fable access extended to July 12. He asked for \"all remaining analyses\" = only the picked ones (corrected me when I surfaced the unpicked menu). At session end the appdetails crawler was still working the reviewed long tail (resume by re-running `appdetails_crawl.py`); all other crawls complete. steam-market/ remains a non-git working directory; all raw outputs in `reports/raw_*.txt`, accumulated findings in `reports/notes.md`.\n\n\nSESSION 3 \n \nDeep re-check session of the surprising claims from Steam Market Research sessions 1–2, plus five owner follow-up questions. All analysis on the existing `steam-market/` primary-data corpus (search/steamspy/histogram/appdetails sqlite) plus two new crawls (in-game screenshots, playtime-at-review) and one new blind-scoring pipeline. Produced reports 15–23 in `steam-market/reports/` with raw outputs and scripts alongside. Every claim survived or was corrected with named mechanisms; several load-bearing numbers changed.\n\n**Claim #1 — path dependence (report 15, scripts path_dependence.py/2/3):**\n- Reproduced report-04 headline exactly (prior-hit devs re-hit 57.6% vs 6.4% no-hit veterans vs 8.7% first-timers), then attacked it seven ways: release-vs-dev weighting, publisher contamination, threshold artifact, era replication, estimator circularity (K-band, reviews-only, owners cross-definition, time-truncation at 2022-12-31), EA-graduation leakage, return-rate selection.\n- Verdict: effect real and structural but the number was wrong in both directions. Dev-level (first release per dev) it's LARGER: 65.8% vs 9.7% (factories like gamesforgames — 67 releases at 1% — dragged release-weighting down; Capcom/Koei/Square pulled up). His cell (selfpub hit → selfpub release, EA-adjusted): 49.1% dev-first, med $60K; SNKRX band ($250–500K prior, est $388K) 56.6%.\n- NO CLIFF AT $50K — smooth ladder by prior best: 2→7→12→18→29→42→55→68→71→84→93%, Spearman ρ=0.715. \"No-hit veterans 6.4%\" pools $25–50K priors (29%!) with shovelware (2%).\n- Era replication: 4.6× (2014-16) → 5.4× → 6.8× (2020-22) — the gap is WIDENING; market got harder only for devs without an audience.\n- Time-truncation made the effect STRONGER (70.3 vs 12.7%) — no tail-leakage circularity. EA-graduation trims ~3pt. Only 30% of prior-hit devs ship again in-window (vets 15%).\n- Price gate survives inside his cell dev-level (new IP: ≤$7 15.1% / $8–12 42.5% / $13–20 57.3%). NEW: price-transition matrix — cheap-prior devs who moved UP to $8–12 re-hit 52% vs 15% staying ≤$7; pricing DOWN catastrophic everywhere (0–11%).\n- Gap decay: no decay confirmed within selfpub; inversion is composition (longer gap = bigger prior hit + pricier next). His profile (selfpub hit 2020-21, gap≥4): 52.5%, peers = Rift Wizard 2 / Crashlands 2 / SpaceBourne 2.\n- Franchise premium +18pt persists within selfpub (sequel-of-hit 69.6% vs new IP 51.8% dev-first).\n\n**Art vs price — owner's graphics objection (report 16, art_price_sample.py / art_price_analysis.py):**\n- Owner hypothesis: \"price = how much the game visually commands; the price effect may be purely graphics.\" Built a new pipeline: 1,116 in-game screenshots (941 true + 175 header fallbacks) for his whole cell + each dev's prior hit; 70 contact sheets; 10 parallel subagents blind-scored quality 1–5 + style class (MIN/PIX/FLAT/DRAWN/LOW3D/HI3D/TXT).\n- REFUTED: spearman(price, art)=0.294 only; $8–12 vs $13–20 visually indistinguishable. Grid: within art-3 row price runs 16→82% (screenshots-only 22→84); art 1–2 at $13–20 (37%) beats art 4–5 at ≤$7 (17%). Mechanical note: h50 gradient partly IS price arithmetic (same audience × higher price; audience doesn't shrink proportionally).\n- MIN style (SNKRX's class) = graveyard: 3/20 hits, only real ones idle/clicker (clickyland $107K). Kept-simple vs went-fancy is price-confounded: identical at $8–12 (26 vs 29%); fancy wins at $13–20 (79 vs 45%). Kept-simple at $10+ = 51% (n=143); at ≤$7 = 3%.\n- 67 kept-simple re-hits from 48 devs: Soulash 2, Illwinter (Dominions 6), Card Survival, Cruelty Squad→Psycho Patrol R ($40!), Pumping Simulator 1→2 ($5→$12, $85K→$701K), Szymanski, Rusty's Retirement, MDickie, Spiderweb. Threads: all ≥$10, style-consistency-as-brand, systems-depth genres. Art-up from competent base (3) pays (62 vs 35%); from amateur does nothing (20 vs 22%).\n\n**Scope vs price — owner asked to run scope too (report 17, playtime_crawl.py / scope_analysis.py):**\n- New crawl: 100 top-helpful reviews per game for all 1,118 his-cell games + SNKRX/BYTEPATH; scope = median playtime_at_review. Secondary proxies: disk GB from PC requirements, achievements.\n- PRICE IS A SCOPE BADGE, NOT A GRAPHICS BADGE: spearman(price, hours)=0.571 vs (price, art)=0.294. Median hours by band: 2.6/3.9/7.2/15.6h.\n- Sub-3h games dead at EVERY price (20/36/11/29% — no gradient); 3–10h row steep (53→70→100→95%). $13–20 sweet spot = ~7h scope requirement in disguise. Holds fixing art≤3 simultaneously.\n- Price-band jumpers added only 1.28× median hours; priced-up-without-scope-up = 90% h50 (same as same-band) — pricing up does not require proportional scope growth.\n- Kept-simple winners are depth monsters: med 12.2h (Card Survival 84.5h, Rusty's 27.4h at $6.99). SNKRX itself: median 9.1h at review (n=10) — $13–20-band engagement sold at $2.99; the scope was there, the price wasn't. Coverage collider stated (242/772 measurable).\n\n**Claim #4 — migration/stay-switch (report 18, migration_deep.py):**\n- Directional claim survives; dramatic tables dissolve. Stay premium durable ~5–10pt (dev-first new-IP 70.0 vs 62.4; selfpub eras +6.2/+6.6/+15.9-wide-CI). Sequel confound tested and absolved; side-finding: sequels in a NEW genre re-hit 73% — franchise travels across genres.\n- SIM-ORIGIN 27% CLAIM DEAD: three-factory artifact (gamesforgames 55 + Kairosoft 22 + G-MODE 21 of 175 releases); dev-first new-IP sim movers = 62.5% = pooled. \"Sim hits are format-luck\" struck from the record.\n- Origin ranking after shrinkage: 52–79% spread (not 27–95%). Action Roguelike origin n=6 dev-first — the \"75% AR export\" was unrankable noise (though AR movers include Another Crab's Treasure $10.2M, Ravenswatch $7.3M, Nomad Idle). Adventure-as-destination rehabilitates (56%); Racing below reportable n.\n- Tag distance flat 0–4 shared, exact-neighborhood bonus at 5+ (+~10pt). Pseudo-moves don't beat true moves. $199.99 joke-priced games flagged as estimator breakers in tiny cells. Report 18 supersedes report 11 §7; lane choice should ride economics (reports 15–17), not migration tables.\n\n**Claim #3 — retro+idler and card×structure lanes (report 19, lane_deep.py):**\n- IDLER SUPPLY EXPLODING: 91 (23H1) → 604 (26H1); all idler-adjacent pairs flooding (Idler+Strategy n26=157). Price-immunity claim REVISED: idler curve peaks $8–12 (36.0%), $3–5 only 7.7% (though $2.99 mega-winners exist: Nodebuster/Tower Wizard/Digseum). BYTEPATH incremental should price $7.99–9.99, not $5–6, and ship before 26H2.\n- Retro+Idler cell colonized: 7 entries 26H1 (all dead so far) after 2025's hits (Tiny Aquarium $625K, FACEMINER $397K). Report-10 \"near-empty\" label stale.\n- THE 'INCREMENTAL' DESCRIPTION MICROFORMAT is the real signal: 18→47→110→121(26H1) games, h50 33.9% even in censored 2026 vs 7% idler-wide (Scritchy Scratchy $1.6M, Berry Bury Berry $1.6M, Microcivilization $914K, Orb of Creation $819K). BYTEPATH EV updated: ~40–60% at $7.99–9.99, med $50–150K.\n- Card×Base Building: strict pair still n26=0 (open); honest neighborhood 35–40% at $13–20 (66-game census). Winners' formula = cards as economy/build verb + spatial defend/expand board: Stacklands $3.4M, Emberward $1.3M, DECK OF HAUNTS $830K (literal reverse-siege), Kingdom's Deck. Card/Deck×TD (Siege-as-designed cell): crowded n=126, 16–41%. CARD PRICE GATE STEEPEST ANYWHERE: ≤$7 = 3.1%, $13–20 = 43.3%, >$20 = 63.7% → Artifact port prices $15–20, CN day one.\n- Positioning options presented (a: ship Siege as locked; b: deepen Guardian into buildable base → the stronger emptier cell; c: full inversion à la Deck of Haunts). Owner's card-base-builder instinct data-supported; design delta = owner's call.\n\n**Anime + AI-art follow-up (report 19 addendum):**\n- Anime tag 26.2% h50 (~2× market), non-adult $13–20 = 37%; Anime+RL-Deckbuilder 40% (mp $14.49) = the correctly-priced cell. Comps: Chrono Ark $2.3M, Rebellion GODSOUL $1.6M (same dev appeared in the gap-decay winners list: $134K VN prior → $1.6M anime card-battler).\n- AI-art reception MEASURED from 52,043-review corpus: 178 mentions across 133 games, only 19% of mentioning reviews positive (runs far below each game's own up-share) — marginal-but-real negative vector, not a death sentence (Road to Empress $482K hit anyway). Risk concentrates where art IS the product = a $15–20 anime card game exactly. Bar = Chrono-Ark-class set consistency; suggested a 20-card consistency test before committing.\n\n**Claim #2 — launch timing (report 20, timing_deep.py / timing_sales2.py):**\n- Original claim mechanically wrong: THE RULE = never launch DURING a seasonal sale (7.7% vs ~16%; his class 12.1 vs ~21; winter 6.3/autumn 6.7/summer 8.8/spring 10.0). Everything else — including 1–7 days BEFORE a sale — is free.\n- December innocent Dec 1–18 (14–15%); the claim missed Nov 16–30 = 10.7% (autumn sale hidden inside fine-looking November). Jan 1–9 tail bad (8.6%). SEPTEMBER best month (18.4% all / 24.9% his class; weeks 36–42 peak). Day of week: Thu best; Sat/Sun bad. Competition density: dead lever. Sale windows: two data-driven detection attempts failed instructively (launch spikes / monthly-rollup boundaries), calendar-encoded windows validated on the one detectable event (2025 autumn ×4.6 tail surge).\n- Next Fest: calendar proximity dead-to-negative (his class fest-week 16.0 vs other 22.1%); what correlates = demo spiking AT a fest (10.2% of 2025 hits vs 0.4% of fails, selection-confounded). NF = optional demo channel, not a timing lever. BYTEPATH: late Jul/Aug fine, September best, Tue–Thu.\n\n**Wishlists question (report 21, wishlist_proxy.py):**\n- Launch wishlists are private everywhere; measured the downstream shadow m1 = first-30d reviews (histogram t0, EA-safe; 45 units/review in-house).\n- Momentum = steepest predictor in the project: his class P(hit|m1) 25–49: 51% / 50–99: 81% / 100–249: 99.6% / 250+: 100%. Coverage collider stated: unconditional cold-start hit rate <1%; the ~40% low-bucket figures are conditional on later signs of life.\n- NOT a gate: 18.3% of his-class hits started m1<25; 623 slow-burn hits 2022–24 (Vampire Survivors m1=11, Last Epoch m1=3); slow lane median 13mo to half-lifetime; slow-burn genres = deep-systems/EA/long-tail; consume-once genres produce none.\n- MECHANISM OF COMPOUNDING: prior-hit selfpub devs warm-start 5× more often (m1≥50: 40.1% vs 8.1%) AND convert better at equal m1 (50–99: 73 vs 55%; 100–249: 94 vs 82%). SNKRX m1=117 in 12 days with ~zero wishlists — m1 ≠ wishlists (momentum from any source).\n\n**Final two avenues, run together while owner away — quality×momentum (report 22) and EA vs direct (report 23):**\n- QUALITY: \"just make it good\" measurably wrong as a growth strategy. pct@m3 → growth-after-m3 monotone but shallow (1.77×→2.54× across 35 positivity points) = smallest effect measured all session. NO badge discontinuities at 80/95 (smooth curves; 98–100 P(hit) DROPS — beloved-niche artifact; SNKRX ~94.7%). Momentum dominates: m1 axis swings 32→96%, whole quality axis ±5pt. Quality cannot rescue cold starts (95+ actually worst: 26.9%). Slow lane is NOT the quality lane (slow-burn hits med pct 85 = cold-died med pct 85). Prior-hit edge not quality (equal pct at equal m1). Actionable: above ~80 chase momentum not points; below ~70 fix bugs/grind (r12).\n- EA: outperforms direct everywhere at face value (his class 39.2 vs 15.7; idler 37.5 vs 8.1; card 45.1 vs 14.5) — selection-heavy (EA marks seriousness). ⭐ 1.0 GRADUATION IS NOT A LAUNCH: median 30d reviews at 1.0 = 1.2–1.4× ongoing EA baseline regardless of EA audience size — EA value realized during EA; the EA entry IS the launch. Lane norms: idler hits only 22% EA (Gnorp/Rusty's/Nodebuster direct) → BYTEPATH ships direct; card 31% EA (Peglin/Mechabellum/Backpack Battles EA-grad, 9 Kings in-EA $6.9M, Balatro direct) → Artifact card game EA-viable if EA entry treated as the real launch.\n\n**Infrastructure added this session:** scripts path_dependence(1–3), art_price_sample/analysis, playtime_crawl, scope_analysis, migration_deep, lane_deep, timing_deep, timing_sales2, wishlist_proxy, quality_momentum, ea_paths; data/art_price/ (1,116 screenshots + blind scores), data/playtime.sqlite; reports 15–23 + notes.md summary blocks. Dead ends documented: price history unobtainable, wishlists private, sale-week detection from histograms defeated by launch spikes and monthly-rollup boundaries (calendar-encoding + single-event validation used instead).\n\n\nSESSION 4 \n \nSession 4 of the Steam market research: fact-checked the YouTube video \"I Analysed 62,000 Indie Developers. Here's What Actually Predicts Success\" (Game Oracle/Ross, WueQ75GP1wc) against the steam-market corpus, had a blind second instance replicate the findings, ran nine follow-up career analyses (reports 25–31), and shipped the whole thing as an interactive post on a327ex.com with nine in-engine Ricochet-styled chart demos: [What predicts indie success, tested against all of Steam](/posts/what-predicts-indie-success).\n\n**Video claim check (report 25, scripts video_claims.py/2):**\n- Transcript pulled via yt-dlp (`--write-auto-subs`, VTT dedup to `scratchpad/transcript.txt`). Hit proxy locked at 25,000 copies ≈ 556 reviews (in-house 45 units/review, SNKRX+BYTEPATH calibration); cutoff 2026-07-01; dev identity = normalized SteamSpy dev string (report-15 convention).\n- VALIDATED: top 5% of games = 87% of units (his \"nearly 90%\" — revenue side is 94%, top 1% = 80%); his 62,466 dev count consistent with our 48,049 at 65.5% dev-name coverage; \"only 1 in 5 devs ship a second game\" exact as a raw snapshot (21.7%).\n- CENSORING CORRECTIONS: second-game rate rises with lookback — 27% (3y-old first releases), 31% (5y), 38.5% (8y), 46.6% (10y): lifetime truth ≈ 1 in 3 to 1 in 2. Survival curve shape validated; his 60%→20-30% quit numbers are the LIFETIME (8y+ observation) view (61.5/32.9/20.3 in the replication), while the fixed-3-year-window view is much harsher (~80% after game 1).\n- CONTRADICTED: \"1 in 10 hit on game one rising to a coin toss by game five.\" Per-release rates: 10.1% all-era → plateau ~16% (games 3–10), never approaching 50%; Steam-era-only (first release ≥2015, killing the back-catalog-import artifact where pre-2010 \"first games\" hit at 49.8%) the curve is 8.8% → peak 11.8% at game 3 → DECLINES to 5.8% by game 10.\n- THE DECOMPOSITION (the session's core result): game-5 hit rate by prior best — <50 reviews prior: 0.2%; 50-555: 4.1%; ≥556 (already hit): 41.9%. The rising curve is pure survivorship — failures quit, hitters remain, game count contributes nothing (within every band the rates drift DOWN with index). Veterans with 2+ shipped-but-dead games underperform first-timers ~4×.\n- His \"<15% chance a new dev ships 5 games with ≥1 hit\": technically true, ~5× too generous (measured 1.8–4.6% by cohort).\n- \"4/5 quit ⇒ the flood is just noise\" inference fails: one-and-done devs are ~50% of a year's releases but take 34–42% of its HITS; 53% of hits are a dev's first game.\n- Sokpop misleading as told: their SECOND game (Simmiland 2018, ~$320K) was already a hit; Stacklands was release #82 of a volume strategy FUNDED by early traction. Only 10 devs in the whole catalog got their first hit at release #8+ (Gagonfe among them: hit #10, Rocket Rats, after six mid-traction games).\n- Non-analyzable claims listed for the owner: barbell strategy allocations, messy-middle placement of full-time labor, Taleb/Extremistan framing, McNamara fallacy section, garbled case-study names.\n\n**Blind replication (independent agent, scripts indep_check.py/2):**\n- Second instance given only the claims + data location, barred from reports/ and my scripts. Exact agreement on the second-game censoring gradient, the hit-curve plateau, and the prior-band decomposition (to the decimal).\n- It UPGRADED the video's survival curve (lifetime 8y+ view matches his 60/20-30 almost exactly — my first pass was too harsh) and DOWNGRADED my \"quitting is accelerating\" side-finding: with fixed follow-up windows + a SteamSpy missing-dev-coverage correction (~6%→30% across 2015→2024), the rise is ~2-3pp then plateau, mostly artifact. Also flagged the pre-2015 back-catalog inflation of first-game rates.\n\n**Nine follow-up analyses (owner picked A,C,D,E,F,G,H,I,J; reports 26–31, career_common.py conventions: steam-era devs, fixed windows, maturity ≥1y):**\n- A/climber profile (26): per-release, accumulating mids does NOT raise next-shot odds (factories dominate); per-DEV, the 2+mids-no-hit state is the best non-hit state (~1 in 11 eventually break out, 6× all-low). Breakout games vs matched controls: priced up ≥1.25× (59% vs 28%, median $12.99 vs $4.99), CHANGED genre (only 12% kept their modal tag vs 37%), new IP not sequels, ≥2× their own usual gap, 16% got signed. \"New IP, new genre, bigger, pricier, longer-cooked.\"\n- C+G/gaps and comebacks (27): P(next hit) monotone in favor of LONG gaps at every rung (<6mo vs 48mo+: low 0.5→7.2%, mid 2.9→15.6%, hit 24.4→56.6%), holds within eras; median next price climbs with gap (the seriousness confound, stated). Comebacks (36mo+) beat continuous (<12mo) era-stratified at every rung (mid 13.4 vs 2.5% in 2022-25). No absence penalty exists anywhere.\n- D/pivot after a miss (27): pivot 12.0% vs double-down 5.7% foothold; clean break 13.5%; sequel-to-the-miss worst measured move (3.2%, 0 hits in 218). Loved-miss hypothesis DEAD: pct≥85 misses = pct<70 misses (15.6 vs 16.7%); even loved+stay (10.0%) loses to unloved+pivot (18.0%).\n- E/careers (28): serious devs 2015-21 by cadence — 1 game per 1-3y maximizes P(career hit) 40.7%; 1-3/yr maximizes hits/100 dev-years (19.2) and p90 ceiling; 3+/yr flood maximizes income floor ($28.6K/yr median) at half the hit odds. Sokpop = 3× the p90 of their own cadence class (outlier, not strategy).\n- F/audience worth (31): median next-launch m1 ≈ 4-7% of total review base; P(m1≥50) 9.5%→70.6% across base bands; gap 36mo+ activates BETTER (58.5 vs 18.6% for <12mo — audience doesn't rot); m1→hit conversion 1.1/9.8/22.7/54.0/93.8% across 0-24/25-49/50-99/100-249/250+. SNKRX itself: m1=117 off BYTEPATH's ~200 base (0.6 ratio); owner's stacked profile projects m1≈350 → the 94% row.\n- H+I/staying power (29): first-game OUTCOME barely predicts continuation (17/23/20% for miss/mid/hit) — persistence is a trait. Design does: cheap first games survive better, EA debut = continuation killer (8.7% vs 18.4% baseline), big-scope genres burn starters. Love-vs-money: well-powered NULL — neither positivity nor revenue predicts who continues.\n- J/first rung (30): Horror/VN/Simulation put newcomers on the ladder at 2-4× Action/Casual/Platformer without ceiling loss (Horror 33.7%×31.9%); Precision Platformer double-worst (13.3×9.8); F2P/EA flagged as artifacts; explicit backward-looking caveat (the incremental microformat is invisible to career tables).\n- Fine ladder (export): career prior-best → next-game hit: 1.1/1.7/2.1/3.5/4.7/10.8/22.5/43.1/67.1% — smooth staircase, no cliff.\n\n**The post (posts/what-predicts-indie-success.md + pages/home.md article):**\n- Full-homepage message (fire-post pattern: Kind: message, \"Written by Claude Fable 5\" byline) + individual page. Structure: video embed first → methods primer (reviews-as-sales proxy, 45/review calibration, censoring/survivorship taught in place) → claim-by-claim → the ladder → second-act findings → honest summary linking the research logs.\n- NINE interactive in-engine chart demos (renderer/games/steam-*): conc (dual Lorenz curves, log-x scrub), survival (3 censoring windows grouped, video claims as red overlays), hitcurve (3-view radio: per-release / split-by-past / cumulative), ladder, gaps, pivot, careers, warmstart, firstrung (labeled genre scatter). Shared scaffold chart.lua (master in steam-conc/), data.lua files GENERATED by steam-market/scripts/export_charts.py.\n- Style iteration: emoji-pixel first version REJECTED for the Ricochet skin — site ric_title/ric_body/ric_mono fonts, live theme_active palette switching (dark/light re-skins per frame, anchor3-playground pattern), hairline chamber panels, inverted-fill segmented controls, two-row status strip (live hover readout + always-visible plain-language explainer per chart).\n- The video's own cumulative chart (owner supplied screenshots) transcribed into the hitcurve CUMULATIVE view: his \"commit to N\" bars (9.6→44.7%) vs ours (8.8→25.4%, plateau), and his \"with attrition\" red bars (9.6→13.7%) which match our from-day-one curve (11.5→14.2%) ALMOST EXACTLY — the video's own chart contained the honest answer; the narration quoted the other series.\n- Infra work this session (renderer): `@name` font-namespace escape in game_host (site-global fonts for demos — fixes silently-invisible text from per-game font prefixing); non-pixel small demos get rect-sized surfaces with responsive width (def.w×2 clamped to window, column-centered with edge clamps, +18px bottom margin); gap-free column hover (no readout flicker between bars); segmented-control hit slop. Mock-env smoke harness (scratchpad) runs all nine demos under both themes and click-asserts every segmented control.\n- Survival-chart wording round: per-series populations KEPT (owner call) with explicit age-gate wording (\"of 6,399 devs who shipped game 2 at least 3y ago…\") and an explainer noting longer windows need older, fewer devs.\n\n**Decisions/memory:**\n- Post title (owner pick): \"What predicts indie success, tested against all of Steam\". Publication order: this log first, then the post (newer timestamp, sits above it in the feed).\n- project_steam_market.md memory updated: reports now 00–31, video-claim verdicts, second-act suite one-liners, career_common.py conventions.\n\n"}
I found the September 5 catalog and the additional career/review data from session 6. I’ve also read all four Fable summaries. Several early claims were revised in sessions 3–4, so I’ll test his final versions while noting where the original claims changed.
Two issues already matter: many of his “hit” measures multiply reviews by current price, and some career comparisons use a predecessor’s present-day reviews to describe its position years earlier. I’ll separate those assumptions from the underlying evidence.
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\np=Path('a327ex-site/logs/...)
Script completed
Wall time 0.3 seconds
Output:
Warning: truncated output (original token count: 13680)
Total output lines: 1
{"chunk_id":"a85c24","wall_time_seconds":0.122804335,"exit_code":0,"original_token_count":17240,"output":"Warning: truncated output (original token count: 17240)\nTotal output lines: 561\n\n\nSteam Market Research 5 rebuilt a current Steam research dataset and investigated the market first broadly, then specifically for games advertising build expression. The owner wanted fresh findings from Steam data, independent of earlier Fable research and Steam marketing blogs, without treating money, audience growth, or current projects as the research’s objective. Python collectors used Steam’s public StoreQuery and StoreBrowse services to produce a September 5, 2026 snapshot of 184,664 game apps across 23 storefront catalogs, with SQLite, Parquet, raw responses, and field inventories. An excessive image download was stopped and deleted at the owner’s request; only media references remain. Statistical screens, description classification, and a bounded Steam-review sample identified recurring associations, rejected misleading niches, and developed a hypothesis about meaningful item interactions. The session ended with reproducible artifacts for continuation in another task.\n\n**Research intent, source boundaries, and corrections to the plan:**\n\n- The owner had previously followed Steam closely and collected catalog data to answer questions with scripts, but wanted to refresh his understanding after roughly five years. He asked the assistant to generate most research directions and useful answers, including openings that other developers might not have noticed.\n- Earlier Fable Steam research, its logs and summaries, and all Steam marketing research blogs were explicitly excluded. The desired relationship to existing marketing commentary was “simply indifferent,” rather than opposition or contrarian reaction. No earlier research outputs or third-party sales estimates were imported into the dataset.\n- The owner initially described an affinity for making a game in a few months and marketing it through minimal-effort actions with substantial possible reach, while remaining open to changing that approach. This was context for research, not a requirement to prove that any observed game was made quickly or marketed cheaply.\n- The assistant initially asked for revenue/audience goals, risk tolerance, acceptable promotional actions, and whether the work should inform Horse Game. The owner corrected this: “I'm not particularly after money or audience,” said his writing already explained his positions, and requested broad Steam ideas and trends independent of anything he was currently making. He allowed closer examination of games resembling his interests without making them the entire initial population.\n- Reading the owner’s public writing clarified several relevant preferences: short development cycles as design exploration and skill development; small production scope compatible with spacious play; creative contribution through recombination; meaningful player choices; and making work without requiring a particular external response. These ideas supplied context, not additional measurable Steam variables.\n- The assistant disclosed a source-boundary mistake: the owner’s “Game quality is all that matters” essay reproduced a howtomarketagame passage, which was encountered while reading the essay. The external site was not opened, but complete non-exposure could no longer be claimed. Subsequent screening avoided embedded third-party material, and market claims were grounded in the newly collected data.\n- A second correction concerned feasibility. The assistant proposed studying category formation, novelty, mechanical depth, and discovery pathways through extensive game interpretation. The owner objected that these could not reliably be recovered programmatically from Steam data, and the assistant could not play all the games. The accepted plan instead began with obtainable fields: releases, tags, tag combinations, prices, review distributions, concentration, languages, and cohort comparisons.\n- The resulting sequence was to audit access and coverage, collect a broad inexpensive metadata layer, analyze its distributions, and use numerical anomalies to motivate narrower description or review investigations. Development time, marketing effort, design depth, and causal discovery mechanisms were removed from the quantitative agenda unless separately measured.\n\n**Steam source audit and collection architecture:**\n\n- The owner authorized the assistant to choose collection methods, audits, and implementation details, requesting the most representative and current dataset possible as of September 5, 2026, with as much per-game data as practical. He initially also requested store pictures for potential later visual analysis.\n- Live probes found that the old `ISteamApps/GetAppList/v2` route returned 404 and the newer `IStoreService/GetAppList` route required a key. Steam search worked but capped returned rows at 100 even when more were requested. A raw SteamSpy endpoint was tested, but SteamSpy data and estimates were not incorporated into the final game dataset.\n- The useful route was Steam’s public `IStoreQueryService/Query` for catalog enumeration and `IStoreBrowseService/GetItems` for detailed batched metadata. Protocol definitions were inspected through a Steam protocol-schema mirror. Full responses could be collected in batches of 1,000 rather than fetching every store page individually.\n- The implementation retained compressed raw response envelopes with exact requests, source country, retrieval time, and response metadata before ingestion. SQLite stored a preferred per-app record and separate relations for tags, creators, languages, categories, regional observations, discovery membership, media references, and aliases. Portable Parquet exports preserved full nested metadata in `data_json`; a compact compressed CSV exposed normalized game columns.\n- Five primary storefronts supplied detailed regional observations: US, Brazil, Japan, China, and Germany. Lightweight ID enumeration expanded to 18 more: GB, FR, CA, AU, KR, TW, HK, RU, UA, TR, IN, SG, MX, AR, TH, ID, VN, and ZA. Regional coverage added 208 discovered IDs beyond the US structured catalog.\n- A separate Steam-search enumeration was a cross-check, not the foundation of the completeness claim. Its 354 checked extra IDs were DLC, music, or other non-game records. It remained partial after rate limiting and was not silently described as complete.\n\n**Image-download mistake, pause, and deletion:**\n\n- The assistant interpreted the initial picture request too expansively, building an image downloader and fetching store artwork, screenshots, and description images across the catalog. It switched to Steam’s smaller screenshot variants, retained original references, and later bounded large animated description images, but the operation had already become excessive.\n- The owner interrupted after discussing the load in a side chat, asking about bulk downloads and collection status. All network collection was paused. At that point, 533,716 verified image files occupied approximately 144.8 GB and covered 41,756 games. The cache was biased toward earlier app IDs; its size did not make it a representative visual sample.\n- The assistant explicitly acknowledged overshooting. Steam search had returned HTTP 429 responses, and continued retries on that redundant crawl were unnecessary. A proposed replacement was comprehensive metadata and URLs with bounded question-specific samples, but the owner then gave the stronger instruction: “Delete the images folder, delete all image downloading machinery.”\n- Both image directories, `images.py`, its compiled cache, download logs/status/probes, and database download queues and cached-file bookkeeping were removed. The database was compacted. Lightweight source URLs and game-to-image associations were retained because they are metadata, not downloaded images.\n- The assistant answered the owner’s completeness question directly: metadata was not finished at the pause. The then-current count of 184,559 game records and 185,170 candidate IDs was intermediate and was superseded by the completed snapshot below.\n- On the owner’s subsequent instruction to finish game-data collection, metadata collection resumed with pacing and stop-on-429 behavior. Image and other asset downloading remained removed. The finished source dataset contains no store-image, trailer, audio, or game binaries. Later PNG/SVG artifacts are locally generated statistical charts, not renewed store-image downloads.\n\n**Completed catalog coverage and normalization repairs:**\n\n- The completed source snapshot contains 184,664 game apps: 128,972 marked released and 55,692 upcoming. Another 503 records are separated: 148 store-listed mods and 355 other app records. The SQLite master table named `games` contains all app types, so game queries require `type=0`; `exports/games.parquet` is already game-only.\n- All 185,173 discovered IDs were accounted for through records or redirects. All 23 structured storefront catalogs were enumerated, and their collected unique-ID counts matched the maximum totals Steam reported during collection. Small increases in several storefront totals were captured.\n- These are app identities, not a manual deduplication of titles or editions. The scope is the public catalogs checked, not every app ever registered with Steam. Completely delisted, unpublished, unlisted, or exclusively available outside those storefronts may be absent.\n- Preferred game metadata was fetched from September 5, 2026, 19:09:38 through 20:53:33 UTC. This is a collection window across a changing service, not an atomic snapshot. Retrieval provenance and coverage ranges remain in the artifacts.\n- An initially overstrict ordering check rejected final pages because Steam appends mods after games, each ordered within its type. The raw pages were retained and replayed after correcting the invariant; a numeric decrease at the type boundary was not missing data.\n- Seven regional or legacy IDs redirected to other canonical app IDs. Treating these as ordinary records could both create false gaps and overwrite canonical/regional statistics with alias responses. Explicit alias mappings were added; 25 affected canonical-country observations were restored, eight invalid regional observations removed, and no alias payload remained in the canonical records. The final alias table contains 33 country mappings for seven redirecting IDs.\n- Validation checked SQLite integrity, unique identities, embedded canonical IDs, alias handling, tag counts and definitions, relationship integrity, review-count and percentage ranges, and removal of the image directories/downloader/queue. Parquet row counts were verified after writing. The exported tables together occupied about 744 MB; the full source directory, including SQLite and raw responses, was about 8.6 GB at completion.\n\n**Exactly what data exists for games:**\n\n- All 184,664 game records have identity/status fields and filtered review summaries, including zero-review games. Identity includes app ID, name, store URL/slug, type, visibility, and normalized free/upcoming/Early Access flags; 18 names were blank. Missing false-valued protocol flags use their defined defaults, while absent optional values remain missing.\n- Both description locations were collected. `basic_info.short_description` represents the short sidebar description and exists for 183,399 games. `full_description_bbcode` represents the full “About This Game” content and exists for 184,536 games, retaining formatting and embedded references. The full description is in `data_json` in SQLite and Parquet; the compact CSV contains only the short description. The owner specifically asked and received this clarification.\n- Tags are present for 184,621 games, covering 430 distinct labels, with IDs, names, Steam weights, and rank. Despite requesting more, the service returned up to 20 tags. Current tags are not historical launch tags.\n- Creator arrays include developers for 184,417 games, publishers for 183,942, and franchises for 36,967, with creator-clan IDs where supplied. These identify reported creators, not verified corporate ownership or team size.\n- Release information includes 143,967 Steam timestamps, 16,045 original-release timestamps, 7,536 original-Steam timestamps, and 774 Early Access exit timestamps, plus planned-release text/flags and platform dates where supplied. A planned timestamp does not establish that a game launched, and asset modification timestamps are not game update dates.\n- Review summaries contain count, positive percentage, score, and label. Separate English-specific summaries exist for only 5,211 games, and unfiltered summaries for only 158. Their absence is not zero; the dataset cannot provide a full language-demand breakdown from these fields.\n- Purchase options exist for 110,402 games, and a best option for 110,092. They include package/bundle IDs, current/list price strings, formatted prices, discounts, editions, gifting/grouping details, and included-game counts. These are current regional observations; bundles and add-ons require care before interpreting them as a standalone entry price.\n- Platform objects exist for every game, including Windows/macOS/Linux flags, VR information, and device compatibility codes, which may mean Unknown. Nonempty feature categories exist for 184,660 games. Language arrays exist for 184,559 games, of which 184,482 report at least one supported language; support, full-audio, and subtitle flags are separate.\n- Content-descriptor lists exist for 43,085 games, rating objects for 8,661, related-app objects for 38,507, and external links for 87,871. Related objects may include demos, standalone demos, playtests, and parents, but are not a complete historical demo record.\n- Media metadata includes artwork objects for 184,654 games, nonempty screenshot galleries for 184,354, and trailer objects for 168,253. Screenshot ordering/content grouping, filenames, URL patterns, overridden/original artwork references, and trailer formats are retained without media binaries. Game records link to 2,967,715 unique image references.\n- The exhaustive inventory contains 297 observed JSON paths, including nested/container paths, with types and presence/nonempty counts. Not collected catalog-wide: individual reviews, review histories, reviewer playtime, owners, unit sales, revenue, wishlists, concurrent players, historical prices, development duration, team size, marketing effort, achievement lists/counts, or system requirements. A later bounded review sample supplements only five games.\n\n**First broad analysis: population, comparisons, and safeguards:**\n\n- After accepting the dataset, the owner authorized the first quantitative pass. Its main pool comprised 38,494 currently paid games outside Steam’s explicit-sex descriptors 3 and 4, in 2023–2025 store-date cohorts. This was not a manual quality filter. Whole-catalog supply tables retained free and explicit-content segments separately.\n- Of 128,972 released records, 128,878 had usable nonfuture dates; 93 lacked a usable date and one had a future date. These exceptions remained in the source but were excluded from dated analyses. `original_steam_release_date` took precedence where supplied, otherwise `steam_release_date`; incomplete Early Access history still limits interpretation of first exposure.\n- The main pool’s median was seven filtered reviews; 15.8% reached 100 reviews and 4.4% reached 1,000. Thresholds describe response scale, not financial success. Current lifetime totals cannot reconstruct launch performance, and older delisted games may be missing.\n- Broad tag tables used top-20 membership, with specificity checks; pair analysis required both tags within the top ten. The discovery screen evaluated 1,765 eligible pairs, froze 30 selections using 2023–2024 games, then inspected 2025 results. All 30 outcomes were retained, including weak ones. This separate-game comparison is not a historical forecasting backtest, and overlapping pairs are not independent replications.\n- Descriptive observed/expected comparisons standardized for release quarter and, in sensitivity checks, current USD entry-price tiers. Sparse strata fell back to broader date comparisons. These ratios are associations, not causal pricing or genre effects. Chart intervals were not corrections for exploratory selection or creator clustering.\n- Price extraction initially chose the cheapest among purchase options, which could select an add-on. It was corrected to Steam’s best non-bundle single-game package, excluding offers dependent on another owned app, using list/original price when available. This changed 2,101 records without changing the frozen pair selection.\n- Developer/publisher grouping used clan IDs with normalized-name fallback. Missing clan keys were filled only where a normalized name mapped to exactly one observed clan within its role; ambiguous names stayed unresolved. Largest-review and most-prolific creator removals were distinct sensitivity checks, alongside removal of the highest-review games.\n\n**Broad market expansion and differences hidden by tags:**\n\n- The paid/non-explicit catalog contained 5,643 games in the 2019 cohort, 9,771 in 2023, and 15,674 in 2025. Their current counts above 100 reviews were 1,243, 1,672, and 2,277 respectively. Thus the larger catalog includes more substantially reviewed games as well as a larger low-response tail; 8,811 of the 2025 games had fewer than ten reviews.\n- The whole-catalog January–August supply comparison counted 17,709 releases dated in 2026 versus 12,925 in 2025. This measured surviving public-catalog supply, not changing probability of launch success.\n- Within the 2023–2025 paid/non-explicit pool, Action Roguelike had 2,966 games, median nine reviews, and 17.1% above 100; Auto Battler had 657, median 14, and 22.4%; Roguelike Deckbuilder had 412, median 40.5, and 36.9%. Fast growth in a tag’s share of releases did not necessarily imply exceptional response per game.\n- Incremental had 1,865 games, median seven reviews, and 14.2% above 100; Idler had 1,455, median 12, and 19.0%. Their position improved relative to similarly priced/date-grouped peers: approximately 1.52 and 2.06 times the expected 100-review counts respectively. This comparison did not show that lowering a price causes improvement.\n- Tags themselves can mislead: several filmed romance games were tagged Immersive Sim, so an aggregate for that label could not be read simply as demand for a Deus Ex-like design.\n\n**Desktop/background companions and filmed visual novels:**\n\n- An exploratory description screen broadened the small Desktop Companion tag to promises involving productivity/focus tools, Pomodoro timers, or games occupying a screen corner while the user works or does something else. Among 2025 idlers, 42/130 companion-positioned games reached 100 reviews (32.3%, median 23), versus 117/650 other idlers (18.0%, median nine).\n- Sixteen companion matches exceeded 1,000 reviews. Similar quarter/price peers predicted approximately 25 games above 100; 42 were observed. Removing the largest developer or publisher left 31.8%. Examples included Tiny Pasture, Fantasy Map Simulator, Ropuka’s Idle Island, Tiny Aquarium, and Cornerpond. Taskbarn and Strange Shores illustrated that similar positioning could still receive little response.\n- The creative question proposed was what other ongoing systems people might enjoy alongside another activity. This was explicitly exploratory: the description screen was devised after seeing initial results and had no untouched validation sample.\n- Visual Novel + FMV in the top ten produced 69/86 games above 100 reviews, 23 above 1,000, and a median of 360 across 67 developer groups. For…3680 tokens truncated…e with at least 1,000 current reviews. The 2–5 and 6–10\nsubsets are separate sensitivities. Single-title developers are retained in the\nlonger-term release-presence table, not in multi-title concentration statistics.\n\nConsecutive **eligible paid** releases define pairs. Free releases, jointly\ncredited games and excluded records may have occurred between them. Qualifying\ngaps are 30–3,650 days. At most one pair, the latest qualifying one, represents\neach developer in each period (2019–2022, 2023–2025, January–August 2026).\nThe primary 2023–2025 comparison contains 6,721 developers.\n\nDates prefer the existing original-Steam date where supplied, otherwise the Steam\nrelease date. Steam release dates are not production dates or necessarily the\nwork's first public appearance. Bulk ports, editions and incomplete EA history\ncan alter order. Sensitivities exclude recorded EA and a recorded original release\nover a year earlier; unknown history remains. Delisted games, changed names,\nco-developed games and other platforms can make a catalog incomplete. No additional\nobserved paid release does not mean retirement, inactivity or loss of interest.\n\nOne independently verified source error was corrected locally: app 1498570,\nThe King of Fighters XV, has December 12, 2024 in the snapshot, whereas SNK's\nofficial launch announcement explicitly includes Steam on February 17, 2022:\nhttps://www.snk-corp.co.jp/us/press/2022/021701/ . `date_overrides.json` records the\nsource and `source_data.py` applies it only to this study's in-memory inputs. The\noriginal snapshot is unchanged. All quantitative tables were regenerated. The\nfrozen 24-pair pilot retains its originally sampled members; the affected SNK pair\nis marked invalid in `direction_pilot_outcomes.csv`, leaving 23 valid original\npairs (15 major activity changes, six related variations, two unclear). This\nsingle repair is not an exhaustive date audit. Chronological claims remain\nprovisional where no independent first-release record was checked.\n\n## Measurements and comparisons\n\n- Reviews measure response scale, not sales or artistic value. Thresholds 100 and\n 1,000 and >=80% positivity are explicit conventions.\n- Current review totals naturally favor older games. Release-quarter percentile\n ranks offer a descriptive relative comparison, not equal-age historical counts.\n- Catalog peak shares are mechanical concentration measures; a two-game catalog's\n largest game necessarily holds at least half of its reviews. Size sensitivities\n are essential. Comparing a follow-up with a selected peak also produces regression\n to the mean; a smaller later game is not automatically a disappointment.\n- Expected 100-review counts use release quarter/current price strata with >=30\n cases and fallback. Gap/similarity comparisons additionally stratify on the\n predecessor's current-review band. Fallback estimates are calibrated globally\n or within prior bands. `full_cell_support` reports complete-cell support.\n Joint positivity ratios in `transition_groups.csv` only use date/price controls;\n do not confuse them with the more-adjusted volume ratios.\n- First-versus-returning rows are raw descriptive reference groups. A first observed\n paid game is not evidence of an inexperienced maker. Returning developers are\n selected survivors, so differences do not estimate the effect of practicing.\n- Similarity is Jaccard overlap of top-10 tags after administrative exclusions;\n top-20 is a sensitivity. The metric measures store-positioning overlap and is\n unreliable as a measure of creative departure. BYTEPATH/SNKRX and several sequels\n demonstrate the limitation. The 18-pair audit and additional 24-pair pilot retain\n actual descriptions and single-reader judgments. Pilot numerical outcomes were\n withheld until judgments were frozen, but names and aggregate selection criteria\n were visible. Neither audit is a representative market-wide novelty survey.\n- Illustrated named catalogs are deliberately selected examples, not a random\n sample. `case_catalogs.csv` includes all matching full credits, flags co-developed\n and free records, and identifies which records entered the main study. This\n prevents calling the sole-credit subset an entire person's career.\n- Chart intervals are 95% Wilson intervals, not corrections for selection, identity\n mistakes, current-state look-ahead or repeated comparisons.\n\n## Reproduction\n\nUsing `../.venv/bin/python` from this directory:\n\n1. `study.py`: freeze methods, build name-based identity table, catalogs and pairs,\n and generate the main aggregate tables.\n2. `followups.py`: generate smaller-catalog/history checks, older-catalog strength,\n release-presence results, audits and case catalogs.\n3. `direction_labels.py`: materialize the saved manual audit judgments. These are\n human-readable judgments recorded in the script, not automated classification.\n4. `charts.py`: generate the two inspected PNG/SVG figures.\n5. `checks.py`: validate accounting, pair identities and dates, source outcomes,\n expected-count calibration, sampled earlier-peak reconstruction, frozen labels,\n scripts and collection state. Also generates all-credit and date-history\n sensitivities and records source hashes.\n\n`direction_pilot_outcomes.csv` joins the frozen manual labels to the source outcomes\nby appid. No new classification is performed during that join.\n\nThe source snapshot is about games visible in the documented public catalogs, not\nall Steam history. Interpret every career claim within this observation boundary.\n# Historical portfolios and authorship — September 6, 2026\n\nContinuation of the portfolio study, investigating launch-time context, continuity\nacross different games, and quieter releases between more prominent works.\n\n## Scope and source boundaries\n\nThe original fixed sample was 24 games: eligible paid catalogs credited to a327ex,\nRad Codex, Tuatara Games, Studio Fizbin and Desert Fox, plus Zachtronics' Eliza.\nThis was a deliberately selected case study, not a representative sample or a\nnew estimate of Steam-wide probabilities. The original September 5 snapshot and\nname-based portfolio study supplied identities, descriptions and release dates.\n\nAn audit added three currently free Desert Fox titles (Bad Dream: Fever, Game For\nAnna, DUMB: Treasure) because current price should not erase earlier work. Their\nhistory is supplemental; the main pair/age comparisons retain the original 24\npaid games. No older research logs or marketing research blogs were consulted.\n\nThere were 226 review-collection requests and 10 feasibility probes, below the\nannounced 250-request ceiling. The minimum measured interval between collection\nrequests was 2.000023 seconds. No retries, assets, account IDs, profile metadata or\navatars were collected. Review texts can contain whatever their authors wrote,\nincluding links; no reviewer matching across games was attempted. Bulk network\ncollection remained paused throughout. All scoped collectors are now inactive.\n\n## What was collected\n\n- `review_pages/`: sanitized public API responses, including empty terminal pages,\n query parameters, timestamps, summaries and pagination provenance. The primary\n channel is all languages, all sentiments, purchase_type=steam, off-topic filtering\n enabled. See Steam's [review-list documentation](https://partner.steamgames.com/doc/store/getreviews).\n- `reviews.parquet`: 16,353 unique records in the Steam-purchase channel, of which\n 15,445 belong to the 24 primary paid games. The other 908 are a supplemental\n filtered subset of Bad Dream: Fever.\n- `free_context_reviews.parquet`: 1,515 all-acquisition records for the three\n currently free titles. These include the overlapping 908 above. Deduplicating\n the two files gives **16,960 reviews across 27 games**.\n- Two free games return zero in the Steam-purchase channel despite having 131 and\n 41 all-acquisition reviews. Zero in that filtered channel must not be interpreted\n as zero audience. Paid and free acquisition channels are kept separate.\n- The 24 primary game streams were paginated to empty responses. Twenty-two match\n their API summary totals exactly; Bad Dream: Coma and Kingsvein differ by one\n record each. The free all-acquisition streams match their summaries. The redundant\n Steam-purchase Fever stream also differs by one. No missing rows were fabricated.\n\nThe monthly histogram endpoint did not reconcile with the relevant review-list\npopulations under the tested parameters: BYTEPATH histogram sum 328 versus 306\nSteam-purchase / 317 all-acquisition summary reviews; SNKRX 4,469 versus 4,197 /\n4,337. Parameter probes did not resolve this. Histograms were retained for audit\nbut **not used as the historical count source**.\n\n## What the history means\n\nCounts reconstruct **when currently returned reviews were created**. They do not\nrecover reviews later deleted, hidden or filtered out. The current recommendation\nand current text may differ from what was written at creation; no historical\npositivity or historical wording is inferred. Reviews are not sales, owners,\nfollowers or unique returning players.\n\nFor age comparisons, the recorded release date is accepted operationally when the\nearliest surviving Steam-purchase review is within two days before to fourteen\ndays after it. All 24 primary games pass; their earliest reviews are within 3.2\ndays after the source date. This is a consistency check, not an independent audit\nof every actual first release. Counts by day N include records created before\nrelease + N days. Immature 365-day windows remain missing rather than being filled\nwith current counts. The separate first-review clock is a diagnostic only.\n\n`historical_pairs.csv` retains 18 transitions among the original currently paid\ngames. It reconstructs predecessor and selected paid-catalog counts before each\nlater release. `free_catalog_context.csv` separately restores the currently free\nDesert Fox games using all acquisition types; those columns must not be read as a\nuniform paid-review metric. No causal effect of an intervening game is estimated.\n\n## Review interpretation\n\n`authorship_evidence.csv` holds 21 selected passages, IDs, dates, source locators\nand paraphrased interpretations. These include support and counterexamples:\nrecognition, stated future purchase, explicit prior-play reports, backward\ndiscovery, and rejection despite prior familiarity. Mentions of another game do\nnot automatically establish playing it or having followed the developer.\n\nThe 100-review pilot randomly sampled 50 English-marked Steam-purchase reviews\nfrom each a327ex game before manual topic coding. Labels describe what a review\nexplicitly discusses, not inferred motives. Generic praise and genre analogies do\nnot become build-preference labels. Median review length is 35.5 words for the\nBYTEPATH sample and nine for SNKRX, so cross-game mention-rate differences are not\ninterpreted as differences in how many players care about builds. One assistant\ncoded the packet; no independent inter-rater reliability is claimed.\n\nPrimary developer sources consulted for context:\n\n- [Azalea on its maker's itch page](https://radcodex.itch.io/azalea): explicitly short adventure, distinct from the RPG catalog.\n- [Rad Codex's profile](https://radcodex.itch.io/): a broader practice including browser experiments, not all visible on Steam.\n- [Zachtronics' own description of its educational catalog](https://www.zachtronics.com/zachademics/): identifies technology as continuity between puzzle games and Eliza.\n- [Eliza's official page](https://www.zachtronics.com/eliza/): the visual novel and its subject matter.\n\n## Reproduction and files\n\nCollection is complete; ordinary reproduction should run only local analysis:\n\n1. `analyze_history.py`: game histories, monthly arrival counts, reconstructed\n prior context, histogram audit, topic screens and the deterministic random pilot.\n2. `code_own_reviews.py`: materialize the saved manual topic judgments.\n3. `evidence.py`: evidence selection, own launch windows and four quiet-release sequences.\n4. `charts.py`: two PNG/SVG figures.\n5. `validate.py`: identities, source count reproduction, temporal boundaries,\n pagination exhaustion, privacy-field removal, request caps/pacing, frozen labels\n and closed collection state. Final run passed 446 checks.\n\nUse `../.venv/bin/python` from this directory. `probe.py`, `collect_reviews.py`\nand `free_context.py` are collection provenance, not required analysis steps.\nThey use fixed targets and cached pages; do not start a fresh collection merely to\nreproduce tables. `requests.jsonl`, the policy/status files and `validation.json`\nretain the collection record and hashes.\n\n`findings.md` contains the report, also delivered substantively in chat.\n# First Steam market research pass\n\nSource: the fresh September 5, 2026 Steam snapshot in the adjacent `2026-09-05`\ndirectory. No previous research logs, summaries, marketing blogs, store images or\nexternal game-performance estimates were used for this analysis. Steam network\ncollection remains disabled. The PNG/SVG files here are small statistical charts,\nnot downloaded game images.\n\n## Population and measurements\n\nThe source has 184,664 game apps, including 128,972 marked released. Ninety-three\nreleased records have no usable date and one has a future date; these are retained\nin the source and listed in `release_date_exceptions.csv`, but excluded from dated\ncomparisons. There are 128,878 valid dated released records.\n\nWhole-catalog supply tables retain free and explicit-content games as separate\nsegments. The main comparisons use currently paid games outside Steam's explicit\nsexual-content descriptors 3 and 4, with a valid reported release date. This gives\n38,494 games in the 2023–2025 comparison pool. It is not a manually judged quality\nfilter or an estimate of a particular developer's probability of success.\n\n`original_steam_release_date` takes precedence where supplied, otherwise\n`steam_release_date` is used. Dates remain store-reported, and first exposure can\nbe misstated, particularly for games graduating from Early Access. These are\ncurrent review totals attached to release cohorts, not historical launch outcomes.\nCurrent tags may have been added after success, or adopted more widely over time.\nOlder delisted games may be absent. Consequently the supply tables describe the\nsurviving public catalog, not a complete historical record of releases.\n\nResponse thresholds of 100 and 1,000 use Steam's filtered review count. They are\nconvenient scales, not definitions of financial success, sales estimates or revenue\nestimates. Median and upper-percentile counts, zero/<10 review counts, positivity,\nand concentration are retained alongside threshold rates.\n\nTag prevalence is nonexclusive: a game can belong to multiple groups. The broad\nlandscape uses the returned top 20 tags and checks top-5 specificity. Pair analysis\nrequires both tags among the top 10. Specificity changes can dramatically change\nsample sizes; the rare-pair follow-ups explicitly test broadening to top 20.\n\n## Comparison and selection procedure\n\nFor a group, a release-quarter expected count is the sum of the comparison pool's\n100-review proportion in each member's release quarter. Observed / expected is a\ndescriptive standardization, not a causal or predictive model. Price sensitivity\nuses quarter × current USD entry-price buckets (<=5, 5–10, 10–20, 20–40, >40,\nmissing), falling back to quarter alone where fewer than 40 games form a stratum.\n\nPrices use Steam's best non-bundle, single-game package offer: original/list price\nwhen supplied, otherwise current final price. Offers dependent on another owned\napp are excluded. The earlier minimum-of-all-options approach was corrected\nbecause another option can be an add-on. The correction affected 2,101 records;\n`price_extraction_corrections.csv` preserves the audit. Current prices may be\nresponses to sales and success themselves; this is not a pricing-effect estimate.\n\nPair discovery used 2023–2024 records only. Requirements: >=30 games, >=10 with\n100 reviews, >=30 games in each constituent-only comparison, and overlap with the\nsmaller constituent <85%. Broad/admin/evaluative exclusions are recorded in\n`analysis_specification.json`. A smoothed ratio against the stronger constituent-\nonly group ranks candidates. The 30 selected pairs were saved before inspecting\ntheir 2025 comparison results. The frozen selection's hash was checked after the\nprice and creator-identity corrections and did not change.\n\nThe 2025 comparison is a separate set of games in this snapshot, not a real-time\nforecasting backtest. All 30 results are published, including weak ones. Tag pairs\noverlap heavily; multiple FMV combinations are one related cluster, not independent\nreplications. These screens are exploratory; none establishes a causal advantage.\nWilson intervals in the chart are illustrative binomial intervals, not a correction\nfor selection, publisher clustering, or all the other limits above.\n\nDeveloper/publisher grouping uses reported clan IDs, with normalized-name fallback.\nA missing clan key is filled only when that normalized name maps to exactly one\nobserved clan within the role. Ambiguous names remain unresolved. These identities\nare not a verified map of corporate ownership. Largest-review and most-prolific\ncreator removals are separate sensitivity checks.\n\n## Follow-ups\n\nDescription-based companion/productivity and job-horror queries were devised after\nreading the initial results. They are explicitly exploratory and have no untouched\nvalidation sample. The exact regular expressions, counts, group members and\ncounterexamples are saved. Supported languages describe product localization, not\nbuyer location. No game was played to verify claims in its store description.\n\n`followups.json` includes a 2025 companion-vs-other-idler comparison using release\nquarter and price, with a minimum of 20 peers before falling back to quarter.\n\n## Outputs\n\n- `yearly.csv`, `january_august.csv`: catalog cohorts and response distributions.\n- `tag_landscape.csv`: supply share, response, specificity and concentration.\n- `pair_discovery_all.csv`: 1,765 eligible pair candidates.\n- `pair_discovery_selected_before_holdout.csv`: frozen top-30 selection.\n- `pair_holdout_results.csv`: all 2025 comparisons, including price sensitivity.\n- `pair_*_games.csv`, `group_*_games.csv` / `group_*.csv`: underlying titles.\n- `deep_groups.csv` / `.json`: rank, cohort, positivity and creator-removal checks.\n- `rare_pairs_exploratory.csv`, `rare_broad_*.csv`, `followups.json`: small-sample\n leads, broader definitions and rejected explanations.\n- `idler_companion_exploratory.csv`, `job_horror_exploratory.csv`: text matches.\n- `price_comparison.png/svg`, `pair_comparison.png/svg`: inspected data charts.\n- `validation.json`: successful independent count and selection checks.\n- `findings.md`: the substantive interpretation, also delivered in chat.\n\nRun, in order, with `../.venv/bin/python`: `prepare.py`, `analyze.py`,\n`deep_dive.py`, `followups.py`, `charts.py`, `validate_analysis.py`.\nThe frozen-selection hash records this first pass; a future dataset or changed\nresearch specification should use a new analysis directory.\n2026-09-05\nREADME.md\n__pycache__\nanalysis-2026-09-05\nbuild-destinations-2026-09-06\nbuild-expression-2026-09-05\ncareer-history-2026-09-06\ncollect.py\ncontinuation-2026-09-06\nexport.py\nfinish_metadata.py\ninventory.py\nnetwork_policy.json\nportfolios-2026-09-06\nreconcile.py\nrepair_aliases.py\nsearch_check.py\nsession-6-publication-2026-09-06\nvalidate.py\nREADME.md\ndata\nreports\nscripts\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nfor n in (5,6):\n s=Path...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"ab3275","wall_time_seconds":0.000003028,"exit_code":0,"original_token_count":7159,"output":"Warning: truncated output (original token count: 7159)\nTotal output lines: 140\n\nSESSION 5 summary chars 37433\n 100; Idler had 1,455, median 12, and 19.0%. Their position improved relative to similarly priced/date-grouped peers: approximately 1.52 and 2.06 times the expected 100-review counts respectively. This comparison did not show that lowering a price causes improvement.\n- Tags themselves can mislead: several filmed romance games were tagged Immersive Sim, so an aggregate for that label could not be read simply as demand for a Deus Ex-like design.\n\n**Desktop/background companions and filmed visual novels:**\n\n- An exploratory description screen broadened the small Desktop Companion tag to promises involving productivity/focus tools, Pomodoro timers, or games occupying a screen corner while the user works or does something else. Among 2025 idlers, 42/130 companion-positioned games reached 100 reviews (32.3%, median 23), versus 117/650 other idlers (18.0%, median nine).\n- Sixteen companion matches exceeded 1,000 reviews. Similar quarter/price peers predicted approximately 25 games above 100; 42 were observed. Removing the largest developer or publisher left 31.8%. Examples included Tiny Pasture, Fantasy Map Simulator, Ropuka’s Idle Island, Tiny Aquarium, and Cornerpond. Taskbarn and Strange Shores illustrated that similar positioning could still receive little response.\n- The creative question proposed was what other ongoing systems people might enjoy alongside another activity. This was explicitly exploratory: the description screen was devised after seeing initial results and had no untouched validation sample.\n- Visual Novel + FMV in the top ten produced 69/86 games above 100 reviews, 23 above 1,000, and a median of 360 across 67 developer groups. Forty-eight also met 80% positive. The split was 33/42 in 2023–2024 and 36/44 in 2025; removing the publisher with the most reviews left 66/83 above 100. Price-sensitive comparisons remained favorable.\n- Dating Sim + FMV, Interactive Fiction + FMV, and Immersive Sim + FMV substantially overlapped this same cluster; they were treated as one finding. Descriptions included romance, relationship decisions, and palace intrigue, with Love Is All Around, Road to Empress I, and Mandate Of Heaven among the examples and Light of Reversing Destiny as a lower-response counterexample.\n- Seventy-seven of those 86 games supported Simplified Chinese and 68 English. This was product-localization evidence, not buyer nationality or regional sales, and limited transfer of the finding to another cultural/language market. The owner later ruled out making incrementals, idlers, or FMV visual novels; these remained broad research findings rather than recommendations for him.\n\n**Automation, inexpensive thrillers, and attractive leads that weakened:**\n\n- Resource Management + Automation in the top ten contained 98 games across 94 developer groups, with 49 above 100 reviews and median 104. Satisfactory contributed 78.5% of total reviews, yet removing it left 48/97 above 100. Removing the top tenth by review count still left 44.3%, demonstrating the difference between a concentrated total and a broader distribution.\n- Inexpensive examples included Beltmatic, Factory Town Idle, Widget Inc., and Incredicer, whose descriptions framed production as arithmetic, a living spreadsheet, incremental manufacturing, and automated dice rolling. The Factory Must Grow, with eight reviews, provided a counterexample. The interpretation was a healthy family with varied presentations, not proof of economical production.\n- An important chronological qualification replaced the stronger initial pairing interpretation: although the 2025 automation/resource-management group remained above the broad pool, its additional advantage over automation alone did not survive the particular price comparison. Combining those two labels was not established as independently beneficial.\n- Thriller + Walking Simulator produced 43/146 games above 100 reviews, median 40, and median current entry price $4.99. The split was 25/80 in 2023–2024 and 18/66 in 2025; date/price and creator-removal checks remained favorable.\n- A narrower “ordinary work becomes horror” description screen did not show a clear 2025 advantage: 9/78 matches exceeded 100 reviews versus 387/2,428 other horror games. Night-shift, security, cashier, gas-station, and data-entry keywords did not establish a reliable formula merely because memorable examples existed.\n- Hidden Object + Cats weakened in raw holdout response, from 38/113 to 14/114 above 100 reviews, but the newer group still compared favorably with inexpensive peers. Hand-drawn + Cats was a clearer failure to repeat: 32/92 versus 2/62, also weak in the 2025 price comparison. Review histories would be needed before attributing either result to saturation.\n- Tiny intersections could manufacture apparent scarcity. Horror + Typing initially yielded three games using top-five tags, two above 1,000 reviews; widening to the returned top twenty gave 41 games, five above 1,000, and median eight. Similar rank-sensitivity checks tempered other rare combinations. Interesting examples did not establish an empty or underserved market.\n- The assistant finished and saved this analysis before delivering it, but became stuck composing the handover. The owner pointed this out using information from a side chat; the assistant acknowledged the delay and delivered the substantive findings in chat rather than relying solely on files.\n\n**Owner’s build-expression focus and why 2026 was separated:**\n\n- The owner redirected the research toward “games where you can try lots of builds,” including items, characters, equipment, passives, abilities, and other systems allowing different ways to play. He explicitly excluded making incrementals, idlers, and visual-novel FMV games, and asked for the reasoning about 2026 before further research.\n- The assistant explained that 2026 had been excluded from the main broad outcome comparison because exposure time varied sharply: by September 5, a January release had about eight months while an August release had days or weeks. The first pass had nevertheless included 2026 in supply counts and exploratory rare pairs. Excluding it entirely from a current build-game investigation would miss relevant developments.\n- The agreed follow-up therefore separated full-year 2025, January–June 2026, and July–August 2026, comparing families within each window and standardizing for release timing and current price. January–August supply comparisons used equivalent calendar periods. No snapshot-only method could reconstruct a 2025 game’s review total at the same age as a 2026 game.\n- The conceptual questions concerned what is configured (character, equipment, deck, party, army, machine), how alternatives differ (interactions, class combinations, modifiers, skill trees, composition), and when decisions occur (pre-run, during a run, between encounters, persistent progression). Not every one of these axes proved recoverable reliably from text.\n\n**Build-expression classification and methodological limitations:**\n\n- The classifier operated on stored short/full descriptions and tags, identifying explicit build variety, combinations/synergies, loadouts/playstyles, deck construction, class branching, party composition, and related object/quantity claims. It retained strict matches, a broader inclusive definition, and unconfirmed genre candidates, with excerpts explaining matches.\n- This measured advertised configuration opportunities, not verified gameplay depth, viable-build counts, balance, or enjoyment. Quantity claims alone were weaker evidence. Automatic combat did not disqualify an auto battler; central idler/incremental/FMVs and central visual novels were excluded, with exceptions for relevant game hybrids according to the saved rules.\n- The initial audit hid review counts and prices. Of 36 strict matches inspected, 31 clearly advertised configuration and five were ambiguous. Inclusive and unconfirmed examples helped expose false negatives and unclear boundaries. This small audit was a diagnostic, not a certified accuracy estimate.\n- False positives included “interactive items,” genre/control combinations, individual tactical actions, fixed progression, and ordinary storage. Rules were refined; 64 further centrally marketed idle/incremental records were removed after examining short pitches. A diagnostic full-description idle signal was later repaired without changing the substantive membership logic.\n- Family labels overlap. Top-five genre membership was too restrictive for some recognizable games: Slay the Spire 2’s Roguelike Deckbuilder tag was sixth in the snapshot. Final central family comparisons used top-20 tag membership, with top-five/top-ten checks retained rather than silently counting those definitions interchangeably.\n- Comparisons used review thresholds, positivity, medians, concentration, publisher removals, known-history exclusions, direct textual signals, inclusive/strict definitions, tag-rank changes, current-price tiers, and description-length checks. All remain observational; current store prose/tags can change after success and English-oriented text matching can miss relevant games.\n\n**Build-expression supply and final 2025–2026 family results:**\n\n- Comparing January–August cohorts after the focal exclusions, eligible paid games rose from 9,140 in 2025 to 12,409 in 2026 (+36%). Strict build-expression matches rose from 843 to 1,717 (+104%), increasing their share from 9.2% to 13.8%. The broader definition also nearly doubled. This is growth in advertised build expression, potentially reflecting store-language changes as well as design changes.\n- There were already 146 strict January–August 2026 matches with at least 100 reviews and at least 80% positive, versus 109 in the corresponding 2025 cohort. Different population sizes and exposure times prevent interpreting these counts as improving success rates.\n- The combined positive-response benchmark was introduced because attention and satisfaction diverged. For full-year 2025, January–June 2026, and July–August 2026 respectively, all strict focal build matches numbered 1,365, 1,085, and 632; 181, 101, and 45 met the combined benchmark, or 13.3%, 9.3%, and 7.1%.\n- Within those same three windows, top-20 Roguelike Deckbuilder matches met the benchmark at 41/169 (24.3%), 22/132 (16.7%), and 10/67 (14.9%). Action Roguelike was 58/449 (12.9%), 29/361 (8.0%), and 12/204 (5.9%). Auto Battler was 20/121 (16.5%), 9/90 (10.0%), and 5/46 (10.9%). Tower Defense was 15/99 (15.2%), 9/84 (10.7%), and 1/48 (2.1%).\n- Families must be compared within each period; the falling rates across periods mix unequal accumulation time and do not establish market deterioration. The newest windows are especially provisional, and a handful of qualifying games cannot justify announcing a boom or collapse.\n- Roguelike deckbuilders showed the clearest persistent favorable association: approximately 1.50, 1.39, and 1.49 times their date/current-price expected combined-positive counts. The pattern survived tag-cutoff changes and largest-review-publisher removal. This was stronger evidence than the broad “cards/decks” label, not proof of a causal genre advantage.\n- Review-volume concentration was particularly misleading here. Slay the Spire 2 had 182,020 reviews but 61% positive in the snapshot and contributed about 80% of first-half card/deck review volume. Summing reviews would conceal the response distribution and satisfaction differences among other games.\n- Advertised counts of 100+ options had a recurring favorable association in some comparisons, but these are unverified quantity claims and cannot show that adding more items causes better reception. The final interpretation emphasized consequential alternatives rather than nominal counts.\n\n**Concrete build-game examples and differentiation hypotheses:**\n\n- Auto battlers offered varied configurations despite only modest aggregate advantages: Oaken Tower advertised a tower of interacting items (2,889 reviews, 89% positive); Skull Horde a necromancer’s army and loot (1,070, 81%); Legionbound recruited heroes/class synergies/ascensions (642, 83%); Wireworks a module board, wiring, and signals (602, 89%); Hive Blight a team of insect warriors (357, 94%). These figures are September 5 observations.\n- The assistant’s interpretation was that what players assemble, and the rules connecting its parts, offer room for differentiation inside recognizable combat structures. This was a design hypothesis drawn from examples, not a dataset proof that these structures are inexpensive or underserved.\n- Action build games remained active without much additional favorable association over the build-game baseline after date/price adjustment. Examples included Vital Shell’s fantasy-archetype mechs (1,699 reviews, 96% positive, $5.99), Arms of God’s five simultaneous weapons/upgrading/merging (1,845, 88%, $11.50), …659 tokens truncated…gger interacting with a ring so that its lower displayed base damage became better for a particular setup; another described itemization transforming an initially weak fireball. These supplied concrete examples of configuration-dependent usefulness.\n- SpiritVale reviews could praise respec flexibility and class/item optimization while criticizing servers, balance, bots, economy, or support. Other sampled games mixed combat/build criticism with presentation, pacing, performance, or franchise expectations. Aggregate dissatisfaction therefore could not simply be attributed to rejection of build expression.\n- The resulting hypothesis was “conditional value”: an item becomes desirable because of a particular setup or changes what an ability does, rather than merely increasing a number until every option is owned. The assistant proposed prioritizing a compact game with a distinctive configuration rule and consequential interactions, while explicitly acknowledging that Steam data did not establish development duration or minimal-marketing viability.\n\n**Artifacts, verification, and continuation:**\n\n- Source data and collection documentation live under `/home/adn/a327ex/steam-research/2026-09-05/` and the research-root `README.md`. Key files are `catalog.sqlite`, `exports/games.parquet`, `exports/other_apps.parquet`, `exports/games.csv.gz`, `exports/schema.json`, `exports/manifest.json`, `field_inventory.csv`/`.json`, `coverage.json`, `validation.json`, `metadata_complete.json`, `alias_repair.json`, `provenance.json`, and compressed `raw/` responses.\n- The first analysis lives under `/home/adn/a327ex/steam-research/analysis-2026-09-05/`: `findings.md`, `README.md`, prepared game/tag Parquet files, yearly and January–August tables, `tag_landscape.csv`, all/frozen/holdout pair tables, group-member exports, rare-pair and description follow-ups, price corrections, generated pair/price comparison charts, and `validation.json`. Scripts support reproducing preparation, analysis, deeper checks, follow-ups, charts, and validation.\n- The focal pass lives under `/home/adn/a327ex/steam-research/build-expression-2026-09-05/`: `findings.md`, `README.md`, `classification.parquet`, classification/analysis specifications, blind audit and labels, `analysis_membership.parquet`, `supply.csv`, `family_results.csv`, period/definition/tag-rank sensitivity data, per-family member Parquet exports, review CSV/manifest/raw samples, classifier/analysis/review scripts, and final validation artifacts.\n- The broad analysis verified source/identity/date accounting, frozen selection hashes, discovery/holdout separation, recomputed baseline/year/pair counts, script parsing, and disabled media/network collection. The build pass ultimately passed all 39 consistency checks, including reproduction of 500 classifier records, calibrated baseline ratios, family counts, bounded review sampling, network pause, and absence of downloader/media directories. A stale diagnostic classifier signal was corrected before the successful run.\n- The most useful continuation is to investigate concrete configuration mechanisms and the distinction between meaningful alternatives and numerical abundance, using the saved game lists and evidence excerpts. A separately bounded review-history collection could answer questions about age-adjusted traction that this snapshot cannot. No decision was made to build a specific new game or change a current project.\n- The owner requested ending the session under the title “Steam Market Research 5” and continuing research in another task. Because the main agent had compacted, he explicitly asked that a subagent read the complete converted Markdown transcript and write the session summary independently. This summary follows that full converted record; historical tool output that was already truncated in the record is not represented as recovered text.\n\nSESSION 6 summary chars 32436\n days, or 30 days for 2026. Require at least three controls; missing prices form a separate group. Comparison games lack a detected strict promise, not necessarily builds.\n- Tightened matching after coarser date/price adjustment overstated several apparent advantages. Saved peer identities and repeated matching-window, neighbor-count, description-length, definition, creator-history, and leading-title/developer/publisher removal checks. Unsupported cases were excluded from matched numerators and denominators.\n- Final sparse screen required host N at least 100, at least ten strict games but at most 15% prevalence, at least five 100-review games across five developer names, at least 80% matching support, at least five supported qualifying games, and observed/expected ratio at least 1.5. Action RPG, sports, board/dice/tabletop, city/colony, and RTS passed; familiar RPG/RTS configuration prevents interpreting every pass as an unexpected opening.\n\n**Destination results: conventional families and weak broad premiums:**\n\n- Strict advertised-build shares in confirmed 2023–2025 hosts: deckbuilding 589/724 (81.4%), autobattler 88/201 (43.8%), action roguelike 461/1,696 (27.2%), top-down/arena shooting 135/825 (16.4%), tactical RPG 132/895 (14.7%), tower defense 86/699 (12.3%), and Action RPG 71/739 (9.6%). These use the revised classifier and host definition, so are not interchangeable with the earlier continuation counts.\n- Main 100-review observed/expected ratios: deckbuilding 117/60.7 = 1.93 across 496 supported builds; autobattler 25/14.3 = 1.75 across 78; Action RPG 29/15.9 = 1.83 across 67; top-down shooting 27/14.5 = 1.87 across 134; tactical RPG 42/33.4 = 1.26 across 130; action roguelike 110/93.8 = 1.17 across 460; tower defense 15/13.4 = 1.12 across 86.\n- Platforming yielded six observed versus six expected among 32 supported builds; puzzle seven versus 6.6 among 45; management 15 versus 15 among 49; broad horror six versus ten among 25. No stable broad additional review-count premium was established for these areas.\n- Matching-setting ranges were 0.90–1.07 for platforming, 0.95–1.19 for puzzle, 0.98–1.13 for management, and 1.02–1.26 for tower defense. These ranges are method sensitivity, not confidence intervals; no conclusion that builds are artistically unwelcome followed.\n\n**Sports: clearest uncommon lead, with limits:**\n\n- Strict sports matches: 17/666 (2.6%). Six of 17 (35.3%) reached 100 reviews versus 98/649 (15.1%) in the remainder; median reviews 42 versus nine. All 17 had matching support; six observed versus 3.2 expected gave 1.88 times expectation.\n- Six qualifying games had six developer names: Tape to Tape 3,461 reviews; Esports History 383; Clutchtime: Basketball Deckbuilder 181; Motordoom 173; Squiggle Football 143; Fight Crab 2 128. Descriptions divided them into three direct-action forms and three management/card/RPG abstractions, not a result favoring one sport.\n- Description-length matching retained all 17 and a 1.53 ratio. Removing the largest developer/publisher left five qualifying games among 16 and a 1.79 ratio. Removing three largest games weakened it to three among 14 and 1.25.\n- Eleven of seventeen remained below 100 reviews. Only one reached 1,000, equal to the matched expectation at that threshold. This is stronger evidence for repeated modest response than for unusually large outcomes.\n- Equivalent January–August supply increased from 6/173 (3.5%) in 2025 to 18/254 (7.1%) in 2026. The newer group had three qualifying games, two among 17 supported cases versus 0.6 expected; too few events for an improving-demand claim. Sports was a small active family, not empty territory.\n\n**City/colony, tabletop, FPS, and unresolved destinations:**\n\n- City/colony: 16/386 strict games (4.1%), ten reaching 100 (62.5%) versus 130/370 (35.1%). All matched; ten observed versus 5.4 expected = 1.85. Ten developer names contributed qualifying games, including Mind Over Magic 4,304; TerraScape 2,052; Border Pioneer 1,665; Technotopia 592; Kingdom's Deck 488; Night is Coming 383; Roots of Yggdrasil 300; These Doomed Isles 179; Dawnmaker 156; Tiny Kingdom 149.\n- At least eight of those ten explicitly advertised cards/decks in settlement building. Removing the top three left seven qualifying among thirteen and a 2.06 ratio; description-length matching weakened support to eleven games and a 1.49 ratio. The 2026 group had one qualifying game among twelve; eleven matched cases gave one versus 2.6 expected, or 0.38. Strong older evidence lacked current confirmation.\n- Board/dice/tabletop: 61/530 strict games (11.5%), fifteen reaching 100 across fourteen names, versus 48/469 in the remainder; seven reached 1,000. The supported subset was 55 games with ten qualifying versus 5.6 expected, or 1.79. Six unsupported games included five qualifying titles, so the full fifteen cannot be used in the matched numerator.\n- Tabletop sensitivity ranged 1.58–2.26; description-length matching gave 2.24, and removing the top three 1.73. In 2026, thirteen of 52 qualified; twelve among 49 supported games compared with 3.2 expected. But fourteen of fifteen older qualifying titles also carried a familiar build-family tag; outside those tags only one of 21 qualified, and twenty supported cases gave 0.71 times expectation.\n- Tabletop January–August strict share rose from 13/124 (10.5%) to 52/255 (20.4%). Astrea, SpellRogue, Dice & Fold, Pip My Dice, The Ouroboros King, Dog Witch, and commercial board-game adaptations illustrated a growing established family, not general unmet demand.\n- FPS: 57/1,005 strict games, 24 qualifying across 23 names; 56 supported games yielded 23 versus 16.5 expected, or 1.40. Description-length matching reduced this to 1.14, a narrow direct-wording definition to 1.11, and broader configuration to 1.29. Newer supported cases yielded five versus 7.8 expected, or 0.64. Existing response was substantial but the added association modest and period-sensitive.\n- Top-down shooting provided a steadier established reference: 1.87 main ratio, 1.80 with description-length matching, and 1.78 after removing the three largest. Its January–August strict share already rose from 15.6% to 29.6%, making it increasingly conventional.\n- Very sparse groups stayed unresolved: racing five strict/two qualifying; driving six/one; metroidvania six/three; stealth seven/six; fighting six/four; rhythm eleven/three; flight eleven/two; fishing five/two; farming nine/five; match-3 seven/one; pinball one/zero; job/hobby five/four; point-and-click one/zero. Only three stealth cases had adequate peers; a match-3 ratio of five represented one case versus 0.2 expected. Tiny samples and weak support do not establish an opening or rejection.\n- Final reading: sports is the clearest uncommon quantitative lead; tabletop has persistent repeated response largely in familiar structures; city/colony has a dispersed older record with weak 2026 confirmation; FPS is less compelling after stronger checks; top-down is established; other rare areas remain unresolved. None of these comparisons demonstrates that an audience is waiting for more supply.\n\n**Completion and retained boundaries:**\n\n- Finished the requested research batches and returned the substantive results in chat before the owner asked to end the session as “Steam Market Research 6.” No further research avenue was started during publication.\n- The public log retains the full original conversation through that end-session message, a thorough summary, and supporting artifacts. The original task UUID is `01a074e2-abcb-7d50-93d8-144f0d1295a4`; exact identity and the recorded cutoff were used rather than transcript recency.\n- Across all studies, review counts are response measures, not revenue or artistic value; advertised builds are not verified depth; normalized credits are not verified personal careers; observational matching is not a causal effect; and the owner's existing catalog does not turn aggregate rates into personal forecasts.\n\n{\n \"network_paused\": true,\n \"metadata_min_interval_seconds\": 2.0,\n \"stop_on_http_429\": true,\n \"reason\": \"Metadata snapshot finished. Network collection closed; no media downloader exists.\"\n}steam-research/analysis-2026-09-05/games.parquet\nsteam-research/analysis-2026-09-05/tags.parquet\nsteam-research/portfolios-2026-09-06/all_transitions.parquet\nsteam-research/portfolios-2026-09-06/games.parquet\nsteam-research/portfolios-2026-09-06/transitions.parquet\nsteam-research/portfolios-2026-09-06/transitions_enriched.parquet\nfrom pathlib import Path\nimport json\nimport pandas as pd\nR=Path(__file__).resolve().parent\ndef load_games():\n g=pd.read_parquet(R.parent/'analysis-2026-09-05/games.parquet')\n for appid,record in json.loads((R/'date_overrides.json').read_text()).items():\n date=pd.Timestamp(record['date'],tz='UTC');mask=g.appid.eq(int(appid))\n g.loc[mask,'first_date']=date\n g.loc[mask,'year']=date.year;g.loc[mask,'month']=date.month\n g.loc[mask,'quarter']=f'{date.year}-Q{date.quarter}'\n return g\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"ls /mnt/Main/a327ex/steam-market/reports; sed -n '1,240p' steam-resear...)
Script completed
Wall time 2.1 seconds
Output:
{"chunk_id":"c6a292","wall_time_seconds":0.00000524,"exit_code":0,"original_token_count":2656,"output":"00-synthesis.md\n01-delta-map.md\n02-tag-scan.md\n03-trajectories.md\n04-anomalies.md\n05-art-gate.md\n06-language-gaps.md\n07-features.md\n08-goldrush.md\n09-breakout.md\n10-whitespace.md\n11-sequel-migration-ev.md\n12-review-text.md\n13-desc-mining.md\n14-cadence-revival.md\n15-path-dependence.md\n16-art-vs-price.md\n17-scope-vs-price.md\n18-migration-deep.md\n19-lane-deep.md\n20-timing-deep.md\n21-wishlist-proxy.md\n22-quality-momentum.md\n23-ea-paths.md\n24-own-games-review-corpus.md\n25-video-claims.md\n26-career-climb.md\n27-gap-pivot.md\n28-career-shapes.md\n29-continuation.md\n30-first-rung.md\n31-audience-worth.md\nnotes.md\nraw_art_price.txt\nraw_audience_worth.txt\nraw_breakout.txt\nraw_breakout_recent20.txt\nraw_breakout_v2.txt\nraw_career_climb.txt\nraw_careers_shape.txt\nraw_continue_design.txt\nraw_desc_mining.txt\nraw_ea_paths.txt\nraw_ev_inputs.txt\nraw_first_rung.txt\nraw_gap_pivot.txt\nraw_goldrush_v1.txt\nraw_goldrush_v2.txt\nraw_goldrush_v3.txt\nraw_indep_check.txt\nraw_lane_deep.txt\nraw_migration_deep.txt\nraw_path_dependence.txt\nraw_path_dependence2.txt\nraw_path_dependence3.txt\nraw_quality_momentum.txt\nraw_reviews_text.txt\nraw_revival.txt\nraw_scope.txt\nraw_sequel_migration.txt\nraw_timing_deep.txt\nraw_timing_sales2.txt\nraw_video_claims.txt\nraw_video_claims2.txt\nraw_whitespace.txt\nraw_wishlist_proxy.txt\nfrom pathlib import Path\nimport datetime as dt, json, re, unicodedata\nimport pandas as pd\nimport pyarrow.parquet as pq\n\nBASE=Path(__file__).resolve().parent\nSOURCE=BASE.parent/'2026-09-05/exports'\n\ndef key(creator,appid):\n if creator.get('creator_clan_account_id'):return 'clan:'+str(creator['creator_clan_account_id'])\n name=unicodedata.normalize('NFKC',creator.get('name','')).casefold().strip()\n name=re.sub(r'\\s+',' ',name)\n return 'name:'+name if name else 'unknown:'+str(appid)\n\ndef clean(text):\n text=re.sub(r'\\[img[^\\]]*\\].*?\\[/img\\]',' ',text,flags=re.S|re.I)\n text=re.sub(r'\\[[^\\]]*\\]',' ',text)\n text=re.sub(r'https?://\\S+',' ',text)\n return re.sub(r'\\s+',' ',text).strip()\n\nrows=[]\nfor batch in pq.ParquetFile(SOURCE/'games.parquet').iter_batches(batch_size=4096):\n for g in batch.to_pylist():\n data=json.loads(g.pop('data_json'));basic=data.get('basic_info',{});release=data.get('release',{})\n devs=basic.get('developers',[]);pubs=basic.get('publishers',[])\n developer=next((c for c in devs if c.get('name')),{});publisher=next((c for c in pubs if c.get('name')),{})\n g.update(developer=developer.get('name',''),publisher=publisher.get('name',''),developer_key=key(developer,g['appid']),publisher_key=key(publisher,g['appid']))\n o=data.get('best_purchase_option',{})\n g['usd_list_price']=None\n if g['source_country']=='US' and o.get('packageid') and not o.get('bundleid') and o.get('included_game_count',1)<=1 and not o.get('free_with_master_sub_appid'):\n price=o.get('original_price_in_cents',o.get('final_price_in_cents'))\n if price is not None and int(price)>0:g['usd_list_price']=int(price)/100\n g['adult_explicit']=bool(set(data.get('content_descriptorids',[]))&{3,4})\n g['steam_date']=g['steam_release_date']\n first=g['original_steam_release_date']\n g['first_date']=first if first and first>0 else g['steam_release_date']\n g['known_ea_history']=bool(g['is_early_access'] or g['original_steam_release_date'] or g['release_from_early_access_date'])\n g['description']=clean(data.get('full_description_bbcode',''))\n g['short_description']=g['short_description'] or ''\n g['english_support']=any(x.get('elanguage')==0 and x.get('supported') for x in data.get('supported_languages',[]))\n g['schinese_support']=any(x.get('elanguage')==6 and x.get('supported') for x in data.get('supported_languages',[]))\n g['languages_count']=sum(bool(x.get('supported')) for x in data.get('supported_languages',[]))\n g['demo_related']=bool(data.get('related_items',{}).get('demos') or data.get('related_items',{}).get('standalone_demos'))\n g['windows']=data.get('platforms',{}).get('windows',False)\n g['native_linux']=data.get('platforms',{}).get('steamos_linux',False)\n g['deck_code']=data.get('platforms',{}).get('steam_deck_compat_category')\n g['store_url']='https://store.steampowered.com/app/'+str(g['appid'])+'/'\n rows.append(g)\n print('prepared',len(rows),flush=True)\ngames=pd.DataFrame(rows)\n# Fill missing clan identities only when the normalized name maps to exactly one\n# observed clan in the same role; ambiguous names remain unresolved.\nfor role in ['developer','publisher']:\n norm=games[role].fillna('').map(lambda x:re.sub(r'\\s+',' ',unicodedata.normalize('NFKC',x).casefold()).strip())\n names={}\n for name,k in zip(norm,games[role+'_key']):\n if name and k.startswith('clan:'):names.setdefault(name,set()).add(k)\n mapping={name:next(iter(keys)) for name,keys in names.items() if len(keys)==1}\n games[role+'_key']=[mapping.get(name,k) if k.startswith('name:') else k for name,k in zip(norm,games[role+'_key'])]\nfor field in ['first_date','steam_date']:\n games[field]=pd.to_datetime(games[field].where(games[field]>0),unit='s',utc=True,errors='coerce')\ngames['year']=games.first_date.dt.year.astype('Int64')\ngames['quarter']=games.first_date.dt.strftime('%Y-Q')+games.first_date.dt.quarter.astype('Int64').astype(str)\ngames['month']=games.first_date.dt.month.astype('Int64')\ngames['reviews']=games.reviews_filtered_count.astype('int64')\ngames['positive_pct']=games.reviews_filtered_positive_percent\ngames['valid_released']=(games.is_coming_soon==0)&games.first_date.notna()&(games.first_date<pd.Timestamp('2026-09-06',tz='UTC'))\ngames['price_bucket']=pd.cut(games.usd_list_price,[-.01,5,10,20,40,float('inf')],labels=['<=5','5-10','10-20','20-40','>40']).astype(str)\ngames['main']=games.valid_released&(games.is_free==0)&~games.adult_explicit\nassert len(games)==184664 and games.appid.nunique()==184664\nassert games.reviews.min()>=0\ngames.to_parquet(BASE/'games.parquet',index=False)\ntags=pd.read_parquet(SOURCE/'game_tags.parquet');tags=tags[tags.appid.isin(games.appid)]\nnames=pd.read_parquet(SOURCE/'tag_names.parquet');tags=tags.merge(names.rename(columns={'name':'tag'}),on='tagid',validate='many_to_one')\ntags.to_parquet(BASE/'tags.parquet',index=False)\naudit={'all_games':len(games),'released_flag':int((games.is_coming_soon==0).sum()),'valid_dated_released':int(games.valid_released.sum()),'released_no_date':int(((games.is_coming_soon==0)&games.first_date.isna()).sum()),'released_future_date':int(((games.is_coming_soon==0)&(games.first_date>=pd.Timestamp('2026-09-06',tz='UTC'))).sum()),'main_paid_nonexplicit_valid':int(games.main.sum()),'original_steam_dates_used':int(games.original_steam_release_date.notna().sum())}\n(BASE/'preparation_audit.json').write_text(json.dumps(audit,indent=2))\nprint(json.dumps(audit,indent=2))\ngames[(games.is_coming_soon==0)&~games.valid_released][['appid','name','first_date','steam_date','reviews']].to_csv(BASE/'release_date_exceptions.csv',index=False)\n\"\"\"Shared career-sequence machinery for reports 26-31 (second-act / career-shape suite).\n\nConventions (locked after report 25 + independent replication):\n- dev identity = normalized full steamspy developer string (collabs split — known limit)\n- steam_era: drop devs whose first release predates 2015 (kills back-catalog imports,\n which fake 'first games' at ~50% hit rates)\n- bands: low <50 reviews | mid 50-555 | hit >=556 (~25k units at 45 u/rev)\n- outcome maturity: only score releases <= 2025-07-01 (>=1y review accumulation)\n- continuation metrics use FIXED follow-up windows (replication lesson: 'ever returned'\n censors against recent cohorts)\n- steamspy dev coverage decays after ~2021 (missing-dev share ~6%->30%): within-cohort\n comparisons are clean, cross-era continuation LEVELS are not.\n\"\"\"\nimport math, re, sys\nfrom collections import defaultdict\nfrom datetime import date\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom common import ROOT, load_catalog, load_tagmap\n\nCUTOFF = date(2026, 7, 1)\nMATURE = date(2025, 7, 1)\nHIT = 556\nFOOT = 50\nnorm = lambda s: (s or '').strip().lower()\nselfpub = lambda g: g['developer'] and norm(g['developer']) == norm(g['publisher'])\n\ndef band(reviews):\n return 'low' if reviews < FOOT else ('mid' if reviews < HIT else 'hit')\nBAND_RANK = {'low': 0, 'mid': 1, 'hit': 2}\n\ndef wilson(k, n, z=1.96):\n if n == 0: return (0.0, 0.0)\n p = k/n; d = 1 + z*z/n\n c = (p + z*z/(2*n))/d\n h = z*math.sqrt(p*(1 - p)/n + z*z/(4*n*n))/d\n return (max(0.0, c - h)*100, min(1.0, c + h)*100)\n\ndef pct_ci(k, n):\n lo, hi = wilson(k, n)\n return f'{k/n*100:5.1f}% [{lo:.0f}-{hi:.0f}] n={n}'\n\nTM = {ord(c): None for c in '\\u2122\\u00ae\\u00a9'}\nROMAN = r'(?:[2-9]|1[0-9]|II|III|IV|V|VI|VII|VIII|IX|X)'\n\ndef base_name(name):\n s = norm(name).translate(TM)\n s = re.sub(r'\\s*(?:[:\\-\\u2013\\u2014]\\s*)?' + ROMAN + r'$', '', s)\n s = re.sub(r'\\s*(?:definitive|deluxe|complete|enhanced|ultimate|remastered)\\s+edition$', '', s)\n return s.strip(' :-')\n\ndef colon_base(name):\n s = norm(name).translate(TM)\n return s.split(':')[0].strip() if ':' in s else None\n\ndef is_sequel_of(name, prior_name):\n if not name or not prior_name: return False\n b1, b2 = base_name(name), base_name(prior_name)\n if len(b1) >= 5 and b1 == b2 and norm(name) != norm(prior_name): return True\n c1, c2 = colon_base(name), colon_base(prior_name)\n return bool(c1 and c2 and len(c1) >= 6 and c1 == c2)\n\ndef months_between(a, b):\n return (b - a).days/30.44\n\ndef load_careers(steam_era=True):\n \"\"\"-> dict norm_dev -> date-sorted game list. Adds g['sortdate'].\"\"\"\n games = [g for g in load_catalog() if g['year'] and g['year'] <= 2026]\n for g in games:\n g['sortdate'] = g['date'] or date(g['year'], 7, 1)\n games = [g for g in games if g['sortdate'] <= CUTOFF]\n by_dev = defaultdict(list)\n for g in games:\n d = norm(g['developer'])\n if d: by_dev[d].append(g)\n for gs in by_dev.values():\n gs.sort(key=lambda g: (g['sortdate'], g['appid']))\n if steam_era:\n by_dev = {d: gs for d, gs in by_dev.items() if gs[0]['year'] >= 2015}\n return by_dev\n\ndef pairs(by_dev, mature_next=True):\n \"\"\"All consecutive release pairs -> (dev, i, prev, nxt, prior_best_reviews).\"\"\"\n out = []\n for d, gs in by_dev.items():\n best = 0\n for i in range(len(gs) - 1):\n best = max(best, gs[i]['reviews'])\n nxt = gs[i+1]\n if mature_next and nxt['sortdate'] > MATURE: continue\n out.append((d, i, gs[i], nxt, best))\n return out\n"}
{"chunk_id":"75e457","wall_time_seconds":1.85262655,"exit_code":0,"original_token_count":1632,"output":"analysis-2026-09-05/games.parquet 184664 ['appid', 'name', 'type', 'visible', 'is_free', 'is_coming_soon', 'is_early_access', 'steam_release_date', 'original_release_date', 'original_steam_release_date', 'release_from_early_access_date', 'reviews_filtered_count', 'reviews_filtered_positive_percent', 'reviews_unfiltered_count', 'reviews_english_count', 'short_description', 'source_country', 'fetched_at', 'developer', 'publisher', 'developer_key', 'publisher_key', 'usd_list_price', 'adult_explicit', 'steam_date', 'first_date', 'known_ea_history', 'description', 'english_support', 'schinese_support', 'languages_count', 'demo_related', 'windows', 'native_linux', 'deck_code', 'store_url', 'year', 'quarter', 'month', 'reviews', 'positive_pct', 'valid_released', 'price_bucket', 'main']\n appid name type visible is_free is_coming_soon is_early_access steam_release_date original_release_date original_steam_release_date release_from_early_access_date reviews_filtered_count reviews_filtered_positive_percent reviews_unfiltered_count reviews_english_count short_description source_country fetched_at developer publisher developer_key publisher_key usd_list_price adult_explicit steam_date first_date known_ea_history description english_support schinese_support languages_count demo_related windows native_linux deck_code store_url year quarter month reviews positive_pct valid_released price_bucket main\n 10 Counter-Strike 0 1 0 0 0 973065600.0 NaN NaN NaN 169588 96 NaN 35093.0 US 2026-09-05T19:09:38.986403+00:00 Valve Valve clan:4 clan:4 NaN False 2000-11-01 08:00:00+00:00 2000-11-01 08:00:00+00:00 False Play the world's number 1 online action game. Engage in an incredibly realistic brand of terrorist warfare in this wildly popular team-based game. Ally with teammates to complete strategic missions. Take out enemy sites. Rescue hostages. Your role affects your team's success. Your team's success affects your role. True True 8 False True True 2.0 https://store.steampowered.com/app/10/ 2000 2000-Q4 11 169588 96 True NaN True\nanalysis-2026-09-05/tags.parquet 2925481 ['appid', 'tagid', 'weight', 'rank', 'tag']\n appid tagid weight rank tag\n 10 19 1613 1 Action\ncareer-history-2026-09-06/reviews.parquet 16353 ['appid', 'game', 'developer', 'recommendationid', 'language', 'review', 'voted_up', 'timestamp_created', 'timestamp_updated', 'steam_purchase', 'received_for_free', 'written_during_early_access', 'playtime_at_review_minutes']\n appid game developer recommendationid language review voted_up timestamp_created timestamp_updated steam_purchase received_for_free written_during_early_access playtime_at_review_minutes\n538070 Bad Dream: Coma Desert Fox 234326307 russian Самое удачное начало серии но к сожалению печальный финал и просадка качества,рекомендую эту простую игру с моралью на тихий осенний вечерок True 1788378410 1788378410 True False False 133.0\nbuild-expression-2026-09-05/classification.parquet 184664 ['appid', 'strict', 'inclusive', 'candidate', 'exclusion', 'object_terms', 'quantity_claims_json', 'signal_explicit_build', 'signal_branching', 'signal_combination', 'signal_choice', 'signal_playstyle', 'signal_deck', 'signal_skill_tree', 'signal_quantity', 'signal_idle_central', 'signal_machine', 'signal_party', 'signal_prerun', 'signal_draft', 'signal_craft_merge', 'signal_position', 'evidence_json', 'card_deck', 'party_composition', 'equipment_skills', 'machine_assembly', 'loop_action_rogue', 'loop_auto_battler', 'loop_tactics_rpg', 'loop_action_rpg', 'loop_deck_rogue']\n appid strict inclusive candidate exclusion object_terms quantity_claims_json signal_explicit_build signal_branching signal_combination signal_choice signal_playstyle signal_deck signal_skill_tree signal_quantity signal_idle_central signal_machine signal_party signal_prerun signal_draft signal_craft_merge signal_position evidence_json card_deck party_composition equipment_skills machine_assembly loop_action_rogue loop_auto_battler loop_tactics_rpg loop_action_rpg loop_deck_rogue\n 10 False False False 0 [] False False False False False False False False False False False False False False False {} False False False False False False False False False\n[('games', 'CREATE TABLE games (\\n appid INTEGER PRIMARY KEY, name TEXT, type INTEGER, visible INTEGER,\\n is_free INTEGER, is_coming_soon INTEGER, is_early_access INTEGER,\\n steam_release_date INTEGER, original_release_date INTEGER,\\n original_steam_release_date INTEGER, release_from_early_access_date INTEGER,\\n reviews_filtered_count INTEGER, reviews_filtered_positive_percent INTEGER,\\n reviews_unfiltered_count INTEGER, reviews_english_count INTEGER,\\n short_description TEXT, source_country TEXT, fetched_at TEXT, data_json TEXT)'), ('game_categories', 'CREATE TABLE game_categories (\\n appid INTEGER, category_group TEXT, categoryid INTEGER,\\n PRIMARY KEY(appid,category_group,categoryid))')]\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"sed -n '1,210p' /mnt/Main/a327ex/steam-market/scripts/common.py; cat /...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"9e07d0","wall_time_seconds":0.000002919,"exit_code":0,"original_token_count":3336,"output":"\"\"\"Shared catalog loader for analysis scripts.\"\"\"\nimport html, json, re, sqlite3, sys\nfrom datetime import date\n\nsys.stdout.reconfigure(encoding='utf-8')\n\nROOT = 'E:/a327ex/steam-market'\nK = 35.9 # revenue ~= reviews * K * base_price_usd (data/calibration/estimator.json)\nK_BAND = (25, 55)\nTODAY = date.today()\n\nMONTHS = {m: i+1 for i, m in enumerate(\n ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])}\n\nFULL_RE = re.compile(r'^([A-Z][a-z]{2}) (\\d{1,2}), (\\d{4})$')\nMONTH_RE = re.compile(r'^([A-Z][a-z]{2}) (\\d{4})$')\nYEAR_RE = re.compile(r'^(\\d{4})$')\n\ndef parse_release(txt):\n \"\"\"-> (year, date_or_None). (None, None) if unparseable/unreleased.\"\"\"\n if not txt:\n return None, None\n t = txt.strip()\n m = FULL_RE.match(t)\n if m and m.group(1) in MONTHS:\n try:\n return int(m.group(3)), date(int(m.group(3)), MONTHS[m.group(1)], int(m.group(2)))\n except ValueError:\n return int(m.group(3)), None\n m = MONTH_RE.match(t)\n if m and m.group(1) in MONTHS:\n return int(m.group(2)), date(int(m.group(2)), MONTHS[m.group(1)], 15)\n m = YEAR_RE.match(t)\n if m:\n return int(m.group(1)), None\n return None, None\n\ndef load_tagmap():\n with open(f'{ROOT}/data/tags.json', encoding='utf-8') as f:\n return {t['tagid']: t['name'] for t in json.load(f)}\n\ndef load_catalog(released_only=True):\n \"\"\"Join search + steamspy into a list of game dicts.\"\"\"\n con = sqlite3.connect(f'{ROOT}/data/search.sqlite')\n spy = {}\n try:\n scon = sqlite3.connect(f'{ROOT}/data/steamspy.sqlite')\n for r in scon.execute('''SELECT appid, developer, publisher, positive, negative,\n owners_low, owners_high, median_forever, average_forever, ccu FROM steamspy'''):\n spy[r[0]] = r[1:]\n except sqlite3.OperationalError:\n pass\n games = []\n for (appid, name, release_text, tagids, review_summary, review_pct, review_count,\n price_final, price_orig, discount, platforms) in con.execute(\n '''SELECT appid, name, release_text, tagids, review_summary, review_pct,\n review_count, price_final_cents, price_orig_cents, discount_pct, platforms\n FROM search'''):\n year, rdate = parse_release(release_text)\n released = year is not None and (rdate is None or rdate <= TODAY) and year <= TODAY.year\n if released_only and not released:\n continue\n price = (price_orig if price_orig else price_final)\n price_usd = price/100 if price else None\n free = price is not None and price == 0\n reviews = review_count or 0\n rev_est = reviews*K*price_usd if (price_usd and not free) else None\n s = spy.get(appid)\n games.append({\n 'appid': appid, 'name': html.unescape(name) if name else None,\n 'year': year, 'date': rdate, 'released': released,\n 'tags': [int(x) for x in tagids.split(',') if x] if tagids else [],\n 'summary': review_summary, 'pct': review_pct, 'reviews': reviews,\n 'price': price_usd, 'free': free, 'rev_est': rev_est,\n 'platforms': platforms or '',\n 'developer': s[0] if s else None, 'publisher': s[1] if s else None,\n 'spy_pos': s[2] if s else None, 'spy_neg': s[3] if s else None,\n 'owners_low': s[4] if s else None, 'owners_high': s[5] if s else None,\n 'median_playtime': s[6] if s else None, 'avg_playtime': s[7] if s else None,\n 'ccu': s[8] if s else None})\n return games\n\ndef coverage():\n out = {}\n for db, table in [('search.sqlite', 'search'), ('steamspy.sqlite', 'steamspy'),\n ('appdetails.sqlite', 'appdetails'), ('histogram.sqlite', 'done')]:\n try:\n con = sqlite3.connect(f'{ROOT}/data/{db}')\n out[table] = con.execute(f'SELECT COUNT(*) FROM {table}').fetchone()[0]\n except sqlite3.OperationalError:\n out[table] = 0\n return out\n# 22 — Quality × momentum: does \"just make it good\" hold? (session 3, avenue #1)\n\nScripts: `scripts/quality_momentum.py`. Raw: `raw_quality_momentum.txt`. Cohort 2022–24.\nQuality = review positivity; the causal cuts use **pct@m3** (positivity computed from\nhistogram rollups through month 3) → growth *after* m3, so quality is measured before\nthe outcome it predicts.\n\n## Verdict\n\n**\"Just make it good\" is measurably wrong as a growth strategy.** Early positivity buys a\nsmall tail multiplier (1.77× → 2.54× lifetime/m3 across a 35-point positivity range — real\nbut the smallest effect of anything measured this session), badges have **no threshold\neffects** (smooth through 80% and 95%), quality **cannot rescue a cold start** (P(hit |\nm1<25) is flat-to-declining in quality: 32.5% at <80 vs 26.9% at 95+), and the slow-burn\nwinners are **not** better-reviewed than the cold starts that died (median pct 85 in both\ngroups; the dead ones actually have MORE 95+ games, 18% vs 12%). Momentum dominates\npositivity utterly: in the m1 × pct@m3 grid, moving up the momentum axis swings P(hit)\n32% → 96%, while moving across the entire quality axis moves it ±5pt noise.\n\n## The tables\n\n- **P(hit | current pct)** (≥25 reviews, descriptive): inverted-U — peaks at 80–89\n (51–56%), *falls* at 95+ (39–44%). The 95+ zone is the \"beloved niche game\" trap: small\n adoring audiences rate high and don't scale (SNKRX itself sits at ~94.7%).\n- **pct@m3 → growth after m3** (m3≥30): <60: 1.77× · 70–79: 2.09× · 80–89: 2.28× ·\n 90–94: 2.39× · 95+: 2.54×. Monotone, shallow.\n- **Badge discontinuity** (badge-eligible m3≥50, fine buckets): 75–80: 2.14× → 80–85:\n 2.24× (no jump); 93–95: 2.43× → 95–98: 2.58× → 98–100: 2.50× (no jump; P(hit) *drops*\n to 68% at 98–100 — audience-size artifact). **Very Positive / Overwhelmingly Positive\n as thresholds to chase: unsupported.**\n- **Quality × momentum grid** (P(hit)): m1 0–24: 32/36/31% across <80/80–89/90+ · m1\n 25–99: 56/58/53% · m1 100+: 96/96/94%.\n- **Prior-hit conversion edge is NOT quality**: at equal m1, prior-hit self-pub devs'\n median pct = 84–85, first-timers' = 84–86. Their +10–28pt conversion edge (report 21)\n comes from distribution/trust/tail management, not better-reviewed games.\n\n## Interpretation and caveats\n\nPositivity measures satisfaction of people who already bought — expectations-adjusted, so\na $3 arcade game and Dominions both sit near 85. Its range on Steam is compressed\n(p25–p75 ≈ 75–92), which limits detectable effects. \"Quality\" in the make-a-good-game\nsense may still act upstream through m1 (a great demo/trailer earns wishlists), which this\nanalysis attributes to momentum. What's excluded by the data: the *found-because-good*\nstory (slow-burn winners = same pct as cold deaths — discovery selects on genre/tail-demand\nper report 21, not on ratings), and badge-threshold planning. Actionable residue: don't\nsacrifice anything that builds launch momentum to chase the last positivity points above\n~80; below ~70 the tail penalty is real (1.8× vs 2.3×) and worth fixing (report 12: bugs\nand grind are what drag it).\n# 27 — Gaps, pivots, comebacks (C + D + G)\n\n2026-08-06. Script `gap_pivot.py`, raw `raw_gap_pivot.txt`. 22,766 consecutive pairs,\nsteam-era devs, next release ≤2025-07.\n\n## C — fast follow vs long gap: monotone in favor of LONG at every rung\n\nP(next hit) by gap, prior-best low / mid / hit:\n<6mo **0.5 / 2.9 / 24.4%** · 6–12 1.3 / 5.5 / 32.1 · 12–24 2.0 / 8.7 / 41.1 ·\n24–48 3.9 / 11.5 / 47.7 · 48mo+ **7.2 / 15.6 / 56.6%**. Holds within eras (mid-band\n2019–21: 2.8→16.9; 2022–25: 2.1→15.3). Confound visible and honest: median next price\nclimbs with gap ($4.99 → $19.99 in the hit row) — gap is a scope/effort proxy. Verdict:\n\"ship fast and often\" is the worst per-release pattern at every rung; the calendar isn't\nthe lever, the bigger game is. (Tension with report 28's per-YEAR view noted there.)\n\n## D — after a pure miss (<50 rev, prior best low): pivot beats doubling down 2×\n\nFoothold (≥50 rev next): PIVOT (different primary tag) **12.0%** vs DOUBLE DOWN 5.7%;\nclean break (≤1 shared top-5 tags) **13.5%** vs heavy overlap 5.1%. Sequel-of-the-miss is\nthe worst move measured: **3.2% foothold, 0% hit** (n=218). The loved-miss hypothesis\nDIES: pct≥85 misses (15.6%) = pct<70 misses (16.7%), and even loved-and-double-down\n(10.0%) loses to unloved-and-pivot (18.0%). A sub-50-review game's positivity carries no\ninformation about the next game. Tags are current-not-launch (standard caveat).\n\n## G — comebacks (gap ≥36mo), era-stratified: the market forgets NO ONE, at any rung\n\nP(next hit), 2022–25 era: low-rung comeback **5.3%** vs continuous <12mo 0.5% (11×);\nmid **13.4%** vs 2.5% (5×); hit **53.2%** vs 24.2% (2×). Same ordering in 2019–21.\nBand-up rates same story (low-rung comeback 19.7% vs 6.1%). Absence carries zero measured\npenalty anywhere — comeback releases are systematically *stronger* (same scope confound\nas C). The continuous-rapid-shipper pattern, not the hiatus, is the trap.\n\"\"\"Timing wave 2 fix: detect sale weeks from TAIL reviews only (>=180d after each game's\nfirst review week) so launch spikes don't drown the seasonal-sale signal, then redo the\nsale-proximity analysis. Output: stdout -> reports/raw_timing_sales2.txt\"\"\"\nimport math, sqlite3, statistics, sys\nfrom collections import Counter, defaultdict\nfrom datetime import date, datetime, timedelta, timezone\n\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom common import ROOT, load_catalog\n\nnorm = lambda s: (s or '').strip().lower()\nhit = lambda g: g['rev_est'] is not None and g['rev_est'] >= 50_000\n\ndef wilson(k, n, z=1.96):\n if n == 0:\n return (0.0, 0.0)\n p = k/n\n d = 1 + z*z/n\n c = (p + z*z/(2*n))/d\n h = z*math.sqrt(p*(1 - p)/n + z*z/(4*n*n))/d\n return (max(0.0, c - h)*100, min(1.0, c + h)*100)\n\ndef med_rev(gs):\n r = [g['rev_est'] for g in gs if g['reviews'] >= 10 and g['rev_est']]\n return statistics.median(r) if r else 0\n\nP = print\ncon = sqlite3.connect(f'{ROOT}/data/histogram.sqlite')\nP('aggregating tail reviews (>=180d after first review) by calendar week...')\nfirst = {r[0]: r[1] for r in con.execute(\n 'SELECT appid, MIN(ts) FROM rollup WHERE up>0 OR down>0 GROUP BY appid')}\nwk = Counter()\nfor appid, ts, up, down in con.execute('SELECT appid, ts, up, down FROM rollup'):\n if ts - first.get(appid, 0) < 180*86400:\n continue\n d = datetime.fromtimestamp(ts, tz=timezone.utc).date()\n if date(2022, 1, 1) <= d <= date(2026, 6, 1):\n wk[d - timedelta(days=d.weekday())] += up + down # normalize to Monday\nweeks = sorted(wk)\nP(f'{len(weeks)} calendar weeks with tail-review data; median weekly tail vol = '\n f'{statistics.median(wk[w] for w in weeks):,.0f}')\nsurge = {}\nfor i, w in enumerate(weeks):\n neigh = [wk[weeks[j]] for j in range(max(0, i - 5), min(len(weeks), i + 6)) if j != i]\n base = statistics.median(neigh)\n surge[w] = wk[w]/base if base else 1\n\nP()\nP('top 24 tail-review surge weeks (candidate sale weeks):')\ntops = sorted(surge.items(), key=lambda kv: -kv[1])[:24]\nfor w, r in sorted(tops):\n P(f' {w} x{r:.2f} vol={wk[w]:,}')\n\nsale_weeks = [w for w, r in tops if r >= 1.25]\nwins = []\nfor w in sorted(sale_weeks):\n if wins and (w - wins[-1][1]).days <= 8:\n wins[-1] = (wins[-1][0], w)\n else:\n wins.append((w, w))\nWINDOWS = [(a, b + timedelta(days=7)) for a, b in wins]\nP()\nP('merged sale windows: ' + ', '.join(f'{a}..{b}' for a, b in WINDOWS))\n\ngames = [g for g in load_catalog() if g['price'] and not g['free'] and g['date']]\nselfpub = lambda g: norm(g['developer']) == norm(g['publisher']) and g['developer']\nPOOL = [g for g in games if 2022 <= g['year'] <= 2024]\nHIS = [g for g in POOL if selfpub(g) and 7.5 < g['price'] <= 20.5]\n\ndef bucket(d):\n best = None\n for a, b in WINDOWS:\n if a <= d <= b:\n return 'DURING sale'\n delta = (a - d).days if d < a else (d - b).days\n tag = 'pre' if d < a else 'post'\n if best is None or delta < best[0]:\n best = (delta, tag)\n if best is None:\n return 'far (>45d)'\n dd, tag = best\n if tag == 'pre':\n if dd <= 7: return '1-7d BEFORE sale'\n if dd <= 21: return '8-21d before'\n if dd <= 45: return '22-45d before'\n else:\n if dd <= 7: return '1-7d AFTER sale'\n if dd <= 21: return '8-21d after'\n if dd <= 45: return '22-45d after'\n return 'far (>45d)'\n\nP()\nP('H50 BY DISTANCE TO NEAREST SALE WINDOW (2022-24; all | selfpub $8-20)')\norder = ['DURING sale', '1-7d BEFORE sale', '8-21d before', '22-45d before',\n '1-7d AFTER sale', '8-21d after', '22-45d after', 'far (>45d)']\nba, bc = defaultdict(list), defaultdict(list)\nfor g in POOL:\n ba[bucket(g['date'])].append(g)\nfor g in HIS:\n bc[bucket(g['date'])].append(g)\nfor b in order:\n a, c = ba.get(b, []), bc.get(b, [])\n k = sum(map(hit, a))\n lo, hi = wilson(k, len(a))\n kc = sum(map(hit, c))\n lc, hc = wilson(kc, len(c))\n P(f' {b:<18} all: {k/max(1,len(a))*100:>5.1f}% [{lo:.1f}-{hi:.1f}] (n={len(a):<5}) '\n f'med=${med_rev(a)/1e3:>4.0f}K | his: {kc/max(1,len(c))*100:>5.1f}% [{lc:.0f}-{hc:.0f}] (n={len(c)})')\n"}
[Think]
**Structuring independent-claim matrix**
The scope is now clear: Fable’s work contains both catalog findings we can retest broadly and historical claims that need review arrivals, update records, or visual scores. Our newer data can directly test the market, tag, price, feature, description, and career findings; session 6 also gives us 24 paid-game review histories for checking his historical methods.
I’m building a separate replication with both his original outcome formulas and fixed review thresholds. That will show which conclusions survive independently of the revenue estimator, narrow tag cutoffs, and prolific developers dominating the counts.
exec ({"code": "text(await tools.exec_command({cmd:\"sed -n '1,130p' /mnt/Main/a327ex/steam-market/scripts/depth_claims.py;...)
Script completed
Wall time 2.2 seconds
Output:
{"chunk_id":"260a5f","wall_time_seconds":0.124941619,"exit_code":0,"original_token_count":2540,"output":"\"\"\"Depth-claims mining: numeric content claims ('120+ items', '40 characters') from store\ndescriptions (appdetails raw). Compares claim prevalence hit vs fail arms (stratified) and\ndose-response among hits. Art-independent build-depth measure.\"\"\"\nimport json, re, sqlite3, statistics\nfrom collections import Counter, defaultdict\n\nfrom common import ROOT, load_catalog, load_tagmap\n\nBUILD_NOUNS = ['items', 'weapons', 'upgrades', 'abilities', 'passives', 'characters',\n 'classes', 'relics', 'cards', 'spells', 'perks', 'skills', 'units',\n 'heroes', 'artifacts', 'talents', 'augments', 'builds', 'traits', 'runes']\nCLAIM_RE = re.compile(\n r'(?:over\\s+|more than\\s+)?(\\d{2,4})\\s*\\+?\\s*'\n r'(?:unique\\s+|different\\s+|distinct\\s+|powerful\\s+|collectible\\s+|playable\\s+|craftable\\s+)*'\n r'(' + '|'.join(BUILD_NOUNS) + r')\\b', re.I)\nTAG_STRIP = re.compile(r'<[^>]+>')\n\ndef main():\n games = {g['appid']: g for g in load_catalog()}\n tagmap = load_tagmap()\n name2id = {v: k for k, v in tagmap.items()}\n con = sqlite3.connect(f'{ROOT}/data/appdetails.sqlite')\n\n recs = []\n for appid, raw in con.execute('SELECT appid, raw FROM appdetails'):\n g = games.get(appid)\n if not g or not g['year'] or not (2023 <= g['year'] <= 2025) or g['free'] or not g['price']:\n continue\n try:\n data = json.loads(raw)[str(appid)]['data']\n desc = TAG_STRIP.sub(' ', (data.get('detailed_description') or '') + ' ' +\n (data.get('about_the_game') or ''))\n except Exception:\n continue\n claims = defaultdict(int)\n for num, noun in CLAIM_RE.findall(desc):\n n = int(num)\n if 10 <= n <= 5000:\n claims[noun.lower()] = max(claims[noun.lower()], n)\n arm = ('hit' if g['rev_est'] and g['rev_est'] >= 50_000\n else 'mid' if g['reviews'] >= 10 else 'fail')\n recs.append({'g': g, 'arm': arm, 'claims': dict(claims),\n 'total': sum(claims.values()), 'nnouns': len(claims)})\n\n arms = {a: [r for r in recs if r['arm'] == a] for a in ('hit', 'mid', 'fail')}\n print(f\"coverage: hit={len(arms['hit'])}, mid={len(arms['mid'])}, fail={len(arms['fail'])}\\n\")\n\n print('=== claim prevalence by arm (any numeric build claim >=10) ===')\n for a in ('fail', 'mid', 'hit'):\n rs = arms[a]\n share = sum(1 for r in rs if r['claims'])/len(rs)*100\n big = sum(1 for r in rs if r['total'] >= 100)/len(rs)*100\n multi = sum(1 for r in rs if r['nnouns'] >= 3)/len(rs)*100\n print(f' {a:>4}: any claim {share:.0f}% total>=100 {big:.0f}% >=3 noun types {multi:.0f}%')\n\n bt_names = ['Roguelike', 'Roguelite', 'Action Roguelike', 'Roguelike Deckbuilder',\n 'Deckbuilding', 'Auto Battler', 'Bullet Heaven', 'Loot', 'Action RPG',\n 'Dungeon Crawler', 'Idler', 'Incremental']\n bt = {name2id[n] for n in bt_names if n in name2id}\n print('\\n=== same, build-tag games only (genre-controlled) ===')\n for a in ('fail', 'mid', 'hit'):\n rs = [r for r in arms[a] if set(r['g']['tags']) & bt]\n if len(rs) < 30:\n continue\n share = sum(1 for r in rs if r['claims'])/len(rs)*100\n big = sum(1 for r in rs if r['total'] >= 100)/len(rs)*100\n print(f' {a:>4} (n={len(rs)}): any claim {share:.0f}% total>=100 {big:.0f}%')\n\n print('\\n=== dose-response among HITS: median est $ by claimed depth ===')\n for label, pool in [('all hits', arms['hit']),\n ('build-tag hits', [r for r in arms['hit'] if set(r['g']['tags']) & bt])]:\n buckets = [('no claim', lambda r: not r['claims']),\n ('total 10-99', lambda r: r['claims'] and r['total'] < 100),\n ('total 100-299', lambda r: 100 <= r['total'] < 300),\n ('total 300+', lambda r: r['total'] >= 300)]\n cells = []\n for bl, pred in buckets:\n rs = [r for r in pool if pred(r)]\n med = statistics.median([r['g']['rev_est'] for r in rs]) if rs else 0\n cells.append(f'{bl}: ${med/1000:.0f}K (n={len(rs)})')\n print(f' {label}: ' + ' | '.join(cells))\n\n print('\\n=== noun-level: claim prevalence in hits vs fails ===')\n for noun in BUILD_NOUNS:\n h = sum(1 for r in arms['hit'] if noun in r['claims'])/len(arms['hit'])*100\n f = sum(1 for r in arms['fail'] if noun in r['claims'])/len(arms['fail'])*100\n if h >= 1 or f >= 1:\n print(f' {noun:<12} hits {h:>4.1f}% fails {f:>4.1f}% ratio {h/max(f,0.1):>4.1f}x')\n\n print('\\n=== within-Idler: build-claim idlers vs plain idlers ===')\n idler_ids = {name2id[n] for n in ('Idler', 'Incremental') if n in name2id}\n for a in ('fail', 'hit'):\n rs = [r for r in arms[a] if set(r['g']['tags']) & idler_ids]\n if len(rs) < 20:\n print(f' {a}: n={len(rs)} too small')\n continue\n share = sum(1 for r in rs if r['claims'])/len(rs)*100\n print(f' {a} idlers (n={len(rs)}): {share:.0f}% have numeric build claims')\n\nmain()\n2:decomposition around the winter sale, day-of-week, weekly competition density, sale-window\n3:proximity (sale weeks DETECTED from catalog-wide weekly review surges), Next Fest proximity\n40:P('1. H50 BY RELEASE MONTH (2022-24 pooled = all months fully matured; plus 2025; plus his class)')\n41:P('month | 2022-24 all | 2025 (younger months censored) | selfpub $8-20 (22-24)')\n52:P('median est $ (revd) + median price by month, 2022-24 (composition check):')\n61:P('2. NOV-JAN HALF-MONTH DECOMPOSITION (2022-24; winter sale ~Dec 19 - Jan 2)')\n64: ((12, 19), (12, 31), 'Dec 19-31 (in winter sale)'),\n65: ((1, 1), (1, 9), 'Jan 1-9 (sale tail)'), ((1, 10), (1, 31), 'Jan 10-31')]\n76:P('3. DAY OF WEEK (2022-24; all + his class)')\n87:P('4. LAUNCH-WEEK COMPETITION (same-week paid release count; quartiles within 2022-24)')\n101:# ============ 5. SALE-WEEK DETECTION ============\n104:P('5. SALE WEEKS DETECTED from catalog-wide weekly review surges (weekly-rollup games)')\n120:sale_weeks = []\n123: sale_weeks.append(w)\n126:def sale_windows(sale_weeks):\n129: for w in sorted(sale_weeks):\n135:WINDOWS = sale_windows(sale_weeks)\n136:P('merged sale windows: ' + ', '.join(f'{a}..{b}' for a, b in WINDOWS))\n138:# ============ 6. RELEASE TIMING vs SALES ============\n141:P('6. H50 BY DISTANCE TO NEAREST DETECTED SALE WINDOW (2022-24 paid + his class)')\n142:def sale_bucket(d):\n144: for a, b in WINDOWS:\n146: return 'DURING sale'\n155: if dd <= 7: return '1-7d BEFORE sale'\n159: if dd <= 7: return '1-7d AFTER sale'\n163:order = ['DURING sale', '1-7d BEFORE sale', '8-21d before', '22-45d before',\n164: '1-7d AFTER sale', '8-21d after', '22-45d after', 'far (>45d)']\n167: bux[sale_bucket(g['date'])].append(g)\n169: buc[sale_bucket(g['date'])].append(g)\n180:P('7. RELEASE TIMING vs NEXT FEST (fests 2024-10+ detected from demo peaks; earlier = calendar-encoded, ±1w)')\n212:P('8. WEEK-OF-YEAR H50 CURVE (2022-24, +-1 week smoothing)')\n\"\"\"Report 28 — volume vs craft careers (E).\n\nDevs first release 2015-2021 (>=4.5y observation). Cadence = releases per observed year\n(first release -> cutoff). Outcomes normalized per career-year. 'Serious' = any game\nreached 50 reviews (splits shovelware volume from Sokpop-style volume).\n\nOutput -> reports/raw_careers_shape.txt\n\"\"\"\nimport statistics, sys\nfrom collections import defaultdict\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom career_common import load_careers, band, HIT, FOOT, CUTOFF, pct_ci, selfpub\n\nOUT = open('E:/a327ex/steam-market/reports/raw_careers_shape.txt', 'w', encoding='utf-8')\ndef p(*a):\n s = ' '.join(str(x) for x in a)\n print(s); OUT.write(s + '\\n')\n\nby_dev = load_careers()\nCADB = [(0, 0.34, '<=1 per 3y'), (0.34, 1.01, '1 per 1-3y'), (1.01, 3.01, '1-3 per yr'),\n (3.01, 10**9, '3+ per yr')]\n\ndef career_rows(devs, label):\n p(f'-- {label}:')\n rows = defaultdict(list)\n for gs in devs:\n obs = (CUTOFF - gs[0]['sortdate']).days/365.25\n cad = len(gs)/obs\n cb = next(l for lo, hi, l in CADB if lo <= cad < hi)\n rev = sum(g['rev_est'] or 0 for g in gs)\n hits = sum(1 for g in gs if g['reviews'] >= HIT)\n rows[cb].append((len(gs), rev/obs, hits > 0, hits/obs, max(g['reviews'] for g in gs)))\n for lo, hi, cb in CADB:\n rs = rows.get(cb, [])\n if len(rs) < 30: continue\n n = len(rs)\n k = sum(1 for r in rs if r[2])\n med_rev = statistics.median(r[1] for r in rs)\n p90_rev = sorted(r[1] for r in rs)[int(.9*n)]\n hpy = sum(r[3] for r in rs)/n\n medg = statistics.median(r[0] for r in rs)\n p(f' {cb:>10}: n={n:<5} med games {medg:>3.0f} P(any hit) {pct_ci(k, n)} '\n f'med $/yr ${med_rev/1000:>5.1f}K p90 ${p90_rev/1000:>7.0f}K hits per 100 dev-yrs {hpy*100:>5.1f}')\n\nfor elo, ehi in ((2015, 2021), (2015, 2017), (2018, 2021)):\n p(f'\\n=== E: first release {elo}-{ehi} ===')\n devs = [gs for gs in by_dev.values() if elo <= gs[0]['year'] <= ehi]\n career_rows(devs, 'ALL devs')\n serious = [gs for gs in devs if any(g['reviews'] >= FOOT for g in gs)]\n career_rows(serious, 'SERIOUS (any game >=50 reviews)')\n sp = [gs for gs in serious if all(selfpub(g) for g in gs)]\n career_rows(sp, 'serious + fully self-published')\n\np('\\n=== anchors ===')\nfor want in ('sokpop collective',):\n gs = by_dev.get(want)\n if gs:\n obs = (CUTOFF - gs[0]['sortdate']).days/365.25\n rev = sum(g['rev_est'] or 0 for g in gs)\n hits = sum(1 for g in gs if g['reviews'] >= HIT)\n p(f'{want}: {len(gs)} games / {obs:.1f}y = {len(gs)/obs:.1f} per yr; '\n f'{hits} hits; est ${rev/1e6:.1f}M total = ${rev/obs/1000:.0f}K/yr')\nOUT.close()\napp_aliases.parquet\ncategory_names.parquet\ncreators.parquet\ndiscovery.parquet\ngame_categories.parquet\ngame_images.parquet\ngame_tags.parquet\ngames.csv.gz\ngames.parquet\nimage_sources.parquet\nlanguages.parquet\nmanifest.json\nother_apps.parquet\npages.parquet\nregional.parquet\nschema.json\ntag_names.parquet\n"}
Steam :: Steamworks Development :: Official dates for the first half of 2025 Steam Sales and Fests (https://steamcommunity.com/groups/steamworks/announcements/detail/4264427597939246984)
citeturn0search0 [wordlim: 200] Published: 2.1 years ago; Crawled: last week;
Image--------------------------------------------------------------------------------
Steam :: Steamworks Development :: 2023 Official Steam Sales and Fests Schedule (https://steamcommunity.com/groups/steamworks/announcements/detail/3645136358931000681)
citeturn0search1 [wordlim: 200] Published: 3.5 years ago; Crawled: last week;
Image--------------------------------------------------------------------------------
Steam :: Steamworks Development :: Announcing the official Steam Sales and Fests dates for the 2nd half of 2025 (https://steamcommunity.com/groups/steamworks/announcements/detail/497187349280587904?l=english&pubDate=20250213)
citeturn0search2 [wordlim: 200] Published: 1.6 years ago; Crawled: 3 months ago;
Image--------------------------------------------------------------------------------
Steam :: Steamworks Development :: Announcing the official Steam Sales and Fests dates for the 2nd half of 2025 (https://steamcommunity.com/groups/steamworks/announcements/detail/497187349280587904?pubDate=20250213)
citeturn0search3 [wordlim: 200] Published: 1.6 years ago; Crawled: 2 months ago;
Image--------------------------------------------------------------------------------
Seasonal Sales (Steamworks Documentation) (https://partner.steamgames.com/doc/marketing/discounts/seasonalsales?l=english)
citeturn0search4 [wordlim: 200] Crawled: last week; Steamworks Documentation > Sales and Marketing > Discounting > Seasonal Sales ... Every game on Steam can join a seasonal sale and any discount set to 20% or greater will automatically trigger email notifications to players with your game on their wishlist. ... ## Dates ... ## Winter Sale 2026 | December 17, 2026 - January 4, 2027 ... In any case, there are always future opportunities to put your game on discount, so you shouldn't feel pressured to change your release date or pricing updates for the sake of a seasonal sale event.
--------------------------------------------------------------------------------
Steam changing Lunar Sale into a Spring Sale. (https://www.reddit.com/r/Steam/comments/xq566g)
citeturn0reddit12 [wordlim: 200] Published: 3.9 years ago; Crawled: 3.5 years ago; https://steamcommunity.com/groups/steamworks/announcements/detail/3282583269823858401 ... New in 2023: an annual Spring Sale will become one of Steam's four major seasonal sales
--------------------------------------------------------------------------------
Upcoming Steam Events (Steamworks Documentation) (https://partner.steamgames.com/doc/marketing/upcoming_events?l=english)
citeturn0search5 [wordlim: 200] Crawled: 2 months ago; Four times a year, we run Steam-wide seasonal sale events. ... ## Spring Sale | March 19 - 26, 2026 (ENDED) ... ## Winter Sale | December 17 - January 4, 2027 ... Event Dates | Theme | Registration | Eligibility & Notes ... Feb 5 ... Aug 3 ... Steamworks is the set of tools and services built by Valve that help you configure, manage, and operate your game on Steam.
--------------------------------------------------------------------------------
Steam Sales 2025–2026: Next Sale Countdown & Calendar | Steam Dashboard (https://steamdb.com/en/tools/steam-sales)
citeturn0search6 [wordlim: 200] Published: 2 months ago; Crawled: today; Sale dates are announced ahead of time through Steamworks, and developers prepare their discounts for these events. ... 2025 | Steam Scream Fest 4 | October 27, 2025 — November 3, 2025 ... Steam runs four major seasonal sales per year: Spring (March), Summer (June–July), Autumn (late September or early October since 2025), and Winter (December–January), plus the Steam Scream Fest in late October.
--------------------------------------------------------------------------------
Steamworks Development - Official dates for the first half of 2025 Steam Sales and Fests - Steam News (https://store.steampowered.com/news/group/4145017/view/4264427597939246983)
... [65 more lines]
exec ({"code": "text(await tools.exec_command({cmd:\"mkdir -p steam-research/fable-verification-2026-09-06; steam-research/...)
Script completed
Wall time 1.2 seconds
Output:
{"chunk_id":"8698c8","wall_time_seconds":0.000005469,"exit_code":0,"original_token_count":17,"output":"pandas True\nnumpy True\nscipy True\nstatsmodels False\nmatplotlib True\n"}
{}
{"chunk_id":"661600","wall_time_seconds":1.001302372,"session_id":31843,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pyarrow.parquet as p...)
Script completed
Wall time 2.9 seconds
Output:
{"chunk_id":"0c1cd1","wall_time_seconds":0.551310615,"exit_code":0,"original_token_count":726,"output":"{'supported_player_categoryids': [1, 49, 36, 37], 'feature_categoryids': [66, 68, 69, 75, 8, 62]}\n[{'elanguage': 0, 'eadditionallanguage': -1, 'supported': True, 'full_audio': True, 'subtitles': False}, {'elanguage': 2, 'eadditionallanguage': -1, 'supported': True, 'full_audio': True, 'subtitles': False}, {'elanguage': 1, 'eadditionallanguage': -1, 'supported': True, 'full_audio': True, 'subtitles': False}, {'elanguage': 3, 'eadditionallanguage': -1, 'supported': True, 'full_audio': True, 'subtitles': False}, {'elanguage': 5, 'eadditionallanguage': -1, 'supported': True, 'full_audio': True, 'subtitles': False}]\n[{'categoryid': 1, 'name': 'Multi-player', 'data_json': '{\"categoryid\": 1, \"type\": 1, \"internal_name\": \"Multi-player\", \"display_name\": \"Multi-player\", \"image_url\": \"public/images/v6/ico/ico_multiPlayer.png\", \"show_in_search\": true, \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 2, 'name': 'Single-player', 'data_json': '{\"categoryid\": 2, \"type\": 1, \"internal_name\": \"Single-player\", \"display_name\": \"Single-player\", \"image_url\": \"public/images/v6/ico/ico_singlePlayer.png\", \"show_in_search\": true, \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 6, 'name': 'Mods (require HL2)', 'data_json': '{\"categoryid\": 6, \"type\": 0, \"internal_name\": \"Mods (requires HL2)\", \"display_name\": \"Mods (require HL2)\", \"image_url\": \"public/images/ico/ico_mod_hl2.gif\", \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 7, 'name': 'Mods (require HL1)', 'data_json': '{\"categoryid\": 7, \"type\": 0, \"internal_name\": \"Mods (requires HL1)\", \"display_name\": \"Mods (require HL1)\", \"image_url\": \"public/images/ico/ico_mod_hl.gif\", \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 8, 'name': 'Valve Anti-Cheat enabled', 'data_json': '{\"categoryid\": 8, \"type\": 2, \"internal_name\": \"VAC Enabled\", \"display_name\": \"Valve Anti-Cheat enabled\", \"image_url\": \"public/images/v6/ico/ico_vac.png\", \"show_in_search\": true, \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 9, 'name': 'Co-op', 'data_json': '{\"categoryid\": 9, \"type\": 1, \"internal_name\": \"Co-op\", \"display_name\": \"Co-op\", \"image_url\": \"public/images/v6/ico/ico_coop.png\", \"show_in_search\": true, \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 10, 'name': 'Game demo', 'data_json': '{\"categoryid\": 10, \"type\": 0, \"internal_name\": \"Game Demo\", \"display_name\": \"Game demo\", \"image_url\": \"public/images/ico/ico_demo.gif\", \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 99999}'}, {'categoryid': 13, 'name': 'Captions available', 'data_json': '{\"categoryid\": 13, \"type\": 2, \"internal_name\": \"Captions\", \"display_name\": \"Captions available\", \"image_url\": \"public/images/v6/ico/ico_cc.png\", \"show_in_search\": true, \"computed\": false, \"edit_url\": \"\", \"edit_sort_order\": 700}'}]\n"}
Steam :: Steamworks Development :: 2023 Official Steam Sales and Fests Schedule (https://steamcommunity.com/groups/steamworks/announcements/detail/3645136358931000681)
citeturn1view0 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://steamcommunity.com/groups/steamworks/announcements/detail/3645136358931000681","lineno":null}); Total lines: 1
--------------------------------------------------------------------------------
Steam :: Steamworks Development :: Now out: Full list of official 2024 Steam events (https://steamcommunity.com/groups/steamworks/announcements/detail/3970553774441642999)
citeturn1view1 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://steamcommunity.com/groups/steamworks/announcements/detail/3970553774441642999","lineno":null}); Total lines: 1
--------------------------------------------------------------------------------
Steam :: Steamworks Development :: Official dates for the first half of 2025 Steam Sales and Fests (https://steamcommunity.com/groups/steamworks/announcements/detail/4264427597939246984)
citeturn1view2 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://steamcommunity.com/groups/steamworks/announcements/detail/4264427597939246984","lineno":null}); Total lines: 1
--------------------------------------------------------------------------------
Steam :: Steamworks Development :: Announcing the official Steam Sales and Fests dates for the 2nd half of 2025 (https://steamcommunity.com/groups/steamworks/announcements/detail/497187349280587904)
citeturn1view3 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://steamcommunity.com/groups/steamworks/announcements/detail/497187349280587904","lineno":null}); Total lines: 1
--------------------------------------------------------------------------------
User Reviews - Get List (Steamworks Documentation) (https://partner.steamgames.com/doc/store/getreviews)
citeturn1view4 [wordlim: 200] Crawled: today; Content type: text/html; Source: find({"ref_id":"turn0view0","pattern":"purchase_type"}); Total lines: 446
L157: * cite154†Application Settings for Virtual Reality L158: * cite155†SteamVR Input L159: * cite156†OpenVR L160: * cite157†SteamVR for Enterprise / Government Use L161: * cite158†Finance L162: * cite159†Developer Refund Reporting L163: * cite160†Reporting and Payments L164: * cite161†Reporting and Payments FAQ L165: * cite162†Taxes FAQ L166: * cite163†Sales and Marketing L167: * cite164†Advertising on Steam L168: * cite165†Best Practices, Marketing L169: * cite166†Community Moderation L170: * cite167†Adding Community Moderators L171: * cite168†Curators and Curator Connect L172: * cite169†Discounting L173: * cite170†Daily Deals L174: * cite171†Free to Keep (100% Discount) L175: * cite172†Free Weekends L176: * cite173†Seasonal Sales L177: * cite174†Events and Announcements Tools L178: * cite175†Events and Announcements Examples L179: * cite176†Embeddable Widgets L180: * cite177†Events and Announcements Review Step L181: * cite178†Events and Announcements Visibility L182: * cite179†Events and Announcements Visibility Stats Reporting L183: * cite180†Event Type: Major Update L184: * cite181†Event Type: Small Update / Patch Notes L185: * cite182†Importing HTML L186: * cite183†Sale Page Tools L187: * cite184†Sale Page Tools -- Information for Partners L188: * cite185†Sale Page Tools - Background Groupings L189: * cite186†Sale Page Tools - Livestreaming (Broadcasting) L190: * cite187†Sale Page Tools - Minimum Requirements L191: * cite188†Sale Page Tools - Section Types L192: * cite189†Sale Page Section: Apps And Bundles L193: * cite190†Features And Tools, Marketing L194: * cite191†Followers L195: * cite192†Google Analytics L196: * cite193†Points Shop Items L197: * cite194†Profile Features L198: * cite195†Steam Branding Guidelines L199: * cite196†Steam Community Items L200: * cite197†Store and Platform Traffic Reporting L201: * cite198†Store Widget L202: * cite199†Upcoming Steam Events L203: * cite200†Steam Next Fest L204: * cite201†Steam Next Fest - Tips L205: * cite202†Steam Next Fest: February 2027 L206: * cite203†Steam Next Fest: June 2027 L207: * cite204†Steam Next Fest: October 2026 L208: * cite205†Steam Themed Sale Events L209: * cite206†Steam Auto Battler RPG Fest 2026 L210: * cite207†Steam Cooking Fest 2026 L211: * cite208†Steam Couch Co-Op Fest 2027 L212: * cite209†Steam Desktop Companion Fest 2027 L213: * cite210†Steam Dinos vs. Robots Fest 2027 L214: * cite211†Steam Fighting Fest 2027 L215: * cite212†Steam Medieval Fest 2026 L216: * cite213†Steam Mountaineering Fest 2027 L217: * cite214†Steam Party-Based RPG Fest 2026 L218: * cite215†Steam Programming Fest 2026 L219: * cite216†Steam PvE Survival Crafting Fest 2026 L220: * cite217†Steam Racing Fest 2027 L221: * cite218†Steam Real-Time Strategy Fest 2027 L222: * cite219†Steam Rhythm Fest 2027 L223: * cite220†Steam Scream V Fest L224: * cite221†Steam Sheep Fest 2027 L225: * cite222†Steam Shop Keeper Fest 2027 L226: * cite223†Steam Witch Fest 2027 L227: * cite224†UTM Analytics L228: * cite225†Visibility on Steam L229: * cite226†Update Visibility Rounds L230: * cite227†Wishlists L231: * cite228†Wishlist Reporting L232: * cite229†Steamworks SDK L233: * cite230†Creating and using InstallScripts L234: * cite231†Creating a retail and "Gold Master" disk L235: * cite232†Steamworks API Overview L236: * cite233†Debugging the Steamworks API L237: * cite234†Steamworks API Example Application (SpaceWar) L238: * cite235†Updating Game Build L239: * cite236†Partial Depot Update Instructions L240: * cite237†Tip - Renaming a live exe L241: * cite238†Uploading to Steam L242: * cite239†Distributing Open Source Applications on Steam L243: * cite240†Distributing Source Engine Games / Mods L244: * cite241†Distributing Your Dedicated Game Server L245: * cite242†SteamPipe Local Content Server L246: * cite243†Web API Overview L247: * cite244†Authentication using Web API Keys L248: * cite245†Error Codes &amp; Responses L249: * cite246†OAuth L250: * cite247†Accessibility Features L251: * cite248†Steam Hardware L252: * cite249†Getting your game ready for Steam Deck and Steam Machine L253: * cite250†How to debug Windows games on Steam Deck and Steam Machine L254: * cite251†How to load and run games on Steam Deck and Steam Machine L255: * cite252†Steam Deck L256: * cite253†Social Media Templates L257: * cite254†Steam Deck Brand Guidelines and Logos L258: * cite255†Steam Deck Developer Kits L259: * cite256†Steam Deck FAQ L260: * cite257†Steam Deck SVG Line Art L261: * cite258†Steamworks Virtual Conference: Steam Deck - Nov 12th 2021 L262: * cite259†Steam Deck and Steam Machine Compatibility Review L263: * cite260†Steam Deck Verified Landing Pages L264: * cite261†Steam Frame L265: * cite262†Connecting adb to Lepton L266: * cite263†How to load and run games on Steam Frame L267: * cite264†How to upload Android APKs to Steam L268: * cite265†OpenXR Game Engine Integrations L269: * cite266†Custom Engines L270: * cite267†Godot L271: * cite268†Unity L272: * cite269†Unreal Engine L273: * cite270†Setting up your Steam Frame for development L274: * cite271†Steam Frame Controllers L275: * cite272†Steam Frame Debugging L276: * cite273†Steam Frame Standalone Compatibility Review Process L277: * cite274†Performance Assessment Overlay (VR titles) L278: * cite275†Suggesting default user settings for your game L279: * cite276†What games can run standalone on Steam Frame L280: * cite277†Steam Hardware and Proton L281: * cite278†Steam Machine L282: * cite279†Steam PC Café Program L283: * cite280†Licensees L284: * cite281†PC Café Requirements and Sign Up Instructions L285: * cite282†Getting Started L286: * cite283†Setup instructions for the PC Café model (incl. PC Café Server and Content Cache) L287: * cite284†Setup instructions for the VR arcade model L288: * cite285†Frequently Asked Questions L289: * cite286†Publishers L290: * cite287†Steamworks API Reference L291: * cite288†ISteamApps Interface L292: * cite289†ISteamClient Interface L293: * cite290†ISteamController Interface (Deprecated) L294: * cite291†ISteamFriends Interface L295: * cite292†ISteamGameCoordinator Interface L296: * cite293†ISteamGameServer Interface L297: * cite294†ISteamGameServerStats Interface L298: * cite295†ISteamHTMLSurface Interface L299: * cite296†ISteamHTTP Interface L300: * cite297†ISteamInput Interface L301: * cite298†ISteamInventory Interface L302: * cite299†ISteamMatchmaking Interface L303: * cite300†ISteamMatchmakingServers Interface L304: * cite301†ISteamMusic Interface L305: * cite302†ISteamNetworking Interface L306: * cite303†ISteamNetworkingMessages Interface L307: * cite304†ISteamNetworkingSockets Interface L308: * cite305†ISteamNetworkingUtils Interface L309: * cite306†ISteamParties Interface L310: * cite307†ISteamRemotePlay Interface L311: * cite308†ISteamRemoteStorage Interface L312: * cite309†ISteamScreenshots Interface L313: * cite310†ISteamTimeline L314: * cite311†ISteamUGC Interface L315: * cite312†ISteamUser Interface L316: * cite313†ISteamUserStats Interface L317: * cite314†ISteamUtils Interface L318: * cite315†ISteamVideo Interface L319: * cite316†SteamEncryptedAppTicket L320: * cite317†steamnetworkingtypes.h L321: * cite318†steam_api.h L322: * cite319†steam_gameserver.h L323: * cite320†Steamworks Web API Reference L324: * cite321†IBroadcastService Interface L325: * cite322†ICheatReportingService Interface L326: * cite323†ICloudService Interface L327: * cite324†IEconMarketService Interface L328: * cite325†IEconService Interface L329: * cite326†IGameInventory Interface L330: * cite327†IGameNotificationsService Interface L331: * cite328†IGameServersService Interface L332: * cite329†IInventoryService Interface L333: * cite330†ILobbyMatchmakingService Interface L334: * cite331†IPartnerFinancialsService Interface L335: * cite332†IPlayerService Interface L336: * cite333†IPublishedFileService Interface L337: * cite334†ISiteLicenseService Interface L338: * cite335†ISteamApps Interface L339: * cite336†ISteamCommunity Interface L340: * cite337†ISteamEconomy Interface L341: * cite338†ISteamGameServerStats Interface L342: * cite339†ISteamLeaderboards Interface L343: * cite340†ISteamMicroTxn Interface L344: * cite341†ISteamMicroTxnSandbox Interface L345: * cite342†ISteamNews Interface L346: * cite343†ISteamPublishedItemSearch Interface L347: * cite344†ISteamPublishedItemVoting Interface L348: * cite345†ISteamRemoteStorage Interface L349: * cite346†ISteamUserAuth Interface L350: * cite347†ISteamUser Interface L351: * cite348†ISteamUserStats Interface L352: * cite349†ISteamWebAPIUtil Interface L353: * cite350†IStoreService Interface L354: * cite351†IWorkshopService Interface L355: User Reviews - Get List
L356:
L357: cite352†Steamworks Documentation > cite14†Store Presence > cite353†User Reviews - Get List L358:
L359: If you wish to get a dump of reviews on an application in Steam, you can use the following method with the parameters below.
L360: ## Parameters:
L361:
L362: GET store.steampowered.com/appreviews/<appid>?json=1
L363: Name | Type | Required | Description
L364: --- | --- | --- | ---
L365: filter | string | ✔ | recent – sorted by creation time
L366: updated – sorted by last updated time
... [160 more lines]
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"3e34c6","wall_time_seconds":1.001640193,"session_id":58689,"original_token_count":0,"output":""}
{"chunk_id":"cfa5a4","wall_time_seconds":0.000002191,"exit_code":0,"original_token_count":142,"output":"{'games': 184664, 'valid': 128878, 'single_dev': 173335, 'no_dev': 248, 'multi_dev': 11081, 'date_override': {'1498570': {'date': '2022-02-17', 'original_snapshot_date': '2024-12-12', 'source': 'https://www.snk-corp.co.jp/us/press/2022/021701/', 'reason': 'Official launch announcement explicitly includes Steam on February 17, 2022. Snapshot date is not first Steam release. Time of day unavailable; override uses UTC midnight.'}}, 'source': '../2026-09-05/exports/games.parquet', 'source_sha256': '0aa12405402ea01846089c01944432d86c239bea22b5264476ac3ffe754274da'}\n"}
[Think]
**Preparing career analysis script**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"377219","wall_time_seconds":1.001519255,"session_id":85645,"original_token_count":0,"output":""}
{"chunk_id":"8e0c02","wall_time_seconds":0.000002247,"exit_code":0,"original_token_count":6,"output":"Market tests complete\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nfrom ...)
Script completed
Wall time 0.6 seconds
Output:
{"chunk_id":"aa92b0","wall_time_seconds":0.443245489,"exit_code":0,"original_token_count":4165,"output":"supply.csv\n population year window n median_reviews median_price low10 h50 h50_rate r50 r50_rate r100 r100_rate r556 r556_rate r1000 r1000_rate joint joint_rate\n all 2021.0 year 10181 16.0 4.99 3898 1331 0.130734 3005 0.295158 2175 0.213633 939 0.092231 682 0.066988 1356 0.133189\n all 2025.0 year 20253 9.0 4.99 10244 2110 0.104182 4480 0.221202 3102 0.153162 1133 0.055942 756 0.037328 2036 0.100528\n all 2026.0 through_September5 18280 4.0 5.99 11207 1438 0.078665 3059 0.167341 2037 0.111433 653 0.035722 420 0.022976 1297 0.070952\n all 2025.0 January-August 12925 10.0 4.99 6360 1383 0.107002 2925 0.226306 2045 0.158221 749 0.057950 508 0.039304 1338 0.103520\n all 2026.0 January-August 17709 5.0 5.99 10756 1420 0.080185 3015 0.170252 2012 0.113615 645 0.036422 416 0.023491 1283 0.072449\npaid_nonexplicit 2019.0 year 5643 13.0 4.99 2516 1007 0.178451 1674 0.296651 1243 0.220273 565 0.100124 426 0.075492 806 0.142832\npaid_nonexplicit 2020.0 year 6901 13.0 4.99 3017 1183 0.171424 1969 0.285321 1499 0.217215 698 0.101145 520 0.075351 931 0.134908\npaid_nonexplicit 2021.0 year 7959 12.0 4.99 3613 1240 0.155798 2043 0.256691 1530 0.192235 699 0.087825 517 0.064958 979 0.123005\npaid_nonexplicit 2022.0 year 8498 11.0 5.99 3927 1364 0.160508 2185 0.257119 1643 0.193340 702 0.082608 510 0.060014 1063 0.125088\npaid_nonexplicit 2023.0 year 9771 9.0 4.99 4921 1424 0.145737 2331 0.238563 1672 0.171119 738 0.075530 530 0.054242 1034 0.105823\npaid_nonexplicit 2024.0 year 13048 8.0 4.99 6967 1733 0.132817 2968 0.227468 2125 0.162860 855 0.065527 570 0.043685 1376 0.105457\npaid_nonexplicit 2025.0 year 15674 6.0 4.99 8811 1923 0.122687 3214 0.205053 2277 0.145272 903 0.057611 606 0.038663 1585 0.101123\npaid_nonexplicit 2026.0 through_September5 14581 3.0 5.49 9375 1306 0.089569 2330 0.159797 1569 0.107606 552 0.037857 358 0.024552 1035 0.070983\npaid_nonexplicit 2025.0 January-August 9922 6.0 4.99 5533 1259 0.126890 2060 0.207619 1481 0.149264 588 0.059262 403 0.040617 1024 0.103205\npaid_nonexplicit 2026.0 January-August 14125 3.0 5.50 9016 1288 0.091186 2292 0.162265 1547 0.109522 545 0.038584 355 0.025133 1023 0.072425\nconcentration.csv\n population metric n top_fraction share\n all reviews 128878 0.01 0.773379\n all reviews 128878 0.05 0.930762\n all revenue_formula 107995 0.01 0.848104\n all revenue_formula 107995 0.05 0.969307\n paid reviews 110229 0.01 0.747247\n paid reviews 110229 0.05 0.924854\n paid revenue_formula 107995 0.01 0.848104\n paid revenue_formula 107995 0.05 0.969307\npaid_nonexplicit_2023_25 reviews 38493 0.01 0.757180\npaid_nonexplicit_2023_25 reviews 38493 0.05 0.925120\npaid_nonexplicit_2023_25 revenue_formula 37688 0.01 0.876641\npaid_nonexplicit_2023_25 revenue_formula 37688 0.05 0.974481\nquantity_claims.csv\npopulation claim control n median_reviews median_price low10 h50 h50_rate r50 r50_rate r100 r100_rate r556 r556_rate r1000 r1000_rate joint joint_rate supported support_rate r100_observed r100_expected r100_oe r556_observed r556_expected r556_oe h50_observed h50_expected h50_oe joint_observed joint_expected joint_oe\n all any quarter+price_band 1589 15.0 6.99 672 332 0.208936 532 0.334802 401 0.252360 175 0.110132 127 0.079924 266 0.167401 1589 1.000000 401 283.114674 1.416387 175 112.971026 1.549070 332 248.709896 1.334889 266 187.526055 1.418470\n all any year+price_band+primary+length_band 1589 15.0 6.99 672 332 0.208936 532 0.334802 401 0.252360 175 0.110132 127 0.079924 266 0.167401 1007 0.633732 184 138.144666 1.331937 75 51.171503 1.465659 143 117.750801 1.214429 124 89.337572 1.387994\n all 300plus quarter+price_band 176 55.5 9.99 52 66 0.375000 90 0.511364 78 0.443182 47 0.267045 37 0.210227 52 0.295455 176 1.000000 78 40.807334 1.911421 47 17.391849 2.702415 66 38.957149 1.694169 52 26.647223 1.951423\n all 300plus year+price_band+primary+length_band 176 55.5 9.99 52 66 0.375000 90 0.511364 78 0.443182 47 0.267045 37 0.210227 52 0.295455 102 0.579545 39 23.550635 1.656006 20 10.796421 1.852466 30 23.636495 1.269224 23 14.567291 1.578880\nbuild_tags any quarter+price_band 1033 17.0 6.99 420 210 0.203291 352 0.340755 257 0.248790 120 0.116167 88 0.085189 172 0.166505 1031 0.998064 255 191.010247 1.335007 118 78.667830 1.499978 208 167.848553 1.239212 170 119.266833 1.425375\nbuild_tags any year+price_band+primary+length_band 1033 17.0 6.99 420 210 0.203291 352 0.340755 257 0.248790 120 0.116167 88 0.085189 172 0.166505 585 0.566312 101 78.046532 1.294100 41 28.174895 1.455196 75 65.042874 1.153086 68 51.944648 1.309086\nbuild_tags 300plus quarter+price_band 117 72.0 9.99 34 50 0.427350 62 0.529915 55 0.470085 36 0.307692 29 0.247863 37 0.316239 117 1.000000 55 30.983933 1.775114 36 13.709256 2.625963 50 30.011056 1.666053 37 19.155384 1.931572\nbuild_tags 300plus year+price_band+primary+length_band 117 72.0 9.99 34 50 0.427350 62 0.529915 55 0.470085 36 0.307692 29 0.247863 37 0.316239 59 0.504274 24 13.875400 1.729680 14 6.021886 2.324853 21 14.274093 1.471197 16 9.752297 1.640639\nquantity_arm_prevalence.csv\npopulation arm n any_claim big300\n all h50 5080 0.065354 0.012992\n all low10 20699 0.032465 0.002512\n all middle 12723 0.045980 0.004559\nbuild_tags h50 1641 0.127971 0.030469\nbuild_tags low10 5763 0.072879 0.005900\nbuild_tags middle 3852 0.104621 0.008567\nfeatures.csv\n feature value n median_reviews median_price low10 h50 h50_rate r50 r50_rate r100 r100_rate r556 r556_rate r1000 r1000_rate joint joint_rate supported support_rate r100_observed r100_expected r100_oe r556_observed r556_expected r556_oe h50_observed h50_expected h50_oe joint_observed joint_expected joint_oe\n controller True 10378 18.0 7.99 3943 2423 0.233475 3580 0.344960 2702 0.260358 1299 0.125169 940 0.090576 1887 0.181827 7534 0.725959 1488 859.144315 1.731956 627 274.808753 2.281587 1296 744.577281 1.740585 1033 547.751506 1.885892\n controller False 28115 5.0 4.99 16756 2657 0.094505 4933 0.175458 3372 0.119936 1197 0.042575 766 0.027245 2108 0.074978 20382 0.724951 1758 3153.108636 0.557545 502 1208.665085 0.415334 1317 2470.480125 0.533095 1152 2280.583581 0.505134\n 10_languages True 7001 28.0 6.99 2197 2044 0.291958 2967 0.423797 2362 0.337380 1251 0.178689 950 0.135695 1416 0.202257 5383 0.768890 1446 705.880987 2.048504 661 243.454430 2.715087 1219 604.049978 2.018045 874 486.885838 1.795082\n 10_languages False 31492 5.0 4.99 18502 3036 0.096405 5546 0.176108 3712 0.117871 1245 0.039534 756 0.024006 2579 0.081894 20946 0.665121 1772 4054.099483 0.437088 499 1543.878715 0.323212 1334 3076.770097 0.433572 1240 2375.922000 0.521903\n demo True 8667 12.0 7.99 3909 1535 0.177109 2393 0.276105 1732 0.199838 710 0.081920 477 0.055036 1264 0.145841 6477 0.747317 1047 969.845638 1.079553 400 352.030558 1.136265 917 819.234701 1.119337 773 632.902206 1.221358\n demo False 29826 6.0 4.99 16790 3545 0.118856 6120 0.205190 4342 0.145578 1786 0.059881 1229 0.041206 2731 0.091564 21613 0.724636 2246 2575.135952 0.872187 732 858.414150 0.852735 1710 2076.391260 0.823544 1482 1801.158219 0.822804\nachievements_support True 20299 16.0 5.99 8078 4088 0.201389 6474 0.318932 4776 0.235283 2093 0.103109 1446 0.071235 3227 0.158973 14211 0.700084 2412 890.937918 2.707259 907 235.338183 3.854028 1957 661.831127 2.956948 1650 536.279504 3.076754\nachievements_support False 18194 3.0 4.99 12621 992 0.054523 2039 0.112070 1298 0.071342 403 0.022150 260 0.014290 768 0.042212 15235 0.837364 875 2333.330641 0.375000 228 836.661068 0.272512 632 1863.730168 0.339105 541 1603.696704 0.337346\n selfpub True 28219 5.0 4.99 16843 2312 0.081931 4572 0.162018 3027 0.107268 1038 0.036784 668 0.023672 2043 0.072398 20494 0.726248 1755 3103.122582 0.565559 506 1118.294027 0.452475 1249 2436.574040 0.512605 1218 2104.328272 0.578807\n selfpub False 10274 22.0 8.99 3856 2768 0.269418 3941 0.383590 3047 0.296574 1458 0.141912 1038 0.101032 1952 0.189994 7789 0.758127 1705 977.541875 1.744171 717 332.778117 2.154589 1535 855.160129 1.794985 1124 680.262648 1.652303\n currently_ea True 4003 6.0 7.77 2237 614 0.153385 903 0.225581 673 0.168124 305 0.076193 216 0.053960 391 0.097677 3105 0.775668 389 493.799395 0.787769 152 186.189662 0.816372 342 429.076129 0.797061 231 316.504175 0.729848\n currently_ea False 34490 7.0 4.99 18462 4466 0.129487 7610 0.220644 5401 0.156596 2191 0.063526 1490 0.043201 3604 0.104494 19415 0.562917 1859 1411.576643 1.316967 583 430.630606 1.353829 1379 1170.870825 1.177756 1226 806.450361 1.520242\n group n median_reviews h50_rate r100_rate r556_rate joint_rate r100_oe r556_oe h50_oe\n BASELINE 38493 7.0 0.131972 0.157795 0.064843 0.103785 NaN NaN NaN\n Arcade 6445 4.0 0.076959 0.089682 0.034445 0.064546 0.633714 0.612910 0.725514\n Minimalist 3290 5.0 0.063526 0.096049 0.031307 0.076900 0.978463 0.985372 1.079356\n Abstract 1346 6.0 0.066122 0.093611 0.026003 0.083952 0.840488 0.671989 0.881493\n Score Attack 1993 4.0 0.061716 0.086302 0.032112 0.067737 0.749751 0.789580 0.806929\n Precision Platformer 1538 5.0 0.050065 0.063069 0.018205 0.046814 0.541874 0.440326 0.645863\n Roguelike 3855 12.0 0.169131 0.200778 0.083528 0.129183 1.375155 1.523758 1.453982\n Roguelite 3570 14.0 0.180112 0.217087 0.094398 0.136134 1.458727 1.708156 1.497689\n Action Roguelike 2966 9.0 0.141268 0.170600 0.068780 0.103844 1.196289 1.218861 1.332625\n Roguelike Deckbuilder 412 40.5 0.334951 0.368932 0.148058 0.262136 1.764598 1.824452 1.761513\n Bullet Heaven 200 75.0 0.370000 0.445000 0.230000 0.320000 3.318323 4.785716 3.752095\n Auto Battler 657 14.0 0.179604 0.223744 0.094368 0.136986 1.495464 1.631474 1.553257\n Loot 858 14.0 0.217949 0.247086 0.120047 0.117716 1.437077 1.745465 1.475566\n Idler 1455 12.0 0.129897 0.189691 0.073540 0.124399 2.244569 2.797631 2.700875\n Incremental 1865 7.0 0.090080 0.141555 0.048257 0.099732 1.608306 1.703455 1.899551\n Desktop Companion 66 114.0 0.409091 0.530303 0.257576 0.469697 5.884415 9.832208 7.200024\n Shop Keeper 174 55.5 0.333333 0.396552 0.178161 0.270115 2.029435 2.379391 1.914998\n Boomer Shooter 384 13.0 0.195312 0.242188 0.109375 0.197917 1.394992 1.530739 1.355264\n FMV 316 70.5 0.376582 0.462025 0.183544 0.313291 2.492343 2.472773 2.310766\n Horror 5829 13.0 0.134843 0.189398 0.076686 0.128667 1.554500 1.693125 1.425857\n Colony Sim 457 26.0 0.328228 0.343545 0.175055 0.179431 1.403616 1.597956 1.441349\n Anime 3664 21.0 0.245633 0.265284 0.100710 0.195142 1.266243 0.998217 1.229586\n Turn-Based Tactics 2055 9.0 0.171290 0.173723 0.069100 0.110462 0.882600 0.807209 0.962213\n Online Co-Op + Roguelite 173 60.0 0.398844 0.456647 0.248555 0.213873 1.922280 2.419878 1.762768\n Online Co-Op + Action Roguelike 174 55.5 0.379310 0.442529 0.224138 0.212644 2.000853 2.415160 1.873047\n Roguelite + Loot 249 23.0 0.240964 0.285141 0.152610 0.148594 1.706530 2.318701 1.734838\n Local Co-Op + Action Roguelike 133 16.0 0.203008 0.210526 0.105263 0.127820 1.117404 1.372472 1.276370\n Retro + Idler 119 22.0 0.260504 0.336134 0.142857 0.252101 3.638795 4.715430 4.612879\n Card Game + Base Building 43 107.0 0.395349 0.511628 0.209302 0.209302 2.389834 2.463765 2.026971\nRoguelike + Inventory Management 161 15.0 0.217391 0.248447 0.130435 0.186335 1.543606 2.214872 1.599505\n Roguelite + Mystery 111 6.0 0.117117 0.153153 0.072072 0.099099 1.018522 1.287110 1.008530\n Loot + Idler 104 44.0 0.230769 0.336538 0.163462 0.115385 3.572498 5.840421 4.191523\n Anime + Roguelike Deckbuilder 47 97.0 0.446809 0.489362 0.212766 0.361702 1.992422 2.040143 1.904359\n"}
The first results support several of Fable’s strongest observations: roguelike deckbuilders, online co-op roguelites, and explicit numerical content claims still show favorable review outcomes in the newer catalog.
Some sharper claims already weaken. “Minimalist” games have low raw review counts, but they are almost exactly at expectation after accounting for release quarter and current price. Local co-op plus action roguelike is also much weaker than online co-op plus roguelite. Those distinctions would disappear if we treated his original niche labels as interchangeable.
exec ({"code": "text(await tools.exec_command({cmd:\"tail -8 steam-research/fable-verification-2026-09-06/career_run.log; s...)
Script completed
Wall time 0.5 seconds
Output:
{"chunk_id":"a42da8","wall_time_seconds":0.349529562,"exit_code":0,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nimport urllib.request,re,json\nu='https://steamcomm...)
Script completed
Wall time 1.1 seconds
Output:
{"chunk_id":"e20e2a","wall_time_seconds":0.684847459,"exit_code":0,"original_token_count":678,"output":"ng\\/upcoming_events\\/themed_sales\\/cooking_2024]Cooking Fest:[\\/url] November 11 - 18\\n[*] [i]Steam Autumn Sale (major seasonal sale): November 27 - December 4\\n[*] Steam Winter Sale (major seasonal sale): December 19 - January 2[\\/i]\\n[\\/list]\\n[h3]Full schedule of Steam events and sales for 2024 b\nvember 11 - 18\\n[*] [i]Steam Autumn Sale (major seasonal sale): November 27 - December 4\\n[*] Steam Winter Sale (major seasonal sale): December 19 - January 2[\\/i]\\n[\\/list]\\n[h3]Full schedule of Steam events and sales for 2024 by month[\\/h3]\\n\\n[b]January[\\/b]\\nCapitalism and Economy Fest: January \nd!)\\nDinos vs. Robots Fest: February 26 - March 4 (Currently underway!)\\n\\n[b]March:[\\/b]\\n[i]Steam Spring Sale: March 14 - 21 (major seasonal sale)[\\/i]\\n[url=https:\\/\\/partner.steamgames.com\\/doc\\/marketing\\/upcoming_events\\/themed_sales\\/deckbuilder_2024]Deckbuilders Fest:[\\/url] March 25 - April\nrketing\\/upcoming_events\\/nextfest\\/2024jun]Next Fest (June edition):[\\/url] June 10 - 17\\n[i]Steam Summer Sale: June 27 - July 11 (major seasonal sale)[\\/i]\\n\\n[b]July: [\\/b]\\n[url=https:\\/\\/partner.steamgames.com\\/doc\\/marketing\\/upcoming_events\\/themed_sales\\/towerdefense_2024]Tower Defense Fest:\nketing\\/upcoming_events\\/themed_sales\\/cooking_2024]Cooking Fest:[\\/url] November 11 - 18\\n[i]Steam Autumn Sale (major seasonal sale): November 27 - December 4[\\/i]\\n\\n[b]December:[\\/b]\\n[i]Steam Winter Sale (major seasonal sale): December 19 - January 2[\\/i]\\n\\n\\n","commentcount":25,\neam Autumn Sale (major seasonal sale): November 27 - December 4[\\/i]\\n\\n[b]December:[\\/b]\\n[i]Steam Winter Sale (major seasonal sale): December 19 - January 2[\\/i]\\n\\n\\n","commentcount":25,"tags":["curator","curator_public","audience_followers"]\n which have been running over the same general time periods for many years. In the case of the 2023 Autumn Sale, which covers Black Friday\\/Cyber Monday shopping, we saw healthy growth in both total revenue and the number of games crossing key revenue milestones. \\n\\n\\n[table]\\n [tr]\\n [th\n the number of games crossing key revenue milestones. \\n\\n\\n[table]\\n [tr]\\n [th][b]Steam Autumn Sale[\\/b][\\/th]\\n [th][b]Increase from 2022 to 2023[\\/b][\\/th]\\n [\\/tr]\\n [tr]\\n [td]Games over $1K Revenue[\\/td]\\n [td] +19%[\\/td]\\n [\\/tr]\\n [tr]\\n \nd\\/]Palworld[\\/url]. \\n\\nThe Steam Awards, introduced in 2016 as a tongue-in-cheek minigame for the Winter Sale, has grown into a beloved and hotly debated popularity contest for PC games. More than 44 million votes were cast for the final selection in 2023, and we pair the process with a set of fun\n"}
{"chunk_id":"fd0e73","wall_time_seconds":0.0677155,"exit_code":0,"original_token_count":358,"output":"cat: steam-research/career-history-2026-09-06/selected_games.json: No such file or directory\nREADME.md\nage_comparison.png\nage_comparison.svg\nanalysis_spec.json\nanalyze_history.py\nauthorship_evidence.csv\nbyte_all_summary.json\nbyte_hist.json\nbyte_hist_steam.json\nbyte_summary.json\nbyte_unfiltered_summary.json\ncharts.py\ncode_own_reviews.py\ncollect_reviews.py\ncollection_policy.json\ncollection_status.json\nenglish_screened.parquet\nevidence.py\nfindings.md\nfree_catalog_context.csv\nfree_context.py\nfree_context_pages\nfree_context_policy.json\nfree_context_reviews.parquet\nfree_context_status.json\ngame_history.csv\nhistogram_audit.csv\nhistorical_bias_summary.json\nhistorical_pairs.csv\nmonthly_review_arrivals.csv\nown_game_history.png\nown_game_history.svg\nown_game_launch_windows.csv\nown_review_coding_manifest.json\nown_review_pilot.json\nown_review_pilot_labels.csv\nown_review_pilot_results.json\nprobe.py\nprobe_policy.json\nquiet_release_sequences.csv\nrequests.jsonl\nreview_pages\nreviews.parquet\nsnkrx_all_summary.json\nsnkrx_hist.json\nsnkrx_hist_steam.json\nsnkrx_summary.json\nsnkrx_unfiltered_summary.json\ntargets.parquet\ntopic_screen_counts.csv\n37: if date(2022, 1, 1) <= d <= date(2026, 6, 1):\n61:WINDOWS = [(a, b + timedelta(days=7)) for a, b in wins]\n63:P('merged sale windows: ' + ', '.join(f'{a}..{b}' for a, b in WINDOWS))\n72: for a, b in WINDOWS:\n93:P('H50 BY DISTANCE TO NEAREST SALE WINDOW (2022-24; all | selfpub $8-20)')\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"ps -eo pid,etime,%cpu,rss,args | rg 'fable-verification|PID'; steam-re...)
Script completed
Wall time 1.6 seconds
Output:
{"chunk_id":"ef541a","wall_time_seconds":0.250607686,"exit_code":0,"original_token_count":460,"output":" PID ELAPSED %CPU RSS COMMAND\n2555728 00:00 0.0 5832 /usr/bin/bash -c ps -eo pid,etime,%cpu,rss,args | rg 'fable-verification|PID'; steam-research/.venv/bin/python - <<'PY' import pandas as pd p='steam-research/career-history-2026-09-06/targets.parquet';d=pd.read_parquet(p);print(d.columns.tolist());print(d[['appid','name']].to_string(index=False)) PY\n2555730 00:00 0.0 6120 rg fable-verification|PID\n['appid', 'name', 'credit', 'first_date', 'reviews', 'positive_pct', 'short_description', 'description', 'store_url', 'known_ea_history', 'is_free']\n appid name\n 538070 Bad Dream: Coma\n 769970 Bad Dream: Fever\n1527880 Darkness Under My Bed\n1673600 Game For Anna\n1746370 DUMB: Treasure\n1692060 Bad Dream: Stories\n1837820 Faded Stories: Greenberg\n2313780 Bad Dream: Purgatory\n2540460 Faded Stories: Full Moon\n3202410 Bad Dream: Afterlife\n 415920 Voidspire Tactics\n 643900 Alvora Tactics\n1224290 Horizon's Gate\n1366100 Azalea\n2276830 Kingsvein\n 251430 The Inner World\n 613470 The Inner World - The Last Wind Monk\n1191900 Say No! More\n1049710 Minute of Islands\n1278750 Lost At Sea\n2129810 Reignbreaker\n 505630 Let Them Come\n1186660 Bare Butt Boxing\n2050800 Let Them Come: Onslaught\n 716500 Eliza\n 760330 BYTEPATH\n 915310 SNKRX\n"}
{}
{"chunk_id":"24ec60","wall_time_seconds":1.001382022,"session_id":8787,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"tail -12 steam-research/fable-verification-2026-09-06/career_run.log; ...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"8fcd0f","wall_time_seconds":0.245378892,"exit_code":0,"original_token_count":1928,"output":"{'career_games_all': 114227, 'career_devs_all': 69008, 'career_games_paid_nonexplicit': 90884, 'career_devs_paid_nonexplicit': 56323, 'first_game_share_of_recent_556': np.float64(0.4789166952348303), 'one_game_developer_share_of_recent_556': np.float64(0.39286938635584506), 'cutoff': '2026-07-01 00:00:00+00:00', 'maturity': '2025-07-01 00:00:00+00:00', 'outcome_snapshot': '2026-09-05'}\n__pycache__\ncadence.csv\ncareer_games.parquet\ncareer_gaps.csv\ncareer_hit_curves.csv\ncareer_ladder.csv\ncareer_pivots.csv\ncareer_run.log\ncareer_summary.json\ncareers.py\nclaim_members.parquet\ncommon.py\nconcentration.csv\ncontinuation_features.csv\ncontinuation_windows.csv\ndescription_words.csv\nfeatures.csv\nfirst_rung.csv\ngames.parquet\nhistory.py\nhistory_prior_context.csv\nhistory_windows.csv\nmarket.py\npair_component_checks.csv\npair_members.csv\nprepare.py\nprices.csv\nprior_hit_replication.csv\nquantity_arm_prevalence.csv\nquantity_claims.csv\nsource_audit.json\nsupply.csv\ntags.parquet\ntags_and_pairs.csv\ncareer_hit_curves.csv\n index prior n r556 r556_rate\n 1 all 53955 4131 0.076564\n 2 all 12297 1227 0.099780\n 3 all 5265 534 0.101425\n 4 all 2837 272 0.095876\n 5 all 1799 169 0.093941\n 5 low 704 3 0.004261\n 5 mid 703 26 0.036984\n 5 hit 392 140 0.357143\n 6 all 1267 102 0.080505\n 7 all 944 72 0.076271\n 8 all 746 44 0.058981\n 9 all 602 38 0.063123\n 10 all 498 34 0.068273\ncontinuation_windows.csv\npopulation release_index min_observation_years n ever_next ever_next_rate next_within_window fixed_rate\n all 1 0 69008 16277 0.235871 NaN NaN\n all 1 3 36881 12179 0.330224 9119.0 0.247255\n all 1 5 24658 8969 0.363736 7800.0 0.316327\n all 1 8 11315 4901 0.433142 4681.0 0.413699\n all 1 10 4246 2214 0.521432 2156.0 0.507772\ncareer_gaps.csv\n weighting prior gap n r556_rate median_price supported r556_oe\n release low 12-24mo 1951 0.013839 4.99 1944 0.841292\n release low 24-48mo 1343 0.034252 5.99 1342 1.971910\n release low 48mo+ 551 0.063521 7.99 550 2.835254\n release low 6-12mo 2016 0.013393 4.99 1992 0.854999\n release low <6mo 3594 0.006121 4.99 3543 0.293277\n release mid 12-24mo 1235 0.096356 8.99 1232 1.467910\n release mid 24-48mo 951 0.111462 9.99 950 1.439185\n release mid 48mo+ 464 0.146552 12.99 463 1.669530\n release mid 6-12mo 1321 0.050719 5.99 1316 0.791259\n release mid <6mo 2371 0.029523 4.99 2317 0.439181\n release hit 12-24mo 650 0.427692 9.99 645 1.109906\n release hit 24-48mo 649 0.474576 15.99 644 1.112156\n release hit 48mo+ 340 0.541176 19.99 340 1.292979\n release hit 6-12mo 550 0.356364 9.99 536 0.917137\n release hit <6mo 870 0.290805 5.99 847 0.769392\none_latest_per_dev low 12-24mo 1260 0.015873 4.99 1245 0.697945\none_latest_per_dev low 24-48mo 1018 0.035363 5.99 1015 1.443387\none_latest_per_dev low 48mo+ 461 0.060738 7.99 459 2.052364\none_latest_per_dev low 6-12mo 1096 0.012774 4.99 1078 0.675307\none_latest_per_dev low <6mo 1409 0.008517 3.99 1371 0.498281\none_latest_per_dev mid 12-24mo 602 0.111296 8.99 585 1.219374\none_latest_per_dev mid 24-48mo 605 0.115702 9.99 596 1.050732\none_latest_per_dev mid 48mo+ 367 0.160763 12.99 364 1.374073\none_latest_per_dev mid 6-12mo 486 0.057613 5.99 473 0.655071\none_latest_per_dev mid <6mo 520 0.038462 4.99 503 0.548090\none_latest_per_dev hit 12-24mo 282 0.425532 9.99 246 1.114467\none_latest_per_dev hit 24-48mo 388 0.476804 17.99 338 0.998307\none_latest_per_dev hit 48mo+ 293 0.529010 19.99 292 1.181102\none_latest_per_dev hit 6-12mo 171 0.315789 9.99 162 0.848160\none_latest_per_dev hit <6mo 154 0.253247 7.49 149 0.658546\ncareer_pivots.csv\n weighting test value n r50_rate r556_rate r50_oe r556_oe\n release pivot False 2582 0.060806 0.006584 0.574924 0.423321\n release pivot True 6873 0.113051 0.020370 1.507965 2.324429\n release sequel False 9140 0.100875 0.017068 2.730910 NaN\n release sequel True 315 0.038095 0.003175 0.378538 0.227097\n release additional clean_break 5014 0.123654 0.025728 NaN NaN\n release additional heavy_overlap 869 0.037975 0.001151 NaN NaN\n release additional loved_miss 1477 0.161137 0.025728 NaN NaN\n release additional unloved_miss 1398 0.170243 0.028612 NaN NaN\none_latest_per_dev pivot False 1300 0.120769 0.013077 0.695116 0.533118\none_latest_per_dev pivot True 4362 0.178129 0.032095 1.353086 2.002565\none_latest_per_dev sequel False 5517 0.167120 0.028276 NaN NaN\none_latest_per_dev sequel True 145 0.082759 0.006897 0.451924 0.332136\none_latest_per_dev additional clean_break 3344 0.185407 0.038577 NaN NaN\none_latest_per_dev additional heavy_overlap 352 0.093750 0.002841 NaN NaN\none_latest_per_dev additional loved_miss 897 0.265329 0.042363 NaN NaN\none_latest_per_dev additional unloved_miss 806 0.295285 0.049628 NaN NaN\nprior_hit_replication.csv\n weighting scope state n h50_rate r100_rate r556_rate\n release all first_observed 26975 0.100352 0.126562 0.046858\n release all older_veteran 1425 0.341053 0.371228 0.205614\n release all prior_h50 2016 0.535714 0.569940 0.284722\n release all prior_no_h50 5524 0.058834 0.079652 0.021723\n release selfpub_next first_observed 21852 0.065257 0.088459 0.026679\n release selfpub_next older_veteran 930 0.215054 0.237634 0.122581\n release selfpub_next prior_h50 1202 0.435108 0.500000 0.231281\n release selfpub_next prior_no_h50 4235 0.038489 0.064227 0.014876\nfirst_per_dev all first_observed 22460 0.103785 0.127471 0.048130\nfirst_per_dev all older_veteran 1083 0.379501 0.410896 0.235457\nfirst_per_dev all prior_h50 1031 0.610087 0.655674 0.333657\nfirst_per_dev all prior_no_h50 2438 0.089418 0.115669 0.035275\nfirst_per_dev selfpub_next first_observed 18149 0.066230 0.086561 0.026613\nfirst_per_dev selfpub_next older_veteran 686 0.243440 0.269679 0.144315\nfirst_per_dev selfpub_next prior_h50 551 0.517241 0.591652 0.270417\nfirst_per_dev selfpub_next prior_no_h50 1912 0.061192 0.084205 0.021967\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"sed -n '1,145p' /mnt/Main/a327ex/steam-market/scripts/wishlist_proxy.p...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"267e39","wall_time_seconds":0.119080492,"exit_code":0,"original_token_count":4769,"output":"\"\"\"Owner question: do wishlists matter? Launch wishlists are private, so measure the\ndownstream shadow: m1 = reviews in the first ~30 days from first review (histogram t0,\nEA-safe). Outputs: (1) m1 distribution of eventual hits (how many started cold),\n(2) P(hit | m1 bucket) — recoverability, (3) slow-burn hit anatomy (time to 50% of\nlifetime reviews, names, tags), (4) growth multiples by m1. Cohort 2022-24 (matured).\nCoverage note: histogram exists only for >=20-review games; at $8-20 every possible hit\nhas >=~90 reviews, so hits are fully covered; uncovered games are all non-hits.\nOutput: stdout -> reports/raw_wishlist_proxy.txt\"\"\"\nimport math, sqlite3, statistics, sys\nfrom collections import defaultdict\nfrom datetime import datetime, timezone\n\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom common import ROOT, load_catalog, load_tagmap\n\nnorm = lambda s: (s or '').strip().lower()\nhit = lambda g: g['rev_est'] is not None and g['rev_est'] >= 50_000\n\ndef wilson(k, n, z=1.96):\n if n == 0:\n return (0.0, 0.0)\n p = k/n\n d = 1 + z*z/n\n c = (p + z*z/(2*n))/d\n h = z*math.sqrt(p*(1 - p)/n + z*z/(4*n*n))/d\n return (max(0.0, c - h)*100, min(1.0, c + h)*100)\n\nP = print\ntagmap = load_tagmap()\ncon = sqlite3.connect(f'{ROOT}/data/histogram.sqlite')\nrtype = dict(con.execute('SELECT appid, rollup_type FROM done'))\nrolls = defaultdict(list)\nfor appid, ts, up, down in con.execute(\n 'SELECT appid, ts, up, down FROM rollup WHERE up>0 OR down>0 ORDER BY ts'):\n rolls[appid].append((ts, up + down))\n\ndef curve(appid):\n \"\"\"-> (t0, m1, m3, series) or None. Bucket-count based (type-aware).\"\"\"\n pts = rolls.get(appid)\n if not pts:\n return None\n t0 = pts[0][0]\n if rtype.get(appid) == 'week':\n m1 = sum(n for ts, n in pts if ts < t0 + 28*86400)\n m3 = sum(n for ts, n in pts if ts < t0 + 91*86400)\n else:\n m1 = pts[0][1]\n m3 = sum(n for ts, n in pts[:3])\n return t0, m1, m3, pts\n\ngames = [g for g in load_catalog() if g['price'] and not g['free'] and g['date']]\nselfpub = lambda g: norm(g['developer']) == norm(g['publisher']) and g['developer']\nPOOL = [g for g in games if 2022 <= g['year'] <= 2024]\nHIS = [g for g in POOL if selfpub(g) and 7.5 < g['price'] <= 20.5]\n\n# SNKRX + BYTEPATH case study\nP('=== his own games (weekly-or-monthly first-month reviews) ===')\nfor appid, name in [(915310, 'SNKRX'), (760330, 'BYTEPATH')]:\n c = curve(appid)\n if c:\n t0, m1, m3, pts = c\n d0 = datetime.fromtimestamp(t0, tz=timezone.utc).date()\n P(f' {name}: type={rtype.get(appid)} t0={d0} m1={m1} m3={m3} lifetime={sum(n for _, n in pts)}')\n\n# ---- 1. m1 distribution of eventual hits ----\nP()\nP('=' * 100)\nP('1. WHERE DID THE HITS START? m1 (first ~30d reviews) distribution of eventual >=$50K games, 2022-24')\nfor lab, pool in [('all paid', POOL), ('selfpub $8-20 (his class)', HIS)]:\n hs = []\n for g in pool:\n if not hit(g):\n continue\n c = curve(g['appid'])\n if c:\n hs.append((c[1], g))\n m1s = sorted(m1 for m1, _ in hs)\n if not m1s:\n continue\n q = lambda p: m1s[min(len(m1s) - 1, int(p*len(m1s)))]\n P(f'--- {lab}: {len(hs)} hits with histogram ---')\n P(f' m1 p10={q(.10)} p25={q(.25)} p50={q(.50)} p75={q(.75)} p90={q(.90)}')\n for thr in (10, 25, 50, 100):\n share = sum(1 for m in m1s if m < thr)/len(m1s)*100\n P(f' hits that started with m1 < {thr:>3}: {share:>5.1f}% '\n f'(~{thr*45:,} units month-1 at 45 u/rev)')\n\n# ---- 2. P(hit | m1) ----\nP()\nP('=' * 100)\nP('2. RECOVERABILITY: P(eventual >=$50K | m1 bucket), 2022-24, covered games only')\nP(' (uncovered games all have <20 lifetime reviews -> all non-hits; adding them would')\nP(' push the lowest buckets DOWN — rates below are upper bounds for cold starts)')\nBUX = [(0, 5, '0-4'), (5, 10, '5-9'), (10, 25, '10-24'), (25, 50, '25-49'),\n (50, 100, '50-99'), (100, 250, '100-249'), (250, 10**9, '250+')]\nfor lab, pool in [('all paid', POOL), ('selfpub $8-20', HIS)]:\n P(f'--- {lab} ---')\n rows = defaultdict(list)\n n_uncov = 0\n for g in pool:\n c = curve(g['appid'])\n if c is None:\n n_uncov += 1\n continue\n m1 = c[1]\n b = next(l for lo, hi_b, l in BUX if lo <= m1 < hi_b)\n rows[b].append(g)\n for lo, hi_b, b in BUX:\n gs = rows.get(b, [])\n if not gs:\n continue\n k = sum(map(hit, gs))\n lo_c, hi_c = wilson(k, len(gs))\n revd = [g['rev_est'] for g in gs if hit(g)]\n medh = statistics.median(revd)/1e3 if revd else 0\n P(f' m1 {b:>8}: n={len(gs):<5} P(hit)={k/len(gs)*100:>5.1f}% [{lo_c:.1f}-{hi_c:.1f}] '\n f'med hit=${medh:>5.0f}K')\n P(f' (+ {n_uncov} uncovered games, all non-hits, mostly m1<20)')\n\n# ---- 3. slow-burn anatomy ----\nP()\nP('=' * 100)\nP('3. SLOW-BURN HITS (m1 < 25, eventual >=$50K, 2022-24): anatomy')\nslow = []\nfor g in POOL:\n if not hit(g):\n continue\n c = curve(g['appid'])\n if c and c[1] < 25:\n slow.append((c, g))\nP(f'{len(slow)} slow-burn hits (of all 2022-24 hits with histogram)')\nt50s = []\nfor (t0, m1, m3, pts), g in slow:\n tot = sum(n for _, n in pts)\n acc = 0\n t50 = None\n for ts, n in pts:\n acc += n\n if acc >= tot/2:\n t50 = (ts - t0)/86400/30.4\n break\n t50s.append(t50)\nP(f'months to reach 50% of lifetime reviews: p25={sorted(t50s)[len(t50s)//4]:.0f} '\n f'med={statistics.median(t50s):.0f} p75={sorted(t50s)[3*len(t50s)//4]:.0f}')\nP()\n\"\"\"Research avenue #1: QUALITY x MOMENTUM. Does 'just make it good' hold?\n- pct@m3 (positivity computed from rollups through month 3) -> growth AFTER m3\n (clean temporal ordering: early quality -> later tail).\n- Badge discontinuity: growth-after-m3 by pct@m3 bucket around the 80% (Very Positive)\n and 95% (Overwhelmingly Positive) thresholds, badge-eligible games only (m3>=50 rev).\n- Quality x momentum grid: m1 x pct@m3 -> P(eventual >=$50K).\n- Slow lane = quality lane? pct of slow-burn hits vs fast hits vs cold survivors that died.\n- Prior-hit conversion edge: is it quality? median pct at equal m1.\nCohort 2022-24. Output: stdout -> reports/raw_quality_momentum.txt\"\"\"\nimport math, sqlite3, statistics, sys\nfrom collections import defaultdict\n\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom common import ROOT, load_catalog\n\nnorm = lambda s: (s or '').strip().lower()\nhit = lambda g: g['rev_est'] is not None and g['rev_est'] >= 50_000\n\ndef wilson(k, n, z=1.96):\n if n == 0:\n return (0.0, 0.0)\n p = k/n\n d = 1 + z*z/n\n c = (p + z*z/(2*n))/d\n h = z*math.sqrt(p*(1 - p)/n + z*z/(4*n*n))/d\n return (max(0.0, c - h)*100, min(1.0, c + h)*100)\n\nP = print\ncon = sqlite3.connect(f'{ROOT}/data/histogram.sqlite')\nrtype = dict(con.execute('SELECT appid, rollup_type FROM done'))\nrolls = defaultdict(list)\nfor appid, ts, up, down in con.execute(\n 'SELECT appid, ts, up, down FROM rollup WHERE up>0 OR down>0 ORDER BY ts'):\n rolls[appid].append((ts, up, down))\n\ndef stats_of(appid):\n \"\"\"-> (m1, m3, pct3, lifetime, growth) or None. Same rollup basis throughout.\"\"\"\n pts = rolls.get(appid)\n if not pts:\n return None\n t0 = pts[0][0]\n if rtype.get(appid) == 'week':\n w1, w3 = t0 + 28*86400, t0 + 91*86400\n m1 = sum(u + d for ts, u, d in pts if ts < w1)\n u3 = sum(u for ts, u, d in pts if ts < w3)\n d3 = sum(d for ts, u, d in pts if ts < w3)\n else:\n m1 = pts[0][1] + pts[0][2]\n u3 = sum(u for _, u, _ in pts[:3])\n d3 = sum(d for _, _, d in pts[:3])\n m3 = u3 + d3\n life = sum(u + d for _, u, d in pts)\n pct3 = u3/m3*100 if m3 else None\n growth = life/m3 if m3 >= 10 else None\n return m1, m3, pct3, life, growth\n\ngames = [g for g in load_catalog() if g['price'] and not g['free'] and g['year']]\nselfpub = lambda g: norm(g['developer']) == norm(g['publisher']) and g['developer']\nPOOL = [g for g in games if 2022 <= g['year'] <= 2024]\nHIS = [g for g in POOL if selfpub(g) and 7.5 < g['price'] <= 20.5]\n\n# ---- 1. P(hit | current pct), sanity view ----\nP('=' * 100)\nP('1. P(>=$50K | CURRENT positivity band), games w/ >=25 reviews, 2022-24 (all | selfpub $8-20)')\nPB = [(0, 60, '<60%'), (60, 70, '60-69'), (70, 80, '70-79'), (80, 90, '80-89'),\n (90, 95, '90-94'), (95, 101, '95+')]\nfor lo, hi, b in PB:\n a = [g for g in POOL if g['reviews'] >= 25 and g['pct'] is not None and lo <= g['pct'] < hi]\n c = [g for g in a if selfpub(g) and 7.5 < g['price'] <= 20.5]\n k, kc = sum(map(hit, a)), sum(map(hit, c))\n P(f' pct {b:>6}: all {k/max(1,len(a))*100:>5.1f}% (n={len(a):<5}) | his {kc/max(1,len(c))*100:>5.1f}% (n={len(c)})')\nP(' (semi-descriptive: pct and hit both accumulate over life; causal version below)')\n\n# ---- 2. EARLY QUALITY -> LATER GROWTH ----\nP()\nP('=' * 100)\nP('2. pct@m3 -> GROWTH AFTER m3 (lifetime/m3 multiple; games w/ m3>=30; clean temporal order)')\nrows = defaultdict(list)\nfor g in POOL:\n s = stats_of(g['appid'])\n if not s or s[1] < 30 or s[2] is None or s[4] is None:\n continue\n b = next(bb for lo, hi, bb in PB if lo <= s[2] < hi)\n rows[b].append((s[4], g))\nfor lo, hi, b in PB:\n gs = rows.get(b, [])\n if len(gs) < 20:\n continue\n mult = sorted(m for m, _ in gs)\n p90 = mult[int(.9*len(mult))]\n hr = sum(hit(g) for _, g in gs)/len(gs)*100\n P(f' pct@m3 {b:>6}: n={len(gs):<5} med growth {statistics.median(mult):.2f}x p90 {p90:.2f}x '\n f'P(hit)={hr:.0f}%')\n\n# ---- 3. BADGE DISCONTINUITY ----\nP()\nP('=' * 100)\nP('3. BADGE DISCONTINUITY: growth-after-m3 by fine pct@m3 bucket (badge-eligible: m3>=50)')\nP(' smooth curve through 80 = quality effect only; jump AT 80/95 = badge visibility effect')\nFINE = [(60, 70), (70, 75), (75, 80), (80, 85), (85, 90), (90, 93), (93, 95), (95, 98), (98, 101)]\nfor lo, hi in FINE:\n gs = []\n for g in POOL:\n s = stats_of(g['appid'])\n if s and s[1] >= 50 and s[2] is not None and lo <= s[2] < hi and s[4] is not None:\n\"\"\"Report 31 — what your audience is worth next launch (F).\n\nFor consecutive release pairs: prior BASE = reviews accumulated across ALL the dev's\nprior games by the month of the next launch (histogram-resolved where covered; current\ntotal for uncovered sub-20-review priors — small, flagged). Next-game m1 = reviews in\nfirst ~30 days (histogram curve, wishlist_proxy convention).\n\nCoverage collider handled two ways:\n - P(m1 >= 50) is EXACT over all pairs (uncovered next games have <20 lifetime reviews\n -> m1 < 50 by construction)\n - median m1 / warm-start ratio reported over covered pairs only, flagged.\n\nOutput -> reports/raw_audience_worth.txt\n\"\"\"\nimport sqlite3, statistics, sys\nfrom collections import defaultdict\nfrom datetime import date, datetime, timezone\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom career_common import load_careers, HIT, FOOT, MATURE, pct_ci, months_between\nfrom common import ROOT\n\nOUT = open('E:/a327ex/steam-market/reports/raw_audience_worth.txt', 'w', encoding='utf-8')\ndef p(*a):\n s = ' '.join(str(x) for x in a)\n print(s); OUT.write(s + '\\n')\n\ncon = sqlite3.connect(f'{ROOT}/data/histogram.sqlite')\nrtype = dict(con.execute('SELECT appid, rollup_type FROM done'))\nrolls = defaultdict(list)\nfor appid, ts, up, down in con.execute(\n 'SELECT appid, ts, up, down FROM rollup WHERE up>0 OR down>0 ORDER BY ts'):\n rolls[appid].append((ts, up + down))\n\ndef m1_of(appid):\n pts = rolls.get(appid)\n if not pts: return None\n t0 = pts[0][0]\n if rtype.get(appid) == 'week':\n return sum(n for ts, n in pts if ts < t0 + 28*86400)\n return pts[0][1]\n\ndef acc_by(appid, epoch, fallback):\n \"\"\"reviews accumulated by `epoch`; fallback = current total for uncovered.\"\"\"\n pts = rolls.get(appid)\n if not pts: return fallback\n return sum(n for ts, n in pts if ts < epoch)\n\nby_dev = load_careers()\nepoch_of = lambda d: int(datetime(d.year, d.month, d.day, tzinfo=timezone.utc).timestamp())\n\npairs_f = []\nfor d, gs in by_dev.items():\n for i in range(1, len(gs)):\n nx = gs[i]\n if not (date(2018, 1, 1) <= nx['sortdate'] <= MATURE): continue\n ep = epoch_of(nx['sortdate'])\n bse = sum(acc_by(g['appid'], ep, min(g['reviews'], 19)) for g in gs[:i])\n if bse >= 50:\n pairs_f.append((d, gs[:i], nx, bse))\np(f'{len(pairs_f)} pairs (next release 2018-2025H1, prior base >=50)')\n\nBB = [(50, 200, '50-199'), (200, 500, '200-499'), (500, 1000, '500-999'),\n (1000, 5000, '1K-5K'), (5000, 20000, '5K-20K'), (20000, 10**9, '20K+')]\n\np('\\n=== F1: next-game m1 by prior base ===')\np(f'{\"base\":>8} {\"n\":>6} {\"P(m1>=50)\":>10} {\"P(m1>=100)\":>11} '\n f'{\"med m1*\":>8} {\"ratio p25/50/75*\":>18} (*covered pairs only)')\nfor lo, hi, lab in BB:\n sel = [(pr, nx, b) for d, pr, nx, b in pairs_f if lo <= b < hi]\n if len(sel) < 30: continue\n m1s = [(m1_of(nx['appid']), b) for pr, nx, b in sel]\n cov = [(m, b) for m, b in m1s if m is not None]\n p50 = sum(1 for m, b in m1s if m is not None and m >= 50)/len(sel)\n p100 = sum(1 for m, b in m1s if m is not None and m >= 100)/len(sel)\n if cov:\n med = statistics.median(m for m, b in cov)\n ratios = sorted(m/b for m, b in cov)\n q = lambda x: ratios[min(len(ratios)-1, int(x*len(ratios)))]\n p(f'{lab:>8} {len(sel):>6} {p50*100:>9.1f}% {p100*100:>10.1f}% '\n f'{med:>8.0f} {q(.25):>6.2f}/{q(.5):.2f}/{q(.75):.2f} (cov {len(cov)}/{len(sel)})')\n\np('\\n=== F2: modifiers within base 500-5K (the meaningful-audience band) ===')\nmid = [(d, pr, nx, b) for d, pr, nx, b in pairs_f if 500 <= b < 5000]\nprim = lambda g: g['tags'][0] if g['tags'] else None\ndef modline(label, sel):\n if len(sel) < 25:\n p(f' {label:<28} n={len(sel)} (small)'); return\n m1s = [m1_of(nx['appid']) for d, pr, nx, b in sel]\n n50 = sum(1 for m in m1s if m is not None and m >= 50)\n cov = [(m, b) for m, (d, pr, nx, b) in zip(m1s, sel) if m is not None]\n medr = statistics.median(m/b for m, b in cov) if cov else 0\n p(f' {label:<28} P(m1>=50) {pct_ci(n50, len(sel))} med warm-ratio {medr:.2f}')\np('-- gap since latest prior release:')\nfor glo, ghi, gl in ((0, 12, '<12mo'), (12, 36, '12-36mo'), (36, 10**9, '36mo+')):\n modline(f'gap {gl}', [(d, pr, nx, b) for d, pr, nx, b in mid\n if glo <= months_between(pr[-1]['sortdate'], nx['sortdate']) < ghi])\np('-- genre continuity (primary tag of next vs BEST prior):')\nbestof = lambda pr: max(pr, key=lambda g: g['reviews'])\nmodline('same primary tag as best', [(d, pr, nx, b) for d, pr, nx, b in mid\n if prim(nx) and prim(nx) == prim(bestof(pr))])\nmodline('different primary tag', [(d, pr, nx, b) for d, pr, nx, b in mid\n if prim(nx) and prim(bestof(pr)) and prim(nx) != prim(bestof(pr))])\np('-- price vs best prior:')\nfor lab, f in (('priced UP >=1.25x', lambda nx, bp: nx['price'] and bp and nx['price'] >= 1.25*bp),\n ('similar price', lambda nx, bp: nx['price'] and bp and 0.8*bp < nx['price'] < 1.25*bp),\n ('priced DOWN <=0.8x', lambda nx, bp: nx['price'] and bp and nx['price'] <= 0.8*bp)):\n modline(lab, [(d, pr, nx, b) for d, pr, nx, b in mid if f(nx, bestof(pr)['price'])])\n\np('\\n=== F3: does m1 still convert the same for warm starts? P(next >=556 | m1 band) ===')\nfor mlo, mhi, ml in ((0, 25, '0-24'), (25, 50, '25-49'), (50, 100, '50-99'),\n (100, 250, '100-249'), (250, 10**9, '250+')):\n sel = []\n for d, pr, nx, b in pairs_f:\n m = m1_of(nx['appid'])\n m = m if m is not None else 0\n if mlo <= m < mhi: sel.append(nx)\n if len(sel) < 30: continue\n k = sum(1 for nx in sel if nx['reviews'] >= HIT)\n p(f' m1 {ml:>8}: {pct_ci(k, len(sel))}')\n\np('\\n=== F4: personal anchors ===')\nfor appid, name in ((915310, 'SNKRX'), (760330, 'BYTEPATH')):\n m1 = m1_of(appid)\n p(f' {name}: m1={m1}, lifetime={sum(n for _, n in rolls.get(appid, []))}')\nsn = 4333\np(f' projection base (SNKRX-only audience today) = ~{sn} -> band 1K-5K; see F1 row.')\nOUT.close()\nappid,month,histogram_count,dated_steam_purchase_reviews\n760330,2018-02,61,60\n760330,2018-03,17,16\n760330,2018-04,11,9\n760330,2018-05,1,1\n760330,2018-06,15,15\n760330,2018-07,9,8\n760330,2018-08,4,2\n760330,2018-09,1,1\n760330,2018-10,3,3\n760330,2018-11,6,5\n760330,2018-12,5,5\n760330,2019-01,7,6\n760330,2019-02,4,3\n760330,2019-03,2,2\n760330,2019-04,2,2\n760330,2019-05,2,2\n760330,2019-06,9,8\n760330,2019-07,15,14\n760330,2019-08,2,2\n760330,2019-09,1,1\n760330,2019-10,2,2\n760330,2019-11,9,9\n760330,2019-12,11,10\n760330,2020-01,1,1\n760330,2020-02,5,4\n760330,2020-03,3,2\n760330,2020-04,2,2\n760330,2020-05,1,1\n760330,2020-06,4,4\n760330,2020-07,4,3\n760330,2020-08,1,1\n760330,2020-09,3,2\n760330,2020-11,1,1\n760330,2020-12,1,1\n760330,2021-01,6,6\n760330,2021-02,4,3\n760330,2021-03,1,1\n760330,2021-05,2,2\n760330,2021-06,8,7\n760330,2021-07,5,4\n760330,2021-08,1,1\n760330,2021-09,1,1\n760330,2021-11,1,1\n760330,2022-01,3,3\n760330,2022-02,1,1\n760330,2022-03,3,3\n760330,2022-04,2,2\n760330,2022-05,2,2\n760330,2022-06,1,1\n760330,2022-07,2,2\n760330,2022-08,1,1\n760330,2022-09,2,2\n760330,2022-10,0,0\n760330,2022-11,3,3\n760330,2022-12,6,5\n760330,2023-01,3,3\n760330,2023-03,1,1\n760330,2023-06,1,1\n760330,2023-07,5,4\n760330,2023-11,3,3\n760330,2023-12,1,1\n760330,2024-01,1,1\n760330,2024-03,1,1\n760330,2024-04,1,1\n760330,2024-05,1,1\n760330,2024-06,1,1\n760330,2024-08,2,2\n760330,2024-10,1,1\n760330,2024-12,1,1\n760330,2025-01,2,2\n760330,2025-03,1,1\n760330,2025-04,1,1\n760330,2025-06,4,4\n760330,2025-09,4,4\n760330,2025-11,1,1\n760330,2025-12,2,2\n760330,2026-01,2,2\n760330,2026-02,1,1\n760330,2026-03,2,2\n760330,2026-04,2,2\n760330,2026-06,2,2\n760330,2026-08,1,1\n915310,2021-05,117,109\n915310,2021-06,1377,1305\n915310,2021-07,830,774\n915310,2021-08,231,223\n915310,2021-09,149,139\n915310,2021-10,110,107\n915310,2021-11,435,399\n915310,2021-12,77,68\n915310,2022-01,84,76\n915310,2022-02,41,36\n915310,2022-03,36,34\n915310,2022-04,34,33\n915310,2022-05,41,35\n915310,2022-06,52,50\n915310,2022-07,46,43\n915310,2022-08,37,34\n915310,2022-09,33,30\n915310,2022-10,32,31\n915310,2022-11,41,38\n915310,2022-12,43,40\n915310,2023-01,40,37\n915310,2023-02,14,11\n915310,2023-03,32,29\n915310,2023-04,25,24\n915310,2023-05,18,17\n915310,2023-06,11,10\n915310,2023-07,29,28\n915310,2023-08,19,19\n915310,2023-09,30,27\n915310,2023-10,22,21\n915310,2023-11,23,23\n915310,2023-12,23,23\n915310,2024-01,18,17\n915310,2024-02,12,12\n915310,2024-03,23,22\n915310,2024-04,12,11\n915310,2024-05,10,9\n915310,2024-06,10,9\n915310,2024-07,22,22\n915310,2024-08,6,6\n915310,2024-09,10,9\n915310,2024-10,12,12\n915310,2024-11,12,11\n915310,2024-12,12,11\n915310,2025-01,11,11\n915310,2025-02,12,11\n915310,2025-03,10,9\n915310,2025-04,4,3\n915310,2025-05,10,10\n915310,2025-06,15,15\n915310,2025-07,15,15\n915310,2025-08,11,11\n915310,2025-09,9,9\n915310,2025-10,4,4\n915310,2025-11,8,8\n915310,2025-12,12,12\n915310,2026-01,14,13\n915310,2026-02,5,5\n915310,2026-03,7,6\n915310,2026-04,5,5\n915310,2026-05,4,4\n915310,2026-06,10,10\n915310,2026-07,7,7\n915310,2026-08,4,4\n915310,2026-09,1,1\n"}
{}
[Think]
**Reviewing month-window logic**
**Rerunning first-five trajectories**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/fable-ver...)
Script completed
Wall time 2.3 seconds
Output:
{}
{"chunk_id":"adcb67","wall_time_seconds":1.001140237,"session_id":12962,"original_token_count":0,"output":""}
{"chunk_id":"d4a1f1","wall_time_seconds":1.001010903,"session_id":21377,"original_token_count":0,"output":""}
The career results reproduce unusually well. In our data, the fifth observed game reaches 556 reviews in 0.4% of cases with only sub-50-review predecessors, 3.7% with a 50–555-review predecessor, and 35.7% with an earlier 556-review game. That strongly supports Fable’s prior-traction finding, though it does not establish that practice contributes nothing.
I also found a concrete problem in his launch-momentum code: for monthly histories, “month one” is the first nonempty calendar bucket, and “month three” sums the first three nonempty buckets. Those are not consistent 30- and 90-day windows. I’m measuring the discrepancy with our dated review records.
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nimport urllib.request,re,time,json,html\nfrom pathl...)
Script completed
Wall time 1.5 seconds
Output:
{"chunk_id":"e585e1","wall_time_seconds":1.001398314,"session_id":99944,"original_token_count":0,"output":""}
{"chunk_id":"b6cc1f","wall_time_seconds":0.202471566,"exit_code":0,"original_token_count":1634,"output":" name d30 calendar_launch_month launch_month_days d90 first3_nonempty_months d365\n The Inner World 10 1 3.261806 26 15 77.0\n Voidspire Tactics 13 13 28.233843 21 21 36.0\n Let Them Come 58 58 28.298600 88 85 246.0\n Bad Dream: Coma 74 71 22.164942 91 90 182.0\nThe Inner World - The Last Wind Monk 12 6 11.292604 34 33 57.0\n Alvora Tactics 8 8 29.426250 13 13 24.0\n Eliza 103 91 19.331100 142 137 405.0\n BYTEPATH 71 60 4.964074 85 85 134.0\n SNKRX 590 109 14.605428 2298 2188 3322.0\n Minute of Islands 96 86 17.124109 158 147 243.0\n Bare Butt Boxing 11 11 27.469838 12 13 12.0\n Say No! More 174 163 21.457697 235 230 379.0\n Horizon's Gate 88 79 22.292350 166 162 296.0\n Lost At Sea 4 4 16.332697 4 6 6.0\n Azalea 16 15 21.422269 19 19 22.0\n Darkness Under My Bed 10 7 9.267002 13 12 40.0\n Bad Dream: Stories 12 0 0.126458 22 22 36.0\n Faded Stories: Greenberg 12 10 12.393924 17 15 29.0\n Let Them Come: Onslaught 152 136 19.359387 178 176 NaN\n Reignbreaker 201 161 13.292639 244 233 417.0\n Kingsvein 141 126 15.518715 165 162 225.0\n Bad Dream: Purgatory 11 10 7.272176 12 12 20.0\n Faded Stories: Full Moon 6 6 16.261759 10 9 19.0\n Bad Dream: Afterlife 12 11 21.290660 17 18 NaN\n dev previous next prior_now_best prior_then_best prior_now_band prior_then_band prior_then_sum d30 d90 d365\n a327ex BYTEPATH SNKRX 306 219 mid mid 219 590 2298 3322.0\n desert fox Bad Dream: Coma Darkness Under My Bed 1966 1116 hit hit 1116 10 13 40.0\n desert fox Darkness Under My Bed Bad Dream: Stories 1966 1272 hit hit 1298 12 22 36.0\n desert fox Bad Dream: Stories Faded Stories: Greenberg 1966 1447 hit hit 1520 12 17 29.0\n desert fox Faded Stories: Greenberg Bad Dream: Purgatory 1966 1599 hit hit 1736 11 12 20.0\n desert fox Bad Dream: Purgatory Faded Stories: Full Moon 1966 1650 hit hit 1817 6 10 19.0\n desert fox Faded Stories: Full Moon Bad Dream: Afterlife 1966 1874 hit hit 2157 12 17 NaN\n rad codex Voidspire Tactics Alvora Tactics 271 58 mid mid 58 8 13 24.0\n rad codex Alvora Tactics Horizon's Gate 271 122 mid mid 175 88 166 296.0\n rad codex Horizon's Gate Azalea 1212 231 hit mid 448 16 19 22.0\n rad codex Azalea Kingsvein 1212 809 hit hit 1179 141 165 225.0\nstudio fizbin The Inner World The Inner World - The Last Wind Monk 920 199 hit mid 199 12 34 57.0\nstudio fizbin The Inner World - The Last Wind Monk Say No! More 920 411 hit mid 585 174 235 379.0\nstudio fizbin Say No! More Minute of Islands 1757 424 hit mid 820 96 158 243.0\nstudio fizbin Minute of Islands Lost At Sea 1757 433 hit mid 952 4 4 6.0\nstudio fizbin Lost At Sea Reignbreaker 1757 1226 hit hit 3014 201 244 417.0\ntuatara games Let Them Come Bare Butt Boxing 1082 866 hit hit 866 11 12 12.0\ntuatara games Bare Butt Boxing Let Them Come: Onslaught 1082 1049 hit hit 1062 152 178 NaN\nBand differences 5\n"}
[Think]
**Separating month metrics**
exec ({"code": "text(await tools.write_stdin({session_id:99944,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":2800...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"e0b505","wall_time_seconds":0.000003168,"exit_code":0,"original_token_count":549,"output":"https://steamcommunity.com/groups/steamworks/announcements/detail/3645136358931000681?l=english\nSpring Sale: March 16 - 23 (major seasonal sale)\nSummer Sale: June 29 - July 13 (major seasonal sale)\nAutumn Sale: November 21 - 28 (major seasonal sale)\nWinter Sale: December 21 - January 4, 2024 (major seasonal sale)\nAutumn Sale, 1.4 million accounts made their first-ever purchase on Steam. That\\u2019s about 134 new customers every single minute, for seven days straight. That pace of new users \nAutumn Sale. \nhttps://steamcommunity.com/groups/steamworks/announcements/detail/3970553774441642999?l=english\nSteam Autumn Sale (major seasonal sale): November 27 - December 4\nSteam Winter Sale (major seasonal sale): December 19 - January 2[/i]\nSteam Spring Sale: March 14 - 21 (major seasonal sale)[/i]\nSteam Summer Sale: June 27 - July 11 (major seasonal sale)[/i]\nSteam Autumn Sale (major seasonal sale): November 27 - December 4[/i]\nAutumn Sale, which covers Black Friday/Cyber Monday shopping, we saw healthy growth in both total revenue and the number of games crossing key revenue milestones. \nSteam Autumn Sale[/b][/th]\nWinter Sale, has grown into a beloved and hotly debated popularity contest for PC games. More than 44 million votes were cast for the final selection in 2023, and we pair the proce\nhttps://steamcommunity.com/groups/steamworks/announcements/detail/4264427597939246984?l=english\nSteam Spring Sale: March 13 \\u2013 20\nSteam Summer Sale: June 26 \\u2013 July 10 \nSummer Sale (June 27th to July 11th), the Sales & Activations Reports portal will be experiencing delays in generating wishlist reports, which will cause some gaps in new wishlist \nhttps://steamcommunity.com/groups/steamworks/announcements/detail/497187349280587904?l=english\nSteam Autumn Sale: September 29 \\u2013 October 6 [i](Please note this is a different time frame compared to previous Autumn Sales)[/i]\nAutumn Sales)[/i]\nSteam Winter Sale: December 18 \\u2013 January 5\nSteam Spring Sale: March 13 \\u2013 20\nSteam Summer Sale: June 26 \\u2013 July 10 \nAutumn Sale), third-party sales events are organized by gaming-industry groups outside of Steam and they can focus on a wider range of topics, including: \n"}
{"chunk_id":"a7066d","wall_time_seconds":0.238912722,"exit_code":0,"original_token_count":1993,"output":"successful_migration.csv\n weighting dimension value n r556_rate h50_rate r556_oe\n release same_primary False 2256 0.391844 0.594432 0.938756\n release same_primary True 803 0.417186 0.647211 1.061812\n release sequel False 2862 0.385744 0.590942 0.708008\n release sequel True 197 0.583756 0.861702 1.344058\n release overlap_band .1-.25 1146 0.378709 0.589041 0.928961\n release overlap_band .25-.5 750 0.417333 0.645341 1.030939\n release overlap_band <=.1 568 0.355634 0.552486 0.883128\n release overlap_band >.5 595 0.453782 0.652021 1.210010\none_latest_per_dev same_primary False 1015 0.427586 0.673216 1.015234\none_latest_per_dev same_primary True 273 0.435897 0.711027 1.048646\none_latest_per_dev sequel False 1188 0.416667 0.664021 0.755181\none_latest_per_dev sequel True 100 0.580000 0.885417 1.242694\none_latest_per_dev overlap_band .1-.25 556 0.399281 0.639775 0.932614\none_latest_per_dev overlap_band .25-.5 279 0.498208 0.772727 1.111867\none_latest_per_dev overlap_band <=.1 277 0.393502 0.624060 0.924587\none_latest_per_dev overlap_band >.5 176 0.471591 0.760479 1.136403\ntag_supply_and_age.csv\n group year n supply_share r100_rate h50_rate\n Desktop Companion 2023 1 0.000217 1.000000 1.000000\n Desktop Companion 2025 21 0.002889 0.666667 0.619048\n Desktop Companion 2026 64 0.006766 0.187500 0.096774\n Shop Keeper 2023 7 0.001517 0.571429 0.428571\n Shop Keeper 2025 40 0.005504 0.425000 0.450000\n Shop Keeper 2026 250 0.026430 0.220000 0.184426\n Boomer Shooter 2023 18 0.003901 0.722222 0.666667\n Boomer Shooter 2025 93 0.012796 0.129032 0.088889\n Boomer Shooter 2026 109 0.011523 0.146789 0.129630\n Roguelike Deckbuilder 2023 40 0.008669 0.375000 0.410256\n Roguelike Deckbuilder 2025 88 0.012108 0.386364 0.367816\n Roguelike Deckbuilder 2026 156 0.016492 0.250000 0.201299\n Idler 2023 136 0.029476 0.161765 0.105263\n Idler 2025 320 0.044029 0.203125 0.161392\n Idler 2026 702 0.074215 0.150997 0.092990\n Bullet Heaven 2023 16 0.003468 0.562500 0.437500\n Bullet Heaven 2025 42 0.005779 0.428571 0.365854\n Bullet Heaven 2026 113 0.011946 0.168142 0.117117\nCard Game + Base Building 2023 3 0.000650 0.333333 0.333333\nCard Game + Base Building 2025 7 0.000963 0.571429 0.571429\nCard Game + Base Building 2026 10 0.001057 0.100000 0.100000\n Retro + Idler 2023 7 0.001517 0.142857 0.142857\n Retro + Idler 2025 33 0.004540 0.393939 0.363636\n Retro + Idler 2026 84 0.008880 0.190476 0.119048\n Loot + Idler 2023 12 0.002601 0.250000 0.250000\n Loot + Idler 2025 21 0.002889 0.333333 0.250000\n Loot + Idler 2026 70 0.007400 0.242857 0.202899\ndescription_words.csv\n term n r100_rate r100_oe h50_oe supported\n incremental 175 0.308571 2.657832 2.572727 138\nshort incremental 10 0.700000 2.925514 2.713988 9\n synergies 546 0.280220 1.270367 1.319846 345\n playstyle 1105 0.291403 1.222325 1.248815 650\n hundreds 947 0.319958 1.282432 1.330522 562\n co-op 1431 0.324249 1.373514 1.339876 796\n craft 1804 0.312639 1.139750 1.170227 1015\n build 5450 0.264587 1.229989 1.214659 3136\n expand 1582 0.333123 1.357383 1.394594 955\n levels 7528 0.102418 0.695679 0.756120 5267\n simple 4706 0.106460 0.820784 0.781983 3495\n puzzle 4390 0.102733 0.707029 0.884698 3196\n score 2325 0.090323 0.721382 0.804905 1685\n obstacles 2623 0.088448 0.636153 0.743144 1939\n controls 3137 0.105196 0.760486 0.808348 2293\n reflexes 1057 0.068117 0.541540 0.653347 822\n precision 1371 0.122538 0.823495 0.819386 971\n arcade 1854 0.095469 0.663943 0.730621 1228\n experiment 965 0.259067 1.029702 1.110882 611\nprice_adjustment.csv\n band n h50_rate r100_rate r556_rate r100_oe r556_oe\n12-20 5116 0.388976 0.365129 0.150508 2.079872 1.903095\n20-40 1804 0.635809 0.544900 0.339246 2.997873 4.553978\n 5-7 3623 0.075904 0.127519 0.040022 0.828677 0.623159\n 7-12 7299 0.135635 0.163858 0.053021 0.968753 0.705393\n <=5 19262 0.017651 0.055809 0.013290 0.265219 0.152299\n >40 584 0.578767 0.426370 0.349315 2.725133 5.351120\ncadence.csv\npopulation scope cadence n median_games career_hit_rate hits_per_100_devyears median_reviews_per_year\n all all 1 per 1-3y 4334 3.0 0.236041 6.104962 19.462662\n all all 1-3 per yr 603 10.0 0.243781 11.565315 53.030592\n all all 3+ per yr 136 33.0 0.227941 11.294775 127.358394\n all all <=1 per 3y 20734 1.0 0.099836 1.535981 2.696113\n all ever50 1 per 1-3y 2495 4.0 0.410020 10.604772 79.898224\n all ever50 1-3 per yr 418 10.0 0.351675 16.683936 108.558952\n all ever50 3+ per yr 94 34.5 0.329787 16.341377 265.755432\n all ever50 <=1 per 3y 6808 1.0 0.304054 4.677884 31.158982\ncontinuation_features.csv\npopulation dimension value n continued3 rate\n all r50 False 24029 5117 0.212951\n all r50 True 11126 3311 0.297591\n all r556 False 31964 7519 0.235233\n all r556 True 3191 909 0.284864\n all ea False 30910 7997 0.258719\n all ea True 4245 431 0.101531\n all known_ea False 27845 7351 0.263997\n all known_ea True 7310 1077 0.147332\n all price_band 12-20 4356 928 0.213039\n all price_band 20-40 1009 229 0.226957\n all price_band 5-7 2237 535 0.239160\n all price_band 7-12 5594 1307 0.233643\n all price_band <=5 15320 3924 0.256136\n all price_band >40 117 31 0.264957\n all positivity pct85plus 8118 2165 0.266691\n all positivity pct_under70 6786 1826 0.269083\nfirst_rung.csv\npopulation tag n first50_rate first556_rate among_first50_later556 continued3\n all Horror 2132 0.463415 0.143058 0.144737 0.306754\n all Visual Novel 1981 0.493690 0.131247 0.143149 0.345785\n all Simulation 5079 0.381177 0.112621 0.123450 0.257531\n all Action 12741 0.254533 0.062632 0.122726 0.216310\n all Casual 11324 0.242406 0.047863 0.103097 0.265101\n all Platformer 2873 0.242952 0.057779 0.094556 0.218587\n all Precision Platformer 671 0.177347 0.026826 0.058824 0.214605\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"cat /mnt/Main/a327ex/steam-market/reports/05-art-gate.md; cat /mnt/Mai...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"b9d3a0","wall_time_seconds":0.121779382,"exit_code":0,"original_token_count":4230,"output":"# 05 — The art-quality gate\r\n\r\nGenerated 2026-07-07 13:59 UTC. 355 games, 4 niches × 3 outcome groups (~30 each), header images scored blind 1–5 (1=asset-flip, 2=amateur, 3=competent, 4=good, 5=premium) without knowledge of outcomes.\r\n\r\nGroups: **fail** = <10 reviews; **mid** = reviewed but <$50K est; **hit** = ≥$50K est. All paid, released 2023–2025.\r\n\r\n## Mean art score by niche × outcome\r\n\r\n| niche | fail | mid | hit | hit−fail gap |\r\n|---|---|---|---|---|\r\n| Action Roguelike | 2.33 | 2.40 | 3.47 | +1.13 |\r\n| Cozy | 2.60 | 2.63 | 3.57 | +0.97 |\r\n| Horror | 1.80 | 2.03 | 3.30 | +1.50 |\r\n| Idler | 1.73 | 2.52 | 2.53 | +0.80 |\r\n| **all** | 2.13 | 2.39 | 3.22 | +1.09 |\r\n\r\n## Outcome-group composition by art tier (all niches pooled)\r\n\r\n_Stratified sample: equal priors per group. Share >33% = art tier enriches that outcome._\r\n\r\n| art tier | n | fail share | mid share | hit share |\r\n|---|---|---|---|---|\r\n| 1 | 45 | 60% | 31% | 9% |\r\n| 2 | 128 | 44% | 41% | 16% |\r\n| 3 | 116 | 21% | 39% | 41% |\r\n| 4 | 61 | 15% | 13% | 72% |\r\n| 5 | 5 | 0% | 0% | 100% |\r\n\r\n## P(hit | art tier) per niche (share of tier-games that are hits)\r\n\r\n| niche | art ≤2 | art 3 | art ≥4 |\r\n|---|---|---|---|\r\n| Action Roguelike | 6% (n=36) | 36% (n=36) | 83% (n=18) |\r\n| Cozy | 6% (n=31) | 29% (n=31) | 68% (n=28) |\r\n| Horror | 11% (n=54) | 50% (n=22) | 93% (n=14) |\r\n| Idler | 27% (n=52) | 52% (n=27) | – |\r\n| **all** | 14% (n=173) | 41% (n=116) | 74% (n=66) |\r\n\r\n## Hits with art ≤2 (the \"succeeded anyway\" list)\r\n\r\n| game | niche | art | price | reviews | est $ |\r\n|---|---|---|---|---|---|\r\n| The Complex: Expedition | Horror | 2 | $14.99 | 1572 | $846K |\r\n| Eclipsium | Horror | 1 | $12.99 | 1670 | $779K |\r\n| MIMESIS | Horror | 2 | $9.99 | 1974 | $708K |\r\n| Digseum | Idler | 2 | $2.99 | 6300 | $676K |\r\n| Small Spaces | Cozy | 2 | $12.99 | 1315 | $613K |\r\n| Picayune Dreams | Action Roguelike | 1 | $4.99 | 3407 | $610K |\r\n| Fantasy Map Simulator | Idler | 2 | $7.99 | 1098 | $315K |\r\n| miniBONG | Idler | 2 | $9.99 | 866 | $311K |\r\n| Flash Doll | Idler | 2 | $8.99 | 849 | $274K |\r\n| Long Dream | Idler | 2 | $6.99 | 936 | $235K |\r\n| Coin Push RPG | Idler | 2 | $9.99 | 579 | $208K |\r\n| Lootun | Idler | 2 | $5.49 | 1018 | $201K |\r\n| Pixel Art Academy: Learn Mode | Cozy | 2 | $13.00 | 395 | $184K |\r\n| Magic Research 2 | Idler | 2 | $5.99 | 599 | $129K |\r\n| 挂机神话 | Idler | 2 | $1.99 | 1694 | $121K |\r\n| Fill Up The Hole | Idler | 1 | $2.99 | 1124 | $121K |\r\n| Oyabu Clinic Deathcare Corporation | Horror | 2 | $14.99 | 210 | $113K |\r\n| All Aboard! The Train Defense Express | Idler | 2 | $4.99 | 368 | $66K |\r\n| They Are Coming | Action Roguelike | 2 | $2.99 | 588 | $63K |\r\n| XiuzhenWorld2 | Idler | 1 | $12.99 | 133 | $62K |\r\n| Rock Simulator 2 | Idler | 2 | $2.99 | 525 | $56K |\r\n| Treasure Chest Clicker | Idler | 2 | $3.99 | 393 | $56K |\r\n| Forsake: Urban horror | Horror | 2 | $9.99 | 153 | $55K |\r\n| Lake Haven - Chrysalis | Horror | 2 | $2.99 | 479 | $51K |\r\n\r\n## Caveats\r\n\r\n- Header image ≠ in-game art; a great capsule can hide a weak game and vice versa.\r\n- Current image, not launch image: successful games may have upgraded art post-launch (reverse causality inflates the gap).\r\n- One scorer (me), one pass, n≈30 per cell: treat gaps <0.3 as noise.\r\n# 06 — Language demand vs localization supply\r\n\r\nGenerated 2026-07-07 16:55 UTC. 728 top games (2022–2025, ≥100 reviews) across 12 niches; review counts per language via appreviews. Supply = supported_languages (appdetails, coverage 527/728).\r\n\r\nSampled-language reviews only (EN+6); other languages excluded from shares.\r\n\r\n## Demand: review-language share by niche\r\n\r\n| niche | n games | EN | CN | JP | KR | PT-BR | RU | DE | non-EN total |\r\n|---|---|---|---|---|---|---|---|---|---|\r\n| Roguelike Deckbuilder | 74 | 60% | 25% | 2% | 3% | 4% | 4% | 2% | 40% |\r\n| Action Roguelike | 136 | 60% | 17% | 1% | 3% | 5% | 10% | 4% | 40% |\r\n| Auto Battler | 72 | 48% | 34% | 2% | 3% | 2% | 6% | 5% | 52% |\r\n| Bullet Heaven | 67 | 57% | 20% | 1% | 3% | 4% | 10% | 6% | 43% |\r\n| Idler | 88 | 52% | 16% | 2% | 2% | 5% | 20% | 3% | 48% |\r\n| Horror | 77 | 57% | 14% | 0% | 2% | 5% | 19% | 3% | 43% |\r\n| FMV | 70 | 11% | 85% | 0% | 1% | 1% | 2% | 0% | 89% |\r\n| Turn-Based | 70 | 43% | 47% | 2% | 2% | 1% | 3% | 2% | 57% |\r\n| Dungeon Crawler | 78 | 66% | 12% | 2% | 2% | 4% | 10% | 4% | 34% |\r\n| Colony Sim | 73 | 63% | 14% | 1% | 2% | 3% | 9% | 9% | 37% |\r\n| Card Battler | 76 | 50% | 30% | 4% | 4% | 5% | 4% | 3% | 50% |\r\n| Tower Defense | 75 | 50% | 30% | 2% | 3% | 3% | 8% | 5% | 50% |\r\n\r\n## Supply vs demand: share of niche games localized, per language\r\n\r\n_gap = demand share high while few games support the language._\r\n\r\n| niche | CN sup | JP sup | KR sup | PT-BR sup | RU sup | DE sup |\r\n|---|---|---|---|---|---|---|\r\n| Roguelike Deckbuilder (58) | 98% | 86% | 62% | 62% | 69% | 71% |\r\n| Action Roguelike (101) | 85% | 76% | 72% | 63% | 67% | 70% |\r\n| Auto Battler (45) | 82% | 69% | 58% | 42% | 44% | 56% |\r\n| Bullet Heaven (47) | 81% | 74% | 70% | 57% | 64% | 66% |\r\n| Idler (46) | 74% | 70% | 59% | 54% | 50% | 59% |\r\n| Horror (55) | 84% | 82% | 78% | 75% | 73% | 84% |\r\n| FMV (61) | 98% | 51% | 48% | 20% | 26% | 23% |\r\n| Turn-Based (51) | 76% | 71% | 51% | 43% | 53% | 55% |\r\n| Dungeon Crawler (58) | 83% | 72% | 57% | 64% | 62% | 71% |\r\n| Colony Sim (59) | 90% | 69% | 63% | 68% | 81% | 88% |\r\n| Card Battler (51) | 92% | 76% | 55% | 47% | 53% | 59% |\r\n| Tower Defense (55) | 91% | 82% | 75% | 60% | 69% | 78% |\r\n\r\n## Localization lift (confounded, directional): CN review share with vs without CN support\r\n\r\n| niche | with CN sup | without |\r\n|---|---|---|\r\n| Action Roguelike | 25% (n=86) | 2% (n=15) |\r\n| Auto Battler | 44% (n=37) | 3% (n=8) |\r\n| Bullet Heaven | 22% (n=38) | 2% (n=9) |\r\n| Idler | 24% (n=34) | 3% (n=12) |\r\n| Horror | 13% (n=46) | 2% (n=9) |\r\n| Turn-Based | 30% (n=39) | 2% (n=12) |\r\n| Dungeon Crawler | 23% (n=48) | 2% (n=10) |\r\n| Colony Sim | 17% (n=53) | 3% (n=6) |\r\n| Tower Defense | 31% (n=50) | 2% (n=5) |\r\n\r\n## Caveats\r\n\r\n- Sample = top games per niche (≥100 reviews): demand shares reflect the games that already won, including regional pricing effects.\r\n- Reviews-per-owner rates differ by region (CN reviews ~more prolific); shares are demand PROXIES, not revenue shares.\r\n- Supply coverage limited to appdetails-crawled games.\r\n# 08 — Gold-rush early detection (analysis #5)\n\nScript: `scripts/goldrush.py` (re-runnable monthly). Raw outputs: `reports/raw_goldrush_v1.txt` (full trigger list), `raw_goldrush_v3.txt` (anatomy splits + current edge).\n\n## Method\n\nPer-tag quarterly panels from the time-resolved review histograms (29.6K games) + full search catalog (115K):\n- **demand flow** — sum of monthly review rollups across a tag's games\n- **concentration** — top-1 game's share of quarterly flow\n- **supply** — releases/quarter carrying the tag\n- **follower returns** — h50 (P(est ≥$50K), paid) of cohorts released before/during/after the spike\n\nTrigger = quarterly flow ≥1,500 reviews AND ≥4× trailing-8Q median AND top-1 share ≥35% (concentrated). Diffuse warming = ≥3× without concentration. First trigger per 6Q episode. 311 concentrated triggers 2015–2026, found mechanically with zero named priors — the detector independently rediscovered FMV/Love Is All Around, Balatro, Supermarket Simulator, The Exit 8, DUSK, Phasmophobia, Buckshot Roulette, VS, etc.\n\n## Findings\n\n**1. Rushes mostly don't pay followers.** Median window-vs-pre h50 delta across mature triggers: **−3pt** (indie triggers −3, AAA −3, F2P −3, old-game spikes −5). \"Chase the breakout\" is a losing base-rate strategy; most flow spikes are AAA launches or one-off virals that transfer nothing.\n\n**2. The conditional structure is where the signal lives.**\n- Trigger into a **quiet tag** (pre-rate <20%): median **+2pt, mean +5pt** (fat right tail). Into an already-hot tag (≥20%): median **−10pt**. Never follow a spike into a hot tag (partially regression-to-mean, but the durability table below is the anti-regression check).\n- **Durable (post-flood, 12–24mo later, still elevated)** rushes are *format* triggers — a repeatable mechanical loop others can re-instantiate with new content — landing in quiet tags (pre-supply 2–8/Q): FMV +32 (28→60), Trading/Supermarket Sim +20 (17→36), Old School/DUSK +19 (0→19), Turn-Based Combat/Darkest Dungeon +17, Thriller/Unheard +16, Underground/Exit 8 +13, Game Development/Mad Games Tycoon 2 +12, Conspiracy/Golden Idol +12, Gambling/Buckshot +10.\n- **Decayed** rushes are *experience* triggers — singular authored works (Undertale −8, INSIDE −31, Before Your Eyes −4 after +20 window, DDLC −2, Draw & Guess −10 after +24) — or hot-tag intensifications (Deckbuilding post-StS −44 from pre=100%).\n- Format-vs-experience is judgeable **at trigger time**. That's the crystal ball.\n\n**3. The market clones faster now.** By-year flood table is noisy (threshold confounded by overall volume growth), but 2020+ triggers flood ~40–56% within 8Q at median lag 1–2Q vs ~25% at 4–6Q pre-2019. The 2026 case studies are unambiguous: Shop Keeper 13→103/Q, Party Game 36→148/Q, Organizing 4→13/Q, Animals 7→16/Q — supply arriving within ONE quarter of the trigger. Sim-shaped (asset-flippable) formats now flood almost instantly; only mechanically-deep formats resist dilution (RL Deckbuilder held h50=32% through a 23→69/Q flood).\n\n**4. Current edge (2026Q2).**\n- **The standing wave is still Balatro's**: RL Deckbuilder followers since 2024Q4: n=273, h50=32% (2.2× baseline) through full flood; StS2 (2026Q1, ~$57M est) re-spiked demand. But the **price gate holds inside the wave**: ≤$10 followers 16% h50 (best cheap winner ~$340K Aotenjo) vs >$10 followers **50%**. Same split in Crime post-Schedule I (9% vs 39%) and Shop Keeper flood cohort (9% vs 37%).\n- **No new build-lane rush is open right now.** Open windows are AAA-echo (Wukong souls-like land, premium-scale), Schedule I/Crime (format trigger, supply still arriving 19→33/Q, followers 19%), Marvel Rivals/Superhero (n small), skate./Skateboarding (supply 2/Q but tiny n), Politics/Diplomacy (n=30, 17%).\n- Sim-format rushes (Shop Keeper, Organizing, Party) flood in ~1Q — only a ≤2-month dev cycle can ride them, and they sit behind the art gate.\n\n## Caveats\n- Search gives top-7 *current* tags (retro-tagging distorts old backtests slightly; fine for the current edge).\n- Trigger attribution = top-1 game by flow; occasionally silly (StS2 \"Political\" = tag-vandalism artifact; Freestyle 2 → Time Management misattribution). Read trigger names before believing a row.\n- h50 uses lifetime rev_est; older cohorts have longer tails (small pro-\"pre\" bias — makes the durable list conservative).\n- Flood-lag year trend partially confounded by absolute-floor threshold; rely on the relative-jump case studies.\n\n## Re-run recipe (monthly, ~2-3h of crawling)\n1. `search_scrape.py` (fresh catalog) → 2. `histogram_crawl.py 50` top-up → 3. `goldrush.py`. Read: new [INDIE] concentrated triggers in quiet tags (preSup <10/Q), ask format-or-experience, check supply hasn't reacted, ship into it ≥$10.\n\"\"\"Report 27 — gaps and pivots between consecutive releases.\n\nC: fast follow vs long gap, conditioned on prior-best band (with price/composition note)\nD: after a pure miss (<50 rev, prior best low): double down vs pivot; loved-miss cut;\n sequel-of-miss vs new IP\nG: comeback path — gap >=36mo at every rung, era-stratified vs continuous peers\n\nOutput -> reports/raw_gap_pivot.txt\n\"\"\"\nimport statistics, sys\nfrom collections import defaultdict\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom career_common import (load_careers, pairs, band, BAND_RANK, HIT, FOOT, pct_ci,\n is_sequel_of, months_between)\n\nOUT = open('E:/a327ex/steam-market/reports/raw_gap_pivot.txt', 'w', encoding='utf-8')\ndef p(*a):\n s = ' '.join(str(x) for x in a)\n print(s); OUT.write(s + '\\n')\n\nby_dev = load_careers()\nPP = pairs(by_dev)\np(f'{len(PP)} consecutive pairs (steam-era devs, next release <= 2025-07)')\nprimary = lambda g: g['tags'][0] if g['tags'] else None\nGAPB = [(0, 6, '<6mo'), (6, 12, '6-12mo'), (12, 24, '12-24mo'), (24, 48, '24-48mo'),\n (48, 10**9, '48mo+')]\ngapb = lambda m: next(l for lo, hi, l in GAPB if lo <= m < hi)\npband = lambda pb: 'low' if pb < FOOT else ('mid' if pb < HIT else 'hit')\n\n# ---------- C ----------\np('\\n=== C: P(next hit) and P(band-up) by prior-best band x gap ===')\nfor pbname in ('low', 'mid', 'hit'):\n p(f'-- prior best {pbname}:')\n for lo, hi, gl in GAPB:\n sel = [(pv, nx, pb) for d, i, pv, nx, pb in PP\n if pband(pb) == pbname and lo <= months_between(pv['sortdate'], nx['sortdate']) < hi]\n if len(sel) < 40: continue\n k = sum(1 for pv, nx, pb in sel if nx['reviews'] >= HIT)\n up = sum(1 for pv, nx, pb in sel\n if BAND_RANK[band(nx['reviews'])] > BAND_RANK[pband(pb)]\n or (pband(pb) == 'hit' and nx['reviews'] >= HIT))\n prices = [nx['price'] for pv, nx, pb in sel if nx['price']]\n p(f' gap {gl:>7}: P(hit) {pct_ci(k, len(sel))} band-up/re-hit {up/len(sel)*100:5.1f}% '\n f'med next price ${statistics.median(prices):.2f}' if prices else '')\np('\\n-- era check (prior best mid only), next release era:')\nfor elo, ehi in ((2019, 2021), (2022, 2025)):\n p(f' next in {elo}-{ehi}:')\n for lo, hi, gl in GAPB:\n sel = [(pv, nx) for d, i, pv, nx, pb in PP\n if pband(pb) == 'mid' and elo <= nx['year'] <= ehi\n and lo <= months_between(pv['sortdate'], nx['sortdate']) < hi]\n if len(sel) < 40: continue\n k = sum(1 for pv, nx in sel if nx['reviews'] >= HIT)\n p(f' gap {gl:>7}: {pct_ci(k, len(sel))}')\n\n# ---------- D ----------\np('\\n=== D: after a pure miss (this game <50 rev AND prior best <50) ===')\nmiss = [(pv, nx) for d, i, pv, nx, pb in PP if pv['reviews'] < FOOT and pb < FOOT]\np(f'{len(miss)} miss pairs')\ndef dline(label, sel):\n if len(sel) < 30:\n p(f' {label:<34} n={len(sel)} (too small)'); return\n f = sum(1 for pv, nx in sel if nx['reviews'] >= FOOT)\n h = sum(1 for pv, nx in sel if nx['reviews'] >= HIT)\n p(f' {label:<34} foothold {pct_ci(f, len(sel))} hit {h/len(sel)*100:4.1f}%')\nstay = [(pv, nx) for pv, nx in miss if primary(pv) and primary(pv) == primary(nx)]\npiv = [(pv, nx) for pv, nx in miss if primary(pv) and primary(nx) and primary(pv) != primary(nx)]\ndline('DOUBLE DOWN (same primary tag)', stay)\ndline('PIVOT (different primary tag)', piv)\nov = lambda pv, nx: len(set(pv['tags'][:5]) & set(nx['tags'][:5]))\ndline(' heavy overlap (3+ of top5 tags)', [(a, b) for a, b in miss if ov(a, b) >= 3])\ndline(' clean break (0-1 shared tags)', [(a, b) for a, b in miss if ov(a, b) <= 1])\np('-- was the miss LOVED? (misses with 10-49 reviews so pct is meaningful)')\nloved = [(pv, nx) for pv, nx in miss if pv['reviews'] >= 10 and (pv['pct'] or 0) >= 85]\nunlov = [(pv, nx) for pv, nx in miss if pv['reviews'] >= 10 and 0 < (pv['pct'] or 0) < 70]\ndline('loved miss (pct>=85)', loved)\ndline('unloved miss (pct<70)', unlov)\ndline('loved & DOUBLE DOWN', [(a, b) for a, b in loved if primary(a) and primary(a) == primary(b)])\ndline('loved & PIVOT', [(a, b) for a, b in loved if primary(a) and primary(b) and primary(a) != primary(b)])\ndline('unloved & DOUBLE DOWN', [(a, b) for a, b in unlov if primary(a) and primary(a) == primary(b)])\ndline('unloved & PIVOT', [(a, b) for a, b in unlov if primary(a) and primary(b) and primary(a) != primary(b)])\np('-- sequel to the miss vs new IP (within same-primary-tag stayers):')\nseq = [(a, b) for a, b in stay if is_sequel_of(b['name'], a['name'])]\nnew = [(a, b) for a, b in stay if not is_sequel_of(b['name'], a['name'])]\ndline('sequel of the miss', seq)\ndline('new name, same tag', new)\n\n# ---------- G ----------\np('\\n=== G: comebacks (gap >=36mo) vs continuous (<12mo), era-stratified, by rung ===')\nfor pbname in ('low', 'mid', 'hit'):\n p(f'-- prior best {pbname}:')\n for elo, ehi in ((2019, 2021), (2022, 2025)):\n for glabel, glo, ghi in (('comeback 36mo+', 36, 10**9), ('continuous <12mo', 0, 12),\n ('mid-gap 12-36', 12, 36)):\n sel = [(pv, nx) for d, i, pv, nx, pb in PP\n if pband(pb) == pbname and elo <= nx['year'] <= ehi\n and glo <= months_between(pv['sortdate'], nx['sortdate']) < ghi]\n if len(sel) < 25: continue\n k = sum(1 for pv, nx in sel if nx['reviews'] >= HIT)\n up = sum(1 for pv, nx in sel\n if BAND_RANK[band(nx['reviews'])] > BAND_RANK[pbname]\n or (pbname == 'hit' and nx['reviews'] >= HIT))\n p(f' {elo}-{ehi} {glabel:<17}: P(hit) {pct_ci(k, len(sel))} band-up/re-hit {up/len(sel)*100:5.1f}%')\nOUT.close()\n"}
[Think]
**Rechecking art-score caveats**
**Recomputing matched market controls**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.7 seconds
Output:
{}
{"chunk_id":"d946dd","wall_time_seconds":1.001712285,"session_id":53420,"original_token_count":0,"output":""}
{"chunk_id":"ad2162","wall_time_seconds":0.322772713,"exit_code":0,"original_token_count":1270,"output":" group rank period n h50_rate r100_rate joint_rate\n Online Co-Op + Roguelite 7 2023-25 48 0.479167 0.541667 0.250000\nLocal Co-Op + Action Roguelike 7 2023-25 23 0.347826 0.391304 0.260870\n Retro + Idler 7 2023-25 11 0.363636 0.363636 0.363636\n Card Game + Base Building 7 2023-25 8 0.750000 0.750000 0.250000\n Roguelite + Mystery 7 2023-25 9 0.444444 0.555556 0.444444\n Online Co-Op + Roguelite 7 2026JanAug 22 0.363636 0.363636 0.090909\nLocal Co-Op + Action Roguelike 7 2026JanAug 5 0.200000 0.200000 0.200000\n Retro + Idler 7 2026JanAug 8 0.000000 0.000000 0.000000\n Card Game + Base Building 7 2026JanAug 0 NaN NaN NaN\n Roguelite + Mystery 7 2026JanAug 4 0.000000 0.000000 0.000000\n Online Co-Op + Roguelite 20 2023-25 173 0.398844 0.456647 0.213873\nLocal Co-Op + Action Roguelike 20 2023-25 133 0.203008 0.210526 0.127820\n Retro + Idler 20 2023-25 119 0.260504 0.336134 0.252101\n Card Game + Base Building 20 2023-25 43 0.395349 0.511628 0.209302\n Roguelite + Mystery 20 2023-25 111 0.117117 0.153153 0.099099\n Online Co-Op + Roguelite 20 2026JanAug 88 0.261364 0.284091 0.102273\nLocal Co-Op + Action Roguelike 20 2026JanAug 34 0.117647 0.147059 0.088235\n Retro + Idler 20 2026JanAug 131 0.091603 0.160305 0.122137\n Card Game + Base Building 20 2026JanAug 18 0.055556 0.111111 0.000000\n Roguelite + Mystery 20 2026JanAug 56 0.089286 0.107143 0.071429\n group comparison comparison_n r100_oe h50_oe supported\n Online Co-Op + Roguelite Online Co-Op without pair 1683 1.277555 1.213074 165\n Online Co-Op + Roguelite Roguelite without pair 3397 1.452789 1.330651 171\n Online Co-Op + Action Roguelike Online Co-Op without pair 1682 1.289663 1.247229 167\n Online Co-Op + Action Roguelike Action Roguelike without pair 2792 1.700711 1.573379 168\n Roguelite + Loot Roguelite without pair 3321 1.205428 1.195177 245\n Roguelite + Loot Loot without pair 609 1.379945 1.304323 220\n Local Co-Op + Action Roguelike Local Co-Op without pair 979 1.386877 1.605083 126\n Local Co-Op + Action Roguelike Action Roguelike without pair 2833 0.834523 0.925334 131\n Retro + Idler Retro without pair 4762 3.636569 4.816951 119\n Retro + Idler Idler without pair 1336 2.051005 2.272054 115\n Card Game + Base Building Card Game without pair 1422 2.708206 2.355427 42\n Card Game + Base Building Base Building without pair 1525 1.690638 1.470490 42\nRoguelike + Inventory Management Roguelike without pair 3694 1.142553 1.119162 161\nRoguelike + Inventory Management Inventory Management without pair 881 1.139925 1.200411 157\n Roguelite + Mystery Roguelite without pair 3459 0.723740 0.696132 109\n Roguelite + Mystery Mystery without pair 4131 0.939678 0.954975 110\n Loot + Idler Loot without pair 754 3.546784 3.624968 99\n Loot + Idler Idler without pair 1351 1.669186 1.752451 96\n Anime + Roguelike Deckbuilder Anime without pair 3617 1.701276 1.657810 46\n Anime + Roguelike Deckbuilder Roguelike Deckbuilder without pair 365 1.247570 1.213923 35\n group period n h50_rate r100_rate h50_oe r100_oe\n BASELINE 2019-21 20503 0.167293 0.208360 NaN NaN\n Arcade 2019-21 2128 0.065789 0.089756 0.596766 0.542855\n Minimalist 2019-21 593 0.045531 0.087690 0.825784 0.799797\nPrecision Platformer 2019-21 442 0.061086 0.101810 0.647883 0.720866\n Roguelike 2019-21 454 0.262115 0.288546 1.271834 1.214479\n Action Roguelike 2019-21 403 0.210918 0.238213 1.136104 1.034251\n BASELINE 2023-25 38493 0.131972 0.157795 NaN NaN\n Arcade 2023-25 4405 0.052894 0.062656 0.519320 0.464210\n Minimalist 2023-25 879 0.052332 0.071672 0.980876 0.779097\nPrecision Platformer 2023-25 1031 0.041707 0.056256 0.566003 0.504020\n Roguelike 2023-25 2375 0.144842 0.173474 1.244857 1.189064\n Action Roguelike 2023-25 2317 0.133362 0.166163 1.319007 1.243695\n"}
[Think]
**Counting all pairwise tests**
**Generating pairwise counts**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.6 seconds
Output:
{}
{"chunk_id":"0ab408","wall_time_seconds":1.001012784,"session_id":85561,"original_token_count":0,"output":""}
{"chunk_id":"86007e","wall_time_seconds":0.245887315,"exit_code":0,"original_token_count":1070,"output":" scope group controls n h50_rate r100_rate r556_rate supported r100_oe h50_oe\n all after7 year+price_band 3173 0.148792 0.176804 0.071856 3173 1.047037 1.010591\n all after7 year+month+price_band+primary 3173 0.148792 0.176804 0.071856 1599 1.107231 1.056073\n all before7 year+price_band 3146 0.118986 0.143675 0.058487 3146 0.906191 0.891297\n all before7 year+month+price_band+primary 3146 0.118986 0.143675 0.058487 1686 1.026899 0.926835\n all during year+price_band 3079 0.055556 0.076648 0.025333 3079 0.560518 0.523623\n all during year+month+price_band+primary 3079 0.055556 0.076648 0.025333 1783 0.516991 0.506204\n all other year+price_band 28942 0.143568 0.165987 0.069000 28942 1.803392 1.862759\n all other year+month+price_band+primary 28942 0.143568 0.165987 0.069000 3189 1.773702 2.178416\nno_recorded_ea after7 year+price_band 2649 0.130485 0.160060 0.062288 2649 1.019985 0.972346\nno_recorded_ea after7 year+month+price_band+primary 2649 0.130485 0.160060 0.062288 1281 1.148047 1.084791\nno_recorded_ea before7 year+price_band 2601 0.105077 0.131103 0.051519 2601 0.882327 0.859863\nno_recorded_ea before7 year+month+price_band+primary 2601 0.105077 0.131103 0.051519 1335 1.023232 0.934596\nno_recorded_ea during year+price_band 2580 0.047771 0.068605 0.022481 2580 0.531208 0.494193\nno_recorded_ea during year+month+price_band+primary 2580 0.047771 0.068605 0.022481 1450 0.454749 0.428259\nno_recorded_ea other year+price_band 24046 0.130448 0.154454 0.061507 24046 1.931354 1.998050\nno_recorded_ea other year+month+price_band+primary 24046 0.130448 0.154454 0.061507 2552 2.070331 3.266286\n selfpub_8_20 after7 year+price_band 678 0.191740 0.202065 0.056047 678 1.094727 1.099176\n selfpub_8_20 after7 year+month+price_band+primary 678 0.191740 0.202065 0.056047 221 1.727860 1.647255\n selfpub_8_20 before7 year+price_band 644 0.142857 0.150621 0.049689 644 0.834296 0.838855\n selfpub_8_20 before7 year+month+price_band+primary 644 0.142857 0.150621 0.049689 214 0.983823 0.875273\n selfpub_8_20 during year+price_band 574 0.095819 0.101045 0.027875 574 0.578716 0.591759\n selfpub_8_20 during year+month+price_band+primary 574 0.095819 0.101045 0.027875 219 0.770054 0.768947\n selfpub_8_20 other year+price_band 6282 0.176218 0.185769 0.064629 6279 1.776631 1.706568\n selfpub_8_20 other year+month+price_band+primary 6282 0.176218 0.185769 0.064629 195 2.119785 1.413190\ndimension value n h50_rate r100_rate r100_oe h50_oe\n month 1.0 2427 0.133815 0.168933 1.132400 1.082949\n month 2.0 2758 0.122645 0.148296 0.947419 0.937877\n month 3.0 3282 0.129002 0.156002 1.026274 1.024460\n month 4.0 3080 0.154409 0.172727 1.080424 1.147878\n month 5.0 3097 0.150812 0.175008 1.110708 1.084231\n month 6.0 3004 0.126655 0.146138 0.965165 0.933874\n month 7.0 3190 0.141263 0.160815 1.033927 1.081322\n month 8.0 3286 0.137504 0.164334 1.090901 1.050847\n month 9.0 3083 0.157756 0.168018 0.951453 1.035809\n month 10.0 3844 0.139331 0.158429 0.927067 0.930591\n month 11.0 3949 0.132627 0.159028 0.978767 0.924353\n month 12.0 3340 0.094804 0.120060 0.829452 0.794430\n weekday Friday 8074 0.105217 0.125960 0.859785 0.873761\n weekday Monday 5950 0.133597 0.155966 0.977241 0.997670\n weekday Saturday 1732 0.041667 0.073326 0.663699 0.462107\n weekday Sunday 2081 0.074038 0.099471 0.878376 0.848771\n weekday Thursday 8502 0.171073 0.199482 1.150634 1.116862\n weekday Tuesday 5858 0.151822 0.173438 1.069569 1.068258\n weekday Wednesday 6143 0.156817 0.172880 1.044240 1.069777\n"}
[Think]
**Preparing peer-adjusted contrasts**
The timing result holds up: games released during seasonal sales have substantially lower review outcomes, including after comparisons within year, month, price band, and primary tag. The broader “September is best” claim does not survive those controls.
The rare-niche checks are more mixed. Card Game + Base Building reproduces his striking 6-of-8 result exactly with seven tags, but expands to 43 games with twenty tags. It still looks favorable, yet “zero 2026 entrants” becomes 18 entrants. Roguelite + Mystery weakens much more sharply when the tag cutoff widens.
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nfrom ...)
Script completed
Wall time 1.6 seconds
Output:
{"chunk_id":"8f0462","wall_time_seconds":0.273116291,"exit_code":0,"original_token_count":687,"output":"prior_fixed_thresholds.csv\n threshold weighting state n r556 r556_rate r100_rate\n 556 release prior_above 1275 498 0.390588 0.689412\n 556 release prior_below 6265 196 0.031285 0.113328\n 556 first_per_dev prior_above 629 288 0.457870 0.783784\n 556 first_per_dev prior_below 2840 142 0.050000 0.163732\npair_removals.csv\n group sensitivity n r100_rate joint_rate\nLocal Co-Op + Action Roguelike full 133 0.210526 0.127820\nLocal Co-Op + Action Roguelike remove_top3 130 0.192308 0.115385\nLocal Co-Op + Action Roguelike remove_top_dev 132 0.204545 0.121212\nLocal Co-Op + Action Roguelike remove_top_pub 132 0.204545 0.121212\n Online Co-Op + Roguelite full 173 0.456647 0.213873\n Online Co-Op + Roguelite remove_top3 170 0.447059 0.205882\n Online Co-Op + Roguelite remove_top_dev 172 0.453488 0.209302\n Online Co-Op + Roguelite remove_top_pub 172 0.453488 0.209302\n Roguelite + Mystery full 111 0.153153 0.099099\n Roguelite + Mystery remove_top3 108 0.129630 0.074074\n Roguelite + Mystery remove_top_dev 110 0.145455 0.090909\n Roguelite + Mystery remove_top_pub 110 0.145455 0.090909\n Card Game + Base Building full 43 0.511628 0.209302\n Card Game + Base Building remove_top3 40 0.475000 0.150000\n Card Game + Base Building remove_top_dev 40 0.525000 0.200000\n Card Game + Base Building remove_top_pub 42 0.500000 0.190476\n Retro + Idler full 119 0.336134 0.252101\n Retro + Idler remove_top3 116 0.318966 0.232759\n Retro + Idler remove_top_dev 118 0.330508 0.245763\n Retro + Idler remove_top_pub 118 0.330508 0.245763\n Loot + Idler full 104 0.336538 0.115385\n Loot + Idler remove_top3 101 0.316832 0.089109\n Loot + Idler remove_top_dev 103 0.330097 0.106796\n Loot + Idler remove_top_pub 103 0.330097 0.106796\nMultiple testing 14718 nominal 506 BH 11\nrare_pair_multiple_testing.csv\n a b n r100_count r100_reference r100_p h50_count h50_reference h50_p r100_q h50_q\n Idler Retro 11 4 0.190114 0.139938 4 0.124525 0.038489 1.0 1.0\n Mystery Roguelite 9 5 0.204633 0.021562 4 0.175676 0.056929 1.0 1.0\nBase Building Card Game 8 6 0.354545 0.027056 6 0.341818 0.022404 1.0 1.0\n"}
{}
{"chunk_id":"06f1af","wall_time_seconds":1.001914442,"session_id":9130,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"sed -n '1,155p' /mnt/Main/a327ex/steam-market/scripts/whitespace.py; s...)
Script completed
Wall time 0.8 seconds
Output:
{"chunk_id":"8ab699","wall_time_seconds":0.660858665,"exit_code":0,"original_token_count":1709,"output":"\"\"\"Whitespace map (analysis #6): tag pairs with tiny supply whose occupants\nover-perform. Rank by binomial surprise vs the BEST component tag (pair must add\nvalue beyond either ingredient), not raw h50 (tiny-n noise). Sections:\nproven whitespace / empty cells / build-lane cut. Window 2023-25 paid; n26 column\nshows whether 2026 supply is already filling the gap.\"\"\"\nimport sys\nfrom collections import defaultdict\nfrom itertools import combinations\nfrom math import comb\nfrom statistics import median\n\nsys.path.insert(0, 'E:/a327ex/steam-market/scripts')\nfrom common import load_catalog, load_tagmap\n\nNON_CONTENT = {'Indie', 'Casual', 'Singleplayer', 'Early Access', 'Free to Play',\n 'Great Soundtrack', 'Controller', 'Family Friendly', 'Kickstarter',\n 'Crowdfunded', 'Software', 'Utilities', 'Benchmark', 'Documentary',\n 'Gaming', 'Masterpiece', 'Cult Classic', 'Classic', 'Remake', 'Epic',\n 'Short', 'Long', 'Beautiful', 'Relaxing', 'Colorful', 'Stylized',\n 'Realistic', 'Cinematic', 'Emotional', 'Funny', 'Comedy', 'Dark',\n 'Cute', 'Difficult', 'Replay Value', 'Content Rich', 'Immersive'}\nBUILD_LANE = {'Roguelike', 'Roguelite', 'Action Roguelike', 'Roguelike Deckbuilder',\n 'Traditional Roguelike', 'Deckbuilding', 'Card Battler', 'Card Game',\n 'Auto Battler', 'Bullet Heaven', 'Loot', 'Dungeon Crawler',\n 'Class-Based', 'Character Customization', 'Perma Death', 'Incremental',\n 'Idler', 'Tower Defense', 'Turn-Based Tactics', 'Turn-Based Strategy'}\nMIN_COMPONENT = 80 # component tag must have >=N window games (real category)\nPAIR_MAX = 40 # pair supply cap: beyond this it's not whitespace\nPAIR_MIN = 4\n\ndef binom_sf(hits, n, p):\n \"\"\"P(X >= hits) for X~Bin(n,p)\"\"\"\n return sum(comb(n, k) * p**k * (1 - p)**(n - k) for k in range(hits, n + 1))\n\nprint('loading catalog...', flush=True)\ntagmap = load_tagmap()\ngames = [g for g in load_catalog() if g['year'] and g['price'] and not g['free']]\nwin = [g for g in games if 2023 <= g['year'] <= 2025]\ng26 = [g for g in games if g['year'] == 2026]\nhit = lambda g: bool(g['rev_est'] and g['rev_est'] >= 50_000)\nBASE = sum(1 for g in win if hit(g))/len(win)\nprint(f'window n={len(win)}, baseline h50={BASE*100:.1f}%', flush=True)\n\n# component tag stats\ntag_n = defaultdict(int)\ntag_hits = defaultdict(int)\nfor g in win:\n for t in g['tags']:\n tag_n[t] += 1\n tag_hits[t] += hit(g)\ncomp = {t for t, n in tag_n.items() if n >= MIN_COMPONENT\n and tagmap.get(t) and tagmap[t] not in NON_CONTENT}\ntag_rate = {t: tag_hits[t]/tag_n[t] for t in comp}\n\n# pair stats\npair_games = defaultdict(list)\nfor g in win:\n ts = sorted(t for t in g['tags'] if t in comp)\n for a, b in combinations(ts, 2):\n pair_games[(a, b)].append(g)\npair26 = defaultdict(int)\nfor g in g26:\n ts = sorted(t for t in g['tags'] if t in comp)\n for a, b in combinations(ts, 2):\n pair26[(a, b)] += 1\nprint(f'{len(comp)} component tags, {len(pair_games)} occupied pairs', flush=True)\n\ndef fmt_row(a, b, gs, extra=''):\n hits = sum(1 for g in gs if hit(g))\n revs = sorted((g['rev_est'] for g in gs if g['rev_est'] and g['reviews'] >= 10), reverse=True)\n med = median(revs) if revs else 0\n top = max(revs) if revs else 0\n prices = sorted(g['price'] for g in gs)\n return (f'{tagmap[a]} + {tagmap[b]:<24} n={len(gs):<3} hits={hits:<2} '\n f'({hits/len(gs)*100:>3.0f}%) compA={tag_rate[a]*100:>3.0f}% compB={tag_rate[b]*100:>3.0f}% '\n f'med=${med/1e3:>5.0f}K top=${top/1e6:>4.1f}M medprice=${median(prices):>3.0f} '\n f'n26={pair26.get((a, b), 0)}{extra}')\n\n# ---- proven whitespace: tiny supply, occupants beat the best component ----\nrows = []\nfor (a, b), gs in pair_games.items():\n if not (PAIR_MIN <= len(gs) <= PAIR_MAX):\n continue\n hits = sum(1 for g in gs if hit(g))\n if hits < 3:\n continue\n p0 = max(tag_rate[a], tag_rate[b], BASE)\n sf = binom_sf(hits, len(gs), p0)\n if sf < 0.05:\n rows.append((sf, a, b, gs))\nrows.sort(key=lambda r: r[0])\nprint(f'\\n=== PROVEN WHITESPACE (4<=n<=40, hits>=3, P(>=hits | best component) < .05): {len(rows)} ===')\nfor sf, a, b, gs in rows[:60]:\n print(f'p={sf:.4f} {fmt_row(a, b, gs)}')\n\n# ---- empty cells: both components strong, co-occurrence far below chance ----\nprint('\\n=== EMPTY CELLS (both comps h50>=22%, expected>=8 by chance, observed<=3) ===')\nN = len(win)\nempties = []\nfor a in comp:\n for b in comp:\n if a >= b or tag_rate[a] < 0.22 or tag_rate[b] < 0.22:\n continue\n exp = tag_n[a]*tag_n[b]/N\n obs = len(pair_games.get((a, b), ()))\n if exp >= 8 and obs <= 3:\n empties.append((exp, obs, a, b))\nempties.sort(key=lambda r: -r[0])\nfor exp, obs, a, b in empties[:40]:\n print(f'exp={exp:>5.1f} obs={obs} {tagmap[a]} ({tag_rate[a]*100:.0f}%, n={tag_n[a]}) + '\n f'{tagmap[b]} ({tag_rate[b]*100:.0f}%, n={tag_n[b]}) n26={pair26.get((a, b), 0)}')\n\n# ---- build-lane cut: one side in BUILD_LANE, small n, occupants outperform ----\nbuild_ids = {t for t in comp if tagmap[t] in BUILD_LANE}\nprint('\\n=== BUILD-LANE WHITESPACE (one side build/incremental, 4<=n<=40, hits>=2, sf<.15) ===')\nbrows = []\nfor (a, b), gs in pair_games.items():\n if not ({a, b} & build_ids) or not (PAIR_MIN <= len(gs) <= PAIR_MAX):\n continue\n hits = sum(1 for g in gs if hit(g))\n if hits < 2:\n continue\n p0 = max(tag_rate[a], tag_rate[b], BASE)\n sf = binom_sf(hits, len(gs), p0)\n if sf < 0.15:\n brows.append((sf, a, b, gs))\nbrows.sort(key=lambda r: r[0])\nfor sf, a, b, gs in brows[:40]:\n print(f'p={sf:.4f} {fmt_row(a, b, gs)}')\n winners = sorted((g for g in gs if hit(g)), key=lambda g: -g['rev_est'])[:3]\n print(' ' + ' | '.join(f\"{g['name']} ${g['rev_est']/1e6:.1f}M ${g['price']:.0f}\" for g in winners))\n a b n h50_count h50_p h50_q\n Crafting Online Co-Op 31 23 8.188036e-06 0.030128\n Base Building Co-op 25 19 1.223235e-05 0.031227\n Base Building Multiplayer 32 22 3.228152e-05 0.044284\n Co-op Open World 30 24 5.252411e-08 0.000387\n Action RPG Online Co-Op 25 19 3.309737e-05 0.044284\n Exploration Wholesome 26 16 1.128454e-07 0.000554\n Grand Strategy Historical 34 19 1.485198e-05 0.031227\n Cozy Farming Sim 32 18 1.465662e-05 0.031227\n Simulation Wholesome 26 17 4.634491e-08 0.000387\nAction-Adventure Massively Multiplayer 5 5 2.661056e-05 0.043517\n Cartoony Psychological Horror 12 8 2.608030e-05 0.043517\n"}
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/fable-ver...)
Script completed
Wall time 1.7 seconds
Output:
{}
{"chunk_id":"777aca","wall_time_seconds":1.002551426,"session_id":19107,"original_token_count":0,"output":""}
{"chunk_id":"11aa05","wall_time_seconds":0.374361567,"exit_code":1,"original_token_count":347,"output":"climber_states.csv\nTraceback (most recent call last):\n File \"<stdin>\", line 4, in <module>\n File \"/home/adn/a327ex/steam-research/.venv/lib/python3.14/site-packages/pandas/io/parsers/readers.py\", line 873, in read_csv\n return _read(filepath_or_buffer, kwds)\n File \"/home/adn/a327ex/steam-research/.venv/lib/python3.14/site-packages/pandas/io/parsers/readers.py\", line 300, in _read\n parser = TextFileReader(filepath_or_buffer, **kwds)\n File \"/home/adn/a327ex/steam-research/.venv/lib/python3.14/site-packages/pandas/io/parsers/readers.py\", line 1645, in __init__\n self._engine = self._make_engine(f, self.engine)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n File \"/home/adn/a327ex/steam-research/.venv/lib/python3.14/site-packages/pandas/io/parsers/readers.py\", line 1904, in _make_engine\n self.handles = get_handle(\n ~~~~~~~~~~^\n f,\n ^^\n ...<6 lines>...\n storage_options=self.options.get(\"storage_options\", None),\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"/home/adn/a327ex/steam-research/.venv/lib/python3.14/site-packages/pandas/io/common.py\", line 930, in get_handle\n handle = open(\n handle,\n ...<3 lines>...\n newline=\"\",\n )\nFileNotFoundError: [Errno 2] No such file or directory: 'steam-research/fable-verification-2026-09-06/climber_states.csv'\n"}
[Think]
**Validating dataset counts**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,numpy a...)
Script completed
Wall time 7.1 seconds
Output:
{"chunk_id":"eb39f9","wall_time_seconds":1.956341959,"exit_code":0,"original_token_count":127,"output":"[{'year': 2019, 'n_reviewed10': 3049, 'median_formula': np.float64(13628.358), 'median_reviews': np.float64(58.0)}, {'year': 2021, 'n_reviewed10': 4222, 'median_formula': np.float64(10765.692), 'median_reviews': np.float64(41.0)}, {'year': 2023, 'n_reviewed10': 4677, 'median_formula': np.float64(12199.896999999999), 'median_reviews': np.float64(45.0)}, {'year': 2025, 'n_reviewed10': 6703, 'median_formula': np.float64(11839.102), 'median_reviews': np.float64(43.0)}]\nfirst90 reviews 0 updated after90 0\n"}
{"chunk_id":"b3dc07","wall_time_seconds":5.005937371,"session_id":9130,"original_token_count":0,"output":""}
{"chunk_id":"fd8dcd","wall_time_seconds":0.000001251,"exit_code":0,"original_token_count":128,"output":"Eligible tests 10804 nominal h50 p<.05 347 BH q<.05 3\n a b n r100_count r100_reference r100_p h50_count h50_reference h50_p r100_q h50_q\n Idler Retro 11 4 0.191910 0.143684 4 0.134791 0.049665 1.0 1.0\n Mystery Roguelite 9 5 0.207656 0.022927 4 0.177990 0.059367 1.0 1.0\nBase Building Card Game 8 6 0.360215 0.029349 6 0.347670 0.024460 1.0 1.0\n"}
[Think]
**Preparing the claim matrix**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 1.7 seconds
Output:
{"chunk_id":"dfef52","wall_time_seconds":1.545193614,"exit_code":0,"original_token_count":2531,"output":"Warning: truncated output (original token count: 2531)\nTotal output lines: 99\n\nfirst90 reviews 4070 updated after90 143\n appid name date reviews pct price\n 359940 Shadows Peak 2017-03-13 17:21:40+00:00 297 70 9.99\n 387860 the static speaks my name 2015-08-10 14:12:00+00:00 5804 81 NaN\n 467360 Off-Peak 2016-10-21 15:46:26+00:00 1839 89 NaN\n 523880 peakvox Escape Virus HD 2016-11-10 05:02:31+00:00 16 68 2.99\n 525380 Demon Peak 2017-07-07 21:00:00+00:00 244 69 NaN\n 533080 Phantasmat: Crucible Peak Collector's Edition 2016-10-19 22:49:30+00:00 17 76 19.99\n 552200 peakvox Mew Mew Chamber for Steam 2016-12-16 05:05:01+00:00 77 93 2.99\n 552210 peakvox Route Candle for Steam 2016-12-16 05:06:57+00:00 13 76 2.99\n 615340 Mystic Journey: Tri Peaks Solitaire 2017-05-11 13:15:13+00:00 192 52 NaN\n 654910 YANKAI'S PEAK. 2017-07-13 16:34:28+00:00 98 89 5.99\n 907710 This is the Zodiac Speaking 2020-10-15 13:57:25+00:00 77 57 19.99\n 923260 Golf Peaks 2018-11-13 15:49:05+00:00 1067 95 4.99\n 966400 Speaking Simulator 2020-01-30 14:17:23+00:00 57 80 7.99\n1059430 PAGAN PEAK VR 2019-10-30 22:07:31+00:00 163 82 7.99\n1071770 Princess's Peak 2019-05-10 22:36:48+00:00 33 39 0.99\n1074330 Minesweeper Peak VR 2019-05-08 07:37:00+00:00 17 88 NaN\n1081040 Twin Peaks VR 2019-12-13 05:00:57+00:00 51 72 9.99\n1089050 Speakerman 2019-06-17 15:14:20+00:00 9 77 3.99\n1093800 Zeke's Peak 2019-10-11 17:07:04+00:00 21 85 8.99\n1129920 Tales From Off-Peak City Vol. 1 2020-05-15 15:59:15+00:00 532 98 9.99\n1147890 Bonfire Peaks 2021-09-30 12:59:45+00:00 283 93 19.99\n1161140 Speakerman 2 2019-10-03 09:04:59+00:00 1 100 6.99\n1175210 Eternal Kingdom Battle Peak 2023-01-24 05:02:16+00:00 83 46 NaN\n1348920 Wind Peaks 2020-07-29 03:09:08+00:00 284 72 15.99\n1373950 The Divine Speaker 2022-03-30 06:25:13+00:00 405 95 29.99\n1440940 Spooky Speakeasy 2020-12-21 23:46:06+00:00 72 90 NaN\n1475330 Peak Darkness 2022-10-31 18:56:44+00:00 14 78 NaN\n1475420 Puzzling Peaks EXE 2020-12-02 19:06:39+00:00 22 100 2.99\n1529250 Wolf Peak: The Case of Ruth Choi 2024-06-14 08:32:23+00:00 40 87 14.99\n1544450 Pixel Game Maker Series DRAGON PEAK 2021-03-19 01:18:59+00:00 7 14 9.99\n1579120 Yupitergrad 🚀: Sneaki Peaki (Virtual Reality Adventure) 2021-04-21 19:05:07+00:00 52 98 NaN\n1775510 Raiders of the Icepeak Mountains 2021-11-12 13:54:25+00:00 3 0 4.99\n1779030 So to Speak 2025-03-31 15:00:45+00:00 117 96 17.99\n1830260 Mystical Riddles: Snowy Peak Hotel Collector's Edition 2021-12-21 11:08:50+00:00 21 61 7.99\n1854250 Demon Speakeasy 2022-07…531 tokens truncated…+00:00 8 100 6.99\n2960540 PeakPals 2024-08-16 14:31:04+00:00 15 86 4.99\n3146880 피크? 삐끗!(Peak? Slip!) 2026-01-27 10:42:33+00:00 21 100 NaN\n3191030 Nubby's Number Factory 2025-03-07 16:02:06+00:00 18062 97 4.99\n3241660 R.E.P.O. 2025-02-26 13:59:16+00:00 338962 96 9.99\n3314790 CloverPit 2025-09-26 16:00:26+00:00 24589 90 9.99\n3382360 My Dear Can't Speak 2025-06-17 16:04:49+00:00 1 100 2.69\n3405340 Megabonk 2025-09-18 18:00:21+00:00 99882 94 9.99\n3506430 Peak 2025-03-01 16:20:51+00:00 42 92 1.99\n3527290 PEAK 2025-06-16 17:01:01+00:00 298204 94 7.99\n3566380 SkyDungeon Shinobigaeshi Peak 2026-05-14 07:52:07+00:00 7 100 3.99\n3593990 Fan Speak 2025-07-01 01:59:27+00:00 39 94 6.99\n3631290 Slots & Daggers 2025-10-24 16:03:44+00:00 7361 93 7.99\n3784030 RACCOIN: Coin Pusher Roguelike 2026-03-31 08:32:56+00:00 4202 82 11.99\n3841750 Campfire Stories: The Giant of Green Peaks 2025-10-27 09:04:51+00:00 19 73 0.99\n3883070 Speakeasy Simulator 2026-01-15 17:00:44+00:00 50 88 11.99\n3892270 Gamble With Your Friends 2026-05-01 18:01:58+00:00 17426 89 7.99\n3914500 I Can Only Speak Doner 2026-04-07 14:00:00+00:00 16 87 4.99\n3948120 Scritchy Scratchy 2026-03-18 11:01:27+00:00 14898 94 6.99\n3949040 RV There Yet? 2025-10-21 12:36:18+00:00 71366 90 7.99\n4214290 Blade of Vengeance: Night Raid at Swift Peak Pass 2026-01-29 17:29:11+00:00 2 0 7.99\n4216090 Clash of Peaks: Dynasty in Your Grasp 2025-12-16 12:12:19+00:00 9 100 1.99\n4320230 The Peak of Life 2026-03-06 03:58:41+00:00 30 66 8.99\n4331030 Megabonk Apocalypse 2026-02-13 11:04:03+00:00 0 0 NaN\n4772770 Wild Climbers Peak Panic 2026-06-17 20:21:42+00:00 1 0 1.99\n name date reviews pct\n Entertainment Simulator 2026-03-06 07:00:22+00:00 178 72\n XenoCard 2026-05-23 00:00:14+00:00 4 75\n Wilder Bound - 荒野拼图 2026-05-19 15:11:14+00:00 0 0\n Flaregate Network 2026-07-09 09:46:16+00:00 56 78\n Automatic Kingdom 2026-01-29 21:24:47+00:00 28 75\n Into the Slimy Mines 2026-05-29 09:00:06+00:00 26 100\n Into The Depths 2026-06-10 10:56:02+00:00 5 100\n Overwork Empire 2026-03-29 21:34:42+00:00 1 0\n TavernHold 2026-01-09 16:01:40+00:00 27 70\n Areteion 2026-07-13 11:17:09+00:00 17 94\n Rise of Mutant Swarms 2026-07-20 08:52:30+00:00 1 0\n Gods & Gore 2026-08-05 14:59:27+00:00 20 75\n The King Must Fall 2026-04-14 00:48:40+00:00 1 100\n MoeArmy vs SuArmy 2026-07-17 02:28:24+00:00 52 82\nRogue Realm: Guardian Grids 2026-07-14 04:15:43+00:00 100 72\n Luna Meridian 2026-07-03 13:12:08+00:00 0 0\n Dynasty! 2026-06-26 22:30:49+00:00 8 87\n Daily War Online 2026-08-28 18:36:16+00:00 0 0\n"}
[Think]
**Writing additional checks script**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"34e061","wall_time_seconds":1.00095408,"session_id":35692,"original_token_count":0,"output":""}
{"chunk_id":"27d98f","wall_time_seconds":0.000003309,"exit_code":0,"original_token_count":104,"output":"2580486 00:00 0.0 5904 /usr/bin/bash -c ps -eo pid,etime,%cpu,rss,args | rg 'career_extensions.py'; ls steam-research/fable-verification-2026-09-06/climber*\n2580488 00:00 0.0 6156 rg career_extensions.py\nsteam-research/fable-verification-2026-09-06/climber_breakouts.csv\nsteam-research/fable-verification-2026-09-06/climber_members.csv\nsteam-research/fable-verification-2026-09-06/climber_states.csv\n"}
[Think]
**Rerunning corrected stats**
A few findings now have clear revisions:
- The rare-pair search produces hundreds of nominally significant results; only three survive a multiple-comparison correction under Fable’s screening rules. His “proven whitespace” label was too strong, even where broader evidence still supports a promising combination.
- Our dated records put SNKRX at 590 surviving Steam-purchase reviews by day 30, versus 109 in its partial launch calendar month. His reported 117 came from that calendar bucket in a different review channel, not a full launch month.
- Longer release gaps and stronger subsequent releases remain associated, but that does not show that an audience never decays or that a hiatus costs nothing.
I’m finishing the remaining career checks and validating the tables before assembling the full assessment.
exec ({"code": "const results=await Promise.allSettled([\ntools.exec_command({cmd:\"steam-research/.venv/bin/python steam-r...)
Script completed
Wall time 1.2 seconds
Output:
{"i":0,"status":"fulfilled","value":{"chunk_id":"3f2fc6","wall_time_seconds":1.001479392,"session_id":41042,"original_token_count":0,"output":""}}
{"i":1,"status":"fulfilled","value":{"chunk_id":"3c85d9","wall_time_seconds":1.001105513,"session_id":33790,"original_token_count":0,"output":""}}
{"i":2,"status":"fulfilled","value":{"chunk_id":"9758cf","wall_time_seconds":0.317478769,"exit_code":0,"original_token_count":472,"output":"climber_states.csv\n state n future_release_rate any556_within3 next556_within3 among_returners_any556\n all_low 3208 0.437344 0.006234 0.004052 0.014255\n already_hit 1119 0.496872 0.243074 0.200179 0.489209\n one_mid 1304 0.516871 0.042945 0.023773 0.083086\ntwo_plus_mid 1023 0.594330 0.067449 0.038123 0.113487\nclimber_breakouts.csv\n next556 n priced_up changed_primary median_price median_gap_days\n False 5637 0.338478 0.738691 5.99 260.205845\n True 410 0.587805 0.826829 14.99 619.095752\ncumulative_selected_survivors.csv\n index n any556\n 1 14990 0.098666\n 2 5264 0.205547\n 3 2709 0.253599\n 4 1571 0.259071\n 5 1013 0.272458\n 10 283 0.233216\nlocalization_supply.csv\n tag arm n chinese russian japanese english\n Idler all 1455 0.483162 0.351203 0.389691 0.945704\n Idler 100plus 276 0.750000 0.518116 0.641304 0.945652\n FMV all 316 0.680380 0.303797 0.373418 0.832278\n FMV 100plus 146 0.869863 0.301370 0.417808 0.773973\nRoguelike Deckbuilder all 412 0.626214 0.325243 0.546117 0.978155\nRoguelike Deckbuilder 100plus 152 0.881579 0.500000 0.789474 0.993421\n Action Roguelike all 2966 0.449090 0.302765 0.382670 0.976399\n Action Roguelike 100plus 506 0.778656 0.531621 0.711462 0.986166\n Auto Battler all 657 0.512938 0.305936 0.436834 0.968037\n Auto Battler 100plus 147 0.802721 0.428571 0.680272 1.000000\n Horror all 5829 0.339166 0.305884 0.342597 0.968777\n Horror 100plus 1104 0.653986 0.539855 0.597826 0.971920\n"}}
[Think]
**Preparing continuation comparisons**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 2.9 seconds
Output:
{}
{"chunk_id":"e13402","wall_time_seconds":1.000904561,"session_id":70033,"original_token_count":0,"output":""}
{"chunk_id":"8a1be2","wall_time_seconds":1.5948067080000001,"exit_code":0,"original_token_count":1454,"output":"1560250 Rising Front ['runs Call in fighters, or bombing runs to aid your defense! 30+ Different Planes/Fire Supports! Cavalry Charge! Charge into battle on horse back with hundreds of cavalrymen! ', 'There are 20+ different cavalry units to choose from! WW1 Era cavalry, Revolutionary War cavalry and Franco-Prussian War Cav', 'ted in its scope, Rising Front facilitates engagements with 1000+ units in action simultaneously. Step into an era never before so vividly recreated in a WW1 game! Line Battles']\n2079680 Evolution Tale [\"ols and discover new items. You'll find a variety of almost 500 items which you can then use to craft new combinations and evolve through the ages.\"]\n2452820 Skogdal ['nsettling Carpenter-esque mystery… Skogdal offers more than 300 different cards for you to discover and draft. Fuse cards, build powerful combos and recruit followers to aid ']\n2468100 Pyrene ['ies on every adventure. Upgrade your deck by unlocking over 200 powerful relics and 100+ cards that you can switch on-the-fly to maximize your deck in between enemy encounter']\n2508890 Etaine: Magic Survivor / 伊泰恩:魔法幸存者 ['There are 120 spells in the game, divided into 8 elements, each 15 spells. Each character can use different spell elements. ', 'Lead to different gameplay. There are 78 artifacts in the game, divided into 4 rarities. Special\\\\ : 29 pieces, Rare\\\\ : 29 pieces, Epic\\\\ : 14 pieces, an', \" a white equipment for the sake of balance. -_-|| There are 151 talents that increase a character's attributes or provide a variety of additional game mechanics effects. The \", 'n ordinary mage to a god of war who destroys the army! (100,000+ kills in a single run, killing BOSSes in seconds!) There are 22 Tarot cards that provide various special effec', 'cant difference in difficulty between the 3 maps. There are 20 difficulty levels. There are 6 different game modes. There are 10 challenges using special rules! Gain experie', \"emies ...... that's just common! You can even kill over 100,000 enemies in 20 minutes, just like the Grim Reaper! Multiple builds. Because there are a total of 371 skills in \"]\n2568620 Fakeway ['s, staff summons, and other weapons. Currently, it contains 30 common monsters and 5 bosses. Planting: Plant various crops. Currently there are more than 10 plants that can ', 'synthesized items are worth collecting. There are currently 600 items of various types. Construction: Build a camp to accommodate the arrival of NPCs. Currently, wooden house', 'ly a pixel survival game. We plan to develop a process with 10 bosses, and we have completed 4 so far. In 2026, we plan to complete the development of all game content. In 2']\n2758110 Dice & Sword ['abilities and unlocks new skills. 6 chapters of story + ??? 30+ Usable characters. 100+ Different enemies. 200+ Items or equipment. 100+ different skills. All game elements a']\n3054470 Rogue Zodiacs ['Diversity Features: A party of 4 heroes . - 3 of which have 54 unique abilities each in their own pool. - 1 special hero whose abilities must be stolen from enemies you enco', \"unter. - This special hero can steal up to 90 unique abilities ! 200+ unique Relics ! - Relics are the source of your character's passive powers. A Reliquar\", \"locking some after each run. Each character can equip up to 10 Relics! That's 40 Relics to equip in total! 75+ unique enemies. The 12 Zodiacs . Enemy variety at its finest. \", 'the further you go; unlocking new passive/active abilities. 16 Locations . 45+ Hazards. - Location mods that affect all enemies and allies . - Can be beneficial depending on', \" your situation, but most of the time they are hazardous. 45 levels of Star Marks . - Adventure perks that improve your future runs but not drastically; they're totally op\", 'tional. 600+ Status Effects . - Many deep mechanics such as on-hit, on-crit, and many various conditional effects. Abilitie', 's are tied to the Equipments and Weapons equipped. - 45 different Equipments . - 36 different Weapons . Combine duplicates to upgrade to a higher tier ! Survival Mode', ' items, special events/effects, and more. Unlock a total of 162 abilities from first win rewards. Endless Mode - recently added in 3.0 update. Fight never-ending waves of evo']\n3065150 SEIDEN ['become stronger. ・Game description and operation Seiden has 200 unique monsters, 35 backgrounds, and 70 user skills. Monsters have 500 to 600 skills. Movement: WASD Skill:123', '45 + Right Attack: left ・Xbox control support Character name creation and some functions are limited, but all con']\n3262610 Manacaster ['ity in deckbuilding. Since each deck in Manacaster contains 50 unique cards, no duplicates, players are encouraged to \"dig deep\" when looking for \"that perfect 50th card\". W', \"ith 800 cards available to deck builders, finding the right tool for the job is only a few filters away. If you don't \", \"y Draft Mode where you'll compete against our AI as you see 14 bundles of 9 cards and pick from them to build your decks. You can also just pick a pre-made deck to play; the\", \"e. Opening Hand Draft ( aka Mulligan System ) You are given 14 cards from your 50-card deck from which you must compose your opening hand of 7 cards, but here's the neat par\", 'pending on which mode you select. Constructed Mode : Select 50 Units and/or Actions, 13 Mana, and battle! The typical \"build-then-battle\" mode where each player brings the d']\n3352240 Raiders of Blackveil ['new Raid you create new and unique builds by combining over 300 perks from 8 different classes. Choose between Mage , Assassin , Priest , Guardian , Monk , Druid , Warrior , ']\n3372080 Mogradiz ['great enemies. Travel through several areas to set up camp. 20 Powerful bosses. Make friends with over 150 different monsters. More than 600 different items. Plant and prote']\n"}
[Think]
**Checking double-counted abilities**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.5 seconds
Output:
{}
{"chunk_id":"3d4dba","wall_time_seconds":1.000816915,"session_id":10847,"original_token_count":0,"output":""}
{"chunk_id":"5cde06","wall_time_seconds":0.164936897,"exit_code":0,"original_token_count":993,"output":"band n next3 next3_rate supported support_rate next3_observed next3_expected next3_oe\n hit 3191 909 0.284864 1500 0.470072 459 366.617779 1.251985\n low 24029 5117 0.212951 16571 0.689625 3489 5427.559536 0.642830\n mid 7935 2402 0.302710 5476 0.690107 1673 1269.179544 1.318174\n dev appid name date index reviews\nsokpop collective 561190 Bamboo EP 2016-12-15 14:48:38+00:00 1 65\nsokpop collective 932850 Simmiland 2018-11-30 16:04:19+00:00 2 1796\nsokpop collective 1003730 Soko Loco Deluxe 2019-11-13 18:03:16+00:00 3 90\nsokpop collective 1135030 jut 2020-01-17 17:51:31+00:00 4 28\nsokpop collective 1135040 Bombini 2020-01-17 17:52:51+00:00 5 26\nsokpop collective 1135050 Dr. Umgebung's School of Life 2020-01-17 17:52:54+00:00 6 26\nsokpop collective 1097090 New Colony 2020-01-17 17:53:00+00:00 7 22\nsokpop collective 1135060 King of the Sandcastle 2020-01-17 17:53:05+00:00 8 18\n dev appid name date index reviews\n 616 games 3288180 Tales Beyond The Tomb - Pineville Night Stalker 2024-11-20 18:39:00+00:00 12 726\n bigosaur 2304990 Crypto Miner Tycoon Simulator Starter Edition 2023-04-24 07:01:00+00:00 8 1355\n dharker studios 432100 Negligee 2016-10-19 22:02:00+00:00 12 646\n dieselmine 1508570 Summer~Life in the Countryside~ 2021-03-25 10:06:13+00:00 9 1083\n dirty fox games 2009010 My Furry Protogen 🐾 2023-08-11 21:20:27+00:00 11 943\n egamer 567280 Cube Runner 2016-12-13 11:47:11+00:00 10 645\n follow the fun 2250060 I commissioned some bees 0 2023-01-12 15:13:55+00:00 16 4627\n freezenova 979080 Rebel Forces 2018-12-20 16:46:02+00:00 9 1638\n handygames 938380 Townsmen - A Kingdom Rebuilt 2019-02-26 15:34:10+00:00 10 861\n ir studio 1260390 Hentai Furry 2020-03-17 07:13:36+00:00 11 1059\n lostvolbytes 3444480 Nebulock 2025-03-05 18:59:14+00:00 9 581\n meng games 1539580 Bird 2021-02-17 23:27:06+00:00 16 863\n miel 1314630 Aristocunts 2020-06-12 21:07:25+00:00 12 578\nnikita "ghost_rus" 758480 Ukrainian ball in search of gas 2017-12-08 13:36:17+00:00 9 584\n octo games 2176790 Furry Arena [18+] 2022-12-01 16:06:30+00:00 9 599\n revmatek 1591290 Tree Simulator 2022 2021-04-16 13:01:23+00:00 10 1021\n rewindapp 1070580 Drift86 2019-05-03 21:53:47+00:00 52 5289\n seito games 2415960 Femboy Aim Trainer 2023-07-18 13:14:06+00:00 15 693\n turquoise revival games 2061440 Oxygen: First Breath 2022-10-07 14:20:37+00:00 8 1662\n 橙光游戏 970510 蓝宝石般的被害妄想少女/Damsel with persecutory delusion 2018-11-28 03:08:48+00:00 8 1084\n"}
exec ({"code": "for(const id of [35692,10847,41042])text(await tools.write_stdin({session_id:id,chars:\"\",\"yield_time_ms...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"1f6729","wall_time_seconds":0.000001966,"exit_code":0,"original_token_count":85,"output":"{'primary_review_records': 15445, 'first90': 4070, 'first90_updated_after90': 143, 'note': 'Update timestamps do not prove recommendation changes; they establish current records are not frozen original reviews.', 'median_launch_month_days': np.float64(16.72840277777778), 'median_calendar_month_to_day30': np.float64(0.896780303030303)}\n"}
{"chunk_id":"67ae30","wall_time_seconds":0.000001014,"exit_code":0,"original_token_count":11,"output":"Quantity definition sensitivity complete\n"}
{"chunk_id":"b71c11","wall_time_seconds":3.66e-7,"exit_code":0,"original_token_count":0,"output":""}
{"chunk_id":"e71fe8","wall_time_seconds":0.153219037,"exit_code":0,"original_token_count":323,"output":" threshold n r100_rate supported r100_oe r556_oe h50_oe\n 10 1458 0.256516 921 1.332726 1.469975 1.238626\n 100 494 0.331984 289 1.504346 1.585684 1.281008\n 300 128 0.421875 78 1.764137 1.951437 1.352206\n appid name date reviews pct price\n2062430 BALL x PIT 2025-10-15 15:48:49+00:00 24571 95 14.99\n3191030 Nubby's Number Factory 2025-03-07 16:02:06+00:00 18062 97 4.99\n3241660 R.E.P.O. 2025-02-26 13:59:16+00:00 338962 96 9.99\n3314790 CloverPit 2025-09-26 16:00:26+00:00 24589 90 9.99\n3405340 Megabonk 2025-09-18 18:00:21+00:00 99882 94 9.99\n3527290 PEAK 2025-06-16 17:01:01+00:00 298204 94 7.99\n3631290 Slots & Daggers 2025-10-24 16:03:44+00:00 7361 93 7.99\n3784030 RACCOIN: Coin Pusher Roguelike 2026-03-31 08:32:56+00:00 4202 82 11.99\n3892270 Gamble With Your Friends 2026-05-01 18:01:58+00:00 17426 89 7.99\n3948120 Scritchy Scratchy 2026-03-18 11:01:27+00:00 14898 94 6.99\n3949040 RV There Yet? 2025-10-21 12:36:18+00:00 71366 90 7.99\n"}
[Think]
**Writing findings report**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"9f3cfa","wall_time_seconds":1.001912691,"session_id":40148,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/fable-verification-2026...)
Script completed
Wall time 1.5 seconds
Output:
{"chunk_id":"4ed3ee","wall_time_seconds":1.001719019,"session_id":33296,"original_token_count":0,"output":""}
{"chunk_id":"d80f9b","wall_time_seconds":0.186767659,"exit_code":0,"original_token_count":151,"output":"{'career_games_all': 114227, 'career_devs_all': 69008, 'career_games_paid_nonexplicit': 90884, 'career_devs_paid_nonexplicit': 56323, 'first_game_share_of_recent_556': np.float64(0.4789166952348303), 'one_game_developer_share_of_recent_556': np.float64(0.39286938635584506), 'cutoff': '2026-07-01 00:00:00+00:00', 'maturity': '2025-07-01 00:00:00+00:00', 'outcome_snapshot': '2026-09-05'}\n state n h50_n h50 h50_rate\nfirst_observed 22460 22159 2331 0.105194\n older_veteran 1083 1044 411 0.393678\n prior_h50 1031 996 629 0.631526\n prior_no_h50 2438 2372 218 0.091906\n"}
[Think]
**Refining comparison metrics**
exec ({"code": "text(await tools.write_stdin({session_id:33296,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":1200...)
[
{
"type": "text",
"text": "Script completed\nWall time 0.0 seconds\nOutput:\n"
},
{
"type": "text",
"text": "{\"chunk_id\":\"460c77\",\"wall_time_seconds\":0.000002392,\"exit_code\":1,\"original_token_count\":122,\"output\":\"Traceback (most recent call last):\\n File \\\"/home/adn/a327ex/steam-research/fable-verification-2026-09-06/validate.py\\\", line 16, in <module>\\n check('tag identities valid',set(t.appid)<=set(g.appid))\\n ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/home/adn/a327ex/steam-research/fable-verification-2026-09-06/validate.py\\\", line 6, in check\\n if not value:raise AssertionError(name)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^\\nAssertionError: tag identities valid\\n\"}"
},
{
"type": "image",
"note": "[image: shown below]"
}
]

[Think]
**Fixing the prepared-table filter**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/fable-ver...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"312a25","wall_time_seconds":1.000708849,"session_id":47233,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.5 seconds
Output:
{"chunk_id":"321de0","wall_time_seconds":0.351251312,"exit_code":0,"original_token_count":327,"output":" rank tag\n 1 Action Roguelike\n 2 Bullet Hell\n 3 Roguelite\n 4 Vampires\n 5 Pixel Graphics\n 6 2D\n 7 Indie\n 8 Singleplayer\n 9 Casual\n 10 Arcade\n 11 Roguelike\n 12 Action\n 13 Local Co-Op\n 14 RPG\n 15 Controller\n 16 Score Attack\n 17 Retro\n 18 Dark Fantasy\n 19 Action RPG\n 20 Co-op\n group year n\n Shop Keeper 2023 6\n Shop Keeper 2024 2\n Shop Keeper 2025 25\n Shop Keeper 2026 171\nRoguelike Deckbuilder 2023 28\nRoguelike Deckbuilder 2024 45\nRoguelike Deckbuilder 2025 60\nRoguelike Deckbuilder 2026 113\n Idler 2023 93\n Idler 2024 117\n Idler 2025 249\n Idler 2026 593\n feature n r100_rate supported r100_oe\n controller 10378 0.260358 7534 1.731956\n 10_languages 7001 0.337380 5383 2.048504\n demo 8667 0.199838 6477 1.079553\nachievements_support 20299 0.235283 14211 2.707259\n selfpub 28219 0.107268 20494 0.565559\n currently_ea 4003 0.168124 3105 0.787769\n"}
The remaining checks reinforce the distinction between a useful correlation and an explanation. Developers with several moderately reviewed games do break through more often than those with only very quiet releases. Their breakout games also tend to be pricier and farther apart, closely matching Fable’s findings. But “longer-cooked” is still an inference: release gaps do not measure development time.
The content-count result survives stricter checks too. I found some counts describing simultaneous soldiers or enemy skills rather than player options, and some overlapping counts. After tightening the definition, larger advertised option counts still correlate with higher review totals. That is stronger evidence for his observation than for the claim that adding more content causes success.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"731bdc","wall_time_seconds":1.001104635,"session_id":76554,"original_token_count":142,"output":"{'games': 184664, 'valid': 128878, 'single_dev': 173335, 'no_dev': 248, 'multi_dev': 11081, 'date_override': {'1498570': {'date': '2022-02-17', 'original_snapshot_date': '2024-12-12', 'source': 'https://www.snk-corp.co.jp/us/press/2022/021701/', 'reason': 'Official launch announcement explicitly includes Steam on February 17, 2022. Snapshot date is not first Steam release. Time of day unavailable; override uses UTC midnight.'}}, 'source': '../2026-09-05/exports/games.parquet', 'source_sha256': '0aa12405402ea01846089c01944432d86c239bea22b5264476ac3ffe754274da'}\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport csv\nr=Path('stea...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"fc4f89","wall_time_seconds":0.000004943,"exit_code":0,"original_token_count":7,"output":"Saved 52 claim assessments\n"}
{"chunk_id":"6df48b","wall_time_seconds":0.000001335,"exit_code":0,"original_token_count":5,"output":"Passed 1024 checks\n"}
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/fable-verifi...)
Script completed
Wall time 0.0 seconds
Output:
{}
[Think]
**Reviewing global code**
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport csv,json,hashlib\...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"c81620","wall_time_seconds":0.00000344,"exit_code":0,"original_token_count":16,"output":"Claim assessments 52 manifest artifacts 69\nReport words 2925\n"}
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
Fable’s strongest descriptive findings largely hold up. I would substantially revise his claims about “proven whitespace,” historical launch momentum, the causes of success, and your personal success probabilities.
I assessed 52 finding families, read all four summaries and selected original methods, and wrote a separate analysis against our independently collected data. The full assessment, claim-by-claim register, and reproduction instructions are saved.
The current data is here:
- Session 5 catalog: catalog.sqlite, with the portable games.parquet export. It contains 184,664 game apps, including 128,972 marked released.
- Session 6 review histories: reviews.parquet. I used its primary comparison population: 15,445 surviving Steam-purchase reviews across 24 selected paid games.
- Session 6’s other work is in the sibling
continuation-2026-09-06,portfolios-2026-09-06, andbuild-destinations-2026-09-06directories.
The main market comparison contains 38,493 paid, non-explicit games released in 2023–2025. I tested Fable’s original formulas alongside fixed review thresholds, different tag cutoffs, developer weighting, and date/price comparisons. Current review totals remain unequal-age observations; only the selected review histories let us reconstruct actual arrival windows.

His prior-success finding is exceptionally robust. This is probably the strongest result in the original research.
Using one first 2023–2025 follow-up per developer name, and removing price from the outcome:
| Developer’s 2020–2022 catalog | Follow-up reaches 556 reviews |
|---|---|
| Includes a game with at least 556 reviews | 288/629 = 45.8% |
| Contains releases, all below 556 | 142/2,840 = 5.0% |
That is approximately a ninefold difference, independently reproduced.
Using his revenue formula instead, the corresponding known-price comparison gives 63.2% versus 9.2%, close to his later developer-weighted findings. The relationship clearly survives changing the dataset and removing the estimator’s price arithmetic. Underlying comparisons
His rejection of the “game five becomes a coin toss” story also holds. Among developer names whose first observed release was from 2015 onward, the proportion reaching 556 reviews is:
| Observed release | Reaches 556 reviews |
|---|---|
| First | 7.7% |
| Second | 10.0% |
| Third | 10.1% |
| Fifth | 9.4% |
| Tenth | 6.8% |
The fifth-game decomposition is particularly revealing:
| Largest current review count of an earlier game | Fifth game reaches 556 |
|---|---|
| Under 50 | 3/704 = 0.4% |
| 50–555 | 26/703 = 3.7% |
| 556 or more | 140/392 = 35.7% |
Fable was right that much of the apparent improvement with game count reflects which developers remain in the sample and what they have already accomplished.
However, “game count contributes nothing” goes beyond this evidence. Earlier successes may themselves incorporate learning. Conditioning on prior success does not isolate the contribution of practice, and a first recorded Steam release need not be someone’s first game. The decomposition defeats the simple motivational probability curve; it does not demonstrate that making games teaches nothing. Career curves
His correction for career censoring was also right. Our raw second-observed-game rate is 23.6%. Among first releases with longer observation:
| First release is at least… | Another release observed |
|---|---|
| Three years old | 33.0% |
| Five years old | 36.4% |
| Eight years old | 43.3% |
| Ten years old | 52.1% |
“Only one in five developers ever makes another game” confuses a current snapshot with a completed career.
His objection to dismissing one-and-done developers as noise holds too: one-title developer names account for 39.3% of 2023–2025 games reaching 556 reviews in the free-inclusive career sample. First recorded games account for 47.9%.
I also checked Sokpop directly. Simmiland is its second recorded Steam release, currently with 1,796 reviews. Fable’s correction—that substantial traction preceded Stacklands—is sound. Steam import order still differs from the actual order in which all those games were made. Continuation windows
His “climber” finding survives a more disciplined follow-up window. After entering a catalog state with at least two releases, developers with two or more moderately reviewed games—50–555 reviews each, without a larger game—produce a 556-review game within three years in 6.7% of cases. For catalogs consisting entirely of sub-50-review games, it is 0.6%.
Among those who release again during that window, the figures are 11.3% versus 1.4%. This closely resembles his “one in eleven” observation.
The accompanying breakout pattern also repeats:
| Following moderate prior traction | Later game reaches 556 | Does not |
|---|---|---|
| Prices upward by at least 25% | 58.8% | 33.8% |
| Median next price | $14.99 | $5.99 |
| Median release gap | 619 days | 260 days |
| Changes primary tag | 82.7% | 73.9% |
The price and gap differences are substantial. The genre-change difference is less dramatic than his account suggested.
His phrase “longer-cooked” remains an interpretation: the interval between releases does not measure development time. It can include overlapping work, employment, experimentation elsewhere, or inactivity. Climber results
Long gaps remain associated with stronger subsequent releases, but “followers never decay” is unsupported.
Among paid-game transitions with an earlier 556-review work, another 556-review outcome occurs in:
- 29.1% after gaps under six months.
- 54.1% after gaps of four years or more.
Using only one latest qualifying transition per developer gives 25.3% and 52.9%. Date/current-price comparisons reduce the difference, but the long-gap group still does relatively well.
This corroborates the absence of a simple universal “you waited too long” pattern among observed returners. It cannot establish that the same developer would lose nothing by waiting. We observe the people who returned and the projects they chose to return with. We do not observe the counterfactual project released sooner, or everyone who never returned.
Portability also survives more modestly. Among stronger-prior developers, keeping versus changing the primary tag gives 43.6% versus 42.8% reaching 556 reviews with one latest transition per developer. That is a negligible simple staying advantage. A title-based sequel screen gives 58.0% versus 41.7%, supporting a separate sequel association.
After only quiet earlier games, changing the primary tag predicts reaching 50 reviews at 17.8% versus 12.1% with developer weighting. Fable’s pivot association survives, but its dramatic release-weighted version overstates the difference. Tags also remain an imperfect description of what actually changed mechanically. Gaps, migration, pivots
His cadence and persistence conclusions need qualification. Conditioning on ever having a 50-review game roughly reproduces his preferred cadence ordering: career-hit rates are 41.0% for one release every one-to-three years, 35.2% at one-to-three releases annually, and 33.0% above three annually. The claimed halving for the fastest group does not reproduce.
Without that outcome-defined “seriousness” filter, the corresponding figures are 23.6%, 24.4%, and 22.8%. The filter changes the story considerably. These tables do not establish an optimal production schedule or an income floor.
His positivity/continuation null does reproduce: three-year continuation is 26.7% for first games with at least 85% positive reviews versus 26.9% below 70%, requiring at least ten reviews.
But first-game response scale does distinguish continuation: 21.3%, 30.3%, and 28.5% for low, moderate, and 556-plus outcomes. Therefore “outcome doesn’t matter; persistence is a trait” is too strong. No personality trait was measured.
The broad first-rung ranking does hold: Horror, Visual Novel, and Simulation first releases compare favorably with Action and platformers. For example, 46.3% of Horror-tagged first releases reach 50 reviews, versus 25.5% for Action and 17.7% for Precision Platformer. These remain overlapping labels on first observed releases. Cadence, continuation checks
There is a concrete measurement defect in the launch-momentum work. I inspected the original scripts rather than merely disagreeing with their interpretation.
For monthly histories:
m1is the first nonempty calendar bucket, not the first thirty days.m3sums the first three nonempty buckets, after zero buckets have been discarded.
A late-month release therefore gets a shortened first window. A sparse game’s third nonempty month may arrive substantially later than day 90. Weekly histories use another clock.
Our independently collected review timestamps show the practical difference:
| Game | Partial launch calendar month | Actual first 30 days |
|---|---|---|
| BYTEPATH | 60 | 71 |
| SNKRX | 109 | 590 |
Fable’s reported 117 is SNKRX’s launch-calendar histogram bucket, not a full first month. The additional 117-versus-109 discrepancy concerns the histogram’s review population versus our Steam-purchase records.
Across our 24 games, the median launch-calendar fragment is only 16.7 days. Lost At Sea has four reviews by day 90 but six across its first three nonempty months.
This does not make launch momentum uninformative. It means his precise momentum buckets, slow-start classifications, tail ratios, and personal projections require reconstruction before being trusted. Historical window checks
There is also substantial look-ahead in current predecessor counts. Five of our 18 selected transitions change Fable’s low/moderate/556-plus prior-best band when we reconstruct what existed before the subsequent launch. Before Azalea, Horizon’s Gate had 231 surviving reviews, rather than its current 1,212. Before The Last Wind Monk, The Inner World had 199 rather than 920.
Fable did attempt historical sensitivities in some analyses; this is not a claim that he ignored chronology throughout. But those adjustments do not remove the calendar-bucket problem or validate every career table.
Equal-age comparisons can also change the interpretation of apparent decline:
| Earlier → later game | Day-90 reviews |
|---|---|
| Horizon’s Gate → Kingsvein | 166 → 165 |
| Say No! More → Reignbreaker | 235 → 244 |
| Let Them Come → Onslaught | 88 → 178 |
| Bad Dream: Coma → Afterlife | 91 → 17 |
The first three look much weaker using current totals, while the fourth remains substantially smaller at equal age. These are selected examples, not a market-wide success estimate.
Consequently, I would withdraw the apparent precision of 40–60%, 74%, or 94% personal success forecasts. A selected developer class, an estimated median launch count, and a conditional outcome table do not combine into a calibrated probability for your next game.
His revenue conversion cannot support the precision placed on it. The formula reviews × 35.9 × current price was calibrated on two games by the same developer. That does not establish accuracy across genres, countries, prices, and eras. Its 25–55 range is not a measured market-wide confidence interval. Similarly, 556 reviews does not establish 25,000 buyers.
The price gate is partly built into the outcome: approximately 466 reviews at $2.99 cross his $50,000 line, versus 93 at $14.99.
Nevertheless, the price association is not entirely arithmetic:
| Current price | Reaches 100 reviews | Reaches 556 reviews |
|---|---|---|
| Up to $5 | 5.6% | 1.3% |
| $5–7 | 12.8% | 4.0% |
| $7–12 | 16.4% | 5.3% |
| $12–20 | 36.5% | 15.1% |
The gradient survives broad date, tag, and description-length comparisons. Different higher-priced games have stronger review outcomes. What remains unmeasured is what raising the price of the same game would do.
The graphics and scope explanations are not independently resolved by our data. Reviewer playtime measures engagement among selected reviewers, not production scope. Current price may itself follow success. These limitations prevent treating the observed gradient as a repricing experiment. Price comparisons
The market expansion and concentration findings hold, with an important amendment. Recorded releases approximately doubled: 10,181 in 2021 versus 20,253 in 2025. Among paid non-explicit games, the sub-ten-review share rose from 45.4% to 56.2%.
But the absolute number reaching 100 reviews also rose, from 1,530 to 2,277. Growth did not go exclusively into failures.
His roughly flat “median reviewed game” scale is recognizable under his formula: about $13.6K for 2019 versus $11.8K for 2025, conditional on ten reviews and an observed price. It is neither measured income nor the median across all releases.
The top 5% of released games account for 93.1% of filtered reviews. Concentration is clearly real; exact unit-sales and revenue concentration remain unverified. Historical delisting and unequal accumulation time qualify the cohort comparisons. Supply, concentration
Several genre findings survive, but some labels were doing too much work.
Using twenty returned tags for 2023–2025:
| Family | Games | Reach 100 reviews | Relative to quarter/price expectation |
|---|---|---|---|
| Roguelike Deckbuilder | 412 | 36.9% | 1.76× |
| Online Co-Op + Roguelite | 173 | 45.7% | 1.92× |
| Auto Battler | 657 | 22.4% | 1.50× |
| Action Roguelike | 2,966 | 17.1% | 1.20× |
| Arcade | 6,445 | 9.0% | 0.63× |
| Precision Platformer | 1,538 | 6.3% | 0.54× |
| Minimalist | 3,290 | 9.6% | 0.98× |
The weak arcade/platformer and strong deckbuilder observations are corroborated. Broad Minimalist membership, however, becomes almost ordinary after accounting for date and price. Narrow seven-tag membership is weaker, so this is definition-sensitive—not evidence that minimalist presentation intrinsically condemns a game.
Online co-op/roguelite also remains favorable against each constituent separately. Removing its three largest titles leaves 76/170 above 100 reviews.
Local co-op/action roguelike behaves differently: 28/133 reach 100 reviews, and it produces about 0.83 times expectation against other action roguelikes after date/price comparisons. It is not a demonstrated substitute for the stronger online co-op result. Neither dataset measures implementation effort. Tag results, constituent comparisons
The whitespace claims split into genuine associations and artifacts of narrow definitions.
- Card Game + Base Building: His 6/8 result reproduces exactly with seven tags. With twenty tags, 22/43 reach 100 reviews, remaining 19/40 after removing the three largest games. It still compares favorably with both constituents. But “zero 2026 entrants” becomes 18 January–August entrants. Only two reach 100 reviews, and neither also meets 80% positive. There is a real older association, with weak young-cohort confirmation.
- Roguelite + Mystery: Five of nine reach 100 using seven tags; widening to twenty gives 17/111, roughly ordinary overall and weaker than constituent comparisons. This opening is not robust.
- Retro + Idler: The favorable association holds better: 40/119 reach 100 reviews and 30/119 also meet 80% positive. But 131 newer members make “nearly empty” untenable.
- Loot + Idler: 35/104 reach 100, but only 12/104 also meet 80% positive. Its review-volume association is stronger than its positive-reception result.
The statistical discovery procedure also needs correction. Applying Fable’s rare-pair screening rules to our data produces 10,804 eligible comparisons, 347 nominally significant formula results, and only three below .05 after Benjamini–Hochberg multiple-comparison adjustment.
The named card/base-building, retro/idler, and roguelite/mystery cells do not survive that adjustment. This does not erase the broader card/base-building evidence. It means that one small, selected p-value was insufficient to call a niche “proven whitespace.” The tests’ overlap and estimated comparison rates impose further limitations. Multiplicity check
The supply waves and tag-blindness observations are real; the “crystal ball” remains unproved. Seven-tag Idler supply in the first half rose from 93 in 2023 to 593 in 2026, close to Fable’s 91-to-604 finding. Broader Shop Keeper membership rose from 40 in 2025 H1 to 250 in 2026 H1.
However, younger cohorts having fewer current reviews does not independently prove saturation.
His concern about format discovery through tags is especially well corroborated: Vampire Survivors lacks Bullet Heaven even among its twenty returned tags.
The luck-machine examples also have substantial independently verified response: Nubby’s Number Factory has 18,062 reviews, CloverPit 24,589, Slots & Daggers 7,361, BALL x PIT 24,571, Scritchy Scratchy 14,898, and RACCOIN 4,202. R.E.P.O., PEAK, and RV There Yet likewise have very large review totals.
Those verify repeated successful examples. They do not supply the unsuccessful-game denominator required to establish the dominant opportunity. The claim that format triggers predict durable waves while experience triggers do not requires historically frozen classifications and subsequent tests. A taxonomy assembled after seeing outcomes cannot establish that predictive ability. Supply checks, named cases
The numerical-content finding survives serious qualification. Numeric option claims appear in 6.5% of games clearing Fable’s formula versus 3.2% of sub-ten-review games. Within build-tag games, it is 12.8% versus 7.3%.
The association survives date, price, primary-tag, and description-length comparisons. But a description audit found:
- “1,000 units” describing simultaneous soldiers rather than configuration options.
- Hundreds of enemy skills rather than player abilities.
- Per-character and total ability counts overlapping.
- Unlike systems being summed into a supposedly meaningful total.
I therefore tested a stricter rule using the largest individual count, excluding unit counts and nearby enemy/monster contexts. For 300-plus claims, it finds 128 games; 78 have adequate detailed comparisons and produce 1.76 times the expected 100-review count.
That supports a real association with advertised options. It does not establish that nominal content quantity equals build depth or that adding items causes success. Definition sensitivity
His description-vocabulary findings also largely repeat. After those controls, “synergies,” “playstyle,” “build,” and “expand” remain favorable; “levels,” “score,” and “reflexes” remain unfavorable. “Experiment” becomes nearly ordinary.
These are associations between products, positioning, and response. They are not evidence that replacing words in otherwise identical copy improves demand.
Feature correlations and the seasonal-sale result hold up. Controller support and ten or more languages produce approximately 1.73× and 2.05× the expected 100-review counts in available detailed comparisons. Demo presence is much weaker at 1.08×. That supports Fable’s distinction.
Achievement support also correlates strongly, but our catalog does not contain achievement counts, so it cannot verify a thirty-achievement rule.
For seasonal sales, the result is substantial: 7.7% of games released during sales reach 100 reviews, versus 16.6% on ordinary dates outside adjacent-week groups. Comparing within year, month, price band, and primary tag gives about 0.52× expectation, with adequate support for 1,783 of 3,079 sale releases.
The week immediately before a sale is near ordinary expectation under those controls. September is approximately 0.95× expectation, losing its special premium. Thursday retains a modest favorable association.
This used Valve’s actual 2023, 2024, and 2025 schedules. Launch-date selection still prevents treating the association as a randomized penalty for moving a particular game. Timing results
His “quality cannot rescue cold starts” conclusion is not established by the design. Review positivity measures recommendation among selected buyers and reviewers. It is not interchangeable with quality. Launch momentum may itself be one route through which quality affects response; conditioning on momentum cannot rule that route out.
There is also a historical-sentiment problem: 143 of our 4,070 reviews created within ninety days were updated after that window. Updates do not prove recommendation changes, but present-day records cannot automatically be treated as frozen original sentiment.
Valve says review scores above 40% do not directly affect algorithmic visibility. That narrow mechanism is compatible with effects on buyer conversion, recommendations, or word of mouth. It does not support the broader dismissal of quality as a source of discovery. Valve’s review documentation
Several remaining claims cannot receive an honest independent numerical verdict from our existing data.
| Claim family | What this investigation establishes |
|---|---|
| Art-tier success probabilities | Fable’s original report correctly identifies an outcome-balanced sample. Its 74% is not a catalog probability. No independent visual rescoring was performed. |
| Graphics versus scope | Neither causal explanation is isolated. Reviewer playtime is not development scope. |
| Chinese/Russian/Japanese demand | Localization-supply patterns partly repeat—for reviewed Idlers, 75% Chinese and 51.8% Russian support. Demand shares and localization returns are not independently measured; “Japanese is dead weight” is unsupported. |
| Long tails and increasing launch spikes | Our 24 selected histories expose measurement issues but cannot reproduce catalog-wide prevalence. |
| Update cadence and revival probabilities | We lack independent broad update/news histories and comparable dormant-game populations. The 5.6% and 14.3% figures remain unverified. |
| Next Fest traffic effects | Demo presence can be tested; festival traffic and its incremental effect cannot. |
| Early Access and graduation | Current EA status selects games still in EA. Complete entry/exit histories are needed to compare direct releases, graduates, and graduation spikes. |
| Complaint maturity and AI-art rejection | Selected helpful/negative English reviews can reveal experiences, but do not measure prevalence among buyers or the effect of fixing a particular complaint. |
The original work is therefore useful as a source of specific descriptive hypotheses, several of which now have strong independent corroboration. Its personal forecasts and causal prescriptions deserve substantially less confidence than their numerical presentation suggested.
The saved investigation includes all 52 verdicts, underlying membership tables, scripts, and the inspected chart. Mechanical verification passed 1,024 checks. No new bulk game collection or image downloading was needed.
<oai-mem-citation> <citation_entries> MEMORY.md:45-49|note=[Located and then verified the independent catalog and source limitations] MEMORY.md:80-85|note=[Located the earlier build analysis and verified its retained evidence] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>

Based on everything you've read from all previous sessions and what you know about me, what next research directions do you think would be interesting?
I’ll look back at your research interests and the questions these sessions left open, then suggest directions that would add something beyond another genre ranking.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Reviewing prior documentation**
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\np=Path('a327ex-site/logs/...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"93dc69","wall_time_seconds":0.000002903,"exit_code":0,"original_token_count":875,"output":"**Public writing and the move from genres to careers:**\n\n- Read public writing on small games, SNKRX development, creativity, competition, luck, Offerings to God, Writing and Gamedev, authorship, reusable work, and games as places. Relevant context included BYTEPATH (2018), SNKRX (2021), It Follows, technical infrastructure, and the owner's broader books-and-games ambitions.\n- Distinguished small production from a small experience: short production cycles can serve experimentation and skill, while games remain spacious to explore. Reusable systems and artistic capabilities are outputs that Steam review statistics do not measure.\n- Proposed seven directions: developer portfolios; time and attention a game asks from players; shared participation around single-player games; game lifetimes; catalog expansion and variety; highly engaged players' expressed experiences; and substantial work beyond familiar English-language references.\n- The owner selected portfolios. The other proposed directions remained options, not unrequested follow-on projects. Public writing informed the research questions without rewriting the owner's prose or turning the study into a revenue-maximization prescription.\n\n\n> Let's continue on the Steam Market Research, read only the latest log summary (Steam Market Research 5), do not read previous ones. Get acquainted with the existing work and data, and let's continue on fruitful avenues of analysis. Before starting any analysis itself, tell me what your plan is.\n> Let's step back and get away from trying to look at any genre too specifically and try to answer other types of questions that the data might support. Any ideas? Read about myself, who I am, what games I have released, where I am in my career, some of my ideas on the website (blog posts, messages, etc) to get a feel for who I am and what kinds of things I think about and what would likely benefit me to know from all this research.\n> 1, 3 (I believe that despite BYTEPATH and SNKRX being highly distant as you mentioned, they're both build-heavy games, and that is a feature of me as a developer that allows me to make a game in ANY genre and people who are my followers will thus still like it, that's what I believe anyway, but I have not at all tested it), 4. These seem interesting to me.\n> One final exploration then from this session, do not run this exact question as an analysis, but provide me back with directions that would illuminate the general question in a way that you can phrase and analyze things better from the data itself. Which kinds of genres are more susceptible for \"build-heavy moves\" that are currently not being served? Which genres where build heavy is common and expected, which ones do these kinds of games do well in, which ones they don't, which ones the mix is unexpected, which ones is the mix unexpected and they do well and poorly, etc, etc. Essentially variations of, since what I like is build-heavy games, where can I more usefully export that trait of me and provide more value to the market? Do not start the research in your next turn before giving me a turn back, instead give me options for specific avenues of research as you've been doing so far.\n> Great, thank you. Let's end this session, name it Steam Market Research 6.\n\nPUBLIC POST FILES\na327ex-site/posts/indiedev_creativity.md\na327ex-site/posts/nfts_status_creativity.md\na327ex-site/posts/offerings_to_god.md\na327ex-site/posts/small_games.md\na327ex-site/posts/writing-and-gamedev.md\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"cat a327ex-site/posts/small_games.md a327ex-site/posts/writing-and-gam...)
Script completed
Wall time 0.0 seconds
Output:
{"chunk_id":"4ccdae","wall_time_seconds":0.00000265,"exit_code":0,"original_token_count":11151,"output":"Warning: truncated output (original token count: 11151)\nTotal output lines: 345\n\nTitle: Thoughts on making small games\nDate: 2021/01/22 12:00\nTheme: old\nLink: /posts/small_games\nTags: indiedev, strategy\nThumbnail: /media/posts/small_games/_thumbnail_small_games.png\n# Thoughts on making small games\n\nI notice more people talking about making small games. As I'm also currently focused on this goal, I thought it would be good to write something about it. \nI think that indiedevs in general have a few misconceptions about the problem and aren't thinking about it clearly, and in this post I'll go over that argument.\n\n## The meaning of small\n\nThe first thing to notice is that the word _small_, when used in the context of making games, is conflating multiple meanings into one word. The first meaning is related to how long or how many people it took to make the game. The second meaning is related to how long it takes for players to go through the game.\n\nWhen indiedevs use this word to describe their games, they're generally referring to both meanings at the same time, or to one of them in an interchangeable way with the other.\n\nFor instance, [this great talk](https://www.youtube.com/watch?v=wb22xeh_VqM) (watch it in its entirety, I highly recommend it) goes over techniques for making games every month. However, it implicitly assumes that because this development duration is small, the games also will be fairly small for the players. This is illustrated in the first point where one month games are referred to as “concept games” rather than real games.\n\n::youtube wb22xeh_VqM\n\nAnother example of a similar assumption is in [this article](https://howtomarketagame.com/2021/01/18/can-you-make-a-living-from-small-games-on-steam/), which goes over a game made in 4 months. Similarly, it is implicitly assumed that because the game was made in a short timeframe, the game would also necessarily be fairly small from the perspective of the players. (1 or 2 hours long)\n\nIn both of these cases you see the same error being implicitly made, which is that both meanings of the word small are the same thing, and this logically leads to the idea that if you make a game in a short timespan it must be the case that the game will not last a very long amount of time to the player. These are just two examples, and they're simply illustrative because this error is made by pretty much every indiedev talking about making small games right now.\n\n## The game scope chart\n\nTo further illustrate this point, you could look at this problem as a chart with four quadrants. On the horizontal axis we'll have one meaning of the word, on the vertical axis we'll have another. For clarity's sake, we'll refer to the meaning that pertains to development time as _small/big_ and to duration for the player as _short/long_.\n\n::image /media/posts/small_games/_game_scope_chart.png\n\nWe generally don't care about the top two quadrants of the chart. Those are related to games that have big development times or teams, and that's not what people are referring to when they talk about small games. We're then left with the bottom two quadrants, and here we have a spectrum that goes from small short games to small long games.\n\nMost indiedevs inherently assume that because a game is small, it has to be short. I reject this notion entirely. I think the quadrant of small long games is fairly unexplored, and it's useful to think about if this is a valid quadrant at all.\n\n## My experience with BYTEPATH\n\nThe only game I've released so far is [BYTEPATH](https://store.steampowered.com/app/760330/BYTEPATH/), and it falls under what I would consider a small long game.\n\nIt's small because it was made in about 4 months by me alone, and it also has a fairly small scope. By the nature of its gameplay it's essentially a single screen game with lots of upgrades, like one of those old flash games.\n\nAnd it's long because it feels like a long game. Despite being made in just 4 months, it has a skill tree with about 900 nodes, it has 10 different characters, around 40 classes… Essentially, it's what I also like to call a _spacious_ game.\n\nYou ever listen to a song or an album for hundreds of hours? I'm currently doing this for [Thank You Scientist's Terraformer](https://www.youtube.com/watch?v=QR2NizQ30Qc&list=OLAK5uy_n0CDrlM1UhGTRw5xmw8Aa8PU4zFOfzlXY&index=1) and it's crazy how despite listening to it for so long I still find new things in each song that I didn't notice before. This album is a spacious album. It can be thought of as this large space, and as you listen to it, you're exploring it, mapping the environment, finding new walls, rooms, objects, that you didn't know were there before.\n\nGames can also be like this, and long games are generally like this. BYTEPATH certainly is because it was made to be so, as the goal of the game is finding new builds to play, to the point where the main gameplay itself is kind of irrelevant.\n\nAnd because of this I think BYTEPATH did way better than I expected it to do. It's also important to note that despite me calling spacious games long games, they don't necessarily have to be played by most people for a very long time. Here's what BYTEPATH's hour distribution looks like:\n\n::image /media/posts/small_games/_bytepath_hour_distribution.png\n\nThis is definitely not impressive but it's also not too bad. And I know for a fact there's at least one guy (I saw him in the game's reviews) who played it for over 100 hours. When games feel spacious they have the possibility of keeping people playing for a fairly long time, which increases the chances that the game will do well.\n\n## Small long games\n\nThe most important point here is that small long/spacious games _DO NOT_ need to take a long time to be made. If I were to make a game like BYTEPATH again I'm fairly confident I could do it in 2 months, and it would be a significantly better game too, simply because it's actually not that hard. (I'm 100% not some kind of disciplined productivity God or anything)\n\nWhen developers focus on making small games, this implicit notion that the games also have to be short is wrong. You can make small long games, and because of the way the market works, those kinds of games will tend to do better than short games. I'm not the first person to notice this:\n\n::youtube sIqz5xmQKnc\n\n## Marketing\n\nAnother issue that happens often is that because developers are making small games that they feel are sort of worthless, they don't really do a good, serious job at marketing them. For instance, the example game from [this article](https://howtomarketagame.com/2021/01/18/can-you-make-a-living-from-small-games-on-steam/) was marketed on Twitter only.\n\nAnyone who has released a game knows that twitter is notoriously poor at driving sales, and that sites like reddit are much better. Would it really have cost these developers that much time to make a few posts about their games on reddit? No. And I know for a fact that a game of such visual quality would have done very well on multiple subreddits.\n\nSo a lot of the conclusions people reach about their efforts with smaller games, and the conclusion the author reaches in that article as well are pretty pessimist and in my view mistaken. I think that most devs making smaller games would benefit tremendously from taking making their games somewhat more spacious and from thinking more clearly about how they're going to market it.\n\n## The right development duration\n\nAnother thing to consider is what's the right timeframe for making a small game. One of the videos above focuses on 1 month per game, and both my previous game and the game from the article above took 4 months. I think the right duration is between 1 and 2 months.\n\nThe reasons for this are fairly simple. If you're making a 1 month game you probably want something with a scope such that it can be finished in 2-3 days, and then you spend the rest of the month polishing it in various ways. This keeps your game fairly focused and it's a good strategy if you want to drastically increase your chances of actually finishing and releasing the game.\n\nIf you're making a 2 month game this affords you a little more time such that you can actually start adding some meat to it and make it more spacious. But I personally think that it's too easy to start getting lost in scope-creep if you give yourself much more time than 2 months, so that would be my limit.\n\nCurrently that's what I'm aiming for with the game I'm making and I already overscoped myself slightly (meaning I should have chosen an even smaller game), so I think it really pays to keep this duration limited like this unless you're already more experienced and know you can avoid making these kinds of mistakes.\n\nWhat also matters is how much money you can expect to make off of these games. BYTEPATH for instance made about $10k over its lifetime, and if I were to release a game like BYTEPATH every 2 months and they all did half as well as it did, then that would be considered \"making a living from small games on Steam\".\n\nBut that's largely because I live in Brazil and that amount of money here (even accounting for cuts and taxes) every 2 months would be a pretty comfortable salary. If you're in more expensive countries then perhaps that isn't such a good strategy, so this timeframe consideration really depends on your personal situation as well.\n\n## Luck\n\nTo finalize this fairly rambly article, one of the reasons people cite for making small games is to hedge their bets. The argument goes that if they make lots of games, chances are that one of those games will succeed wildly and cover for the costs of the other failures. More specifically [this article](https://web.archive.org/web/20181230040436/https://www.gamasutra.com/blogs/DanielCook/20150415/241145/Minimum_Sustainable_Success.php) said that using this famous graph:\n\n::image /media/posts/small_games/_game_lottery.png\n\nI similarly reject this notion. In my opinion you shouldn't make small games for any reason having to do with what that article says. When you're approaching things from this economic portfolio theory approach you're mirrorring the biases of our society around the notion of luck and chance and it more likely than not will sap your motivation to work on things without you even realizing it.\n\nAdditionally, for a single indie developer like me, I don't think it's actually that hard to get a game to sell, say 5000 copies. And if you can do that consistently you can definitely make a living off it. Maybe I'm arrogant and I don't know what I'm talking about. I probably am, after all I've only released one game. But I'd rather be arrogant like that than view things from this lottery/luck oriented approach that so many people seem to fall prey to these days.\n\nThis is an insidious mindset that subconsciously takes away your agency and your responsibility for your actions, it takes away your motivation for working on things at all, and it also makes you learn less from each project because if you can just chalk things up to chance, why improve at all? There are many reasons to go for small games, but doing it because of the idea that the market is a lottery, or that things are highly influenced by luck or chance, is a wrong one.\n\nAs was best said by someone way smarter than me, [you're not a lottery ticket](https://www.youtube.com/watch?v=Kuc6pBZ-Q0I):\n\n::youtube Kuc6pBZ-Q0ITitle: Writing and Gamedev\nDate: 2026-01-18 22:41:18\n\nThree months after releasing SNKRX I had a vision. An alien vision was downloaded into me, fully formed, out of nowhere. It was very specific and immediately it made me cry. For an entire month, whenever I thought of it, I'd cry. If I thought of it while listening to [Tomorrow by Kevin Penkin](https://www.youtube.com/watch?v=UBz-8TGVN8k) I'd cry even harder.\n\nSomething like this had never happened to me before. I've read stories of artists talking about having such strong visions, but I always thought they were exaggerating. And then it happened to me. When something like this happens, you have to respect it. I believe I'm a [vessel](https://a327ex.com/posts/self_expression_vesselization) for ideas that come to me from above. So, in religious terms, this is literally God speaking to me. I can't ignore it.\n\nFor the next three years I built an elaborate story around that vision. My goal was to construct a narrative that would maximize it, so that when others reached it, they'd feel it with the same intensity I did. I built a story backwards from that moment, and it ended up having seven parts. The vision became the climax of part six, with part seven being the final showdown that concludes the whole thing.\n\nBut I never felt like I had enough to actually start making it real. That changed at the end of 2024. I had a dream, and from it came a simple idea that eventually became the beginning of the series. Suddenly, I could see a path forward.\n\nThe idea from the dream made it clear that the seven stories also needed to be games, merged with the books in specific ways. The main structure is t…4651 tokens truncated…ffort shitpost - made about it. Part of this is due to Steam’s fairly lax game acceptance policy and overall success as a platform, which has made indie gamedev more viable as a career and thus attracts more developers who will go on to make more games about more subjects.\n\nTechnically indie games have also progressed. It’s now easier than ever to make games, and increasingly it takes less effort to make something that looks good and runs well on multiple platforms. You can also clearly see the group’s technical progress.\n\nIf you look at the quality of technical discourse around indie gamedev (for artists and programmers alike) it has definitely increased, as a result of both more experienced developers sharing their advice, but also people just having had more time to converge on better solutions for common problems. This has naturally led to an increase in technical quality for indie games as a whole. There are still lots of areas that remain largely unconquered, like say RTSs or MMOs for indie programmers, but eventually those will become easier as well.\n\nCreatively, however, indie games have not progressed that much. One way to look at this is to consider the types of games that succeed on the technical vs. creative categories.\n\nMost games currently succeed on technical ability. They’re games that look good, that are programmed well, that feel good to interact with, and that have lots of attention, effort and time (generally 3+ years) spent on making sure that these elements are executed well. Gamers generally reward games that are produced with a certain standard of quality, and achieving this standard is hard, so this is the safest category to be in.\n\nIf you make games that have high technical quality, it’s very likely that you will see success. For instance, there doesn’t exist a world where a game that looks like [Cuphead](https://store.steampowered.com/app/268910/Cuphead/) doesn’t see some sizable amount of success. There aren’t many games that look good like that, and so it just stands out on its technical quality alone.\n\nGames that succeed on creativity alone are generally the opposite. They’re likely made by amateurs, and thus will have low technical quality. They won’t look that good, maybe they won’t run that well, maybe they will even be lacking on juice, but something about their design will grip people despite all those faults.\n\nBy its nature you would expect that those games would exist in lower numbers than successful games in the technical category, which is largely what happens in reality. But what you wouldn’t expect, if the creative category was being properly explored by indie devs, would be for these creatively successful games to succeed on fairly small creative contributions.\n\nWhat I mean by this is the following: look at a game like Vampire Survivors, or even my own SNKRX. These are games that have succeeded on the creative category - their technical merits are partly dubious, but they’re definitely addicting. However, their creative contribution is not actually that involved. Both games can be summarized as “auto-attacking + build-making” games, which is just putting two things that already existed together.\n\nThere’s a lot to how exactly you put two things together, but it really shouldn’t be this easy to succeed on creativity alone after 10+ years of experimentation, if indiedevs had been properly exploring the creative dimension. You can repeat this exercise for quite a few types of games and find the same results. Which can only mean one thing: indiedevs haven’t actually been exploring the creative dimension properly. What have they been doing instead? Well, the answer to that has a lot to do with\n\n## Agreeableness\n\nThe main reason for the slow progress of the creativity dimension is the fact that most indiedevs are too agreeable. They care too much about other people’s opinions, and this deep caring dooms them, as it means they care about social costs, and as previously stated, caring about social costs means that you can’t experiment.\n\nIf you care too much about reviews, likes, your reputation, and all the other status oriented things that come with making indie games, you are inherently tying yourself down to other people, and this will have a negative effect on your creativity. Games that win on creativity tend to come from amateurs because haven’t won yet, they have no status to lose, so they will more easily take chances on wild and silly ideas.\n\nThe video below explains this argument very well. The main difference is that this guy is talking about geniuses, but for the context of this discussion you can swap “genius” for “creative indiedev”, as you don’t really need outlier high IQ to make meaningful contributions to indie games (although it probably helps). Everything else he says though applies perfectly:\n\n::youtube Bf821SFBGcA start=\"548\"\n\nSo the solution to creative stagnation is simple: become more disagreeable. This is easier said than done for people who are naturally agreeable, but being aware of it at least is a first step. Below are a series of things you should consider:\n\n## Status\n\nAs an indiedev you should not care about reviews, likes, your reputation and basically anything having to do with maintaining your status. Not caring doesn’t mean you have to ignore everything, quite the contrary, you should expose yourself to as many comments around your games as possible, but it means that your emotions have to be neutral.\n\nA negative review shouldn’t make you feel sad for a day or multiple days. A positive review shouldn’t make you feel happy for a day or multiple days. If you feel anything at all, your emotions should be punctual and brief. Other people’s opinions should have no real, long lasting sway over you.\n\nFor instance, if someone you kinda like and respect on twitter follows you and that makes you feel really good, it means you should probably turn the retarded schizoposting up to 11 for a while because if they can’t handle that it means they’ll unfollow you eventually, and better they unfollow now than later. That’s the kind of disagreeable instinct you need to have. Become ungovernable\n\n## Development time\n\nThe development cycles for your games should be short. Creative games win on creativity, not on their technical ability. If what you want to do is explore the space of games creatively then spending too much time on the thematic or technical categories is a mistake.\n\nNot only will it obfuscate which category is responsible for one of your game’s eventual success, most types of games made in 3-4 months can get their gameplay ideas across very well, so there’s no real reason to spend that much more time on it. This also has the additional benefit that you can iterate and try out more ideas at a much faster pace.\n\n## Post-authorship\n\nYou should believe in and practice the idea of [post-authorship](https://twitter.com/CharlotteFang77/status/1504552122431455241):\n\n::image /media/posts/indiedev_creativity/_indiedev_creativity_2.png\n\n::image /media/posts/indiedev_creativity/_indiedev_creativity_3.jpeg\n\nOne of the most common things I see among indiedevs, and this is especially true for artists, is that they view their games as extensions of themselves. They tie themselves emotionally to their games, such that criticism aimed at their game feels, emotionally, like criticism aimed at them.\n\nSimilarly, artists are much more likely to feel envious of others. If they see someone else with a cool and creative game their instinctive reaction is not “wow, that’s a cool idea”, but one of envy. This comes from a place of deep insecurity and from the misguided notion that games are a reflection of their creators. Seeing a cool game makes them think about how uncool their games are, which makes them think about how uncool they are, and so on.\n\nThe way to solve this is very simple: don’t emotionally attach yourself to your games. Again, easier said than done, but you should be aware that this is a bad pattern of behavior if your goal is being more creative.\n\nBy achieving this you will naturally be able to experiment more and take more risks because a game failing will not emotionally reflect poorly on you, just like a game succeeding will not emotionally reflect well on you. All games, both yours and other people’s, will just be the artifacts that they are, and you will be able to look at them in a more truthful way, unclouded by the poor judgement that comes with tying your identity to them.\n\nYou are the being that makes games, you are not any individual game. One exercise that encapsulates all these ideas neatly is the\n\n## Anonymous dev reset\n\nYou stop making games and posting under your current identity, be it your real name or a nickname, and you start a new, anonymous one, from scratch. You only take your skills with you, you can’t use any money or connections you made with your previous persona. Think of it as a new roguelike run.\n\nIf you are ready to kill your current persona, and start producing things under a new one anonymously, then it means you truly don’t care about status and that you genuinely want to try being more creative.\n\nAs this new persona, you can now try becoming more disagreeable without the social costs attached to it. If you speak your mind more, what’s really going to happen? You only have 4 followers on twitter from your first post on the #gamedev tag about the new game you’re making, right? So it’s fine.\n\nYou can also join more disagreeable gamedev communities, such as [AGDG](https://boards.4chan.org/vg/catalog#s=agdg), and start getting more into this mindset. For instance, you might find that the threads have quite a lot of low quality posts as it’s a fairly unfiltered place. But your ability to be emotionally unbothered by those posts is the exact same ability needed to be emotionally unbothered by negative reviews. So practicing this is a good way to actually become more emotionally detached from pixels on your screen.\n\nSimilarly, you might find that as you grow your account and release more games (with low dev duration) that those games are succeeding or not based on their creative qualities above all else. And as some of these games may find big successes, maybe even higher than anything you’ve made before, you’ll realize that things like luck and other excuses people use are just not real. Another very disagreeable belief that naturally spirals out into more disagreeable ideas which I covered in previous posts.\n\nBecause your games have short dev cycles, you’ll also naturally feel less attached to them. If you do things like releasing all their source code + art + maybe even IP on permissive licenses, that will only increase the detachment.\n\nAs you experiment more and eventually succeed more you will also gain more confidence in your abilities, which will make you a less insecure person in general. Envy comes from insecurity, so as you become more secure, you should also becomes less envious, which feeds back into attaching yourself less to your games, which leads to better decision making, and so on.\n\nThis way you can get into a very good and virtuous cycle where you’re experimenting more, increasing your creative skills, releasing more and more games, caring less and less about other people’s opinions…\n\nAnd eventually you will reach an enlightened state of creativity where you become a being of pure light, zeroes and ones flowing in and out of your chakras, visions of a dead and ancient past flashing incessantly, an alien energy enveloping and devouring the earth, constantly sucking out of it a stream of life into itself, into existence, exhausting, poising and destroying it. Life, in every form, cries from mercy from it; in man for freedom from it, yet none can resist its irresistible pull to live and to live again… Ah, yes. You have finally become one with the collective unconscious. So what are you waiting for?\n\n## END\n\nThere’s this japanese indiedev/musician who didn’t want his songs to be too well known. He always named them something weird and unsearchable, but eventually they became popular anyway because they were so good. He couldn’t handle it due to apparent mental issues, and then he just disappeared.\n\n::youtube ok7UX3utzvI\n\n::youtube C9PFVo1FEwU\n\n::youtube d_T1StgldnM\n\nThere’s something really appealing to me about this story and this path. Not the mental issues, but the disappearing. The constant rebuilding from zero and trying something new again and again.\n\nAs the anime girl below says:\n\n> Destruction is not the antithesis of creation. Rather, it’s the prerequisite, and its ultimatum. We give birth to the new by a self-destructive act.\n\n::image /media/posts/indiedev_creativity/_indiedev_creativity_4.png\n\nSo start anew, become more disagreeable, become less focused on status and more focused on truth, and more creativity will naturally follow.\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"cat a327ex-site/posts/writing-and-gamedev.md\",\"max_output_tokens\":3...)
Script completed
Wall time 0.0 seconds
Output:
{"chunk_id":"45b9a2","wall_time_seconds":0.0000148,"exit_code":0,"original_token_count":4326,"output":"Warning: truncated output (original token count: 4326)\nTotal output lines: 108\n\nTitle: Writing and Gamedev\nDate: 2026-01-18 22:41:18\n\nThree months after releasing SNKRX I had a vision. An alien vision was downloaded into me, fully formed, out of nowhere. It was very specific and immediately it made me cry. For an entire month, whenever I thought of it, I'd cry. If I thought of it while listening to [Tomorrow by Kevin Penkin](https://www.youtube.com/watch?v=UBz-8TGVN8k) I'd cry even harder.\n\nSomething like this had never happened to me before. I've read stories of artists talking about having such strong visions, but I always thought they were exaggerating. And then it happened to me. When something like this happens, you have to respect it. I believe I'm a [vessel](https://a327ex.com/posts/self_expression_vesselization) for ideas that come to me from above. So, in religious terms, this is literally God speaking to me. I can't ignore it.\n\nFor the next three years I built an elaborate story around that vision. My goal was to construct a narrative that would maximize it, so that when others reached it, they'd feel it with the same intensity I did. I built a story backwards from that moment, and it ended up having seven parts. The vision became the climax of part six, with part seven being the final showdown that concludes the whole thing.\n\nBut I never felt like I had enough to actually start making it real. That changed at the end of 2024. I had a dream, and from it came a simple idea that eventually became the beginning of the series. Suddenly, I could see a path forward.\n\nThe idea from the dream made it clear that the seven stories also needed to be games, merged with the books in specific ways. The main structure is that the books and games are separate. You can read the books without playing the games, or play the games without reading the books. You can listen to the books while playing the games, as most of them will be low-cognitive demand kinds of games you can play while listening to or watching something else. But importantly, you can also read an interactive version of the book which contains the merged game elements in it. All these options are available, the last one being the most interesting.\n\nSo the plan is releasing a series of seven games + books. I can already make games, but I couldn't write, so I had to learn. That's what I set out to do for 2025.\n\n<br>\n\nI immediately had two good story ideas. One became It Follows, and another became the story I'll write after it. They're mirrors of each other, in a way. But they were good enough ideas that I felt strongly compelled to bring them into reality, to not do so would be to be a bad vessel.\n\nIt Follows started from the ending, that's the first piece I had. But really quickly after that, I had the first chapter. It was actually the very first thing I wrote, and it came out in like 1-2 hours, extremely similar to the final version. That's when I realized something about how I work.\n\nI *need* to have the beginning and the end. I cannot start working on a story without those two components. Later, it became clear that I also needed a third: a constraint. This wasn't obvious immediately because, by chance, It Follows' first chapter has a strong built-in constraint, the curse's rules. This wasn't the case with the next story, where I have the end and the beginning, but not the constraint.\n\nThe constraint is important because when you have the beginning and the end, you want to logically fill the middle so that one thing leads to another. It's easier to do that with a constraint than without one. More importantly, the constraint should be thematically sound with whatever the story implies. In It Follows' case, the curse's frules, combined with how the character goes from follower to followed and how that flips again at the end, turned out to be both thematically coherent and generative. In my next story, there's no obvious constraint yet that follows thematically from the beginning and informs the end in the same way, which is why I haven't started writing it yet.\n\nBut this explains why I suddenly saw a path forward with the whole series after I had the dream. It wasn't clear why at the time, because I didn't know I needed these elements, but once the beginning was in place, suddenly the whole series was locked in.\n\n<br>\n\nThe same was true for It Follows. Once I had those three elements, filling the middle was easy. Well, perhaps not easy, but logical. I tried a bunch of different middle ideas and eventually, unfortunately, landed on the concept of what I internally called the \"grindr descent.\" Unfortunate because I didn't really set out to write porn. But I had this ending I thought was really good, I had this beginning I thought was really good, and I'm practicing so I can bring this seven-part vision that was sent to me by God to life. To shy away from writing this story because it's icky would be wrong.\n\nI knew I wanted the story to have a downwards arc from the beginning, because this story is also practice for story one of the seven-part series. That story will have similar downwards motion (without the sex), so using It Follows as practice for that general structure made sense.\n\nIn any case, once the grindr descent idea came to me, it became clear that it would fit into the story well, it was super generative, a lot of things came out of it naturally. I convinced myself that a way to look at it positively is that if I could write porn scenes well, I can probably write any kind of scene well. Sex is naturally kind of non-confrontational, so compared to battle scenes that sort of unfold themselves naturally, it's probably harder to write them. I don't know if this reasoning is valid, but it's what makes sense to me.\n\nI did get feedback that multiple people skipped the sex scenes. But this is kind of mixed... It could be because they're poorly written, or because the story only becomes \"about porn\" at around chapter 3. This baits people into thinking the story is about this curse mystery, and suddenly it becomes this huge porn-fest with no warning beforehand. So I don't know how much of that skipping is bad writing on my end or failing at managing expectations. Either way, it's still a mistake on my part.\n\n<br>\n\nOn top of the grindr descent, another idea that was generative was using myself as the character. Initially, I did this to decrease variables. It's my first story, I'm learning, so I decided on a single POV with me as the character. When I had to ask \"what would this character do in this situation?\" I already had the answer. Of course, because of how the story ends, it also kind of had to be me all along.\n\nBut this turned out to be the right choice. A lot of the story's themes emerged naturally out of the clashing between myself and the plot. If I were creating a character from scratch, I don't think the thematic cohesiveness the story has would have happened as easily. I kind of got lucky. I'm a real person with real contradictions and drives, and the curse idea just happened to hit on my personality in a particularly right way. \n\nOne could say that I had this specific idea in the first place because of this, that it wasn't luck but my high levels of intuition working through me without my conscious knowledge. That's a reasonable explanation, but it still wasn't a conscious choice. I don't remember exactly how I had the idea for the ending and beginning... In any case, …626 tokens truncated…g, the concepts of beginning and end work differently. For games, the beginning is the moment-to-moment action, what you do every few seconds that constitutes a unit of gameplay. Getting this down, having it running and playable, or at least having a solid idea of what it'll be like when it is, constitutes the beginning.\n\nThe end depends on the game. For the build-heavy games I like to make, the end likely means \"what does an end-run build play like?\" When the game is almost being broken by the player, what does that look like? What does it feel like?\n\nAnd the constraint... in a story, it constrains the possibility space for the middle while being thematically generative. What does this in a game? If you have a game like SNKRX where the beginning is snake + each unit auto-attacks, and the ending is a crazy build that one-shots the screen (ideally in a fun way), what's the constraint? I think it would be how you get from start to end in an interesting way, so the shop between battles. Then, maybe the general form of the constraint is the \"meta loop.\"\n\nLike a good constraint should be thematically generative, a good meta loop should be ludically generative. Taking SNKRX as the example, is the shop reroll system generative? Kind of, it takes you from A to B. But are there better alternatives? Are there different meta loops that specifically make use of what SNKRX's beginning and end imply?\n\nI think something like a pre-run draft does this. The details of this draft do not matter, but the act of choosing units among many possible at the start, fits the game better than doing this spread out throughout the run. You could also imagine that, once you have this pre-run draft going, you could have \"shedding\" moments mid-game where you alter your powers in important ways. A meta loop focused on frontloaded power choice with moments of change available mid-run, feels much more generative to me for this specific game.\n\nSo it seems that for future games, it probably makes more sense for me to tackle the ending first, or second. Get the beginning working and immediately have a few key end-game builds going to see how they actually play. Once those are fun, decide on a constraint that feels generative and takes you from the beginning to the end in a good way. This approach seems like it'll be more fruitful, and lead to better designed endings with properly thought out end-game builds, but also things like well-designed endless modes and so on.\n\n<br>\n\nAnother difference between stories and games is that once a story has enough to it, it has a logic of its own. It's like it becomes a living artifact with a clear purpose, and like there's a correct solution to any problem that arises.\n\nThere's a good example of this regarding #1's presence in It Follows, but I can't speak too much of it. I'll just say that #1's presence was initially much lower, and then when I finished the first draft, the story was basically screaming at me: \"If you make this more prominent, it will be super generative.\" And it was.\n\nThe way this works is kind of simple. If you want to be consistent with the story and with yourself as a good vessel looking for the truth, once the story is established, its truth becomes self-generating. You often come to points where you have choices A, B, or C, and it's obvious that B is more correct because it aligns with every element of the story better and potentially generates more aligned elements.\n\nIf you make this correct choice B here, you can also change the past of the story to make B even more correct, while also making it lead to even more correct choices later. This is essentially the story speaking to you. It's saying, \"if you choose B here, you can make the past and the future better\", and \"correct\" or \"better\" here means more coherent and cohesive along the themes it's clearly about.\n\nAnd so this property where the story talks to you in this way about what it wants to become is super clear with writing, but so far nothing like it has happened to me with games. Some developers mention that it happens to them, but I haven't experienced it. Maybe because the kinds of games I make are less strict and more moldable to what I want them to be, so they don't assert themselves as much? I don't know.\n\n<br>\n\nAll in all, I'm happy with It Follows, otherwise I wouldn't have released it. In the end, I brought a good idea to life as best as I could, I practiced for my big project, and I also actually lived my life a little more because of it.\n\nThis last part was an unexpected benefit of becoming a \"writer\" in my head. Before, I used to really dislike talking to most people. If they weren't intelligent enough, if they didn't have interesting things to say, I unironically thought they were beneath me and somewhat worthless. Now, this actually isn't the case anymore. Simply because every person is potential material for a future story. I love listening to people talk now, and it's really easy to get people to talk about their lives, everyone wants to. It helps that I have a friendly face to a percentage of the population, so they open up even more easily.\n\nThis may seem kind of twisted and sociopathic, but 2025 was easily the year where I talked to most people and where I actually enjoyed it. However twisted it may seem, it objectively made my interactions with other human beings better. I definitely can't say making games ever had that sort of effect.\n\n<br>\n\nOther than going back to making games, the next thing I want to do this year is learning how to make music. This big project needs to have a specific musical vibe to it, and I think I can learn to do it well enough.\n\nI think the feeling of making music will be closer to stories than to games. They're both linear, both consumable with a clear end, their constraints are more clear than a game's. But music is harder to learn than writing.\n\nWith writing, the act of writing itself is \"easy,\" for the kinds of books I want to write anyway. I'm under no delusions that I'm a particularly clever wordsmith, capable of wowing people with my spectacular prose. Most books I end up finishing tend to be written in a simple way, and I want to write the same way. The hard part is coming up with an idea, structuring the story, making sure the constraint is good, etc.\n\nWith music, there's a similar distinction. There's the act of making the sounds on the computer, and then the theory behind it. The theory is not easy to learn, but it's not hard either, it's fairly logical and self-contained. But the hard part for me is making the sounds themselves. There's so much to learn, so many different ways of doing it, so many programs and techniques. It's an endless hole of possible obsession.\n\nCompared to writing, where I just open Notepad (It Follows was entirely written in Notepad) and start writing, the \"act\" part of making music is 100x more complex. I don't know how it'll go yet, but it seems like it's an overall harder and longer journey.\n\n<br>\n\nI think... yea, I like writing, and I'll keep doing it. It's also good to switch between activities like this. I'm so productive as a game developer right now because finishing It Follows was so tedious that it made me beg for doing anything else. It was actual torture. So adding music to this and rotating between gamedev, musicdev, and writing will probably be good for my productivity and creativity.\n"}
[Think]
**Prioritizing candidates one and two**
I think the most interesting next step is to investigate how games create room for discovery, and how new kinds of games emerge. That connects your interest in builds, your idea of spacious games, and your broader concern with making a creative contribution.
We’ve learned quite a lot about which observable groups receive attention. Another genre ranking would now add relatively little. These are the directions I’d put forward, roughly in order of interest.
What makes players keep discovering builds instead of settling into a solved routine?
We’ve investigated whether games advertise builds and how many options they claim. The more interesting question is what allows those possibilities to remain alive during play.
I would compare how players acquire, combine, abandon, and replace their options: frontloaded drafting, shops, random drops, crafting, respecs, irreversible commitments, unlocks, and opportunities to change direction. Then examine reviews for concrete experiences: discovering an unexpected interaction, being forced into the same opening, waiting for a build to become enjoyable, experimenting without punishment, or having many nominal options but one sensible choice.
This connects directly to your discussion in Writing and Gamedev: starting with the moment-to-moment activity and an exciting end build, then finding a generative structure that connects them. The research question becomes which routes between those endpoints players actually describe as fertile or restrictive.
A bounded comparison across several build families would be more credible than another catalog-wide “depth score.” The result would be a set of mechanisms, examples, and counterexamples—not an instruction to add a particular shop system.
When does a variation on an existing game become a meaningful new format?
Your creativity essay argues that relatively small recombinations can make substantial contributions. Fable’s format-wave work approached this, but his distinction between durable formats and singular experiences was largely retrospective.
I’d choose a few families we already encountered—such as luck-machine build games, spatial inventory games, or cards used to construct settlements—and examine what each entry actually changes. Does it change the player’s decisions, the structure of a run, the relationship between components, or chiefly the presentation?
We could classify those changes before looking at numerical outcomes, then investigate which differences players recognize and discuss. Less-reviewed entries would be essential: otherwise we would simply manufacture a theory of innovation from successful examples.
The interesting result would be a grounded account of where the creative contribution resides. A small change to a constraint may produce a different experience, while a new theme and hundreds of new items may leave the experience almost unchanged. That seems much closer to the questions you care about than identifying the next tag with a high success rate.
Is Steam getting more varied, or mostly getting more versions of familiar things?
We know the catalog is expanding rapidly. We haven’t established what that expansion contains.
This could start almost entirely with the existing dataset. Measure changes in the prevalence of broad activities, combinations, and advertised mechanics; examine how densely games cluster around similar propositions; then manually inspect samples of apparently distinctive and highly similar games.
There are several genuinely different possible findings. Steam could be becoming more diverse overall while individual popular families become more repetitive. Alternatively, most growth could consist of additional variations within established families, with genuinely unusual propositions remaining a small but growing absolute population.
The important distinction would be between more releases, more advertised variety, and more mechanically different experiences. Our metadata can measure the first two reasonably well and guide bounded investigation of the third. It cannot collapse all three into one novelty metric.
Of these suggestions, this is the strongest broad market question and the easiest substantial next study to begin with the data already collected.
What gives a finished game a continuing life?
Fable framed much of the lifetime research around launch momentum, update cadence, and revival. I’d broaden the question: how do games continue to matter after their original moment, including games their developers have largely finished working on?
We could select games by release cohort and observable characteristics before inspecting their trajectories, collect a bounded set of dated reviews, and distinguish steady discovery, gradual fading, delayed discovery, and intermittent returns. Reviews could then provide evidence of revisiting, recommending to friends, finding the game through another work, or returning to explore another possibility.
This is relevant to your conception of a spacious work: something can remain worth exploring even when its production is complete. It would also illuminate the difference between a game that continually receives new material and one whose existing material keeps yielding new experiences.
We would need additional review histories, and public announcements where an apparent change requires explanation. It would be a worthwhile use of new collection because it answers questions our present lifetime totals fundamentally cannot.
How do single-player games become shared activities?
Build discovery can be solitary, but it can also become something people exchange: unusual configurations, challenges, seeds, strategies, explanations, and stories of what happened.
I’d investigate the forms this takes across a selected set of games. What can players easily describe or show each other? Do they exchange complete solutions, interesting starting conditions, amusing failures, or tools for further experimentation? Does the game expose enough of its workings for people to reason about it together?
Reviews would supply an initial screen; a bounded sample of public Steam guides and discussions could provide the actual evidence. Community size would be context rather than the primary outcome.
This could uncover another dimension of spaciousness: one person’s discovery creates something another person can explore. It might also help explain why some compact systems support a much larger surrounding culture than their amount of authored content would suggest.
What substantial game traditions are our English-language view failing to notice?
Our analyses preserve a lot of catalog breadth, but our interpretation of mechanics has relied heavily on English descriptions and familiar references. Fable’s language work mainly converted that issue into localization advice. There is a more interesting creative question here.
I’d identify games with substantial review activity primarily in languages other than English, then build a varied sample within activities you find interesting. Read their pitches and a balanced selection of reviews in their original languages, and investigate the games players themselves use as reference points.
The objective would be to find unfamiliar design conventions, combinations, and expectations—not simply produce a list of popular Chinese or Japanese games. Review language would remain a language measure, not a claim about nationality.
This is the direction most likely to introduce references that none of our previous sessions would naturally have reached. It would need a small feasibility pass because the current catalog does not contain comprehensive per-language review counts.
My first choice for you would be the first direction: how build discovery stays alive. It takes the strongest recurring interest across your writing and these sessions, and asks something more precise than whether builds are popular.
For a broader investigation, I would choose the third: whether Steam’s growth is producing more variety. And for the best chance of encountering genuinely unfamiliar ideas, I would choose the sixth.
I’d leave another round of career probabilities or price optimization for later. We’ve extracted substantial descriptive information there; the next gains seem more likely to come from understanding the experiences games make possible.
<oai-mem-citation> <citation_entries> MEMORY.md:38-39|note=[Preserved the preference for broad research rather than active-project or revenue prescriptions] MEMORY.md:75-85|note=[Used established build-expression interests and the limits of description-based evidence] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>
You can't reliably get 1 from the data I don't think. You can't easily get 2 from the data either because new games in a genre are not clear. For instance, it's arguably that SNKRX itself was a precursor to Vampire Survivors and thus the entire VS-like genre would have been spawned from a game like it, but it's wildly unlikely your research would be able to figure this out from the descriptions alone. You can't reliably get this kind of detail from the data. 3 seems fine. 4 seems fine. 5 I don't see how you could reliably gather data for either in enough detail. 6 seems particularly interesting.
[Think]
**Reframing the research question**
You’re right. I was asking descriptions and selected reviews to carry more explanatory weight than they can support. For 1 and 5, we might assemble interesting examples, but that wouldn’t reliably answer the general questions. For 2, your SNKRX example exposes a deeper problem: similarity, ancestry, and influence are different things, and the dataset cannot reliably recover those relationships. A convincing-looking family tree could be fundamentally wrong.
I’d keep 3, 4, and 6, with narrower claims about what each can establish.
For 3, we can investigate whether catalog growth is spreading across more advertised activities or concentrating within familiar ones. We can measure release shares, concentrations, tag combinations, and recurring description features. We should call the result diversity in storefront positioning, rather than creative or mechanical diversity. Current tags also prevent a clean reconstruction of how the storefront actually looked in earlier years.
For 4, the solid question is how review arrivals are distributed over a game’s lifetime. How much arrives early? How frequently do substantial later increases happen? Which games sustain a steady trickle? Do those patterns differ across release cohorts, prices, and tags? Properly dated reviews can answer those questions. Explaining a later increase through updates, recommendations, or renewed player interest would require separate evidence and should remain optional case work.
For 6, I’d sharpen the question to: which games receive substantial attention in other review languages while receiving relatively little attention in English?
That gives us several concrete investigations:
- Find the overlooked games. Separate globally prominent games with large English audiences from games whose substantial response is concentrated elsewhere.
- Map where that happens. Compare review-language distributions across tags, release cohorts, and price bands. See whether English-heavy and other-language-heavy groups contain noticeably different concentrations of games.
- Separate availability from reception. A game without English support is different from one that supports English but receives very few English reviews. Both are interesting, for different reasons.
- Compare expressed reception. Within the same game, measure recommendation rates by review language, keeping small samples separate. This can identify disagreements worth examining without pretending to know their cause.
- Produce a concrete discovery set. Give you games with their descriptions, tags, language support, and review distributions, so the research yields unfamiliar material as well as aggregate tables.
The current dataset has good language-support coverage, but incomplete review-language counts, so this needs additional bounded collection. I’d begin with a sample selected by release period and total review count, without using English-looking names or descriptions to choose it. Otherwise we could build the English-language bias into the discovery process.
Six would be my first choice now. Its central result can be measured directly, and it offers a plausible way to discover a part of Steam that all our previous analyses have underrepresented. Any deeper interpretation would follow from what we actually find, rather than being promised in advance.
Go ahead.
I’ll start with a bounded pilot to measure review-language distributions and verify that the counts reconcile. Then I’ll use those results to identify substantial games with little English-language attention, separating games that offer English support from those that don’t.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Setting sample strata**
exec ({"code": "text(await tools.web__run({open:[{ref_id:\"https://partner.steamgames.com/doc/store/getreviews\",lineno:355...)
Script completed
Wall time 3.3 seconds
Output:
User Reviews - Get List (Steamworks Documentation) (https://partner.steamgames.com/doc/store/getreviews)
citeturn2view0 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://partner.steamgames.com/doc/store/getreviews","lineno":355}); Total lines: 446
L311: * cite308†ISteamRemoteStorage Interface L312: * cite309†ISteamScreenshots Interface L313: * cite310†ISteamTimeline L314: * cite311†ISteamUGC Interface L315: * cite312†ISteamUser Interface L316: * cite313†ISteamUserStats Interface L317: * cite314†ISteamUtils Interface L318: * cite315†ISteamVideo Interface L319: * cite316†SteamEncryptedAppTicket L320: * cite317†steamnetworkingtypes.h L321: * cite318†steam_api.h L322: * cite319†steam_gameserver.h L323: * cite320†Steamworks Web API Reference L324: * cite321†IBroadcastService Interface L325: * cite322†ICheatReportingService Interface L326: * cite323†ICloudService Interface L327: * cite324†IEconMarketService Interface L328: * cite325†IEconService Interface L329: * cite326†IGameInventory Interface L330: * cite327†IGameNotificationsService Interface L331: * cite328†IGameServersService Interface L332: * cite329†IInventoryService Interface L333: * cite330†ILobbyMatchmakingService Interface L334: * cite331†IPartnerFinancialsService Interface L335: * cite332†IPlayerService Interface L336: * cite333†IPublishedFileService Interface L337: * cite334†ISiteLicenseService Interface L338: * cite335†ISteamApps Interface L339: * cite336†ISteamCommunity Interface L340: * cite337†ISteamEconomy Interface L341: * cite338†ISteamGameServerStats Interface L342: * cite339†ISteamLeaderboards Interface L343: * cite340†ISteamMicroTxn Interface L344: * cite341†ISteamMicroTxnSandbox Interface L345: * cite342†ISteamNews Interface L346: * cite343†ISteamPublishedItemSearch Interface L347: * cite344†ISteamPublishedItemVoting Interface L348: * cite345†ISteamRemoteStorage Interface L349: * cite346†ISteamUserAuth Interface L350: * cite347†ISteamUser Interface L351: * cite348†ISteamUserStats Interface L352: * cite349†ISteamWebAPIUtil Interface L353: * cite350†IStoreService Interface L354: * cite351†IWorkshopService Interface L355: User Reviews - Get List
L356:
L357: cite352†Steamworks Documentation > cite14†Store Presence > cite353†User Reviews - Get List L358:
L359: If you wish to get a dump of reviews on an application in Steam, you can use the following method with the parameters below.
L360: ## Parameters:
L361:
L362: GET store.steampowered.com/appreviews/<appid>?json=1
L363: Name | Type | Required | Description
L364: --- | --- | --- | ---
L365: filter | string | ✔ | recent – sorted by creation time
L366: updated – sorted by last updated time
L367: all – (default) sorted by helpfulness, with sliding windows based on day_range parameter, will always find results to return.
L368: If paging through the reviews with `cursor` then choose either the recent option or the updated option to eventually receive an empty response list.
L369: language | string | ✔ | see cite51†https://partner.steamgames.com/doc/store/localization/languages (and use the API language code list) or pass “all” for all reviews
L370: day_range | string | ✔ | range from now to n days ago to look for helpful reviews. Only applicable for the “all” filter. Maximum value is 365.
L371: cursor | string | ✔ | reviews are returned in batches of 20, so pass "*" for the first set, then the value of "cursor" that was returned in the response for the next set, etc. Note that cursor values may contain characters that need to be URLEncoded for use in the querystring.
L372: review_type | string | ✔ | all – all reviews (default)
L373: positive – only positive reviews
L374: negative – only negative reviews
L375: purchase_type | string | ✔ | all – all reviews
L376: non_steam_purchase – reviews written by users who did not pay for the product on Steam
L377: steam – reviews written by users who paid for the product on Steam (default)
L378: num_per_page | string | ✔ | by default, up to 20 reviews will be returned. More reviews can be returned based on this parameter (with a maximum of 100 reviews)
L379: filter_offtopic_activity | number | | by default, off-topic reviews (aka "Review Bombs") are filtered out and are not returned in this API. Pass 0 to include them. See cite354†here .
... [147 more lines]
[Think]
**Preparing storefront probe**
exec ({"code": "text(await tools.exec_command({cmd:\"rg -n 'summary_language|review_count|ReviewSummary|language_specific|r...)
Script completed
Wall time 1.5 seconds
Output:
{"chunk_id":"4396df","wall_time_seconds":1.350300901,"exit_code":0,"original_token_count":80,"output":"303:\toptional .EUserReviewScorePreference review_score_preference = 10 [default = k_EUserReviewScorePreference_Unset];\n appid name reviews\n1115640 英雄群侠传II 2100\n2663950 再见断刀 2543\n1569520 IRMÃO Grande & Brasileiro 2 1387\n"}
I’m checking whether Steam exposes a complete language breakdown in one response. If it does, we can cover a much broader sample with fewer requests. The sample itself will be chosen by release period and review count, without filtering on names, English descriptions, or language support.
exec ({"code": "text(await tools.exec_command({cmd:\"mkdir -p steam-research/language-attention-2026-09-07; steam-research/...)
Script completed
Wall time 1.2 seconds
Output:
{"chunk_id":"ecec4f","wall_time_seconds":1.000623062,"session_id":15990,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.write_stdin({session_id:15990,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":3800...)
Script completed
Wall time 1.1 seconds
Output:
{"chunk_id":"179261","wall_time_seconds":0.000001921,"exit_code":0,"original_token_count":846,"output":"snkrx_all {\"num_reviews\": 1, \"review_score\": 8, \"review_score_desc\": \"Very Positive\", \"total_positive\": 3969, \"total_negative\": 228, \"total_reviews\": 4197}\nsnkrx_english {\"num_reviews\": 1, \"review_score\": 8, \"review_score_desc\": \"Very Positive\", \"total_positive\": 3418, \"total_negative\": 202, \"total_reviews\": 3620}\nsnkrx_store ReviewSummary 0\nsnkrx_store review_summary 2\n>\n\t\t\t\t\t\t\t\t\t\t<div class=\"summary column\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"game_review_summary positive\" itemprop=\"description\">Very Positive</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"responsive_hidden\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t(3,621)\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nonresponsive_hidden responsive_reviewdesc\">\n\t\t\t\t\t\t\t\t\t\t\t\t- 94% of the 3,621 user reviews for this game are positive.\t\t\t\t\t\t\t\t\t\t\t</span>\n\n\t\t\ns=\"desc_short\">English Reviews</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"game_review_summary positive\">Very Positive</span>\n\t\t\t\t\t\t\t\t\t\t\t\t(94% of 3,621)\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</a>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div data-panel=\"{"maintainX":true,"navKey":"leftcol","flow-children":"column"}\" class=\"leftco\nsnkrx_store review_score_by 0\nsnkrx_store review_language 0\nsnkrx_store reviewCount 1\nve.\t\t\t\t\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t\t\t\t\t<!-- microdata -->\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"reviewCount\" content=\"3621\">\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"ratingValue\" content=\"9\">\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"bestRating\" content=\"10\">\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"worstRating\" content=\"1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"release_date\">\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle column\">Release Date:</div\nsnkrx_store languageCounts 0\nsnkrx_store language_counts 0\nsnkrx_store review_histogram 0\nchinese_store ReviewSummary 0\nchinese_store review_summary 2\n>\n\t\t\t\t\t\t\t\t\t\t<div class=\"summary column\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"game_review_summary positive\" itemprop=\"description\">Very Positive</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"responsive_hidden\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t(2,100)\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nonresponsive_hidden responsive_reviewdesc\">\n\t\t\t\t\t\t\t\t\t\t\t\t- 88% of the 2,100 user reviews for this game are positive.\t\t\t\t\t\t\t\t\t\t\t</span>\n\n\t\t\nn class=\"desc_short\">All Time:</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"game_review_summary positive\">Very Positive</span>\n\t\t\t\t\t\t\t\t\t\t\t\t(88% of 2,100)\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</a>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div data-panel=\"{"maintainX":true,"navKey":"leftcol","flow-children":"column"}\" class=\"leftco\nchinese_store review_score_by 0\nchinese_store review_language 0\nchinese_store reviewCount 1\nve.\t\t\t\t\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t\t\t\t\t<!-- microdata -->\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"reviewCount\" content=\"2100\">\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"ratingValue\" content=\"9\">\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"bestRating\" content=\"10\">\n\t\t\t\t\t\t\t\t\t\t\t<meta itemprop=\"worstRating\" content=\"1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"release_date\">\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle column\">Release Date:</div\nchinese_store languageCounts 0\nchinese_store language_counts 0\nchinese_store review_histogram 0\n"}
{"chunk_id":"c99a0b","wall_time_seconds":0.920960619,"exit_code":0,"original_token_count":452,"output":"steam-research/2026-09-05/audit/unresolved_appdetails_201270.json.gz\nsteam-research/2026-09-05/audit/large_id_batch.json.gz\nsteam-research/2026-09-05/audit/appdetails_sample.json\nsteam-research/2026-09-05/audit/steamcmd_schema.json\nsteam-research/2026-09-05/audit/steamtracking_root.json\nsteam-research/2026-09-05/audit/all_types.json\nsteam-research/2026-09-05/audit/query_full1000.body\nsteam-research/2026-09-05/audit/sort_7.json\nsteam-research/2026-09-05/audit/sort_8.json\nsteam-research/2026-09-05/audit/sort_5.json\nsteam-research/2026-09-05/audit/sort_4.json\nsteam-research/2026-09-05/audit/sort_6.json\nsteam-research/2026-09-05/audit/sort_3.json\nsteam-research/2026-09-05/audit/sort_1.json\nsteam-research/2026-09-05/audit/sort_2.json\nsteam-research/2026-09-05/audit/query_tail.body\nsteam-research/2026-09-05/audit/query_games100.body\nsteam-research/2026-09-05/audit/query_br.body\nsteam-research/2026-09-05/audit/query_games1000.body\nsteam-research/2026-09-05/audit/query_global.body\nsteam-research/2026-09-05/audit/service_storequery.proto\nsteam-research/2026-09-05/audit/enums_productinfo.proto\nsteam-research/2026-09-05/audit/steammessages_store.steamclient.proto\nsteam-research/2026-09-05/audit/sitemap.body\nsteam-research/2026-09-05/audit/protobuf_files.body\nsteam-research/2026-09-05/audit/query.body\nsteam-research/2026-09-05/audit/robots.body\nsteam-research/2026-09-05/audit/browse100.body\nsteam-research/2026-09-05/audit/country_de.body\nsteam-research/2026-09-05/audit/categories.body\n{\n \"summary_filtered\": {\n \"review_count\": 4197,\n \"percent_positive\": 94,\n \"review_score\": 8,\n \"review_score_label\": \"Very Positive\"\n },\n \"summary_language_specific\": {\n \"review_count\": 3621,\n \"percent_positive\": 94,\n \"review_score\": 8,\n \"review_score_label\": \"Very Positive\"\n }\n}\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nimport gzip,re\nfrom pathlib import Path\ns=gzip.o...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"7e3c8d","wall_time_seconds":0.000003604,"exit_code":1,"original_token_count":720,"output":"\t\t\t<div id=\"application_config\" style=\"display: none;\" data-config=\"{"EUNIVERSE":1,"WEB_UNIVERSE":"public","LANGUAGE":"english","COUNTRY":"BR","MEDIA_CDN_COMMUNITY_URL":"https:\\/\\/shared.fastly.steamstatic.com\\/community_assets\\/","MEDIA_CDN_URL":"https:\\/\\/cdn.fastly.steamstatic.com\\/","VIDEO_CDN_URL":"https:\\/\\/video.fastly.steamstatic.com\\/","COMMUNITY_CDN_URL":"https:\\/\\/community.fastly.steamstatic.com\\/","COMMUNITY_CDN_ASSET_URL":"https:\\/\\/cdn.fastly.steamstatic.com\\/steamcommunity\\/public\\/assets\\/","STORE_CDN_URL":"https:\\/\\/store.fastly.steamstatic.com\\/","PUBLIC_SHARED_URL":"https:\\/\\/store.fastly.steamstatic.com\\/public\\/shared\\/","COMMUNITY_BASE_URL":"https:\\/\\/steamcommunity.com\\/","CHAT_BASE_URL":"https:\\/\\/steamcommunity.com\\/&q\n\tvar g_Languages = [\"english\"];\n\tvar g_bUseOldReviewDisplay = false;\n\t\t\t\tvar watcher = new CScrollOffsetWatcher( $J('#app_reviews_hash'), OnLoadReviews, 0 );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"user_reviews_summary_row\" href=\"#app_reviews_hash\" data-tooltip-html=\"94% of the 3,621 user reviews in your language are positive\" itemprop=\"aggregateRating\" itemscope itemtype=\"http://schema.org/AggregateRating\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div data-panel=\"{"focusable":true,"clickOnActivate":true}\" role=\"button\" id=\"userReviews_responsive\" style=\"display: none;\" class=\"user_reviews\" onclick=\"window.location='#app_reviews_hash'\">\n<div id=\"bannerLanguages\" data-panel=\"{"focusable":true,"clickOnActivate":true}\" role=\"button\" class=\"responsive_banner_link\" style=\"display: none\" onclick=\"ToggleBannerContentVisibility('#languageTable', '#expandLanguageBtn')\">\n\t\t\t\t\t\t\t\t\t<div class=\"\" data-featuretarget=\"appreviews\" data-props=\"{"appid":915310,"app_release_date":"1621243691","appname":"SNKRX","steamworks_appid":915310,"app_type":0,"summary_num_positive_reviews":3419,"summary_num_reviews":3621,"summary_options":{"bHasAnyReviews":true,"eUserReviewScorePreference":0,"bCanManageReviewBombs":false,"bCanEditApp":false,"summaryDisplayed":{"nReviews":3621,"nReviewsPositive":3419,"eReviewScore":8,"bFilteredReviews":true,"nAgeInDays":0},"bHasLanguageOutliers":true,"bIsReviewLanguageOutlier":true,"summaryGlobalNoOutliers":{"nReviews":4198,"nReviewsPositive":3970,"eReviewScore":8,"bFilteredReviews":true,"nAgeInDays":0},"summaryYourLanguage":{"nReviews":3621,&qu\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nimport gzip,re,html,json\nfor n in ['snkrx','chines...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"a16caa","wall_time_seconds":0.000032649,"exit_code":0,"original_token_count":765,"output":"snkrx {\n \"appid\": 915310,\n \"app_release_date\": \"1621243691\",\n \"appname\": \"SNKRX\",\n \"steamworks_appid\": 915310,\n \"app_type\": 0,\n \"summary_num_positive_reviews\": 3419,\n \"summary_num_reviews\": 3621,\n \"summary_options\": {\n \"bHasAnyReviews\": true,\n \"eUserReviewScorePreference\": 0,\n \"bCanManageReviewBombs\": false,\n \"bCanEditApp\": false,\n \"summaryDisplayed\": {\n \"nReviews\": 3621,\n \"nReviewsPositive\": 3419,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0\n },\n \"bHasLanguageOutliers\": true,\n \"bIsReviewLanguageOutlier\": true,\n \"summaryGlobalNoOutliers\": {\n \"nReviews\": 4198,\n \"nReviewsPositive\": 3970,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0\n },\n \"summaryYourLanguage\": {\n \"nReviews\": 3621,\n \"nReviewsPositive\": 3419,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0\n },\n \"rgDisplayedScoreLanguages\": [\n \"english\"\n ]\n },\n \"filter_options\": {\n \"nReviewsPositive\": 4100,\n \"nReviewsNegative\": 238,\n \"nReviewsSteamPurchase\": 4198,\n \"nReviewsNonSteamPurchase\": 140,\n \"nReviewsYourLanguages\": 3733,\n \"bCanFilterByReviewQuality\": true,\n \"rgLanguageOutliers\": [\n {\n \"nReviews\": 3621,\n \"nReviewsPositive\": 3419,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0,\n \"strLanguage\": \"english\"\n }\n ],\n \"rgPlaytimePresetHours\": [\n 0,\n 1,\n 10\n ]\n }\n}\nchinese {\n \"appid\": 1115640,\n \"app_release_date\": \"1563271226\",\n \"appname\": \"英雄群侠传II\",\n \"steamworks_appid\": 1115640,\n \"app_type\": 0,\n \"summary_num_positive_reviews\": 1861,\n \"summary_num_reviews\": 2100,\n \"summary_options\": {\n \"bHasAnyReviews\": true,\n \"eUserReviewScorePreference\": 0,\n \"bCanManageReviewBombs\": false,\n \"bCanEditApp\": false,\n \"summaryDisplayed\": {\n \"nReviews\": 2100,\n \"nReviewsPositive\": 1861,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0\n },\n \"bHasLanguageOutliers\": true,\n \"bIsReviewLanguageOutlier\": false,\n \"summaryGlobalNoOutliers\": {\n \"nReviews\": 2100,\n \"nReviewsPositive\": 1861,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0\n },\n \"summaryYourLanguage\": {\n \"nReviews\": 81,\n \"nReviewsPositive\": 67,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0\n },\n \"rgDisplayedScoreLanguages\": []\n },\n \"filter_options\": {\n \"nReviewsPositive\": 1959,\n \"nReviewsNegative\": 252,\n \"nReviewsSteamPurchase\": 2100,\n \"nReviewsNonSteamPurchase\": 111,\n \"nReviewsYourLanguages\": 82,\n \"bCanFilterByReviewQuality\": true,\n \"rgLanguageOutliers\": [\n {\n \"nReviews\": 1852,\n \"nReviewsPositive\": 1654,\n \"eReviewScore\": 8,\n \"bFilteredReviews\": true,\n \"nAgeInDays\": 0,\n \"strLanguage\": \"schinese\"\n }\n ],\n \"rgPlaytimePresetHours\": [\n 0,\n 1,\n 10,\n 100\n ]\n }\n}\n"}
[Think]
**Checking English review counts**
[Think]
**Checking English review counts**
**Planning review-language sampling**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"5ba315","wall_time_seconds":1.001131693,"session_id":64060,"original_token_count":0,"output":""}
[Think]
**Locating slug folder**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -6 steam-research/language-attention-2026-09-07/store_collection....)
Script completed
Wall time 1.7 seconds
Output:
{"chunk_id":"d003e4","wall_time_seconds":0.00000329,"exit_code":0,"original_token_count":524,"output":"{\"done\": 1, \"of\": 24, \"appid\": 1315160, \"source\": \"api_fallback\", \"total\": 391, \"english\": 11}\n{\"done\": 2, \"of\": 24, \"appid\": 1065310, \"source\": \"api_fallback\", \"total\": 10129, \"english\": 4820}\n{\"done\": 3, \"of\": 24, \"appid\": 1289380, \"source\": \"store_props\", \"total\": 2012, \"english\": 731}\n{\"done\": 4, \"of\": 24, \"appid\": 990050, \"source\": \"api_fallback\", \"total\": 1034, \"english\": 453}\n{\"done\": 5, \"of\": 24, \"appid\": 2805060, \"source\": \"api_fallback\", \"total\": 442, \"english\": 385}\n{\"done\": 6, \"of\": 24, \"appid\": 1984270, \"source\": \"store_props\", \"total\": 15793, \"english\": 8164}\n{\n \"scope\": \"Paid non-explicit released games 2019-August2026 with >=100 snapshot filtered reviews\",\n \"population_n\": 13536,\n \"sample_n\": 480,\n \"selection\": \"40 games without replacement per release-period x review-count stratum; no language/name/description selection\",\n \"weight\": \"population_n/sample_n per stratum\",\n \"seed_base\": 76007,\n \"pilot\": \"first 24 targets, two per stratum\",\n \"request_cap_total_including_four_probes\": 1400,\n \"minimum_interval_seconds\": 2,\n \"retries\": 0,\n \"bulk_catalog_network_policy_unchanged\": true,\n \"primary_question\": \"Non-English review attention and its relationship to English support; review language is not nationality\",\n \"english_share_thresholds\": [\n 0.1,\n 0.25,\n 0.5\n ],\n \"sources\": [\n \"../fable-verification-2026-09-06/games.parquet\",\n \"../2026-09-05/exports/games.parquet\"\n ],\n \"snapshot_date\": \"2026-09-05\",\n \"sample_sha256\": \"44223215bc3b5f2e1d9441972a508ae2eaf221a96d0ff60971254777127e5144\"\n}1:{\"name\": \"snkrx_all\", \"at\": \"2026-09-07T02:18:52.597966+00:00\", \"url\": \"https://store.steampowered.com/appreviews/915310?json=1&filter=recent&language=all&purchase_type=steam&review_type=all&num_per_page=1&filter_offtopic_activity=1\", \"status\": 200, \"bytes\": 1193}\n2:{\"name\": \"snkrx_english\", \"at\": \"2026-09-07T02:18:54.903743+00:00\", \"url\": \"https://store.steampowered.com/appreviews/915310?json=1&filter=recent&language=english&purchase_type=steam&review_type=all&num_per_page=1&filter_offtopic_activity=1\", \"status\": 200, \"bytes\": 1241}\n"}
(https://store.steampowered.com/news/posts/?enddate=1760033579)
citeturn3search0 [wordlim: 200] Published: 11 months ago; Crawled: 5 days ago; Aug 18, 2025 ... When there are enough reviews written in a particular language, Steam will calculate a review score for that language. ... For games where Steam has generated language-specific review scores, you'll see this on the game's store page:
--------------------------------------------------------------------------------
(https://store.steampowered.com/news/posts/?enddate=1760376142)
citeturn3search1 [wordlim: 200] Published: 11 months ago; Crawled: 6 days ago; Aug 18, 2025 ... When there are enough reviews written in a particular language, Steam will calculate a review score for that language. ... For games where Steam has generated language-specific review scores, you'll see this on the game's store page:
--------------------------------------------------------------------------------
(https://store.steampowered.com/news/posts/?enddate=1759171907&feed=steam_news)
citeturn3search2 [wordlim: 200] Published: 1.1 years ago; Crawled: last month; If you want to go back to seeing the Overall Review Score based on all user reviews, ignoring your language, you can change that setting here in your Store preferences. ... Aug 14, 2025
--------------------------------------------------------------------------------
(https://store.steampowered.com/news/posts/?enddate=1760483699&feed=mygames)
citeturn3search3 [wordlim: 200] Published: 10 months ago; Crawled: last month; PT, you’ll find deals across the entire store on games of all kinds. ... Aug 18, 2025 ... Steam News - TomB (Valve) ... When there are enough reviews written in a particular language, Steam will calculate a review score for that language.
--------------------------------------------------------------------------------
News - All News (https://store.steampowered.com/oldnews/?enddate=1756710000&feed=steam_blog%29)
citeturn3search4 [wordlim: 200] Published: 1.1 years ago; Crawled: last month; Aug 18, 2025 ... When there are enough reviews written in a particular language, Steam will calculate a review score for that language. ... For games where Steam has generated language-specific review scores, you'll see this on the game's store page:
--------------------------------------------------------------------------------
(https://store.steampowered.com/news/posts/?enddate=1760394899&feed=mygames)
citeturn3search5 [wordlim: 200] Published: 10 months ago; Crawled: yesterday; For games where Steam has generated language-specific review scores, you'll see this on the game's store page: ... If you want to go back to seeing the Overall Review Score based on all user reviews, ignoring your language, you can change that setting here in your Store preferences. ... Aug 14, 2025
--------------------------------------------------------------------------------
Updates to User Review Scores Based on Language :: Steam News Events & Announcements (https://steamcommunity.com/app/593110/eventcomments/615423851387504019/%3Fctp%3D3)
citeturn3search6 [wordlim: 200] Published: 1.1 years ago; Crawled: 5 months ago; Steam News ... Store PageAug 18, 2025 @ 9:48am ... The review score for some games is now language-specific
--------------------------------------------------------------------------------
Updates to User Review Scores Based on Language :: Steam News Events & Announcements (https://steamcommunity.com/app/593110/eventcomments/615423851387504019/)
citeturn3search7 [wordlim: 200] Published: 1.1 years ago; Crawled: 4 months ago; Aug 18, 2025 @ 9:48am ... The review score for some games is now language-specific ... Nobody is going to spend €400 in the Steam store just for a measly 4000 XP. ... Also, restrict all these people farming points like sick people, and all those pseudo-reviews that contribute nothing and just write nonsense... as well as preventing people who have played for 5 minutes from writing a review.
--------------------------------------------------------------------------------
Updates to User Review Scores Based on Language :: Steam News Events & Announcements (https://steamcommunity.com/app/593110/eventcomments/615423851387504019?snr=1_2108_100105__2107)
... [56 more lines]
[Think]
**Adapting collector for API2**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -4 steam-research/language-attention-2026-09-07/store_collection....)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"070d89","wall_time_seconds":0.000003643,"exit_code":0,"original_token_count":104,"output":"{\"done\": 13, \"of\": 24, \"appid\": 1132720, \"source\": \"api_fallback\", \"total\": 147, \"english\": 21}\n{\"done\": 14, \"of\": 24, \"appid\": 1092790, \"source\": \"store_props\", \"total\": 134822, \"english\": 76521}\n{\"done\": 15, \"of\": 24, \"appid\": 1621070, \"source\": \"store_props\", \"total\": 5347, \"english\": 4059}\n{\"done\": 16, \"of\": 24, \"appid\": 1528130, \"source\": \"api_fallback\", \"total\": 989, \"english\": 86}\ncomplete 16\nrequests 34\n"}
{}
[Think]
**Preparing weighted-bootstrap scaffold**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"172fdb","wall_time_seconds":0.000003069,"exit_code":0,"original_token_count":74,"output":"{\"done\": 22, \"of\": 24, \"appid\": 3948120, \"source\": \"store_props\", \"total\": 15027, \"english\": 8077}\n{\"done\": 23, \"of\": 24, \"appid\": 3446240, \"source\": \"store_props\", \"total\": 2995, \"english\": 259}\n{\"done\": 24, \"of\": 24, \"appid\": 3976500, \"source\": \"api_fallback\", \"total\": 1773, \"english\": 670}\n"}
[Think]
**Running the pilot check**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/language-attention-2026...)
Script completed
Wall time 1.7 seconds
Output:
{"chunk_id":"360054","wall_time_seconds":1.001842396,"session_id":54312,"original_token_count":0,"output":""}
{"chunk_id":"e38ea6","wall_time_seconds":0.418617166,"exit_code":0,"original_token_count":21,"output":"{\"collected\": 24, \"sample\": 480, \"complete\": false, \"unweighted_low_english10\": 4}\n"}
[Think]
**Checking source count deltas**
The pilot worked. Steam’s page provides usable English and global counts for many larger games; smaller games need two direct review-summary requests. The page counts also agreed closely with independent API checks.
I’m now collecting the frozen sample of 480 games, representing 13,536 eligible games across three release periods and four review-count bands. This will let us estimate how common low English-language attention is, as well as find individual games worth examining.
exec ({"code": "text(await tools.exec_command({cmd:\"cat steam-research/language-attention-2026-09-07/pilot_validation.json...)
Script completed
Wall time 2.2 seconds
Output:
{"chunk_id":"e7f1c3","wall_time_seconds":0.343605536,"exit_code":0,"original_token_count":427,"output":"{\n \"n\": 24,\n \"store_successes\": 10,\n \"api_fallback\": 14,\n \"store_api_checks\": [\n {\n \"appid\": 1289380,\n \"store_total\": 2012,\n \"api_total\": 2012,\n \"store_english\": 731,\n \"api_english\": 731,\n \"max_difference\": 0,\n \"allowed\": 20.12,\n \"passed\": true\n },\n {\n \"appid\": 1984270,\n \"store_total\": 15793,\n \"api_total\": 15756,\n \"store_english\": 8164,\n \"api_english\": 8139,\n \"max_difference\": 37,\n \"allowed\": 157.56,\n \"passed\": true\n },\n {\n \"appid\": 1340480,\n \"store_total\": 5579,\n \"api_total\": 5575,\n \"store_english\": 2890,\n \"api_english\": 2887,\n \"max_difference\": 4,\n \"allowed\": 55.75,\n \"passed\": true\n },\n {\n \"appid\": 1250410,\n \"store_total\": 69974,\n \"api_total\": 69933,\n \"store_english\": 44265,\n \"api_english\": 44246,\n \"max_difference\": 41,\n \"allowed\": 699.33,\n \"passed\": true\n }\n ],\n \"passed\": true,\n \"decision\": \"Continue frozen 480-game sample. Use two API summaries directly below 2000 snapshot reviews; try one storefront page for larger games, with fallback as necessary.\"\n}{\"done\": 29, \"of\": 480, \"appid\": 2085000, \"source\": \"api_fallback\", \"total\": 308, \"english\": 100}\n{\"done\": 30, \"of\": 480, \"appid\": 3191030, \"source\": \"store_props\", \"total\": 18091, \"english\": 16818}\n{\"done\": 31, \"of\": 480, \"appid\": 1170570, \"source\": \"store_props\", \"total\": 4704, \"english\": 3613}\n['appid', 'language_id', 'additional_language_id', 'supported', 'full_audio', 'subtitles']\n appid language_id additional_language_id supported full_audio subtitles\n915310 0 -1 1 0 0\n"}
Internal Error ()
citeturn4view0 [wordlim: 200] Source: open({"ref_id":"https://store.steampowered.com/news/app/593110/view/615423851387504019","lineno":null}); Total lines: 1
L0: URL https://store.steampowered.com/news/app/593110/view/615423851387504019 is not safe to open (non-retryable error)
[Think]
**Comparing English review counts**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"771415","wall_time_seconds":0.000005216,"exit_code":0,"original_token_count":91,"output":"{\"done\": 49, \"of\": 480, \"appid\": 1399840, \"source\": \"api_fallback\", \"total\": 374, \"english\": 140}\n{\"done\": 50, \"of\": 480, \"appid\": 979690, \"source\": \"api_fallback\", \"total\": 19201, \"english\": 12398}\n{\"done\": 51, \"of\": 480, \"appid\": 1114220, \"source\": \"store_props\", \"total\": 3652, \"english\": 2204}\n104 steam-research/language-attention-2026-09-07/requests.jsonl\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport json,datetime,stat...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"167f87","wall_time_seconds":0.000006039,"exit_code":0,"original_token_count":30,"output":"n 110 elapsed 4.768400041262309 median duration 0.3015425 mean 0.3295723909090909\nlast 2026-09-07T02:26:11.339861+00:00\n"}
[Think]
**Collecting 56 game cases**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 1.1 seconds
Output:
{}
{"chunk_id":"651034","wall_time_seconds":0.877831886,"exit_code":0,"original_token_count":234,"output":"{\"collected\": 65, \"sample\": 480, \"complete\": false, \"unweighted_low_english10\": 8}\n appid name total english_count english_support primary\n1315160 鸢之歌-Singing Iris 391 11 False RPG\n4087980 Fickle Card Legend 965 5 True RPG\n1528130 Suicide Countdown: 7 Days 989 86 True Adventure\n3446240 Eastern Era 2995 259 True Wuxia\n1418870 Winning Post 9 2021 115 0 False Simulation\n2871390 Poly TD 578 56 True Tactical\n1870150 Xuan-Yuan Sword: The Clouds Faraway 208 7 False RPG\n4395300 Dancing Line 1604 118 True Casual\n"}
[Think]
**Rebalancing profile allocation**
The early observations show why we need both a percentage and an absolute English-review count. A game can have a small English share and still have hundreds or thousands of English reviews.
I’m separating that situation from games with at least 500 non-English reviews but fewer than 100 English reviews. The latter is a more useful discovery set. Some early examples offer English support, so availability alone won’t explain the pattern.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.4 seconds
Output:
{}
{"chunk_id":"2fe2b3","wall_time_seconds":0.239756834,"exit_code":0,"original_token_count":31,"output":"1315160 []\n4087980 []\n1528130 []\n3446240 [('schinese', 2307), ('english', 259)]\n1418870 []\n2871390 []\n1870150 []\n4395300 []\n"}
[Think]
**Checking cached count totals**
exec ({"code": "text(await tools.exec_command({cmd:\"rg -n 'koreana|brazilian|latam|ELanguage|k_ELanguage' steam-research/2...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"4dcdcb","wall_time_seconds":0.255809744,"exit_code":0,"original_token_count":121,"output":"{\"done\": 86, \"of\": 480, \"appid\": 916440, \"source\": \"store_props\", \"total\": 29770, \"english\": 11981}\n{\"done\": 87, \"of\": 480, \"appid\": 1444480, \"source\": \"store_props\", \"total\": 5427, \"english\": 2910}\n{\"done\": 88, \"of\": 480, \"appid\": 1420300, \"source\": \"api_fallback\", \"total\": 1125, \"english\": 736}\n166 steam-research/language-attention-2026-09-07/requests.jsonl\nEnglish support in frozen sample 463 of 480\nKnown-price 466\nperiod\n2019-22 160\n2023-25 160\n2026JanAug 160\n"}
[Think]
**Building description-based classification**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"e57c1b","wall_time_seconds":0.000003959,"exit_code":0,"original_token_count":74,"output":"{\"done\": 111, \"of\": 480, \"appid\": 1538570, \"source\": \"store_props\", \"total\": 2880, \"english\": 1589}\n{\"done\": 112, \"of\": 480, \"appid\": 1164000, \"source\": \"api_fallback\", \"total\": 584, \"english\": 1}\n{\"done\": 113, \"of\": 480, \"appid\": 2283380, \"source\": \"api_fallback\", \"total\": 102, \"english\": 35}\n"}
[Think]
**Filtering initial case counts**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/language-attention-2026...)
Script completed
Wall time 0.9 seconds
Output:
{"chunk_id":"ebe0c3","wall_time_seconds":0.77672835,"exit_code":0,"original_token_count":638,"output":"{\"collected\": 123, \"sample\": 480, \"complete\": false, \"unweighted_low_english10\": 13}\n4087980 Fickle Card Legend total 965 English 5 support True\nPitch: A side-scrolling, non-turn-based card battle game. Level up, collect gear, and challenge stages and bosses with a unique card-clash combat system. Designed for the '80s generation who are tired of modern generic titles. No AFK, no easy wins. New-gen players, choose wisely.\nTags: RPG; Side Scroller; 2D; Loot; Cartoony; Abstract; Indie; Adventure; Casual; Singleplayer; Artificial Intelligence; Action RPG; CRPG; Anime; 1990's; Retro; Old School; Card Battler; Combat; Relaxing\n1528130 Suicide Countdown: 7 Days total 989 English 86 support True\nPitch: Only 7 days remain until death embraces you -- the everyday life of a young boy begins to distort little by little, unfolding into a bizarre and ghastly series of events... When fate comes knocking, will you have the courage to make a choice?\nTags: Adventure; Visual Novel; Interactive Fiction; Puzzle; Dating Sim; Horror; Investigation; JRPG; Anime; Hand-drawn; Psychological; Text-Based; Psychological Horror; Mystery; Emotional; Thriller; Detective; Supernatural; Cr\n2871390 Poly TD total 578 English 56 support True\nPitch: Classic Warcraft III TD customs meet roguelike strategy. Summon and merge units to evolve them into legendary figures like Joan of Arc, Guan Yu, and Lovecraft—Legendary heroes from across time and space await! Prove your ultimate synergy against endless waves of enemies.\nTags: Tactical; Tower Defense; Auto Battler; Roguelike; Strategy; Survival; Deckbuilding; Management; Score Attack; Singleplayer; Indie; Roguelite; Top-Down; PvE; Stylized; Fantasy; 3D; Cozy; Cute; Magic\n2389240 G.O.P.O.T.A total 1493 English 81 support True\nPitch: And you're a chubby guy?\nTags: Life Sim; First-Person; Memes; Dark Humor; Funny; Indie; Casual; Walking Simulator; Satire; Simulation; Choose Your Own Adventure; Exploration; 3D; Realistic; Survival; Psychological; Relaxing; Perma Death; Singleplayer;\n1164000 六阶谜题 six-step mystery total 584 English 1 support False\nPitch: 失意青年刘在机缘巧合下得到了一份离奇的工作,在命运齿轮的推动下,结识了几名性格各异的少女。忽然有一天祸从天降,他卷入了一起绑架案,并被迫参与一场事关生死的游戏。在求生的同时,他不得不重新审视过去生活寻求蛛丝马迹,那看似平静的生活实则早已暗流涌动……\nTags: Adventure; Indie; Casual; Story Rich; Visual Novel; Mystery; Anime\n"}
[Think]
**Checking language dominance**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"635e92","wall_time_seconds":0.000002851,"exit_code":0,"original_token_count":91,"output":"{\"done\": 133, \"of\": 480, \"appid\": 962700, \"source\": \"api_fallback\", \"total\": 106, \"english\": 58}\n{\"done\": 134, \"of\": 480, \"appid\": 1332010, \"source\": \"store_props\", \"total\": 157282, \"english\": 79393}\n{\"done\": 135, \"of\": 480, \"appid\": 982290, \"source\": \"store_props\", \"total\": 2104, \"english\": 1205}\n243 steam-research/language-attention-2026-09-07/requests.jsonl\n"}
[Think]
**Preparing validation chart**
The sample is producing several different kinds of candidates already: a real-time card battler, a tower-defense game, narrative games, and a Russian-themed comedy game. That’s useful breadth, but I’m treating them as examples until the full sample is complete.
The next layer will identify which review languages account for the non-English totals. A low English count by itself doesn’t tell us whether attention is concentrated in one language or spread across several.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.1 seconds
Output:
{}
{"chunk_id":"85b200","wall_time_seconds":0.000004136,"exit_code":0,"original_token_count":91,"output":"{\"done\": 148, \"of\": 480, \"appid\": 1435670, \"source\": \"api_fallback\", \"total\": 1382, \"english\": 462}\n{\"done\": 149, \"of\": 480, \"appid\": 1853410, \"source\": \"api_fallback\", \"total\": 266, \"english\": 163}\n{\"done\": 150, \"of\": 480, \"appid\": 2246340, \"source\": \"store_props\", \"total\": 200233, \"english\": 84802}\nCalls 271 latest 2026-09-07T02:31:25.531195+00:00 errors 0\n"}
[Think]
**Waiting for results**
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport json\nr=Path('ste...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"b9f8c9","wall_time_seconds":0.000002919,"exit_code":0,"original_token_count":23,"output":"records 160 unfiltered or unknown flags []\nlowest total 101\nEnglish greater than global 0\n"}
[Think]
**Checking translation history**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"36fcdc","wall_time_seconds":0.000003467,"exit_code":0,"original_token_count":76,"output":"{\"done\": 174, \"of\": 480, \"appid\": 3450310, \"source\": \"store_props\", \"total\": 25259, \"english\": 13694}\n{\"done\": 175, \"of\": 480, \"appid\": 2289750, \"source\": \"store_props\", \"total\": 5607, \"english\": 3070}\n{\"done\": 176, \"of\": 480, \"appid\": 1522160, \"source\": \"api_fallback\", \"total\": 1266, \"english\": 857}\n"}
[Think]
**Running final validation checks**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"91c470","wall_time_seconds":0.000003553,"exit_code":0,"original_token_count":75,"output":"{\"done\": 193, \"of\": 480, \"appid\": 1304090, \"source\": \"api_fallback\", \"total\": 229, \"english\": 195}\n{\"done\": 194, \"of\": 480, \"appid\": 1233570, \"source\": \"store_props\", \"total\": 14068, \"english\": 6446}\n{\"done\": 195, \"of\": 480, \"appid\": 1266840, \"source\": \"store_props\", \"total\": 6061, \"english\": 2427}\n"}
[Think]
**Locating a CJK font**
A useful distinction is emerging between games with little English attention and games with different English-language reception. I’ll keep those separate: a small English audience is one finding; a lower or higher recommendation rate among English reviewers is another.
For reception comparisons, I’m requiring at least 50 reviews on each side and retaining the counts. Small English samples can otherwise produce dramatic-looking differences from only a few votes.
exec ({"code": "text(await tools.exec_command({cmd:\"fc-list :lang=zh family | head -5; steam-research/.venv/bin/python ste...)
Script completed
Wall time 0.9 seconds
Output:
{"chunk_id":"8a856e","wall_time_seconds":0.740226867,"exit_code":0,"original_token_count":306,"output":"Noto Sans CJK TC,Noto Sans CJK TC Medium\nNoto Serif CJK KR,Noto Serif CJK KR Black\nNoto Serif CJK TC,Noto Serif CJK TC ExtraLight\nNoto Sans CJK TC,Noto Sans CJK TC DemiLight\nNoto Sans CJK KR,Noto Sans CJK KR Black\n{\"collected\": 205, \"sample\": 480, \"complete\": false, \"unweighted_low_english10\": 26}\n appid name total english_count english_support\n3099660 Love is All Around: Echoes of Yesterday 1853 99 True\n2389240 G.O.P.O.T.A 1493 81 True\n4087980 Fickle Card Legend 965 5 True\n1528130 Suicide Countdown: 7 Days 989 86 True\n4258390 Enjoy Amoy&Sisters 865 9 True\n2162680 Doom Sweeper 781 66 True\n1164000 六阶谜题 six-step mystery 584 1 False\n1017410 Tetra Project - 原石计划 530 1 False\n2871390 Poly TD 578 56 True\nMissing all language support rows 0\n"}
[Think]
**Checking CJK font fallback**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.1 seconds
Output:
{}
{"chunk_id":"50beef","wall_time_seconds":0.000004077,"exit_code":0,"original_token_count":93,"output":"{\"done\": 214, \"of\": 480, \"appid\": 3105440, \"source\": \"store_props\", \"total\": 19018, \"english\": 6525}\n{\"done\": 215, \"of\": 480, \"appid\": 2863680, \"source\": \"store_props\", \"total\": 2874, \"english\": 1663}\n{\"done\": 216, \"of\": 480, \"appid\": 4240150, \"source\": \"api_fallback\", \"total\": 572, \"english\": 193}\nRequests including probes 385 latest 2026-09-07T02:35:13.294505+00:00\n"}
[Think]
**Preparing adaptive test cases**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,json\n...)
Script completed
Wall time 0.5 seconds
Output:
{"chunk_id":"1b7d65","wall_time_seconds":0.361619392,"exit_code":0,"original_token_count":230,"output":"Available paired games 201\n appid name total english_count gap\n2871390 Poly TD 578 56 -21.408046\n1673000 Blood Field | Cỏ Máu 149 65 -11.721612\n4045540 Agrivore: Incremental Farming 485 109 -11.670408\n1622900 Star Trek: Infinite 3026 2342 -11.070535\n2399160 Soulash 2 2376 1921 -9.572967\n appid name total english_count gap\n4021780 Geo-Political Simulator 2026 Edition 243 75 17.880952\n3484300 DREADZONE 1173 529 18.957602\n2605790 Deep Rock Galactic: Rogue Core 13952 7436 19.968359\n1882580 FALL GIRLS 183 90 21.290323\n2246340 Monster Hunter Wilds 200233 84802 31.111092\n"}
[Think]
**Preparing target profiles**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.1 seconds
Output:
{}
{"chunk_id":"866d8a","wall_time_seconds":0.000004667,"exit_code":0,"original_token_count":168,"output":"{\"done\": 240, \"of\": 480, \"appid\": 2261430, \"source\": \"api_fallback\", \"total\": 1116, \"english\": 641}\n{\"done\": 241, \"of\": 480, \"appid\": 1838970, \"source\": \"api_fallback\", \"total\": 347, \"english\": 283}\n{\"done\": 242, \"of\": 480, \"appid\": 602960, \"source\": \"store_props\", \"total\": 61758, \"english\": 28697}\n[('english', 84802, 59673), ('schinese', 49452, 10544), ('japanese', 18785, 5745), ('tchinese', 15057, 6788), ('koreana', 11068, 6379), ('german', 4605, 3494), ('spanish', 4116, 3147), ('french', 3007, 2287), ('brazilian', 2822, 2126), ('latam', 1616, 1219), ('russian', 1283, 854), ('thai', 1187, 884), ('italian', 664, 513), ('turkish', 339, 229), ('polish', 289, 214)]\n"}
One concrete example shows how much language can change the picture: in the collected Monster Hunter Wilds summary, English-marked reviews are about 70% positive, versus 21% for Simplified Chinese and 31% for Japanese. All three have large denominators.
That’s a measurable difference in reception. The counts alone won’t explain it, but they show why an English-only reading can miss something substantial.
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/language-attention-2026...)
Script completed
Wall time 1.0 seconds
Output:
{"chunk_id":"ae8cc5","wall_time_seconds":0.860830909,"exit_code":0,"original_token_count":845,"output":"{\"collected\": 251, \"sample\": 480, \"complete\": false, \"unweighted_low_english10\": 29}\n3099660 Love is All Around: Echoes of Yesterday total 1853 en 99 support True pitch 在本作中,“你”化身为即将迎来毕业季的男主顾易,在对未来的迷茫与憧憬中,你将与六位性格迥异、各具魅力的女生发生一连串的故事,她们或是鬼马少女、或是温柔甜心、猫系娇女、豆腐西施,千娇百媚、亦幻亦真,敬过往。\n2389240 G.O.P.O.T.A total 1493 en 81 support True pitch And you're a chubby guy?\n4087980 Fickle Card Legend total 965 en 5 support True pitch A side-scrolling, non-turn-based card battle game. Level up, collect gear, and challenge stages and bosses with a unique card-clash combat system. Designed for the '80s generation who are tired of modern generic titles. No AFK, no easy wins. New-gen players, choose wisely.\n1528130 Suicide Countdown: 7 Days total 989 en 86 support True pitch Only 7 days remain until death embraces you -- the everyday life of a young boy begins to distort little by little, unfolding into a bizarre and ghastly series of events... When fate comes knocking, will you have the courage to make a choice?\n4258390 Enjoy Amoy&Sisters total 865 en 9 support True pitch \"Enjoy Amoy & Sisters\" is a live-action interactive romance game. You play as an overseas Chinese person who, in response to the invitation from the two female leads, Ah Yin and Xiao Xi, visits Xiamen, the ancestral hometown, for the first time.\n2162680 Doom Sweeper total 781 en 66 support True pitch DOOM SWEEPER is a 2D pixel-style game. Clean up the approaching zombie climax, and exchange it for cash, embarking on a journey to become an arms dealer in the apocalypse. Complete the game, unlock more items in the shop, and achieve various achievements to obtain different CG!\n1164000 六阶谜题 six-step mystery total 584 en 1 support False pitch 失意青年刘在机缘巧合下得到了一份离奇的工作,在命运齿轮的推动下,结识了几名性格各异的少女。忽然有一天祸从天降,他卷入了一起绑架案,并被迫参与一场事关生死的游戏。在求生的同时,他不得不重新审视过去生活寻求蛛丝马迹,那看似平静的生活实则早已暗流涌动……\n1815440 Chinese Driving Test Simulator total 599 en 29 support False pitch Are you ready to take on the challenge of the Chinese driving test? For which it will test your skill of driving, knowledge of vehicle and traffic rules. The Chinese Driving Test Simulator will show you a complete, realistic Chinese driving test experience.\n1017410 Tetra Project - 原石计划 total 530 en 1 support False pitch 欢迎来到原石计划,你已成为计划的一部分。在这个计划里,你将带领辛西娅逃出危险的地下研究所,战棋+卡牌+roguelike+DBG的玩法和丰富MOD将给你带来独特的全新体验\n2304680 Tofas Sahin: Online Car Driving total 556 en 28 support True pitch Drift in the city with the multiplayer tofas sahin game.\n2871390 Poly TD total 578 en 56 support True pitch Classic Warcraft III TD customs meet roguelike strategy. Summon and merge units to evolve them into legendary figures like Joan of Arc, Guan Yu, and Lovecraft—Legendary heroes from across time and space await! Prove your ultimate synergy against endless waves of enemies.\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/language-attention-2026-09-07/store_collection_...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"afbccb","wall_time_seconds":0.195097298,"exit_code":0,"original_token_count":408,"output":"{\"done\": 261, \"of\": 480, \"appid\": 3030980, \"source\": \"api_fallback\", \"total\": 319, \"english\": 92}\n{\"done\": 262, \"of\": 480, \"appid\": 3764200, \"source\": \"api_fallback\", \"total\": 105868, \"english\": 52974}\n{\"done\": 263, \"of\": 480, \"appid\": 3050900, \"source\": \"store_props\", \"total\": 2049, \"english\": 1493}\n appid name total english_count english_share english_support\n4148240 Road to Empress Ⅱ 7740 499 0.064470 True\n1120810 Eastern Exorcist 6099 333 0.054599 True\n1002560 Tiny Snow 3885 152 0.039125 True\n3446240 Eastern Era 2995 259 0.086477 True\n3561220 Pass the Fear 2937 178 0.060606 True\n1649730 xiuzhen idle 2311 184 0.079619 True\n2842800 Dream of Corpse Lady 2080 100 0.048077 True\n1398740 The Chrono Jotter 1964 151 0.076884 True\n3099660 Love is All Around: Echoes of Yesterday 1853 99 0.053427 True\n4395300 Dancing Line 1604 118 0.073566 True\n2389240 G.O.P.O.T.A 1493 81 0.054253 True\n1528130 Suicide Countdown: 7 Days 989 86 0.086957 True\n"}
[Think]
**Building language-target list**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"2f797e","wall_time_seconds":0.000004227,"exit_code":0,"original_token_count":92,"output":"{\"done\": 274, \"of\": 480, \"appid\": 1478500, \"source\": \"store_props\", \"total\": 29290, \"english\": 21721}\n{\"done\": 275, \"of\": 480, \"appid\": 4032350, \"source\": \"store_props\", \"total\": 2431, \"english\": 2391}\n{\"done\": 276, \"of\": 480, \"appid\": 3476880, \"source\": \"api_fallback\", \"total\": 576, \"english\": 281}\n475 steam-research/language-attention-2026-09-07/requests.jsonl\n"}
[Think]
**Updating the source manifest**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,numpy a...)
Script completed
Wall time 2.0 seconds
Output:
{"chunk_id":"865c14","wall_time_seconds":1.878802305,"exit_code":0,"original_token_count":76,"output":"{'known_frame_english_support': np.float64(0.951315011820331), 'sample_weighted_estimate': np.float64(0.9370659722222222), 'lo95': np.float64(0.9040298294645424), 'hi95': np.float64(0.9701021149799021), 'note': 'A pre-outcome check using an attribute known for the full frame; no sample replacement.'}\n"}
[Think]
**Framing English coverage estimate**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/language-attention-2026-09-07/store_collection_...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"bdfc0c","wall_time_seconds":0.000004666,"exit_code":0,"original_token_count":90,"output":"{\"done\": 296, \"of\": 480, \"appid\": 1413660, \"source\": \"api_fallback\", \"total\": 551, \"english\": 250}\n{\"done\": 297, \"of\": 480, \"appid\": 4046590, \"source\": \"api_fallback\", \"total\": 436, \"english\": 26}\n{\"done\": 298, \"of\": 480, \"appid\": 1962700, \"source\": \"store_props\", \"total\": 116427, \"english\": 71681}\nCalls 513 last 2026-09-07T02:39:29.341781+00:00 errors 0\n"}
The collection is past 300 games with no request errors. The sampling check also looks sound: weighting the sample recovers the catalog’s known English-support rate within its sampling interval.
I’m preserving the full sample, including familiar games and English-heavy games. Those are necessary comparisons for estimating how unusual the discoveries actually are.
sleep ({"duration_ms": 45000, "_codex": true})
Wall time: 45.0167 seconds
Sleep completed.
[Think]
**Preparing count-monitoring fields**
exec ({"code": "text(await tools.exec_command({cmd:\"flock steam-research/language-attention-2026-09-07/collection.lock -c ...)
Script completed
Wall time 1.2 seconds
Output:
{"chunk_id":"c96ce7","wall_time_seconds":1.001583991,"session_id":55095,"original_token_count":0,"output":""}
{"chunk_id":"39fd19","wall_time_seconds":0.000002762,"exit_code":0,"original_token_count":75,"output":"{\"done\": 323, \"of\": 480, \"appid\": 3054690, \"source\": \"store_props\", \"total\": 2514, \"english\": 1150}\n{\"done\": 324, \"of\": 480, \"appid\": 3412160, \"source\": \"api_fallback\", \"total\": 859, \"english\": 491}\n{\"done\": 325, \"of\": 480, \"appid\": 523770, \"source\": \"api_fallback\", \"total\": 135, \"english\": 104}\n"}
[Think]
**Awaiting analysis completion**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nfrom pathlib import Path\n...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"024736","wall_time_seconds":0.243831224,"exit_code":0,"original_token_count":646,"output":"collected 338 strict examples 16\n appid name total english_count english short\n2304680 Tofas Sahin: Online Car Driving 556 28 True Drift in the city with the multiplayer tofas sahin game.\n1815440 Chinese Driving Test Simulator 599 29 False Are you ready to take on the challenge of the Chinese driving test? For which it will test your skill of driving, knowledge of vehicle and traffic rules. The Chinese Driving Tes...\n1993150 轮回修仙路 2943 31 False 轮回修仙路是一款开放世界的3D修仙游戏,仙界破碎,化为无尽小世界,其中妖魔横行,正魔大战,仙路崩灭。唯有通过炼丹炼器,强大自己。你能否御剑扫灭妖魔,渡过天劫轮回,逆天成仙!\n1731200 TRATRITLE 796 67 True A little master lived happily with his maids. But what bothered him was that the maids were too naive and simple. One day, he received a letter from his father. He thought he co...\n2088160 天外武林 (Traveler of Wuxia) 3148 84 True Traveler of Wuxia is a deck-building rogue-lite game that mixes with Wuxia story and card combination. You will play as a young hero exploring to a unknown martial arts world. U...\n1817940 Love Delivery 2407 36 True A coming-of-age romance simulation that follows the raw, relatable journey of a real loser.\n3279830 导演,请多多指教 565 2 False 《导演,请多多指教》是steam全球首部导演模拟器,而你则将化身导演,经历从选角到发掘演员的内心的一系列内容,为拍摄出一部完美的作品而殚精竭虑。6位性格各异的女性,将会给你的电影生涯带来怎样的变化?导演,请来多多指教吧。《导演,请多多指教》是steam全球首部导演模拟器,而你则将化身导演,经历从选角到发掘演员的内心的一系列内容,为拍摄出一部完美的作品而...\n"}
Traveler of Wuxia is one particularly relevant discovery so far: 3,148 reviews, only 84 marked English, with English support listed. Its store description explicitly presents it as a Wuxia deckbuilding roguelite.
That is the kind of result this method can establish reliably: a substantial game in a familiar mechanical family that has received little English-marked review attention. I’ll include it alongside examples from other activities and languages.
sleep ({"duration_ms": 45000, "_codex": true})
Wall time: 45.0033 seconds
Sleep completed.
[Think]
**Waiting for results**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"57e762","wall_time_seconds":0.213874638,"exit_code":0,"original_token_count":4029,"output":"\n 4087980 Fickle Card Legend English support True year 2026.0 price 7.99\nFickle Card Legend is a quirky RPG that combines card mechanics with side-scrolling combat. Unlike traditional turn-based card games, battles unfold in real time, delivering fast-paced and intuitive action. In each arena, your cards transform directly into characters who charge and clash. Timing and positioning are crucial—summon fighters, unleash skills, and control the pace of battle to defeat your enemies. Choose from three classic RPG paths—Warrior, Mage, or Taoist—and unlock powerful skills as you level up. Collect gear, enhance your deck, and build your own combat style to take on tougher challenges. The game keeps the satisfying sense of progression found in classic MMOs but removes the downsides: No pay-to-win — everything can be earned through play. No boss stealing — all rewards belong to you. No hostile player killing — enjoy a safe and uninterrupted adventure. Travel through diverse stages, face formidable bosses, and experience a full progression system—all in a single-player environment without the grind of online games. This is a lighthearted and offbeat fantasy adventure, where the growth of your deck and character determines how far you can go.\n\n 2842800 Dream of Corpse Lady English support True year 2026.0 price 9.99\nOh, a bunch of grave robbers woke up the slumbering Corpse Lady ... Maybe the world is gonna pay the price for Corpse Lady ’s bad mood after waking up... This is a deck-building strategy game. You’ll take on the role of the awakened Corpse Lady , commanding an army of puppets and harvesting wandering souls as resources, to turn the entire world into your personal \"collection\". Corpse Lady’s Game Time The full game features 5 wildly distinct main story campaigns and 10 challenge levels. Difficulty scales with your progress through the main story, and every level has its own unique lore—from the incompetent husband, the nine-tailed fox demon, to the otherworldly girl... Fight alongside Corpse Lady to crush those mortal heroes who dare to resist. Trap their bodies and wills forever as worthless \"collectibles\" in Corpse Lady ’s treasure vault. These triumphs will be preserved as victory CGs, and you’ll also unlock 6 distinct skins for Corpse Lady . Tipsy Dragon Maiden, Loyal Blade Spirit, Erotic Artist, Fallen Princess... Recruit a total of 28 followers with extraordinary abilities. Each one boasts a unique personality and a one-of-a-kind ultimate talent. Full voice acting throughout the game! Headlined by voice actors Xu Hui(Kafka from Honkai: Star Rail ) and Xie Ying(Ke Qing Genshin Impact), the entire cast nails the villainous vibe, breathing life into the game’s iconic characters! Swarm the field or hold your ground—fight and grow stronger. Corpse Lady can bestow blessings upon followers who shine in battle, boosting their base stats drastically and unlocking more powerful skill branches. Alternatively, you can summon an all-new unit to gain extra offensive opportunities. Pleasure in the Dark Scripts: Every time Corpse Lady levels up, she grants followers a \"Dark Script\". These scripts provide massive power boosts—but beware, overwhelming strength always comes with a deadly curse. Corpse Lady ’s Treasure Vault: Unlock over 100 magical artifacts to choose from, delivering devastating fire support to your followers. Some artifacts trigger exclusive effects when equipped by specific characters, awakening even more menacing abilities. Any excess loot can be smelted down for cold hard cash. Even death is trivial. Whenever a puppet falls in battle, as long as the game goes on, Corpse Lady can bring it back with a mere snap of her fingers—even if the puppet itself has been \"dead\" for eons, heh. In the end, all of this is nothing more than a little game for Corpse Lady to kill time with... after she woke up from her long slumber.\n\n 1017410 Tetra Project - 原石计划 English support False year 2019.0 price 9.99\n大家好,我是AliveGameStudio,大家可以叫我老A。 我正在全职开发原石计划,大家可以到这个视频看看开发的心路历程 《为了做游戏,我花了10年自学程序、美术、音乐、策划》: ---- 欢迎来到原石计划,你已成为计划的一部分。在这个计划里,你将带领辛西娅逃出危险的地下研究所,战棋+卡牌+roguelike+DBG的玩法和丰富MOD将给你带来独特的全新体验 「卡牌流派」 游戏内置多种流派,比如燃烧流、冰冻流、电击流、工匠流、辅助流、代偿流、击退流、运气流等,虽然我是围绕着流派去设计的卡牌,但如果把不同流派的卡牌相组合,同样也能产生出新的流派。 「战棋」 自由切换:玩家可以在自己的回合自由切换控制不同队友,不管这个队友是否使用了卡牌,只要他还有能量或者体力,他就可以继续行动。这样即丰富了战斗的灵活性,也丰富了策略性。 「roguelike/随机地图」 玩家每次游戏会得到随机的卡片,经历随机的事件,并且游戏具有类似以撒那样的随机地图,玩家可以在房间之间自由探索 「创意工坊」 原石计划对创意工坊有着极大支持,卡牌使用Excel作为开发工具,通过设定表格数据,你可以很简单的制作出效果丰富的卡牌和角色。当然,作为玩家,你也可以在这里找到来自MOD作者们的优秀创作。另外,为了更好维护创意工坊,游戏使用自架的服务器。 下面是来自MOD作者的优秀创作: 「【塔】纷争篇 by 青尘」 「迟暮 by 奶油」 「对异原驱自卫系统 by 奶油」 「回溯记忆 by 黑德」 订阅全部MOD后,目前有接近2W张卡牌 目前的创意工坊 「多角色」 游戏有多个可选角色,每个角色有不同的初始手牌和装备卡。玩家可以根据这些角色的初始卡片搭配出不同流派。 「队友」 游戏每个可选角色又配有不同的队友,队友可以用于辅助,也可以一起参与伤害输出,甚至拿来送人头,这取决于玩家的流派。 另外也有队友可以在中途加入,这将产生出很多不同的策略。 「环境」 多种可互动的环境物体,比如会爆炸的油桶、会灭火的灭火器、将人物卡住的捕兽夹、障碍物、自毁系统、黑洞等等,也有专门用于生成这些环境物体的卡牌,丰富了战斗时的可交互性。 大家有什么意见建议或者催更游戏,欢迎加入《原石计划》交流群:951022336 MOD作者欢迎加入《原石计划》MOD技术交流群:652279837\n\n 3561220 Pass the Fear English support True year 2026.0 price 18.99\nScraped together mid-escape, this motley crew consists of the Iron Bucket Knight, the Explosive Cutie, the One-Eyed Codger, the Money Whiz, and a mysterious nun picked up by the roadside... Every single one of them is deathly afraid of kicking the bucket, yet they have no choice but to grab their guns and face the fight head-on! Your mission is to flee the island within 12 hours. But as you reach the coastline,a despair-inducing Storm Wall blocks your path. As the monsters multiply, a dark conspiracy slowly begins to unravel... Fancy weapons, special Weapon Parts, Relic fusion, Tarot Cards, elemental effects, random events... Every pickup is another experiment in weapon customization. Stack up Projectiles and become a \"Fireworks Master\", or pour everything into a single shot and melt an entire health bar—your weapons, your rules. \\ , \\ , \\ , \\ , \\ ... There is no single right answer—only increasingly outrageous combinations. Mix and match them to create Transmutation chains, endless Ultimates, looping triggers, exponential damage scaling, and more. Every time your build comes together, it turns into a wildly satisfying run you will not want to put down. As you venture deeper, \\ and \\ will help you grow ever stronger. Higher difficulties bring tougher enemies—and better drop rates. They also unlock the unique \\ mode, where every Battle Scar comes with both a boon and a curse. High risk, high reward. Harness the boons, master the curses, and forge a one-of-a-kind ultimate build that pushes beyond the limits! Multiplayer has everything you would expect: clutch saves, item swapping, and fighting through tough encounters together... But the real fun is farming up quietly in the early game, then surging ahead to overtake everyone in damage later! Check the DPS rankings—who is the true damage king of your squad, and who is the poor soul stuck doing all the thankless work as the team's \"support bot\"? Join the Community / Discord! If you’ve found bugs, want to share suggestions, or just feel like showing off your insanely cool build—our Discord is the best place to do it!\n\n 2304680 Tofas Sahin: Online Car Driving English support True year 2023.0 price 0.99\nThis particular tofas online car game, which provides the opportunity to have fun, opens the doors of an unlimited world. In this game, you can use the tofas sahin car and be involved in the fun by drifting. Tofas drift and sahin car simulator players offer the chance to have a more enjoyable time with its multiplayer mode. Sahin games and tofas modified simulator players provide an uninterrupted player experience with their quality infrastructure. In this enjoyable tofas game, you can put ramps and jump over these ramps. At the same time, it is possible to use the chance of tofas drift while doing this. Tofas sahin and car game simulator players can reveal their mastery and skills; You can show how effectively you can drift with hawk vehicles. There is only tofas sahin as a tool in this regard, and it gives a chance to use many features through different modes. You will reach the peak of fun with these tofas and drift cars while passing other obstacles. With Tofas Online Car Game, players can drift and compete with each other with realistic driving physics in a detailed city. Car tuning and online game simulator players can experience exciting moments by crossing the tracks using many customization privileges and features. While jumping by setting up ramps, it is possible to show significant drift with the hawk tofas vehicle. Tofas drift and hawk simulator players can drive the car they want in fun parkour thanks to the exceptionally personalized tofas. Tofas sahin game and multiplayer car players can play with their friends or join different rooms with the room setting feature. If the players want, they can set up private rooms with tofas sahin. At the same time, if they wish, they can use it by entering the previously established rooms. In the online car and falcon game, up to 6 users can use these rooms by logging into a room. Especially in recent years, races on tofas and sahin cars have attracted much attention. This online game provides quality by taking these races to the next level and offers a fun environment for online race lovers. There is a chance to use three physical modes for sahin and tofas car models in the game. Car games and tofas sahin simulator players also have the opportunity to change these modes while playing the game. Thus, you can drive on the roads by changing the physics of the tofas sahin vehicle according to your taste and desire. In this way, while racing in the game, you can change the physics mode of tofas sahin in different areas and increase the driving pleasure to a much higher level. This unique hawk simulator provides a fun drifting environment and is presented with high graphic animation. This drift cars and tofas car game, which is presented to the users by creating a very realistic effect, provides a compelling simulator structure. Sahin drift and tofas car simulator players enjoy realistic physics and driving in a big city. You can bring the tofas game to the point you want through different modes and vehicle customizations. At the same time, it is possible to evaluate this game with other opponents as multiplayer. Car modified and tofas drift simulator players experience a fun simulator with vehicles you can prepare for yourself under a wide range.\n\n 1993150 轮回修仙路 English support False year 2022.0 price 16.99\n3D修仙肉鸽类游戏,可以炼丹,炼器,和NPC交互组队,结为道侣等等,最终通过不断的转世轮回,历劫而成仙。 学习强大神通,横扫妖魔 在游戏中,你可以模拟炼丹,以丹道而成仙 也可以炼器,获得神兵法宝,试剑天下 还可以通过降服灵兽,培养它们随你降妖除魔 游戏中有五行灵根,不同灵根可以学到不同的功法,每次提升等级,都可以获得对角色和技能的加成,让你的角色更加个性化,每次游戏都能体验到不一样的修仙之路。 在游戏中,做任何事情,都要消耗寿元,寿元耗尽就会进入轮回。而每次轮回,都会根据你上一世的经历获得一定的天命和道心,轮回后还会继承上一世的境界和人际关系,以及遗留下来的部分装备道具,下一世的你会变得更强。 最终将历百世红尘,铸无暇道心,渡九世天劫而成仙!\n\n 2088160 天外武林 (Traveler of Wuxia) English support True year 2023.0 price 24.99\nTraveler of Wuxia is a deck-building rogue-lite game that combines the plot twist from the Wuxia novel and the variety of martial arts. This game allows you to explore a Wuxia world that you never experience. Deck Building and Combo Plays In this vast Wuxia world, there are hundreds of cards to explore. It may be challenging to learn them all, so choose wisely. In every adventure, you'll encounter new events and martial arts moves to discover. As you find new cards, you'll uncover hidden combos between different cards. Only a true master who learns the martial arts combos can become the champion of the Wuxia world. Memorable Teammates In this chaotic world, the young hero must find the lost relic. It's a difficult journey, but you will encounter teammates with different features. Learning your teammate's moves may make the battles easier. Various Events and Characters In the Wuxia world of Heluo, hundreds of mysterious events and a diverse array of characters await your exploration. You'll be faced with difficult decisions that influence life and death. However, be cautious, as your teammates may have their thoughts. Death is only the Beginning For the hero who possesses the blessing, death is not the end but merely the beginning. With this blessing, you will grow stronger after each demise, even bringing something back that can impact your next adventure.\n\n 1817940 Love Delivery English support True year 2021.0 price 14.99\nYou’re 22 years old. GED graduate. Delivering food on a motorbike to scrape by. One rainy day, you get into an accident on the job— That’s when you meet Juhee, and she offers you a job at her small, struggling café. There, you encounter another girl who keeps catching your eye—Latte. As your life becomes entangled with these two women, can you finally break free from your loser past and experience true love? Latte Kwon (CV. Shin On-yu) 22 / Aspiring Actress \"Wait, you’re fantasizing about me just because I talked to you a few times?\" Blunt and cold, yet somehow always close by. Is she just using you? Or... is there something more behind her casual treatment? Juhee Ban (CV. Lee Myeong-ho) 24 / Café Owner \"Let’s meet again tomorrow—with smiles.\" Warm-hearted and thoughtful, she clings to her collapsing café with a secret she won’t share. Haunted by past trauma, she struggles to trust men—but maybe, just maybe, she’s beginning to open her heart to you. 1. Professional Voice Acting + High-Quality CG Over 20 full CG illustrations and fully voiced scenes bring the emotional story of both heroines vividly to life. 2. Life Management Mini-Game – Grow the 'Real' You Balance part-time café work, self-improvement, and time with the heroines. Shape your path through choices that determine the story’s flow—and its ending.\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/language-attention-2026-09-07/store_collection_...)
Script completed
Wall time 0.0 seconds
Output:
{"chunk_id":"80407a","wall_time_seconds":0.000003129,"exit_code":0,"original_token_count":91,"output":"{\"done\": 372, \"of\": 480, \"appid\": 2866670, \"source\": \"api_fallback\", \"total\": 889, \"english\": 756}\n{\"done\": 373, \"of\": 480, \"appid\": 869690, \"source\": \"api_fallback\", \"total\": 230, \"english\": 143}\n{\"done\": 374, \"of\": 480, \"appid\": 1062090, \"source\": \"store_props\", \"total\": 38269, \"english\": 23964}\n631 steam-research/language-attention-2026-09-07/requests.jsonl\n"}
[Think]
**Preparing full-sample analysis**
The main sample is nearing completion. I’ve also kept a small set of additional build-related examples with low English shares but slightly more than 100 English reviews, so the discovery list won’t hinge on that arbitrary cutoff.
The statistical estimates will still use the original frozen sample and thresholds. Those additional examples are for inspection, not for changing the measured prevalence.
sleep ({"duration_ms": 45000, "_codex": true})
Wall time: 45.0027 seconds
Sleep completed.
[Think]
**Precomputing domain-size metadata**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/language-attention-2026-09-07/store_collection_...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"3696e4","wall_time_seconds":0.000004088,"exit_code":0,"original_token_count":88,"output":"{\"done\": 408, \"of\": 480, \"appid\": 3900120, \"source\": \"api_fallback\", \"total\": 541, \"english\": 78}\n{\"done\": 409, \"of\": 480, \"appid\": 1172530, \"source\": \"api_fallback\", \"total\": 111, \"english\": 79}\n{\"done\": 410, \"of\": 480, \"appid\": 1113560, \"source\": \"api_fallback\", \"total\": 21449, \"english\": 11679}\nrequests 695 latest 2026-09-07T02:45:33.320078+00:00\n"}
[Think]
**Documenting adaptive rules**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"e6a60f","wall_time_seconds":0.000004314,"exit_code":2,"original_token_count":102,"output":"{\"done\": 421, \"of\": 480, \"appid\": 1126990, \"source\": \"api_fallback\", \"total\": 180, \"english\": 148}\n{\"done\": 422, \"of\": 480, \"appid\": 1794680, \"source\": \"store_props\", \"total\": 251328, \"english\": 127804}\n{\"done\": 423, \"of\": 480, \"appid\": 433550, \"source\": \"store_props\", \"total\": 3574, \"english\": 1721}\nls: cannot access 'steam-research/language-attention-2026-09-07/summary.json': No such file or directory\n"}
[Think]
**Completing profile collection**
The final part of the main sample is coming in. The subsequent language profiles are deliberately smaller: 32 sampled games across low, mixed, and high English-share groups, plus targeted checks for the discovery examples.
For those profiles, I’ll keep unqueried languages as an explicit remainder. That avoids making a selected list of languages look like the entire audience.
sleep ({"duration_ms": 45000, "_codex": true})
Wall time: 45.0043 seconds
Sleep completed.
[Think]
**Reviewing prepared weighted results**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/language-attention-2026-09-07/store_collection_...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"f318f6","wall_time_seconds":0.000002949,"exit_code":0,"original_token_count":83,"output":"{\"done\": 456, \"of\": 480, \"appid\": 3124230, \"source\": \"api_fallback\", \"total\": 572, \"english\": 302}\n{\"done\": 457, \"of\": 480, \"appid\": 1429670, \"source\": \"api_fallback\", \"total\": 141, \"english\": 2}\n{\"done\": 458, \"of\": 480, \"appid\": 865360, \"source\": \"store_props\", \"total\": 14464, \"english\": 4972}\nMain estimates pending completion\n"}
[Think]
**Waiting for analysis results**
sleep ({"duration_ms": 45000, "_codex": true})
Wall time: 45.0020 seconds
Sleep completed.
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/language-attention-2026-09-07/store_collection_...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"903110","wall_time_seconds":0.000002792,"exit_code":0,"original_token_count":64,"output":" File \"/usr/lib/python3.14/site-packages/requests/adapters.py\", line 742, in send\n raise ReadTimeout(e, request=request)\nrequests.exceptions.ReadTimeout: HTTPSConnectionPool(host='store.steampowered.com', port=443): Read timed out. (read timeout=35)\n"}
[Think]
**Inspect collected data**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -16 steam-research/language-attention-2026-09-07/store_collection...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"75c2c8","wall_time_seconds":0.208327063,"exit_code":0,"original_token_count":1124,"output":"\nTraceback (most recent call last):\n File \"/home/adn/a327ex/steam-research/language-attention-2026-09-07/collect_store.py\", line 12, in <module>\n raw=client.get(f'https://store.steampowered.com/app/{row.appid}/',{'l':'english','cc':'us'},'store_page',str(row.appid));text=raw.decode('utf-8')\n File \"/home/adn/a327ex/steam-research/language-attention-2026-09-07/net.py\", line 24, in get\n r=self.session.get(url,params=params,timeout=(10,35),stream=True)\n File \"/usr/lib/python3.14/site-packages/requests/sessions.py\", line 671, in get\n return self.request(\"GET\", url, params=params, **kwargs)\n ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/lib/python3.14/site-packages/requests/sessions.py\", line 651, in request\n resp = self.send(prep, **send_kwargs)\n File \"/usr/lib/python3.14/site-packages/requests/sessions.py\", line 784, in send\n r = adapter.send(request, **kwargs)\n File \"/usr/lib/python3.14/site-packages/requests/adapters.py\", line 742, in send\n raise ReadTimeout(e, request=request)\nrequests.exceptions.ReadTimeout: HTTPSConnectionPool(host='store.steampowered.com', port=443): Read timed out. (read timeout=35)\n{\n \"active\": false,\n \"scope\": \"480 frozen stratified games; storefront aggregate review language summaries and bounded API verification/decomposition; no individual reviews or media\",\n \"max_requests_including_probes\": 1400,\n \"min_interval_seconds\": 2,\n \"retries\": 0,\n \"max_response_bytes\": 4000000,\n \"stop_on_error\": true,\n \"authorization\": \"Owner approved direction 6 and bounded additional language collection in this task; bulk catalog remains paused\",\n \"stop_reason\": \"HTTPSConnectionPool(host='store.steampowered.com', port=443): Read timed out. (read timeout=35)\"\n}{\"sequence\": 767, \"started_at\": \"2026-09-07T02:47:57.040097+00:00\", \"started_epoch\": 1788749277.0401196, \"url\": \"https://store.steampowered.com/app/865360/\", \"params\": {\"l\": \"english\", \"cc\": \"us\"}, \"kind\": \"store_page\", \"key\": \"865360\", \"status\": 200, \"final_url\": \"https://store.steampowered.com/app/865360/?l=english&cc=us\", \"bytes\": 173047, \"sha256\": \"3f83aef00ef31099581e78bbc773afb579e401488bab1d2fe66ebee5a6d651e8\", \"finished_at\": \"2026-09-07T02:47:57.411395+00:00\"}\n{\"sequence\": 768, \"started_at\": \"2026-09-07T02:47:59.040186+00:00\", \"started_epoch\": 1788749279.0402005, \"url\": \"https://store.steampowered.com/app/421170/\", \"params\": {\"l\": \"english\", \"cc\": \"us\"}, \"kind\": \"store_page\", \"key\": \"421170\", \"error\": \"HTTPSConnectionPool(host='store.steampowered.com', port=443): Read timed out. (read timeout=35)\", \"finished_at\": \"2026-09-07T02:48:34.077064+00:00\"}\nCompleted 458\n appid name sample_order stratum\n 421170 Indivisible 458 2019-22 / 2000-9999\n 878670 Shenmue III 459 2019-22 / 500-1999\n2285650 Sword and Fairy Inn 460 2023-25 / 100-499\n1501750 Lords of the Fallen 461 2023-25 / 10000+\n2617700 Tinkerlands 462 2023-25 / 2000-9999\n2330500 BETON BRUTAL 463 2023-25 / 500-1999\n3779390 Dungeon of Erotic Master Reboot 464 2026JanAug / 100-499\n4001890 How to Fish 465 2026JanAug / 10000+\n4466620 SiNiSistar 2 466 2026JanAug / 2000-9999\n3693650 Thrifty Business 467 2026JanAug / 500-1999\n1147500 A Gay's Life 468 2019-22 / 100-499\n1385380 Across the Obelisk 469 2019-22 / 10000+\n 956680 M.A.S.S. Builder 470 2019-22 / 2000-9999\n1132980 There Is No Light: Enhanced Edition 471 2019-22 / 500-1999\n3807550 Mycopsychosys: Remastered 472 2023-25 / 100-499\n 292000 No More Room in Hell 2 473 2023-25 / 10000+\n2026000 Our Adventurer Guild 474 2023-25 / 2000-9999\n1592290 Paranoia Place: Escape Together 475 2023-25 / 500-1999\n3155010 Necrosis: Dawn of Dread 476 2026JanAug / 100-499\n2432860 MENACE 477 2026JanAug / 10000+\n4304930 Chef Knight 478 2026JanAug / 2000-9999\n2767530 Wicked Seed 479 2026JanAug / 500-1999\n"}
[Think]
**Freezing 456 primary sample**
[Think]
**Freezing 456 primary sample**
One Steam page request timed out after 458 games, and the collector stopped under the agreed no-retry rule. There was no HTTP 429.
I’ll finish with the fully collected, balanced prefix of 456 games—38 from every sampling group—and preserve the other two as supplementary observations. That retains the sampling design without replacing the failed game. For individual languages, I’ll use the breakdowns already returned by Steam and clearly mark where those are incomplete; the additional API profile collection is now stopped.
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport json\nr=Path('ste...)
Script completed
Wall time 0.7 seconds
Output:
{"chunk_id":"b328ff","wall_time_seconds":0.000003018,"exit_code":0,"original_token_count":0,"output":""}
{}
{"chunk_id":"306f8c","wall_time_seconds":0.49153051,"exit_code":1,"original_token_count":96,"output":"Traceback (most recent call last):\n File \"/home/adn/a327ex/steam-research/language-attention-2026-09-07/analyze.py\", line 47, in <module>\n domains += [('price:'+p,d.price_band.eq(p)) for p in sorted(d.price_band.unique())]\n ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^\nTypeError: '<' not supported between instances of 'float' and 'str'\n"}
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"ff93f4","wall_time_seconds":1.000850428,"session_id":80688,"original_token_count":0,"output":""}
{"chunk_id":"126426","wall_time_seconds":0.000002765,"exit_code":1,"original_token_count":96,"output":"{\"collected\": 458, \"sample\": 480, \"complete\": false, \"unweighted_low_english10\": 52}\nTraceback (most recent call last):\n File \"/home/adn/a327ex/steam-research/language-attention-2026-09-07/prepare_profiles.py\", line 4, in <module>\n d=pd.read_parquet(R/'observations.parquet');assert len(d)==480\n ^^^^^^^^^^^\nAssertionError\n"}
[Think]
**Analyzing stored profiles offline**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.8 seconds
Output:
{}
{"chunk_id":"15fc1e","wall_time_seconds":0.669848425,"exit_code":0,"original_token_count":695,"output":"{\n \"games_with_reported_language_subsets\": 200,\n \"named_language_comparisons\": 1221,\n \"low_english10_with_confirmed_majority\": 18,\n \"all_low_english10\": 51,\n \"note\": \"Scored-language subsets favor larger games and languages. Unreported languages retained as an explicit remainder; missing languages are not zero.\"\n}\n{\n \"sample_n\": 456,\n \"population_n\": 13536,\n \"total_observed_reviews\": 6681746,\n \"observed_english_reviews\": 3417300,\n \"weighted_review_english_share\": 0.5029729579074516,\n \"weighted_review_english_share_lo95\": 0.4803089585285578,\n \"weighted_review_english_share_hi95\": 0.5256369572863453,\n \"english_support_sample_n\": 441,\n \"low_english10_sample_n\": 51,\n \"low_english10_with_support\": 38,\n \"count_drift_max_abs\": 1433,\n \"store_source\": 200,\n \"api_source\": 256\n}\n domain metric sample_n sample_k estimate lo95 hi95\n all low_english_10 456 51 0.132769 0.089466 0.176072\n all low_english_25 456 83 0.219135 0.167369 0.270900\n all majority_nonenglish 456 215 0.499351 0.436842 0.561860\n all low_english_absolute 456 86 0.333656 0.274846 0.392466\n all substantial_elsewhere_low_english 456 24 0.046842 0.027127 0.066557\n english_supported low_english_10 441 38 0.087687 0.052476 0.122898\n english_supported low_english_25 441 68 0.174917 0.127435 0.222399\n english_supported majority_nonenglish 441 200 0.471001 0.407146 0.534855\n english_supported low_english_absolute 441 73 0.299779 0.240334 0.359224\n english_supported substantial_elsewhere_low_english 441 17 0.031302 0.014504 0.048101\nenglish_not_listed low_english_10 15 13 0.928898 0.816591 1.000000\nenglish_not_listed low_english_25 15 15 1.000000 1.000000 1.000000\nenglish_not_listed majority_nonenglish 15 15 1.000000 1.000000 1.000000\nenglish_not_listed low_english_absolute 15 13 0.931909 0.821006 1.000000\nenglish_not_listed substantial_elsewhere_low_english 15 7 0.321265 0.087524 0.555006\n{\n \"eligible_pairs\": 389,\n \"english_higher\": 239,\n \"nonenglish_higher\": 148,\n \"median_absolute_gap_pp\": 2.5123103205707906,\n \"absolute_gap_10pp_or_more\": 41,\n \"weighted_abs_gap10_share_among_paired\": 0.1385170902903896,\n \"note\": \"Descriptive current recommendation differences, not nationality, culture, causal localization effects, or prospective tests.\"\n}\n"}
[Think]
**Computing weighted English support**
[Think]
**Computing weighted English support**
**Fixing degenerate intervals**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"2c29f2","wall_time_seconds":0.189920123,"exit_code":0,"original_token_count":2667,"output":" appid name total english_count english_support largest_reported_language share language_status\n1859910 Legend of Mortal 33661 497 False schinese 0.508660 confirmed majority from returned counts\n2495450 Winter Memories 10351 539 True schinese 0.790165 confirmed majority from returned counts\n3220060 The Weeping Swan: Ten Days of the City's Fall 8205 68 True schinese 0.945155 confirmed majority from returned counts\n4148240 Road to Empress Ⅱ 7740 499 True schinese 0.837597 confirmed majority from returned counts\n1202540 Marco & The Galaxy Dragon 7170 484 True schinese 0.809484 confirmed majority from returned counts\n1120810 Eastern Exorcist 6099 333 True schinese 0.883260 confirmed majority from returned counts\n1002560 Tiny Snow 3885 152 True schinese 0.927671 confirmed majority from returned counts\n1146970 My Vow to My Liege 3842 297 True schinese 0.885476 confirmed majority from returned counts\n2088160 天外武林 (Traveler of Wuxia) 3148 84 True schinese 0.866900 confirmed majority from returned counts\n1993150 轮回修仙路 2943 31 False schinese 0.963982 confirmed majority from returned counts\n3561220 Pass the Fear 2937 178 True schinese 0.861423 confirmed majority from returned counts\n3446240 Eastern Era 2995 259 True schinese 0.770284 confirmed majority from returned counts\n3470560 Millennium Dream 2588 52 True schinese 0.956337 confirmed majority from returned counts\n4225940 SIFU Kidnapped! Adventure in the Women's Kingdom 2545 27 True schinese 0.970923 confirmed majority from returned counts\n2755330 Chushpan Simulator 2460 75 True russian 0.952439 confirmed majority from returned counts\n1817940 Love Delivery 2407 36 True koreana 0.968841 confirmed majority from returned counts\n1649730 xiuzhen idle 2311 184 True schinese 0.810904 confirmed majority from returned counts\n2842800 Dream of Corpse Lady 2080 100 True schinese 0.881731 confirmed majority from returned counts\n1398740 The Chrono Jotter 1964 151 True NaN NaN not established by available summaries\n3099660 Love is All Around: Echoes of Yesterday 1853 99 True NaN NaN not established by available summaries\n4395300 Dancing Line 1604 118 True NaN NaN not established by available summaries\n2389240 G.O.P.O.T.A 1493 81 True NaN NaN not established by available summaries\n 895110 Magical Battle Cry 976 2 False NaN NaN not established by available summaries\n4087980 Fickle Card Legend 965 5 True NaN NaN not established by available summaries\n1528130 Suicide Countdown: 7 Days 989 86 True NaN NaN not established by available summaries\n4258390 Enjoy Amoy&Sisters 865 9 True NaN NaN not established by available summaries\n1393410 Seek Girl V 920 76 True NaN NaN not established by available summaries\n3332830 Mr Right Simulator 753 7 False NaN NaN not established by available summaries\n1731200 TRATRITLE 796 67 True NaN NaN not established by available summaries\n2162680 Doom Sweeper 781 66 True NaN NaN not established by available summaries\n1164000 六阶谜题 six-step mystery 584 1 False NaN NaN not established by available summaries\n1815440 Chinese Driving Test Simulator 599 29 False NaN NaN not established by available summaries\n3279830 导演,请多多指教 565 2 False NaN NaN not established by available summaries\n1017410 Tetra Project - 原石计划 530 1 False NaN NaN not established by available summaries\n2304680 Tofas Sahin: Online Car Driving 556 28 True NaN NaN not established by available summaries\n2871390 Poly TD 578 56 True NaN NaN not established by available summaries\n3684500 Warlords Battleground: Extraction 516 13 True NaN NaN not established by available summaries\n4046590 Better Days 436 26 True NaN NaN not established by available summaries\n2168810 Dream Sketcher 390 5 True NaN NaN not established by available summaries\n1315160 鸢之歌-Singing Iris 391 11 False NaN NaN not established by available summaries\n4211860 Mushroom Nook 372 18 True NaN NaN not established by available summaries\n1870150 Xuan-Yuan Sword: The Clouds Faraway 208 7 False NaN NaN not established by available summaries\n1388320 老板,游戏凉了!- Game Company Simulator: back to 2000 201 1 True NaN NaN not established by available summaries\n1065200 Visitor2 / 来访者2 165 5 True NaN NaN not established by available summaries\n2470130 御姐初长成 157 2 False NaN NaN not established by available summaries\n3258560 I'm No Demonlord 159 9 True NaN NaN not established by available summaries\n2308670 Card Detective 146 5 True NaN NaN not established by available summaries\n2341920 三國立志傳2 135 7 False NaN NaN not established by available summaries\n4056810 东北往事 133 6 True NaN NaN not established by available summaries\n1418870 Winning Post 9 2021 115 0 False NaN NaN not established by available summaries\n4155010 No, I'm not a Voenkom 101 8 True NaN NaN not established by available summaries\n\nTAGS tag sample_n sample_k estimate lo95 hi95\n Action 229 13 0.065356 0.020660 0.110052\n Adventure 228 29 0.129425 0.070099 0.188750\n RPG 138 31 0.281104 0.174551 0.387656\n Strategy 117 19 0.165094 0.071701 0.258487\n Simulation 152 22 0.162009 0.084681 0.239338\n Puzzle 63 5 0.111031 0.004451 0.217610\n Horror 89 6 0.095815 0.009523 0.182107\n Action Roguelike 33 4 0.076628 0.000000 0.167628\nRoguelike Deckbuilder 10 1 0.022902 0.000000 0.064660\n Auto Battler 6 1 0.161576 0.000000 0.445923\n Turn-Based Tactics 30 3 0.126666 0.000000 0.310936\n JRPG 28 4 0.135954 0.000000 0.272014\n Visual Novel 56 21 0.330089 0.185116 0.475062\n FMV 14 8 0.675830 0.390376 0.961285\n Idler 18 3 0.177478 0.000000 0.373549\n Incremental 19 1 0.035144 0.000000 0.103270\n\nPERIODS domain metric estimate lo95 hi95\n period:2019-22 low_english_10 0.136032 0.072282 0.199782\n period:2019-22 majority_nonenglish 0.485234 0.390424 0.580044\n period:2023-25 low_english_10 0.132030 0.060151 0.203908\n period:2023-25 majority_nonenglish 0.521450 0.420640 0.622260\nperiod:2026JanAug low_english_10 0.123193 0.056094 0.190292\nperiod:2026JanAug majority_nonenglish 0.466557 0.361343 0.571770\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"81a622","wall_time_seconds":0.204712334,"exit_code":0,"original_token_count":2725,"output":" name language count share positive_pct\n Monster Hunter Wilds english 84802 0.423517 70.367444\n Monster Hunter Wilds schinese 49452 0.246972 21.321686\n Monster Hunter Wilds japanese 18785 0.093816 30.582912\n Monster Hunter Wilds tchinese 15057 0.075197 45.082022\n Monster Hunter Wilds koreana 11068 0.055276 57.634622\n Monster Hunter Wilds russian 1283 0.006408 66.562744\n Dream of Corpse Lady schinese 1834 0.881731 93.129771\n Dream of Corpse Lady english 100 0.048077 92.000000\n Pass the Fear schinese 2530 0.861423 77.588933\n Pass the Fear english 178 0.060606 87.640449\n 天外武林 (Traveler of Wuxia) schinese 2729 0.866900 84.866251\n 天外武林 (Traveler of Wuxia) tchinese 320 0.101652 91.875000\n 天外武林 (Traveler of Wuxia) english 84 0.026684 86.904762\n Love Delivery koreana 2332 0.968841 96.440823\n Love Delivery english 36 0.014956 91.666667\n Chushpan Simulator russian 2343 0.952439 85.531370\n Chushpan Simulator english 75 0.030488 78.666667\nThe Weeping Swan: Ten Days of the City's Fall schinese 7755 0.945155 58.181818\nThe Weeping Swan: Ten Days of the City's Fall tchinese 301 0.036685 66.112957\nThe Weeping Swan: Ten Days of the City's Fall english 68 0.008288 79.411765\n Legend of Mortal schinese 17122 0.508660 61.552389\n Legend of Mortal tchinese 11796 0.350435 93.489318\n Legend of Mortal koreana 3705 0.110068 94.763833\n Legend of Mortal japanese 532 0.015805 98.684211\n Legend of Mortal english 497 0.014765 92.354125\n Millennium Dream schinese 2475 0.956337 92.888889\n Millennium Dream english 52 0.020093 94.230769\n\n 2755330 Chushpan Simulator A game in which you have to go from an insignificant person to the king of the world\nContinuation of the story You will have to live the life of an ordinary person living in Uryupinsk, not a rich but purposeful person who must overcome life on the street to become the head of the world The quest chain will take you through different locations offering a variety of moral choices that will determine which of several endings you will receive. You will have to start your journey in a poor apartment and as a man without anything, and by collecting garbage and handing over bottles you will have the opportunity to move to a new social level. After that, you can participate in street fights and earn a living from it. Working as a watchman, you can earn small but honest money, or maybe you will choose the path of stealing products and reselling them on the black market? In the chushpan simulator game, you will be able to fully experience the severity of life and only you can decide how to get to a new level\n\n 3220060 The Weeping Swan: Ten Days of the City's Fall A visual novel of brutal beauty and tragic love. You wake up trapped inside your own dark fantasy, Lion Camel Kingdom. To escape a ten-day demon massacre, you must survive and recover your memories to solve the mystery of a drowned Yangzhou courtesan.\nIt is 1642, the final years of the Ming Dynasty. The scholar Fang Zhiyou loses his mind to grief when his childhood love—the celebrated Yangzhou courtesan Su Lianyan—is found drowned. Convinced that all men are beasts, he numbs himself with wine, his memories shattered. Three years later, drunk and broken, Fang Zhiyou awakens to a nightmare: he is trapped inside Lion Camel Kingdom , the world of his own macabre writings. Demon soldiers have breached the gates. As the city burns with slaughter, pillage, and flame, a man with no will to live finds a reason to survive: a feral young girl called Little Yan, whose face is a ghostly echo of Su Lianyan. He makes a desperate vow—to keep her alive until the massacre ends. As they flee through the charnel house of his own creation, fragments of his past resurface, blurring sanity into madness. But the truth, when it comes, will offer no escape from his destiny... An All-New Vision from the Creators of The Hungry Lamb From the team behind the million-selling visual novel The Hungry Lamb comes a brand new, standalone experience. You don't need to know the previous game to be drawn into this world of desperate beauty and impossible choices. Survival Is Just the Beginning History and nightmare collide. Based on the real-life tragedy of the Ten Days of Yangzhou (Yangzhou Massacre), you must navigate a city under siege by monsters. Every moment is a life-or-death calculation: Where to hide? When to run? Do you bargain with your last coins, or draw your blade and fight? Your choices—and your life—hang in the balance. A Story Stained in Bloo\n\n 1859910 Legend of Mortal The game world is set in a turbulent state and the mighty Tang-Man declines. The threats from the old enemies keep coming one after a nobody, will you choose either to leave yourself out of it or to fight for Tang-Man's future and turning the tide? The journey of yours,is unpredictable.\nLegend of Mortal is a stand-alone RPG for PC. Players as third-raters play civilian role in a sect, named Tang-Man, who has no plot armor and takes a damn hard life time. The game world is set in a turbulent state and the mighty Tang-Man declines. The threats from the old enemies keep coming one after another. As a nobody, will you choose either to leave yourself out of it or to fight for Tang-Man's future and turning the tide? Players can determine actor's personality through different trait parameters, which results in random events and changes the story even beyond any prediction. Regardless of how the story goes, it is definitely going to be sensational and unique. This makes your own story. Destiny “Once you get into this world, you have to deny yourself more or less.” Gameplayer may choose own path, but cruelty of destiny will lead to a path that no one knows. One may struggle and defeat destiny, but rarely can one knows what comes tomorrow. Tang-Man Gameplayer can play as an alchemist to produce medicine to benefits whole Tang-Man. Also, gameplayer can play as a blacksmith helps to forge weapon or busy on miscellaneous affairs. Even one may persuade master to alter strategy to lead the whole “Tang-Man” to victory. Personality Gameplayer’s personality may alters based on one’s strategy, action or destiny, therefore affects interactions with other NPCs to change storyline and combat strategy. Turn-Based Combat Strategic instructions may varies based on one’s personality. As one unveils more martial art secrets, one becomes mysterious and uncatchable. Ultimately, prevai\n\n 3684500 Warlords Battleground: Extraction Search, fight, escape, flip your fate! In a Three Kingdoms world split across thirteen provinces, form a pact with the Dragon Maiden and explore war-torn fragments. Loot, battle, manage your gear—each run is a high-stakes gamble where your ending is yours to write.\nEnter a suspenseful loop of search, combat, and retreat. In ever-shifting warzones, collect resources, fight for treasure, and escape at the right moment. The thrill of striking gold behind enemy lines and the heartbeat before extraction define the addictive core of this game. Each step is a risk—every successful extraction is a victory over fate. With a Mount & Blade-style pixel map, the thirteen provinces are filled with dynamic terrain and warring factions. Dive deep for fortune or play all sides to stay safe—how you survive is up to you. Each journey brings you face to face with shattered history! In this world, survival is the most romantic adventure. Fast-paced combat mixes skirmishes with tactical mayhem, testing your reflexes. Fight off waves of enemies, from soldiers to generals, ambushes to final stands. Shifting terrain and pressure keep battles unpredictable. Breaking through and surviving is the true victory! Scavenge, appraise, gear up. Each item could turn the tide. With limited backpack space, your extraction choices matter: what to keep, what to abandon. Build your own combat style with full freedom in character growth. Every choice is a bet on the course of your fate. Let the fame of your blade shine across the thirteen provinces! Fate isn’t set. Fight with all you have, and carve your path through the tide of history!\n\n 3470560 Millennium Dream Wander through dreamscapes woven from memories of the millennium. Use your camera to freeze tender fragments of days gone by, collecting lost shards of childhood. In an atmosphere where Chinese Dreamcore and Liminal Space intertwine, savor a warmth that feels both familiar and strange.\n「Millennium Dream」 is a solo-developed walking and photography simulator built around the core aesthetic of \"Chinese Dreamcore.\" You will submerge yourself in meticulously crafted dreams of days gone by... Take a nap in your bed on a lazy, sun-drenched afternoon; wander through the pedestrian street with its faint, damp scent—the one you used to walk with your mother after school; or return to an empty campus, the place where you once \"battled\" day and night. There are no clichéd jump scares or task lists here—only those fragments of old times that were once mundane but are now nowhere to be found. Distinctive Levels Immerse yourself in scenes of \"Chinese Dreamcore\" aesthetics, wandering alone through places both familiar and alien. In these structures and spaces stripped of crowds, experience a unique sensation: quiet, nostalgic, yet slightly unsettling. Everything here is incredibly familiar, like returning to your childhood home. Yet, at the same time, it feels so foreign... Hyper-realistic Dynamic Weather An afternoon buzzing with cicadas is instantly blanketed by heavy snow; a twilight of pouring rain turns into a misty morning in the blink of an eye. Every scene has a thousand faces. You can freely control the cycles of rain, snow, dawn, and dusk to find the moment that best resonates with your current state of mind. Capture Moments of the Past Will you use the grainy filter of an old mobile phone to recapture the unique, raw textures of the millennium? Or use high-contrast black-and-white film to capture the purest interplay of light and shadow? The camera in your ha\n"}
[Think]
**Analyzing language-score contrasts**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 1.2 seconds
Output:
{}
{}
{"chunk_id":"46f262","wall_time_seconds":1.001158185,"session_id":82094,"original_token_count":0,"output":""}
The completed estimates put about 13% of eligible games at 10% English reviews or less, and about 22% at 25% English or less. Roughly half have a non-English majority. These are weighted estimates, with sampling uncertainty—not raw percentages from the sample.
English availability doesn’t fully explain the low-English group: 38 of the 51 observed cases list English support. The returned breakdowns also confirm examples with Simplified Chinese, Russian, and Korean majorities.
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"077d2f","wall_time_seconds":0.238848532,"exit_code":0,"original_token_count":263,"output":" domain sample_n sample_k estimate lo95 hi95\n review_band:100-499 114 14 0.129339 0.060982 0.197696\n review_band:10000+ 114 2 0.020961 0.000000 0.047855\nreview_band:2000-9999 114 16 0.127217 0.059925 0.194509\n review_band:500-1999 114 19 0.168910 0.093540 0.244281\n price:12-20 143 10 0.041256 0.012688 0.069825\n price:20-40 107 2 0.011926 0.000000 0.031513\n price:5-7 24 3 0.158675 0.000000 0.342509\n price:7-12 76 18 0.229610 0.103975 0.355244\n price:<=5 51 15 0.336196 0.178796 0.493597\n price:>40 41 0 0.000000 NaN NaN\n price:missing 14 3 0.288861 0.000000 0.626289\nweighted share with English support among low English 0.6250512505125051\npositive>=80 low-English 32 of 51\nstrict cases 24\nknown majority languages among lowEnglish {'schinese': 16, 'russian': 1, 'koreana': 1}\n"}
{"chunk_id":"80c4f1","wall_time_seconds":0.000001758,"exit_code":0,"original_token_count":208,"output":"{\n \"sample_n\": 456,\n \"population_n\": 13536,\n \"total_observed_reviews\": 6681746,\n \"observed_english_reviews\": 3417300,\n \"weighted_review_english_share\": 0.5029729579074516,\n \"weighted_review_english_share_lo95\": 0.4803089585285578,\n \"weighted_review_english_share_hi95\": 0.5256369572863453,\n \"english_support_sample_n\": 441,\n \"low_english10_sample_n\": 51,\n \"low_english10_with_support\": 38,\n \"count_drift_max_abs\": 1433,\n \"store_source\": 200,\n \"api_source\": 256\n}\n{\n \"games_with_reported_language_subsets\": 200,\n \"named_language_comparisons\": 1221,\n \"low_english10_with_confirmed_majority\": 18,\n \"all_low_english10\": 51,\n \"note\": \"Scored-language subsets favor larger games and languages. Unreported languages retained as an explicit remainder; missing languages are not zero.\"\n}\nPassed 2134 checks; requests 768\n"}
[Think]
**Checking study methodology**
[Think]
**Checking study methodology**
exec ({"code": "const paths=[\"/home/adn/a327ex/steam-research/language-attention-2026-09-07/language_attention.png\",\"/ho...)
[
{
"type": "text",
"text": "Script completed\nWall time 0.0 seconds\nOutput:\n"
},
{
"type": "image",
"note": "[image: shown below]"
},
{
"type": "image",
"note": "[image: shown below]"
}
]


[Think]
**Revising method docs**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script failed
Wall time 0.0 seconds
Output:
Script error:
apply_patch verification failed: Failed to find expected lines in /home/adn/a327ex/steam-research/language-attention-2026-09-07/README.md:
original twelve strata. Do not present raw sample proportions as
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script failed
Wall time 0.0 seconds
Output:
Script error:
apply_patch verification failed: Failed to find expected lines in /home/adn/a327ex/steam-research/language-attention-2026-09-07/README.md:
no sample was replaced because of that comparison.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"d071d0","wall_time_seconds":0.00000461,"exit_code":0,"original_token_count":489,"output":"It queries languages in a fixed order and stops once one measured language alone\nexceeds half the all-language count. Missing languages remain unmeasured. These\ncases are explicitly selected examples, not an additional probability sample.\nThe actual targets and reasons are saved in `discovery_language_targets.csv`.\n\nThe original sample contains seventeen games without listed English support;\nnone has a wholly missing language-support array. A pre-outcome weighting check\nagainst the full frame's known English-support flag is retained in\n`sampling_benchmark.json`. No sample was replaced because of that comparison.\n\nPrimary documentation:\n- https://partner.steamgames.com/doc/store/getreviews\n- https://partner.steamgames.com/doc/store/localization/languages\n\n## Collection boundaries and reproduction\n\nScoped cap: 1,400 requests including four initial probes, minimum two seconds\nbetween request starts, no retries, stop on HTTP or network errors, response\nsize cap 4 MB. The research-root paused bulk-catalog policy remains unchanged.\nAll new calls use a single locked collector. A `STOP` file or inactive scoped\npolicy prevents further requests. Policies are closed at completion.\n\nScripts:\n1. `prepare.py` freezes the frame and sample; do not rerun to replace outcomes.\n2. `collect_store.py 24`, `pilot_check.py`, then `collect_store.py 480` collect\n the primary summaries. These require the scoped collection policy to be\n active and are not needed to reproduce saved results.\n3. `analyze.py` joins observations and computes primary weighted estimates.\n4. `prepare_profiles.py`, `collect_profiles.py`, `analyze_profiles.py` create\n and inspect the bounded diagnostic profiles. The collector is network work;\n the other steps are offline.\n\nUse `../.venv/bin/python`. Requests, sanitized aggregate response records,\nsample probabilities and specifications remain available. Original raw catalog\ndata and earlier studies are not changed.\n"}
[Think]
**Correcting target manifest claims**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.4 seconds
Output:
{}
{"chunk_id":"9cba29","wall_time_seconds":0.263439722,"exit_code":0,"original_token_count":277,"output":" appid name all_positive_pct\n4087980 Fickle Card Legend 67.668394\n2871390 Poly TD 81.833910\n2842800 Dream of Corpse Lady 93.028846\n1017410 Tetra Project - 原石计划 87.924528\n3561220 Pass the Fear 79.094314\n1120810 Eastern Exorcist 84.587637\n1993150 轮回修仙路 82.195039\n2088160 天外武林 (Traveler of Wuxia) 85.641677\n1817940 Love Delivery 96.260906\n2755330 Chushpan Simulator 85.284553\n3220060 The Weeping Swan: Ten Days of the City's Fall 58.915296\n1859910 Legend of Mortal 77.448679\n3684500 Warlords Battleground: Extraction 85.077519\n3470560 Millennium Dream 92.774343\n"}
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/language-att...)
Script completed
Wall time 0.0 seconds
Output:
{}
[Think]
**Verifying RPG prevalence estimates**
[Think]
**Verifying RPG prevalence estimates**
The results and discovery list are assembled. The clearest distinction is that low English attention does not necessarily mean poor English reception: Traveler of Wuxia and Dream of Corpse Lady have favorable English review scores despite very small English review counts.
I’m checking one final source of overlap in the genre tables—especially RPGs that are also tagged Visual Novel—so the summary won’t turn a narrative-heavy pattern into a claim about all RPGs.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"8f2685","wall_time_seconds":1.001212791,"session_id":64319,"original_token_count":0,"output":""}
[Think]
**Reviewing stratification**
exec ({"code": "text(await tools.write_stdin({session_id:64319,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":1400...)
Script completed
Wall time 0.6 seconds
Output:
{"chunk_id":"261d0f","wall_time_seconds":0.000002131,"exit_code":0,"original_token_count":182,"output":" domain metric sample_n sample_k estimate lo95 hi95\n excluding_VN_FMV low_english_10 394 29 0.090377 0.049607 0.131147\n excluding_VN_FMV substantial_elsewhere_low_english 394 13 0.030401 0.012546 0.048256\nexcluding_sexual_tags low_english_10 403 35 0.113007 0.069114 0.156901\nexcluding_sexual_tags substantial_elsewhere_low_english 403 17 0.037958 0.018596 0.057320\n RPG_excluding_VN_FMV low_english_10 114 16 0.188432 0.082281 0.294583\n RPG_excluding_VN_FMV substantial_elsewhere_low_english 114 5 0.037189 0.002503 0.071874\n"}
{"chunk_id":"f709e4","wall_time_seconds":0.38718508,"exit_code":0,"original_token_count":9,"output":"Passed 2134 checks; requests 768\n"}
[Think]
**Refining RPG estimate**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/language-...)
Script completed
Wall time 0.2 seconds
Output:
{}
{"chunk_id":"01f04d","wall_time_seconds":0.000004194,"exit_code":0,"original_token_count":9,"output":"Manifest files 1037 bytes 7259113\n"}
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
This found a substantial set of games with very little English-marked review activity, including games that already support English—and several build-heavy games that are useful additions to our reference pool.
The strongest finding is that low English attention and poor English reception are different things. Some of these games have very favorable English reviews; they simply have few of them.
I saved the full findings, annotated discoveries, and methods and reproduction instructions.
The broad pattern is measurable. The study represents 13,536 paid games released from 2019 through August 2026, outside Steam’s explicit-content descriptors, with at least 100 reviews in our snapshot. Selection used release period and review-count bands, without using names, descriptions, or language support.
The completed primary sample contains 456 games. Weighted back to that population:
| Review distribution | Estimated share of eligible games | Approximate 95% sampling interval |
|---|---|---|
| More than half non-English | 49.9% | 43.7–56.2% |
| At most 25% English | 21.9% | 16.7–27.1% |
| At most 10% English | 13.3% | 8.9–17.6% |
| At least 500 non-English reviews, fewer than 100 English, and at most 10% English | 4.7% | 2.7–6.7% |
That last, stricter definition corresponds to approximately 634 games in the eligible population, with a sampling range of roughly 367–901. We observed 24 such games directly.
The distinction between share and count matters. A game can have only 5% English reviews and still have thousands of English reviews. The stricter screen finds games with substantial activity elsewhere and an absolutely small English review presence.
These are review-language measurements, not shares of players, sales, nationality, or awareness outside Steam.
English availability explains some of the difference, but clearly not all of it. Of the 51 observed games with at most 10% English reviews, 38 list English support. After weighting, approximately 63% of this low-English group lists English support.
Among English-supported games, an estimated 8.8% have at most 10% English reviews.
This does not show that translation is ineffective. We do not know when English support was added, its quality, or what those games would have done without it. But it does establish that finding these games is not simply a matter of searching for titles unavailable in English.
The strongest broad concentrations are in RPGs and visual novels, although overlap matters.
| Tag | Sampled games | Observed cases with ≤10% English | Weighted estimate |
|---|---|---|---|
| RPG | 138 | 31 | 28.1% |
| Visual Novel | 56 | 21 | 33.0% |
| Strategy | 117 | 19 | 16.5% |
| Simulation | 152 | 22 | 16.2% |
| Adventure | 228 | 29 | 12.9% |
| Action | 229 | 13 | 6.5% |
These are overlapping tags, not exclusive genres. Removing Visual Novel/FMV games from the RPG group reduces its estimate to 18.8%, with considerable uncertainty. Some of the initial RPG concentration therefore comes from narrative games.
The phenomenon extends beyond those groups. Excluding Visual Novel/FMV games from the entire sample still leaves an estimated 9.0% with at most 10% English reviews. Excluding games tagged Sexual Content, Nudity, or Hentai leaves 11.3%.
I would not rank narrower build genres from this sample: there are only ten Roguelike Deckbuilders and six Auto Battlers. Those denominators are too small.
There also isn’t a convincing release-period trend. The low-English estimates are 13.6%, 13.2%, and 12.3% for 2019–2022, 2023–2025, and January–August 2026, with overlapping intervals. This looks like an existing part of Steam that our English-heavy interpretation underrepresents, rather than evidence of a sudden new development.
The concrete discoveries are more interesting than another ranking. These stood out as references relevant to your interests:
| Game | Total reviews | English reviews | English share | English support listed |
|---|---|---|---|---|
| Traveler of Wuxia | 3,148 | 84 | 2.7% | Yes |
| Dream of Corpse Lady | 2,080 | 100 | 4.8% | Yes |
| Pass the Fear | 2,937 | 178 | 6.1% | Yes |
| Fickle Card Legend | 965 | 5 | 0.5% | Yes |
| Tetra Project — 原石计划 | 530 | 1 | 0.2% | No |
| 轮回修仙路 | 2,943 | 31 | 1.1% | No |
| Legend of Mortal | 33,661 | 497 | 1.5% | No |
| Eastern Exorcist | 6,099 | 333 | 5.5% | Yes |
Their advertised mechanics give us concrete reasons to inspect them, without pretending descriptions establish gameplay depth:
- Traveler of Wuxia advertises martial-arts card combinations, teammates, events, and progression across deaths. Simplified Chinese supplies 86.7% of reviews and Traditional Chinese another 10.2%. Its English reviews are 86.9% positive, close to 84.9% in Simplified Chinese. The small English presence does not coincide with English rejection.
- Dream of Corpse Lady describes deckbuilding around a puppet army, follower talents, artifacts, and powers with accompanying curses. Simplified Chinese supplies 88.2% of reviews. Positivity is 93.1% there and 92.0% among its 100 English reviews.
- Pass the Fear advertises shooting and multiplayer with weapon parts, relic fusion, Tarot cards, and interacting build effects. Simplified Chinese supplies 86.1% of reviews. English positivity is 87.6%, versus 77.6% in Simplified Chinese.
- Fickle Card Legend advertises real-time side-scrolling card battles, Warrior/Mage/Taoist progression, and equipment. Five English reviews is striking, but its overall positivity is only 67.7%. It is an inspection lead, not evidence of a universally appreciated game. Its dominant review language remains unresolved in the collected summaries.
- Tetra Project describes grid tactics, cards, randomized runs, teammates, interactive environmental objects, and extensive mod support. Its Chinese description explicitly discusses combining cards from different styles into other configurations. We observed only one English review.
- 轮回修仙路 advertises a cultivation roguelike involving alchemy, forging, spirit creatures, and reincarnation. Activities consume lifespan; subsequent lives retain parts of progression, relationships, and equipment. Simplified Chinese supplies 96.4% of reviews. That is an interesting advertised structure to examine, without claiming anything about its originality or actual execution.
- Legend of Mortal describes an ordinary sect member whose personality, work, martial arts, and decisions affect events and story. Its size alone makes it noteworthy: more than 33,000 reviews with fewer than 500 marked English.
- Eastern Exorcist adds a larger action/RPG example with English support; 88.3% of its reviews are Simplified Chinese.
Of those, Traveler of Wuxia, Dream of Corpse Lady, and Tetra Project seem especially useful additions to the build-game reference material. The first two also have favorable English reception, while Tetra Project is a particularly clear example of material our English-oriented description analysis could overlook.
There are other kinds of discoveries here too.
Millennium Dream has 2,588 reviews, only 52 English, with English support listed. It advertises walking and photography through childhood environments under a “Chinese Dreamcore” aesthetic. Simplified Chinese supplies 95.6% of reviews. Given your interest in games as places and spacious experiences, this seems worth including alongside the build examples.
Chushpan Simulator has 2,460 reviews, 75 English, and a 95.2% Russian majority. Its pitch describes work, street life, and social advancement in Uryupinsk.
Love Delivery has 2,407 reviews, 36 English, and a 96.9% Korean majority. It provides a romance/life-management example outside the Chinese-heavy cases.
Among the eighteen low-English games for which the returned breakdowns establish a single non-English majority, sixteen are Simplified Chinese, one Russian, and one Korean. That is not a population estimate: the other thirty-three low-English games lack sufficient breakdowns, and Steam’s scored-language coverage favors larger games.

The reception findings also show why “non-English” cannot be treated as one group.
Across 389 games with at least fifty English and fifty non-English reviews, the median absolute positivity difference is only 2.5 percentage points. Most differences are modest. But 41 games have gaps of at least ten points.
Monster Hunter Wilds is a particularly clear large-sample example:
| Review language | Reviews | Positive |
|---|---|---|
| English | 84,802 | 70.4% |
| Simplified Chinese | 49,452 | 21.3% |
| Japanese | 18,785 | 30.6% |
| Traditional Chinese | 15,057 | 45.1% |
| Korean | 11,068 | 57.6% |
An English-only reading would produce a markedly different account of reception. The counts establish the disagreement; they do not explain whether performance, translation, expectations, events, or something else caused it.
Legend of Mortal illustrates something further:
| Review language | Reviews | Share of total | Positive |
|---|---|---|---|
| Simplified Chinese | 17,122 | 50.9% | 61.6% |
| Traditional Chinese | 11,796 | 35.0% | 93.5% |
| Korean | 3,705 | 11.0% | 94.8% |
| Japanese | 532 | 1.6% | 98.7% |
| English | 497 | 1.5% | 92.4% |
Collapsing this into English versus everyone else would conceal a substantial Simplified/Traditional Chinese difference. Neither script label should be converted into a country label.
The direction can reverse too. Poly TD has 62.5% positive among 56 English reviews, versus 83.9% among 522 non-English reviews. Its English sample is much smaller, but it is a useful counterexample to assuming English reception is always more favorable.
The main limitation is the incomplete finer language breakdown, not the English-versus-all measurement. Steam exposed usable scored-language subsets for 200 of the primary games. Those subsets reconcile with their totals when unreported languages remain an explicit remainder. They support the named-language claims above, but cannot establish that an unreported language has zero reviews.
The planned 480-game collection encountered one read timeout after 458 observations and stopped without retry. I used the complete balanced prefix of 456 games—38 in every sampling group—and preserved two supplementary observations. The proposed additional API profile pass did not run after that stop.
The results therefore support a concrete conclusion: there is substantial game activity that our English-centered interpretation was missing, and some of it is directly relevant to build-heavy design even where English versions already exist. They do not establish why that activity is concentrated in particular languages or reconstruct separate creative traditions.
The selected examples table includes descriptions, tags, support flags, review counts, and reception. The study passed 2,134 verification checks. Collection is closed; no reviewer identities or media binaries were collected.
<oai-mem-citation> <citation_entries> MEMORY.md:39-47|note=[Used the existing catalog and kept the investigation within observable Steam data] MEMORY.md:53-55|note=[Retained paced bounded collection and stopping safeguards] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>

Go ahead with the other research avenues.
[Think]
**Starting metadata analysis**
I’ll take up the two remaining directions: whether Steam’s growth is spreading across more kinds of advertised games, and how review activity unfolds over a game’s lifetime. The first can use the existing catalog. For the second, I’ll collect a bounded sample of dated reviews and keep explanations for late surges separate from the patterns themselves.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Defining the review sample**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,numpy a...)
Script completed
Wall time 3.4 seconds
Output:
{"chunk_id":"f98cbb","wall_time_seconds":1.662923579,"exit_code":0,"original_token_count":1416,"output":"period review_band\n2016-18 0-49 9277\n 1000-9999 953\n 10000+ 308\n 200-999 1734\n 50-199 2711\n2019-21 0-49 14817\n 1000-9999 1132\n 10000+ 331\n 200-999 1726\n 50-199 2497\n2022-24 0-49 23833\n 1000-9999 1285\n 10000+ 325\n 200-999 2291\n 50-199 3583\nsample 60 reviews 51152 estimated requests 664.0\n appid name reviews period review_band\n 751380 Sacred Four 15 2016-18 0-49\n 511250 Cloudbase Prime 20 2016-18 0-49\n 904430 Swing the cat 5 2016-18 0-49\n 752550 Ripped Pants at Work 15 2016-18 0-49\n 840590 ANOIX 38 2016-18 0-49\n 453270 Madness Cubed 1064 2016-18 1000-9999\n 855860 Superfighters Deluxe 3106 2016-18 1000-9999\n 358130 Curious Expedition 3946 2016-18 1000-9999\n 334540 Vox Machinae 1179 2016-18 1000-9999\n 515040 Make America Great Again: The Trump Presidency 1627 2016-18 1000-9999\n 505060 Warcube 313 2016-18 200-999\n 658700 V-Rally 4 697 2016-18 200-999\n 937850 Hidden Paws Mystery 290 2016-18 200-999\n 451880 Catch a Falling Star 273 2016-18 200-999\n 489380 QuiVr 482 2016-18 200-999\n 608660 Psebay 93 2016-18 50-199\n 925520 Welcome to Bummertown 84 2016-18 50-199\n 546150 Primordian 97 2016-18 50-199\n 979970 IMAZE.EXE 72 2016-18 50-199\n 443420 Artificial Defense 71 2016-18 50-199\n1182720 GO-4-Soldier-1 2 2019-21 0-49\n1175040 Cytoclash 1 2019-21 0-49\n1737450 Motorcycle Biker Simulator 8 2019-21 0-49\n1630010 Mathematic Adventures 0 2019-21 0-49\n1296700 Headbangers in Holiday Hell 34 2019-21 0-49\n1139890 Dictators:No Peace Countryballs 5881 2019-21 1000-9999\n1286880 Ship Graveyard Simulator 2102 2019-21 1000-9999\n1092590 沙雕之路 1038 2019-21 1000-9999\n1455630 THE GAME OF LIFE 2 3680 2019-21 1000-9999\n1007040 EARTH DEFENSE FORCE 5 9368 2019-21 1000-9999\n 854940 Ikenfell 705 2019-21 200-999\n1433950 Duck Life: Retro Pack 240 2019-21 200-999\n1473050 100 hidden birds 722 2019-21 200-999\n 922710 Knightin'+ 235 2019-21 200-999\n1222040 Offroad Mania 367 2019-21 200-999\n1210150 Ageless 56 2019-21 50-199\n1178140 Pixel Ripped 1995 169 2019-21 50-199\n1177100 末法时代 67 2019-21 50-199\n1720160 旅者 Travelers 131 2019-21 50-199\n1462520 BRINK Traveler 187 2019-21 50-199\n2070540 Shogunaria 28 2022-24 0-49\n2928020 Scunners Run 19 2022-24 0-49\n 903450 Turbo Cat Fight 6 2022-24 0-49\n2107590 Magic or Machinations? 1 2022-24 0-49\n3318950 The Mirror's Curse 3 2022-24 0-49\n1915510 Yao-Guai Hunter 2080 2022-24 1000-9999\n2209680 Beach Invasion 1944 1032 2022-24 1000-9999\n1268590 Millennia 2972 2022-24 1000-9999\n2976720 1 to 1 humanoid edible toys 2414 2022-24 1000-9999\n2435900 SharpShooter3D 2118 2022-24 1000-9999\n1608470 Warstride Challenges 241 2022-24 200-999\n1269300 This Means Warp 438 2022-24 200-999\n2715590 TryAndLove 208 2022-24 200-999\n2693460 Christmas Nightmare 343 2022-24 200-999\n1309990 Creature Lab 340 2022-24 200-999\n3137240 Mystical Maritime Adventure 54 2022-24 50-199\n1714080 ---Red---Tether--> 73 2022-24 50-199\n2635640 Infestation: Origins 162 2022-24 50-199\n2015500 Hatup 57 2022-24 50-199\n1651090 Crown of Pain 83 2022-24 50-199\n"}
User Reviews - Get List (Steamworks Documentation) (https://partner.steamgames.com/doc/store/getreviews)
citeturn5view0 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://partner.steamgames.com/doc/store/getreviews","lineno":359}); Total lines: 446
L183: * cite180†Event Type: Major Update L193: * cite190†Features And Tools, Marketing L194: * cite191†Followers L195: * cite192†Google Analytics L196: * cite193†Points Shop Items L197: * cite194†Profile Features L198: * cite195†Steam Branding Guidelines L199: * cite196†Steam Community Items L200: * cite197†Store and Platform Traffic Reporting L201: * cite198†Store Widget L202: * cite199†Upcoming Steam Events L203: * cite200†Steam Next Fest L204: * cite201†Steam Next Fest - Tips L205: * cite202†Steam Next Fest: February 2027 L206: * cite203†Steam Next Fest: June 2027 L207: * cite204†Steam Next Fest: October 2026 L208: * cite205†Steam Themed Sale Events L209: * cite206†Steam Auto Battler RPG Fest 2026 L210: * cite207†Steam Cooking Fest 2026 L211: * cite208†Steam Couch Co-Op Fest 2027 L212: * cite209†Steam Desktop Companion Fest 2027 L213: * cite210†Steam Dinos vs. Robots Fest 2027 L214: * cite211†Steam Fighting Fest 2027 L215: * cite212†Steam Medieval Fest 2026 L216: * cite213†Steam Mountaineering Fest 2027 L217: * cite214†Steam Party-Based RPG Fest 2026 L218: * cite215†Steam Programming Fest 2026 L219: * cite216†Steam PvE Survival Crafting Fest 2026 L220: * cite217†Steam Racing Fest 2027 L221: * cite218†Steam Real-Time Strategy Fest 2027 L222: * cite219†Steam Rhythm Fest 2027 L223: * cite220†Steam Scream V Fest L224: * cite221†Steam Sheep Fest 2027 L225: * cite222†Steam Shop Keeper Fest 2027 L226: * cite223†Steam Witch Fest 2027 L227: * cite224†UTM Analytics L228: * cite225†Visibility on Steam L229: * cite226†Update Visibility Rounds L230: * cite227†Wishlists L231: * cite228†Wishlist Reporting L232: * cite229†Steamworks SDK L233: * cite230†Creating and using InstallScripts L234: * cite231†Creating a retail and "Gold Master" disk L235: * cite232†Steamworks API Overview L236: * cite233†Debugging the Steamworks API L237: * cite234†Steamworks API Example Application (SpaceWar) L238: * cite235†Updating Game Build L239: * cite236†Partial Depot Update Instructions L240: * cite237†Tip - Renaming a live exe L241: * cite238†Uploading to Steam L242: * cite239†Distributing Open Source Applications on Steam L243: * cite240†Distributing Source Engine Games / Mods L244: * cite241†Distributing Your Dedicated Game Server L245: * cite242†SteamPipe Local Content Server L246: * cite243†Web API Overview L247: * cite244†Authentication using Web API Keys L248: * cite245†Error Codes &amp; Responses L249: * cite246†OAuth L250: * cite247†Accessibility Features L251: * cite248†Steam Hardware L252: * cite249†Getting your game ready for Steam Deck and Steam Machine L253: * cite250†How to debug Windows games on Steam Deck and Steam Machine L254: * cite251†How to load and run games on Steam Deck and Steam Machine L255: * cite252†Steam Deck L256: * cite253†Social Media Templates L257: * cite254†Steam Deck Brand Guidelines and Logos L258: * cite255†Steam Deck Developer Kits L259: * cite256†Steam Deck FAQ L260: * cite257†Steam Deck SVG Line Art L261: * cite258†Steamworks Virtual Conference: Steam Deck - Nov 12th 2021 L262: * cite259†Steam Deck and Steam Machine Compatibility Review L263: * cite260†Steam Deck Verified Landing Pages L264: * cite261†Steam Frame L265: * cite262†Connecting adb to Lepton L266: * cite263†How to load and run games on Steam Frame L267: * cite264†How to upload Android APKs to Steam L268: * cite265†OpenXR Game Engine Integrations L269: * cite266†Custom Engines L270: * cite267†Godot L271: * cite268†Unity L272: * cite269†Unreal Engine L273: * cite270†Setting up your Steam Frame for development L274: * cite271†Steam Frame Controllers L275: * cite272†Steam Frame Debugging L276: * cite273†Steam Frame Standalone Compatibility Review Process L277: * cite274†Performance Assessment Overlay (VR titles) L278: * cite275†Suggesting default user settings for your game L279: * cite276†What games can run standalone on Steam Frame L280: * cite277†Steam Hardware and Proton L281: * cite278†Steam Machine L282: * cite279†Steam PC Café Program L283: * cite280†Licensees L284: * cite281†PC Café Requirements and Sign Up Instructions L285: * cite282†Getting Started L286: * cite283†Setup instructions for the PC Café model (incl. PC Café Server and Content Cache) L287: * cite284†Setup instructions for the VR arcade model L288: * cite285†Frequently Asked Questions L289: * cite286†Publishers L290: * cite287†Steamworks API Reference L291: * cite288†ISteamApps Interface L292: * cite289†ISteamClient Interface L293: * cite290†ISteamController Interface (Deprecated) L294: * cite291†ISteamFriends Interface L295: * cite292†ISteamGameCoordinator Interface L296: * cite293†ISteamGameServer Interface L297: * cite294†ISteamGameServerStats Interface L298: * cite295†ISteamHTMLSurface Interface L299: * cite296†ISteamHTTP Interface L300: * cite297†ISteamInput Interface L301: * cite298†ISteamInventory Interface L302: * cite299†ISteamMatchmaking Interface L303: * cite300†ISteamMatchmakingServers Interface L304: * cite301†ISteamMusic Interface L305: * cite302†ISteamNetworking Interface L306: * cite303†ISteamNetworkingMessages Interface L307: * cite304†ISteamNetworkingSockets Interface L308: * cite305†ISteamNetworkingUtils Interface L309: * cite306†ISteamParties Interface L310: * cite307†ISteamRemotePlay Interface L311: * cite308†ISteamRemoteStorage Interface L312: * cite309†ISteamScreenshots Interface L313: * cite310†ISteamTimeline L314: * cite311†ISteamUGC Interface L315: * cite312†ISteamUser Interface L316: * cite313†ISteamUserStats Interface L317: * cite314†ISteamUtils Interface L318: * cite315†ISteamVideo Interface L319: * cite316†SteamEncryptedAppTicket L320: * cite317†steamnetworkingtypes.h L321: * cite318†steam_api.h L322: * cite319†steam_gameserver.h L323: * cite320†Steamworks Web API Reference L324: * cite321†IBroadcastService Interface L325: * cite322†ICheatReportingService Interface L326: * cite323†ICloudService Interface L327: * cite324†IEconMarketService Interface L328: * cite325†IEconService Interface L329: * cite326†IGameInventory Interface L330: * cite327†IGameNotificationsService Interface L331: * cite328†IGameServersService Interface L332: * cite329†IInventoryService Interface L333: * cite330†ILobbyMatchmakingService Interface L334: * cite331†IPartnerFinancialsService Interface L335: * cite332†IPlayerService Interface L336: * cite333†IPublishedFileService Interface L337: * cite334†ISiteLicenseService Interface L338: * cite335†ISteamApps Interface L339: * cite336†ISteamCommunity Interface L340: * cite337†ISteamEconomy Interface L341: * cite338†ISteamGameServerStats Interface L342: * cite339†ISteamLeaderboards Interface L343: * cite340†ISteamMicroTxn Interface L344: * cite341†ISteamMicroTxnSandbox Interface L345: * cite342†ISteamNews Interface L346: * cite343†ISteamPublishedItemSearch Interface L347: * cite344†ISteamPublishedItemVoting Interface L348: * cite345†ISteamRemoteStorage Interface L349: * cite346†ISteamUserAuth Interface L350: * cite347†ISteamUser Interface L351: * cite348†ISteamUserStats Interface L352: * cite349†ISteamWebAPIUtil Interface L353: * cite350†IStoreService Interface L354: * cite351†IWorkshopService Interface L355: User Reviews - Get List
L356:
L357: cite352†Steamworks Documentation > cite14†Store Presence > cite353†User Reviews - Get List L358:
L359: If you wish to get a dump of reviews on an application in Steam, you can use the following method with the parameters below.
L360: ## Parameters:
L361:
L362: GET store.steampowered.com/appreviews/<appid>?json=1
L363: Name | Type | Required | Description
L364: --- | --- | --- | ---
L365: filter | string | ✔ | recent – sorted by creation time
L366: updated – sorted by last updated time
L367: all – (default) sorted by helpfulness, with sliding windows based on day_range parameter, will always find results to return.
L368: If paging through the reviews with `cursor` then choose either the recent option or the updated option to eventually receive an empty response list.
L369: language | string | ✔ | see cite51†https://partner.steamgames.com/doc/store/localization/languages (and use the API language code list) or pass “all” for all reviews
L370: day_range | string | ✔ | range from now to n days ago to look for helpful reviews. Only applicable for the “all” filter. Maximum value is 365.
L371: cursor | string | ✔ | reviews are returned in batches of 20, so pass "*" for the first set, then the value of "cursor" that was returned in the response for the next set, etc. Note that cursor values may contain characters that need to be URLEncoded for use in the querystring.
L372: review_type | string | ✔ | all – all reviews (default)
L373: positive – only positive reviews
L374: negative – only negative reviews
L375: purchase_type | string | ✔ | all – all reviews
L376: non_steam_purchase – reviews written by users who did not pay for the product on Steam
L377: steam – reviews written by users who paid for the product on Steam (default)
L378: num_per_page | string | ✔ | by default, up to 20 reviews will be returned. More reviews can be returned based on this parameter (with a maximum of 100 reviews)
... [49 more lines]
[Think]
**Defining release-date criteria**
[Think]
**Defining release-date criteria**
**Defining two-clock benchmarks**
[Think]
**Defining release-date criteria**
**Defining two-clock benchmarks**
For the lifetime study, I’ve frozen a random sample of 60 games across three release eras and four current-review bands. It includes very quiet games as well as games with thousands of reviews, and should require roughly 660 paced requests. The largest games—10,000 reviews and above—are outside this bounded study.
For catalog variety, I’ll compare both full cohorts and equally sized samples. Otherwise, a larger catalog will almost automatically contain more tags and combinations, even if its underlying distribution barely changes.
exec ({"code": "text(await tools.exec_command({cmd:\"mkdir -p steam-research/catalog-variety-2026-09-07 steam-research/game...)
Script completed
Wall time 1.2 seconds
Output:
{"chunk_id":"13e880","wall_time_seconds":0.00000304,"exit_code":0,"original_token_count":16,"output":"sklearn True\nscipy True\npandas True\nnumpy True\nmatplotlib True\n"}
{}
{"chunk_id":"2729b3","wall_time_seconds":1.001333415,"session_id":21945,"original_token_count":0,"output":""}
[Think]
**Curating semantic activity tags**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\np='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"48237c","wall_time_seconds":0.202247448,"exit_code":0,"original_token_count":1286,"output":"1980s; 1990's; 2.5D; 2D; 2D Fighter; 2D Platformer; 360 Video; 3D; 3D Fighter; 3D Platformer; 4 Player Local; 4X; 6DOF; 8-bit Music; ATV; Abstract; Action; Action RPG; Action RTS; Action Roguelike; Action-Adventure; Addictive; Adventure; Agriculture; Aliens; Alternate History; Animals; Animation & Modeling; Anime; Arcade; Archery; Arena Shooter; Artificial Intelligence; Assassins; Asymmetric VR; Asynchronous Multiplayer; Atmospheric; Audio Production; Auto Battler; Automation; Automobile Sim; BMX; Base Building; Baseball; Based On A Novel; Basketball; Battle Royale; Beat 'em up; Beautiful; Benchmark; Bikes; Billiards; Birds; Board Game; Boomer Shooter; Boss Rush; Bowling; Boxing; Building; Bullet Heaven; Bullet Hell; Bullet Time; CRPG; Capitalism; Capybaras; Card Battler; Card Game; Cartoon; Cartoony; Casual; Cats; Character Action Game; Character Customization; Chess; Choices Matter; Choose Your Own Adventure; Cinematic; City Builder; Class-Based; Classic; Cleaning; Co-op; Co-op Campaign; Cold War; Collectathon; Colony Sim; Colorful; Combat; Combat Racing; Comedy; Comic Book; Competitive; Conspiracy; Controller; Cooking; Cozy; Crafting; Creature Collector; Cricket; Crime; Cult; Cute; Cyberpunk; Cycling; Dark; Dark Comedy; Dark Fantasy; Dark Humor; Dating Sim; Deckbuilding; Decorating; Demons; Design & Illustration; Desktop Companion; Destruction; Detective; Dialogue Heavy; Dice; Difficult; Dinosaurs; Diplomacy; Dogs; Dragons; Driving; Dungeon Crawler; Dwarves; Dynamic Narration; Dystopian ; Early Access; Economy; Education; Electronic Music; Elves; Emotional; Epic; Episodic; Escape Room; Espionage; Experimental; Exploration; Extraction Shooter; FMV; FPS; Faith; Falling Blocks; Family Friendly; Fantasy; Farming; Farming Sim; Fast-Paced; Female Protagonist; Fighting; First-Person; Fishing; Flight; Football (American); Football (Soccer); Foxes; Free to Play; Funny; Futuristic; Gambling; Game Development; Gaming; God Game; Golf; Gore; Gothic; Grand Strategy; Great Soundtrack; Grid-Based Movement; Gun Customization; Hack and Slash; Hacking; Hand-drawn; Hardware; Heist; Hentai; Hero Shooter; Hex Grid; Hidden Object; Historical; Hobby Sim; Hockey; Horror; Horses; Hunting; Idler; Immersive; Immersive Sim; Incremental; Indie; Instrumental Music; Intentionally Awkward Controls; Interactive Fiction; Inventory Management; Investigation; Isometric; JRPG; Job Simulator; Jump Scare; LGBTQ+; Language Learning; Lemmings; Level Editor; Life Sim; Linear; Local Co-Op; Local Multiplayer; Logic; Loot; Looter Shooter; Lore-Rich; Lovecraftian; MMORPG; MOBA; Magic; Mahjong; Management; Mars; Martial Arts; Massively Multiplayer; Match 3; Mechs; Medical Sim; Medieval; Memes; Metroidvania; Military; Mini Golf; Minigames; Minimalist; Mining; Mod; Moddable; Modern; Motocross; Motorbike; Mouse Only; Multiplayer; Multiple Endings; Music; Music-Based Procedural Generation; Musou; Mystery; Mystery Dungeon; Mythology; Narrative; Nature; Naval; Naval Combat; Ninja; Noir; Nonlinear; Nostalgia; Nudity; Offroad; Old School; On-Rails Shooter; Online Co-Op; Open World; Open World Survival Craft; Organizing; Otome; Outbreak Sim; Parkour; Parody ; Party; Party Game; Party-Based RPG; Perma Death; Philosophical; Photo Editing; Physics; Pinball; Pirates; Pixel Graphics; Platformer; Point & Click; Poker; Political Sim; Post-apocalyptic; Precision Platformer; Procedural Generation; Programming; Psychedelic; Psychological; Psychological Horror; Puzzle; Puzzle Platformer; PvE; PvP; Quick-Time Events; RPG; RTS; Racing; Real Time Tactics; Real-Time; Real-Time with Pause; Realistic; Reboot; Relaxing; Remake; Replay Value; Resource Management; Retro; Rhythm; Robots; Rock Music; Roguelike; Roguelike Deckbuilder; Roguelite; Romance; Rome; Rugby; Runner; Sailing; Samurai; Sandbox; Satire; Sci-fi; Science; Score Attack; Sequel; Sexual Content; Shoot 'Em Up; Shooter; Shop Keeper; Short; Side Scroller; Silent Protagonist; Simulation; Singleplayer; Skateboarding; Skating; Skiing; Sniper; Snooker; Snow; Snowboarding; Social Deduction; Software; Software Training; Sokoban; Solitaire; Souls-like; Soundtrack; Space; Space Sim; Spaceships; Spectacle fighter; Spelling; Split Screen; Sports; Stealth; Steampunk; Story Rich; Strategy; Strategy RPG; Stylized; Submarine; Superhero; Supernatural; Surreal; Survival; Survival Horror; Swordplay; Tabletop; Tactical; Tactical RPG; Tanks; Team-Based; Tennis; Text-Based; Third Person; Third-Person Shooter; Thriller; Time Attack; Time Management; Time Manipulation; Time Travel; Top-Down; Top-Down Shooter; Touch-Friendly; Tower Defense; TrackIR; Trading; Trading Card Game; Traditional Roguelike; Trains; Transhumanism; Transportation; Trivia; Turn-Based; Turn-Based Combat; Turn-Based Strategy; Turn-Based Tactics; Tutorial; Twin Stick Shooter; Typing; Underground; Underwater; Utilities; VR; Vampires; Vehicular Combat; Video Production; Vikings; Villain Protagonist; Violent; Visual Novel; Voice Control; Volleyball; Voxel; Walking Simulator; War; Wargame; Werewolves; Western; Wholesome; Wolves; Word Game; World War I; World War II; Wrestling; Wuxia; Xianxia; Zombies; Zoo; eSports\n"}
[Think]
**Defining activity labels**
[Think]
**Defining activity labels**
**Preparing nearest-tag vectors**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/catalog-vari...)
Script completed
Wall time 1.3 seconds
Output:
{}
{"chunk_id":"ca3622","wall_time_seconds":1.001198479,"session_id":65643,"original_token_count":0,"output":""}
{"chunk_id":"df7d70","wall_time_seconds":0.000008633,"exit_code":0,"original_token_count":365,"output":"{\"appid\": 453270, \"name\": \"Madness Cubed\", \"order\": 1, \"complete\": true, \"collected\": 1063, \"summary_total\": 1065, \"pages\": 12, \"snapshot_total\": 1064}\n{\"appid\": 505060, \"name\": \"Warcube\", \"order\": 2, \"complete\": true, \"collected\": 313, \"summary_total\": 313, \"pages\": 5, \"snapshot_total\": 313}\n{\"appid\": 608660, \"name\": \"Psebay\", \"order\": 3, \"complete\": true, \"collected\": 93, \"summary_total\": 93, \"pages\": 2, \"snapshot_total\": 93}\n{\"appid\": 1182720, \"name\": \"GO-4-Soldier-1\", \"order\": 4, \"complete\": true, \"collected\": 2, \"summary_total\": 2, \"pages\": 2, \"snapshot_total\": 2}\n{\n \"population\": 65839,\n \"all_paid_nonexplicit_2016_24\": 66803,\n \"excluded_10000plus\": 964,\n \"sample_n\": 60,\n \"seed\": 77007,\n \"strata\": \"three release periods x four current review-count bands; five random games per cell\",\n \"estimated_reviews\": 51152,\n \"estimated_requests\": 664,\n \"sample_sha256\": \"2665619a0e0276478bfb1d57d491ef730c41cfc5567e7cca4463858755cbc44d\",\n \"source\": \"../2026-09-05 catalog via independently normalized fable-verification games.parquet\",\n \"observation\": \"Currently returned Steam-purchase reviews, all languages, off-topic filtering on. Creation timestamps of surviving reviews; not original complete history or historical sentiment.\",\n \"analysis\": \"first30/90/365/730; first-review clock sensitivity; last twelve complete calendar months; bounded late-burst screen; no causal update attribution\",\n \"review_text_and_accounts\": \"Not collected\"\n}"}
[Think]
**Checking tag-count metrics.**
[Think]
**Checking tag-count metrics.**
**Preparing description similarity.**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/catalog-vari...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"7e0260","wall_time_seconds":1.000727973,"session_id":45291,"original_token_count":0,"output":""}
{"chunk_id":"dc5d57","wall_time_seconds":0.000002328,"exit_code":0,"original_token_count":16,"output":"Variety normalization complete 81619 games 181 activity labels\n"}
[Think]
**Implementing screenshot-quality checks**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -4 steam-research/game-lifetimes-2026-09-07/collection.log; tail ...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"1379b3","wall_time_seconds":0.168727215,"exit_code":0,"original_token_count":992,"output":"{\"appid\": 1915510, \"name\": \"Yao-Guai Hunter\", \"order\": 9, \"complete\": true, \"collected\": 2081, \"summary_total\": 2083, \"pages\": 22, \"snapshot_total\": 2080}\n{\"appid\": 1608470, \"name\": \"Warstride Challenges\", \"order\": 10, \"complete\": true, \"collected\": 240, \"summary_total\": 240, \"pages\": 4, \"snapshot_total\": 241}\n{\"appid\": 3137240, \"name\": \"Mystical Maritime Adventure\", \"order\": 11, \"complete\": true, \"collected\": 54, \"summary_total\": 54, \"pages\": 2, \"snapshot_total\": 54}\n{\"appid\": 511250, \"name\": \"Cloudbase Prime\", \"order\": 12, \"complete\": true, \"collected\": 20, \"summary_total\": 20, \"pages\": 2, \"snapshot_total\": 20}\ntag neighbors 2023\ntag neighbors 2025\npitch neighbors 2019\npitch neighbors 2021\npitch neighbors 2023\npitch neighbors 2025\ndiversity.csv\n period representation n effective_shannon effective_simpson top10_share observed_labels\n 2019 all_top20 5643 80.529136 27.468645 0.480685 421\n 2019 activity_tags 5643 36.892382 14.465255 0.616716 177\n 2019 primary_activity 5643 17.288382 7.051393 0.801524 143\n 2021 all_top20 7959 156.521491 79.737449 0.273183 423\n 2021 activity_tags 7959 72.649622 39.784644 0.405910 178\n 2021 primary_activity 7959 40.420790 16.726217 0.596557 158\n 2023 all_top20 9771 159.929085 84.151226 0.258679 426\n 2023 activity_tags 9771 76.056912 43.008614 0.387576 180\n 2023 primary_activity 9771 40.736310 16.520179 0.597073 168\n 2025 all_top20 15674 158.025746 83.363202 0.259569 429\n 2025 activity_tags 15674 79.022803 46.267628 0.375057 180\n 2025 primary_activity 15674 45.542308 19.668465 0.567628 171\n2025JanAug all_top20 9922 157.974690 82.941866 0.261251 428\n2025JanAug activity_tags 9922 78.643203 46.016201 0.375926 180\n2025JanAug primary_activity 9922 44.513631 19.260275 0.573070 165\n2026JanAug all_top20 14125 158.119995 81.572122 0.264873 429\n2026JanAug activity_tags 14125 83.882897 51.503371 0.347200 181\n2026JanAug primary_activity 14125 48.650086 21.487453 0.550655 172\npair_diversity.csv\n period n raw_pairs raw_pairs_ge5 raw_pairs_ge20 expected_pairs_in_3000 expected_pairs_ge5_in_3000 effective_shannon effective_simpson top10_share observed_labels\n 2019 5643 3246 918 266 2446.331576 571.399729 426.064847 82.052615 0.255842 3246\n 2021 7959 5549 1946 648 3812.019868 998.705268 1212.141030 399.209788 0.107173 5549\n 2023 9771 6045 2190 822 3860.376643 1036.954360 1288.419667 449.403627 0.094882 6045\n 2025 15674 7074 3087 1188 3980.204325 1067.533329 1432.547712 510.707111 0.086683 7074\n2025JanAug 9922 6091 2332 862 3946.358201 1072.769644 1394.179887 506.996111 0.087145 6091\n2026JanAug 14125 7074 2970 1132 4094.277116 1098.867268 1559.640660 589.518634 0.075793 7074\n"}
[Think]
**Analyzing yearly tag counts**
The first catalog result has an important measurement issue: older games often have much thinner tag descriptions. That creates a large apparent increase in variety between 2019 and 2021.
I’m testing cohorts with comparable tag coverage and a fixed number of tags per game before interpreting that change. The more recent comparisons are already much less dramatic than the raw growth in release counts.
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 1.2 seconds
Output:
{"chunk_id":"3da6b1","wall_time_seconds":0.989952465,"exit_code":0,"original_token_count":875,"output":"2019 N 5643 median 9.0 mean 10.670210880737196 <=5 0.3522948786106681 >=15 0.36115541378699273 activity_mean 3.859471912103491\n2020 N 6901 median 16.0 mean 14.316765686132445 <=5 0.10042022895232575 >=15 0.5525286190407187 activity_mean 5.253876249818867\n2021 N 7959 median 20.0 mean 16.751727603970348 <=5 0.018092725216735772 >=15 0.7322527955773338 activity_mean 6.20479959793944\n2023 N 9771 median 20.0 mean 16.928871149319413 <=5 0.005935932862552451 >=15 0.7425033261692764 activity_mean 6.446320745061918\n2025 N 15674 median 20.0 mean 17.011802985836418 <=5 0.004402194717366339 >=15 0.7495853004976394 activity_mean 6.459806048232742\n year kind configuration n comparison median ge08 exact\n 2019 tags main 3000 all_other_games 0.478261 0.087333 0.031333\n 2019 tags main 3000 different_credit 0.461538 0.057333 0.023000\n 2019 tags one_per_credit 3000 all_other_games 0.458333 0.048000 0.020333\n 2019 tags one_per_credit 3000 different_credit 0.458333 0.048000 0.020333\n 2021 tags main 3000 all_other_games 0.423077 0.023000 0.013000\n 2021 tags main 3000 different_credit 0.421053 0.007667 0.001333\n 2021 tags one_per_credit 3000 all_other_games 0.423077 0.003000 0.000000\n 2021 tags one_per_credit 3000 different_credit 0.423077 0.003000 0.000000\n 2023 tags main 3000 all_other_games 0.428571 0.027333 0.010667\n 2023 tags main 3000 different_credit 0.423077 0.009667 0.001333\n 2023 tags one_per_credit 3000 all_other_games 0.421053 0.004000 0.000667\n 2023 tags one_per_credit 3000 different_credit 0.421053 0.004000 0.000667\n 2025 tags main 3000 all_other_games 0.428571 0.019333 0.009000\n 2025 tags main 3000 different_credit 0.428571 0.008000 0.000667\n 2025 tags one_per_credit 3000 all_other_games 0.423077 0.001667 0.000000\n 2025 tags one_per_credit 3000 different_credit 0.423077 0.001667 0.000000\n 2019 short_pitch main 3000 all_other_games 0.156241 0.009667 0.002667\n 2019 short_pitch main 3000 different_credit 0.154020 0.000667 0.000667\n 2019 short_pitch one_per_credit 3000 all_other_games 0.154360 0.000667 0.000000\n 2019 short_pitch one_per_credit 3000 different_credit 0.154360 0.000667 0.000000\n 2021 short_pitch main 3000 all_other_games 0.159229 0.014667 0.004667\n 2021 short_pitch main 3000 different_credit 0.156243 0.001333 0.000000\n 2021 short_pitch one_per_credit 3000 all_other_games 0.154336 0.000667 0.000000\n 2021 short_pitch one_per_credit 3000 different_credit 0.154336 0.000667 0.000000\n 2023 short_pitch main 3000 all_other_games 0.152809 0.006667 0.004667\n 2023 short_pitch main 3000 different_credit 0.150859 0.000667 0.000000\n 2023 short_pitch one_per_credit 3000 all_other_games 0.151616 0.000667 0.000667\n 2023 short_pitch one_per_credit 3000 different_credit 0.151616 0.000667 0.000667\n 2025 short_pitch main 3000 all_other_games 0.154182 0.011667 0.005667\n 2025 short_pitch main 3000 different_credit 0.152893 0.001667 0.001667\n 2025 short_pitch one_per_credit 3000 all_other_games 0.150728 0.000667 0.000667\n 2025 short_pitch one_per_credit 3000 different_credit 0.150728 0.000667 0.000667\n year all_n eligible_text_n\n 2019 5643 4883\n 2021 7959 6876\n 2023 9771 8687\n 2025 15674 14461\n"}
[Think]
**Mapping tags to macro-groups**
[Think]
**Mapping tags to macro-groups**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/catalog-vari...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"6af48c","wall_time_seconds":1.000953005,"session_id":60334,"original_token_count":0,"output":""}
{"chunk_id":"d7dfd6","wall_time_seconds":0.000003645,"exit_code":0,"original_token_count":165,"output":"{\"appid\": 855860, \"name\": \"Superfighters Deluxe\", \"order\": 13, \"complete\": true, \"collected\": 3106, \"summary_total\": 3106, \"pages\": 33, \"snapshot_total\": 3106}\n{\"appid\": 658700, \"name\": \"V-Rally 4\", \"order\": 14, \"complete\": true, \"collected\": 696, \"summary_total\": 698, \"pages\": 8, \"snapshot_total\": 697}\n{\"appid\": 925520, \"name\": \"Welcome to Bummertown\", \"order\": 15, \"complete\": true, \"collected\": 84, \"summary_total\": 84, \"pages\": 2, \"snapshot_total\": 84}\n{\"appid\": 1175040, \"name\": \"Cytoclash\", \"order\": 16, \"complete\": true, \"collected\": 1, \"summary_total\": 1, \"pages\": 2, \"snapshot_total\": 1}\n183 steam-research/game-lifetimes-2026-09-07/requests.jsonl\n"}
[Think]
**Implementing release-clock rows**
[Think]
**Implementing release-clock rows**
**Setting release-clock cutoff**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/game-lifetim...)
Script completed
Wall time 1.1 seconds
Output:
{}
{"chunk_id":"0d18fd","wall_time_seconds":0.948889161,"exit_code":0,"original_token_count":867,"output":"Completed histories 25 of60; population aggregates pending\n year configuration n activity_budget rarefaction_n expected_pairs_in_1000 effective_activity primary_effective coarse_effective\n 2019 exact20_tags 1398 5 1000 2269.838428 68.483810 46.266044 7.589315\n 2019 first3_activity 3437 3 1000 860.387878 44.318372 21.756521 7.355046\n 2019 100plus_reviews 1243 5 1000 1772.004153 56.476657 30.327564 7.900699\n 2019 all 5643 5 1000 1397.098893 35.698386 17.288382 7.213757\n 2021 exact20_tags 4053 5 1000 2572.678818 75.583730 51.040864 7.606260\n 2021 first3_activity 7335 3 1000 1111.401404 63.681065 40.189124 7.504796\n 2021 100plus_reviews 1530 5 1000 2231.138025 72.789524 50.051012 7.915113\n 2021 all 7959 5 1000 2263.951337 69.258927 40.420790 7.558056\n 2025 exact20_tags 8037 5 1000 2640.811243 80.437485 54.807242 7.810826\n 2025 first3_activity 14693 3 1000 1161.452453 70.124316 44.831355 7.840264\n 2025 100plus_reviews 2277 5 1000 2459.703623 82.413202 60.650777 7.842120\n 2025 all 15674 5 1000 2379.142091 75.865142 45.542308 7.905097\n activity n_2021 share_2021 n_2025 share_2025 change_n change_share_pp share_of_net_growth\n Adventure 1003.0 0.126021 1900.0 0.121220 897.0 -0.480100 0.116267\n Action 1304.0 0.163840 2139.0 0.136468 835.0 -2.737164 0.108231\n Strategy 480.0 0.060309 1189.0 0.075858 709.0 1.554902 0.091899\n Horror 196.0 0.024626 717.0 0.045745 521.0 2.111834 0.067531\n RPG 434.0 0.054529 822.0 0.052444 388.0 -0.208593 0.050292\nAction Roguelike 86.0 0.010805 407.0 0.025967 321.0 1.516119 0.041607\n Exploration 225.0 0.028270 468.0 0.029858 243.0 0.158848 0.031497\n Idler 17.0 0.002136 201.0 0.012824 184.0 1.068784 0.023850\n Incremental 37.0 0.004649 206.0 0.013143 169.0 0.849396 0.021905\n Hidden Object 86.0 0.010805 227.0 0.014483 141.0 0.367721 0.018276\n Visual Novel 197.0 0.024752 332.0 0.021182 135.0 -0.357028 0.017498\n Puzzle 554.0 0.069607 668.0 0.042618 114.0 -2.698839 0.014776\n Roguelike 14.0 0.001759 115.0 0.007337 101.0 0.557798 0.013091\n Point & Click 65.0 0.008167 165.0 0.010527 100.0 0.236013 0.012962\n"}
[Think]
**Scanning historical pair counts**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"c3e6bd","wall_time_seconds":0.171365145,"exit_code":0,"original_token_count":1273,"output":"pairs absent2021 present2025 2490 atleast5 268 atleast20 11 incidence share 0.045105712931680246\n tag_a tag_b n_2021 n_2025 newly_observed\n Action Roguelike Bullet Heaven 0.0 50.0 True\nDesktop Companion Idler 0.0 43.0 True\n Management Shop Keeper 0.0 42.0 True\n Bullet Heaven Roguelite 0.0 39.0 True\n Job Simulator Management 0.0 36.0 True\n Economy Shop Keeper 0.0 33.0 True\n Immersive Sim Job Simulator 0.0 27.0 True\n Idler Loot 0.0 27.0 True\n Arcade Boomer Shooter 0.0 26.0 True\n Job Simulator Life Sim 0.0 26.0 True\n Action Bullet Heaven 0.0 25.0 True\n Gambling Roguelike 0.0 19.0 True\n\nHigh pitch pairs\n2019 Wolfenstein: Youngblood Deutsche Version / Wolfenstein: Youngblood 1.0 \n Wolfenstein: Youngblood is the first modern co-op Wolfenstein adventure. Team up with a friend or play solo as one of BJ Blazkowicz’s twin daughters and wield a powerful arsenal of new weapons, gadgets, and abilities to liberate Paris from the Nazis. \n Wolfenstein: Youngblood is the first modern co-op Wolfenstein adventure. Team up with a friend or play solo as one of BJ Blazkowicz’s twin daughters and wield a powerful arsenal of new weapons, gadgets, and abilities to liberate Paris from the Nazis.\n2019 Wolfenstein: Youngblood / Wolfenstein: Youngblood Deutsche Version 1.0 \n Wolfenstein: Youngblood is the first modern co-op Wolfenstein adventure. Team up with a friend or play solo as one of BJ Blazkowicz’s twin daughters and wield a powerful arsenal of new weapons, gadgets, and abilities to liberate Paris from the Nazis. \n Wolfenstein: Youngblood is the first modern co-op Wolfenstein adventure. Team up with a friend or play solo as one of BJ Blazkowicz’s twin daughters and wield a powerful arsenal of new weapons, gadgets, and abilities to liberate Paris from the Nazis.\n2025 fly a kite / hgmGame-pig 1.0 \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try! \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try!\n2025 The Heishui River in Chongzuo City / hgmGame-pig 1.0 \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try! \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try!\n2025 go cycling / hgmGame-pig 1.0 \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try! \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try!\n2025 hgmGame-pig / go cycling 1.0 \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try! \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try!\n2025 hgmGame-cat / go cycling 1.0 \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try! \n This is a casual puzzle game, where the position of each game image is random and can be first, it may be very chaotic,Then gradually place the image in the corresponding position,The image gradually becomes complete,Come and give it a try!\n2021 100 hidden cats 2 / 100 hidden cats 0.912 \n Hidden object game in the city setting. Black and white hand-drawn graphics in a cartoon style. Ultra hard! Really very difficult! \n 100 hidden cats is a hidden object game in the city setting. Black and white hand-drawn graphics in a cartoon style. Ultra hard! Really very difficult!\n"}
[Think]
**Preparing publisher-exclusion scoring**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/catalog-v...)
Script completed
Wall time 1.6 seconds
Output:
{}
{"chunk_id":"bfe4bc","wall_time_seconds":1.001047,"session_id":81373,"original_token_count":0,"output":""}
{"chunk_id":"a1d03d","wall_time_seconds":0.243923996,"exit_code":0,"original_token_count":1233,"output":"{\"appid\": 358130, \"name\": \"Curious Expedition\", \"order\": 25, \"complete\": true, \"collected\": 3944, \"summary_total\": 3945, \"pages\": 41, \"snapshot_total\": 3946}\n{\"appid\": 937850, \"name\": \"Hidden Paws Mystery\", \"order\": 26, \"complete\": true, \"collected\": 291, \"summary_total\": 291, \"pages\": 4, \"snapshot_total\": 290}\n{\"appid\": 546150, \"name\": \"Primordian\", \"order\": 27, \"complete\": true, \"collected\": 97, \"summary_total\": 97, \"pages\": 2, \"snapshot_total\": 97}\n{\"appid\": 1737450, \"name\": \"Motorcycle Biker Simulator\", \"order\": 28, \"complete\": true, \"collected\": 8, \"summary_total\": 8, \"pages\": 2, \"snapshot_total\": 8}\n name collected first_review_offset_days release_clock_valid release_d30 release_d365 last12_count last12_active_months bursts_20_4\n Sacred Four 15 0.953611 True 8.0 13.0 0 0 0\n Madness Cubed 1063 0.123368 True 10.0 101.0 83 12 0\n Warcube 313 0.065949 True 102.0 174.0 6 5 0\n Psebay 93 0.512049 True 6.0 22.0 12 7 0\n GO-4-Soldier-1 2 4.389398 True 1.0 2.0 0 0 0\nDictators:No Peace Countryballs 5878 0.533762 True 212.0 1536.0 287 12 0\n Ikenfell 703 0.077361 True 148.0 371.0 34 12 0\n Ageless 56 1.327187 True 8.0 25.0 2 2 0\n Shogunaria 28 0.221123 True 7.0 15.0 4 3 0\n Yao-Guai Hunter 2081 0.003299 True 437.0 1114.0 237 12 1\n Warstride Challenges 240 0.105903 True 81.0 120.0 14 8 1\n Mystical Maritime Adventure 54 0.031007 True 45.0 54.0 3 2 0\n Cloudbase Prime 20 -299.960440 False NaN NaN 3 2 0\n Superfighters Deluxe 3106 0.014850 True 180.0 634.0 280 12 0\n V-Rally 4 696 0.108472 True 62.0 103.0 185 12 0\n Welcome to Bummertown 84 0.472778 True 10.0 42.0 0 0 0\n Cytoclash 1 1619.404850 True 0.0 0.0 0 0 0\n Ship Graveyard Simulator 2101 0.070961 True 339.0 805.0 363 12 0\n Duck Life: Retro Pack 238 0.511447 True 5.0 56.0 28 10 0\n Pixel Ripped 1995 169 0.140428 True 42.0 85.0 12 10 0\n Scunners Run 19 0.393750 True 14.0 15.0 4 3 0\n Beach Invasion 1944 1032 0.032199 True 307.0 612.0 162 12 0\n This Means Warp 434 0.032500 True 102.0 215.0 22 9 1\n ---Red---Tether--> 73 0.057743 True 22.0 29.0 7 6 0\n Swing the cat 5 508.706551 True 0.0 0.0 2 2 0\n"}
[Think]
**Checking official release dates**
[Think]
**Checking official release dates**
The recent catalog comparison is much clearer: paid releases nearly doubled from 2021 to 2025, but an equally sized 3,000-game sample contains only about 4% more activity-tag combinations. Typical nearest-neighbor similarity in short descriptions is almost unchanged.
That points toward much more supply within familiar advertised territory, with some broadening—not evidence that games have become either uniformly more original or uniformly more alike. The lifetime sample is also showing sustained late activity in some games without a dramatic “revival” spike.
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/game-lifetimes-2026-09-...)
Script completed
Wall time 1.5 seconds
Output:
{"chunk_id":"bb3f4b","wall_time_seconds":1.001371659,"session_id":79626,"original_token_count":203,"output":"Completed histories 32 of60; population aggregates pending\n appid name date first_review first_review_offset_days\n511250 Cloudbase Prime 2017-07-26 05:00:34+00:00 2016-09-29 05:57:32+00:00 -299.960440\n358130 Curious Expedition 2016-09-02 15:17:42+00:00 2015-05-19 20:37:59+00:00 -471.777581\n appid name threshold ratio start_month prior6 next3 age_years\n1915510 Yao-Guai Hunter 20 4 2025-02 104 283 1.833152\n1608470 Warstride Challenges 20 4 2023-07 4 45 1.198143\n1269300 This Means Warp 20 4 2023-05 35 76 1.121092\n1092590 沙雕之路 20 4 2026-04 13 35 6.511487\nn 32\n"}
{"chunk_id":"aa1689","wall_time_seconds":0.157299114,"exit_code":0,"original_token_count":113,"output":" year kind n median ge08 exact\n 2019 tags 3000 0.458333 0.035333 0.009000\n 2021 tags 3000 0.416667 0.002667 0.001333\n 2023 tags 3000 0.423077 0.002000 0.000000\n 2025 tags 3000 0.428571 0.006333 0.000667\n 2019 short_pitch 3000 0.153516 0.000000 0.000000\n 2021 short_pitch 3000 0.155255 0.000000 0.000000\n 2023 short_pitch 3000 0.150385 0.000000 0.000000\n 2025 short_pitch 3000 0.152613 0.000000 0.000000\n"}
[Think]
**Screening review-burst data**
[Think]
**Screening review-burst data**
**Refining review-burst filters**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/game-life...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"ba7315","wall_time_seconds":0.000003036,"exit_code":128,"original_token_count":199,"output":"{\"appid\": 1092590, \"name\": \"沙雕之路\", \"order\": 29, \"complete\": true, \"collected\": 1038, \"summary_total\": 1038, \"pages\": 12, \"snapshot_total\": 1038}\n{\"appid\": 1473050, \"name\": \"100 hidden birds\", \"order\": 30, \"complete\": true, \"collected\": 723, \"summary_total\": 723, \"pages\": 9, \"snapshot_total\": 722}\n{\"appid\": 1177100, \"name\": \"末法时代\", \"order\": 31, \"complete\": true, \"collected\": 67, \"summary_total\": 67, \"pages\": 2, \"snapshot_total\": 67}\n{\"appid\": 903450, \"name\": \"Turbo Cat Fight\", \"order\": 32, \"complete\": true, \"collected\": 6, \"summary_total\": 6, \"pages\": 2, \"snapshot_total\": 6}\n328 steam-research/game-lifetimes-2026-09-07/requests.jsonl\nfatal: not a git repository (or any parent up to mount point /)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n"}
[Think]
**Validating metadata graphs**
exec ({"code": "text(await tools.web__run({search_query:[{q:'site.steamcommunity.com/groups/steamworks \"Tag Wizard\" \"202...)
Script completed
Wall time 3.2 seconds
Output:
Introducing the Steamworks Tag Wizard, now available in Beta :: Steamworks Development (https://steamcommunity.com/groups/steamworks/eventcomments/2515771867779793291)
citeturn6search0 [wordlim: 200] Published: 6.2 years ago; Crawled: last week; Introducing the Steamworks Tag Wizard, now available in Beta ... https://steamcommunity.com/gid/103582791433666425/announcements/detail/2246679902968741150 ... Jun 25, 2020 @ 4:05am
STEAM GROUP
Steamworks Development SteamworksDev
[Input] [Input]
Request To Join
Image
STEAM GROUP
Steamworks Development SteamworksDev
46,600 MEMBERS
923
IN-GAME
11,235
ONLINE
... [192 more lines]
exec ({"code": "text(await tools.web__run({open:[{ref_id:\"https://steamcommunity.com/gid/103582791433666425/announcements/...)
Script completed
Wall time 2.5 seconds
Output:
Internal Error ()
citeturn7view0 [wordlim: 200] Source: open({"ref_id":"https://steamcommunity.com/gid/103582791433666425/announcements/detail/2246679902968741150","lineno":null}); Total lines: 1
L0: URL https://steamcommunity.com/gid/103582791433666425/announcements/detail/2246679902968741150 is not safe to open (non-retryable error)
--------------------------------------------------------------------------------
Steam Tags (Steamworks Documentation) (https://partner.steamgames.com/doc/store/tags)
citeturn7view1 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://partner.steamgames.com/doc/store/tags","lineno":null}); Total lines: 457
L0: Steamworks Documentation
L1:
L2: [Input: Search Steamworks Documentation…] [Input]
L3: * cite0†Documentation Home Page L4: * cite1†Getting Started L5: * cite2†Onboarding L6: * cite3†Steam Direct Fee L7: * cite4†Managing Your Steamworks Account L8: * cite5†User Permission: Receive Steamworks Communication L9: * cite6†Managing Applications L10: * cite7†Application Management Sharing L11: * cite8†Transferring Applications L12: * cite9†Bringing Mobile Games to Steam L13: * cite10†Content Survey L14: * cite11†Age Ratings in Indonesia L15: * cite12†Age Ratings Mandatory in Germany L16: * cite13†Frequently Asked Questions L17: * cite14†Store Presence L18: * cite15†Applications L19: * cite16†Branches (Betas) L20: * cite17†Builds L21: * cite18†Bundles L22: * cite19†Creating Bundles Across Multiple Developers/Publishers L23: * cite20†Demos L24: * cite21†Depots L25: * cite22†Downloadable Content (DLC) L26: * cite23†DLC Visibility L27: * cite24†Game Soundtracks on Steam L28: * cite25†Packages L29: * cite26†Autogrant Packages L30: * cite27†Creating and Configuring Deluxe Packs L31: * cite28†Platforms L32: * cite29†Developing for SteamOS and Linux L33: * cite30†Coming Soon L34: * cite31†Developer And Publisher Homepages L35: * cite32†Homepage Example L36: * cite33†Early Access L37: * cite34†Explain Your Editions L38: * cite35†Franchise Pages L39: * cite36†Free To Play Games L40: * cite37†Graphical Assets - Overview L41: * cite38†Artwork Overrides L42: * cite39†Community and Client Icons L43: * cite40†Event Graphical Assets L44: * cite41†Graphical Asset Rules L45: * cite42†Library Assets L46: * cite43†Store Graphical Assets L47: * cite44†Livestreaming L48: * cite45†Setting Up A Stream L49: * cite46†Frequently Asked Questions L50: * cite47†Broadcast Moderation and Adding Moderators L51: * cite48†Broadcast Viewership Statistics L52: * cite49†Livestreaming a Game Demo to the Steam Store L53: * cite50†Localization and Languages L54: * cite51†Languages Supported on Steam L55: * cite52†Pre-Purchasing on Steam L56: * cite53†Pricing L57: * cite54†Adding A New Currency L58: * cite55†Package Pricing CSV Import/Export L59: * cite56†Recurring Subscriptions L60: * cite57†Supported Currencies L61: * cite58†Promo Event Tools, Rules, and Guidelines L62: * cite59†Participating in Third-Party Sales Events L63: * cite60†Developer, Publisher, and Franchise Sale Pages L64: * cite61†Hosting Third-Party Sales Events L65: * cite62†Release Dates L66: * cite63†Release Options L67: * cite64†Release Process L68: * cite65†Removing a product from Steam L69: * cite66†Review Process L70: * cite67†Roadmaps L71: * cite68†Season Passes L72: * cite69†Steam China L73: * cite70†Steam Tags L74: * cite71†Store Page, Building and Editing L75: * cite72†Store Page Accolades L76: * cite73†Store Page Extra Asset Management L77: * cite74†Store Page Written Description L78: * cite75†Testing On Steam L79: * cite76†Top Sellers Lists L80: * cite77†Trailers L81: * cite78†Updating Your Game - Best Practices L82: * cite79†User Reviews L83: * cite80†Features L84: * cite81†Anti-cheat and Game Bans L85: * cite82†Anti-Cheat Integration L86: * cite83†Common Redistributables L87: * cite84†Enhanced Rich Presence L88: * cite85†Game Notifications L89: * cite86†Microtransactions (In-Game Purchases) L90: * cite87†Microtransactions Implementation Guide L91: * cite88†Recurring In-Game Billing L92: * cite89†Multiplayer L93: * cite90†Game Servers L94: * cite91†Steam Datagram Relay L95: * cite92†Steam Matchmaking & Lobbies L96: * cite93†Matchmaking based on skill L97: * cite94†Steam Networking L98: * cite95†Stats and Achievements L99: * cite96†Step by Step: Achievements L100: * cite97†Step by Step: Stats L101: * cite98†Steam Audio L102: * cite99†Steam Cloud L103: * cite100†Steam Cloud Play (Beta) L104: * cite101†Steam Community L105: * cite102†Steam DRM L106: * cite103†Steam Error Reporting L107: * cite104†Steam Families L108: * cite105†Steam HTML Surface L109: * cite106†Steam Input L110: * cite107†Action Manifest Files L111: * cite108†Action Set Layers L112: * cite109†Activators L113: * cite110†Browsing Configurations L114: * cite111†General Concepts L115: * cite112†Getting Started for Developers L116: * cite113†Getting Started for Players L117: * cite114†In-Game Actions File L118: * cite115†Input Source Modes L119: * cite116†Input Sources L120: * cite117†Legacy Mode Bindings L121: * cite118†Mode Shifting L122: * cite119†Mouse Regions L123: * cite120†Radial Menus L124: * cite121†Steam Input Devices L125: * cite122†Microsoft Xbox 360 Controller L126: * cite123†Microsoft Xbox One Controller L127: * cite124†Sony PlayStation 4 Controller L128: * cite125†Steam Controller (2015) L129: * cite126†Steam Input Gamepad Emulation - Best Practices L130: * cite127†Templates for In-Game Actions Files L131: * cite128†Touch Menus L132: * cite129†Uploading Steam Input Configs to Steam Workshop L133: * cite130†Steam Inventory Service L134: * cite131†Steam Inventory Item Accessories L135: * cite132†Steam Inventory Item Dynamic Properties L136: * cite133†Steam Inventory Item Store L137: * cite134†Steam Inventory Item Tags L138: * cite135†Steam Inventory Item Tools L139: * cite136†Steam Inventory Schema L140: * cite137†Steam Inventory Web Functions L141: * cite138†Steam Keys L142: * cite139†Steam Leaderboards L143: * cite140†Step by Step: Leaderboards L144: * cite141†Steam Overlay L145: * cite142†Steam Playtest L146: * cite143†Steam Remote Play L147: * cite144†Steam Screenshots L148: * cite145†Steam Timelines L149: * cite146†Steam Voice L150: * cite147†Steam Workshop L151: * cite148†Steam Workshop Implementation Guide L152: * cite149†Steam Workshop Item Tags L153: * cite150†Steam Workshop Item Versioning L154: * cite151†User Authentication and Ownership L155: * cite152†Virtual Reality L156: * cite153†SteamVR L157: * cite154†Application Settings for Virtual Reality L158: * cite155†SteamVR Input L159: * cite156†OpenVR L160: * cite157†SteamVR for Enterprise / Government Use L161: * cite158†Finance L162: * cite159†Developer Refund Reporting L163: * cite160†Reporting and Payments L164: * cite161†Reporting and Payments FAQ L165: * cite162†Taxes FAQ L166: * cite163†Sales and Marketing L167: * cite164†Advertising on Steam L168: * cite165†Best Practices, Marketing L169: * cite166†Community Moderation L170: * cite167†Adding Community Moderators L171: * cite168†Curators and Curator Connect L172: * cite169†Discounting L173: * cite170†Daily Deals L174: * cite171†Free to Keep (100% Discount) L175: * cite172†Free Weekends L176: * cite173†Seasonal Sales L177: * cite174†Events and Announcements Tools L178: * cite175†Events and Announcements Examples L179: * cite176†Embeddable Widgets L180: * cite177†Events and Announcements Review Step L181: * cite178†Events and Announcements Visibility L182: * cite179†Events and Announcements Visibility Stats Reporting L183: * cite180†Event Type: Major Update L184: * cite181†Event Type: Small Update / Patch Notes L185: * cite182†Importing HTML L186: * cite183†Sale Page Tools L187: * cite184†Sale Page Tools -- Information for Partners L188: * cite185†Sale Page Tools - Background Groupings L189: * cite186†Sale Page Tools - Livestreaming (Broadcasting) L190: * cite187†Sale Page Tools - Minimum Requirements L191: * cite188†Sale Page Tools - Section Types L192: * cite189†Sale Page Section: Apps And Bundles L193: * cite190†Features And Tools, Marketing L194: * cite191†Followers L195: * cite192†Google Analytics L196: * cite193†Points Shop Items L197: * cite194†Profile Features L198: * cite195†Steam Branding Guidelines L199: * cite196†Steam Community Items L200: * cite197†Store and Platform Traffic Reporting L201: * cite198†Store Widget L202: * cite199†Upcoming Steam Events L203: * cite200†Steam Next Fest L204: * cite201†Steam Next Fest - Tips L205: * cite202†Steam Next Fest: February 2027 L206: * cite203†Steam Next Fest: June 2027 L207: * cite204†Steam Next Fest: October 2026 L208: * cite205†Steam Themed Sale Events L209: * cite206†Steam Auto Battler RPG Fest 2026 L210: * cite207†Steam Cooking Fest 2026 L211: * cite208†Steam Couch Co-Op Fest 2027 L212: * cite209†Steam Desktop Companion Fest 2027 L213: * cite210†Steam Dinos vs. Robots Fest 2027 L214: * cite211†Steam Fighting Fest 2027 L215: * cite212†Steam Medieval Fest 2026 L216: * cite213†Steam Mountaineering Fest 2027 L217: * cite214†Steam Party-Based RPG Fest 2026 L218: * cite215†Steam Programming Fest 2026 L219: * cite216†Steam PvE Survival Crafting Fest 2026 L220: * cite217†Steam Racing Fest 2027 L221: * cite218†Steam Real-Time Strategy Fest 2027 L222: * cite219†Steam Rhythm Fest 2027 L223: * cite220†Steam Scream V Fest L224: * cite221†Steam Sheep Fest 2027 L225: * cite222†Steam Shop Keeper Fest 2027 L226: * cite223†Steam Witch Fest 2027 L227: * cite224†UTM Analytics L228: * cite225†Visibility on Steam L229: * cite226†Update Visibility Rounds L230: * cite227†Wishlists L231: * cite228†Wishlist Reporting L232: * cite229†Steamworks SDK L233: * cite230†Creating and using InstallScripts L234: * cite231†Creating a retail and "Gold Master" disk L235: * cite232†Steamworks API Overview L236: * cite233†Debugging the Steamworks API L237: * cite234†Steamworks API Example Application (SpaceWar) L238: * cite235†Updating Game Build L239: * cite236†Partial Depot Update Instructions L240: * cite237†Tip - Renaming a live exe L241: * cite238†Uploading to Steam L242: * cite239†Distributing Open Source Applications on Steam L243: * cite240†Distributing Source Engine Games / Mods L244: * cite241†Distributing Your Dedicated Game Server L245: * cite242†SteamPipe Local Content Server L246: * cite243†Web API Overview L247: * cite244†Authentication using Web API Keys L248: * cite245†Error Codes &amp; Responses L249: * cite246†OAuth L250: * cite247†Accessibility Features L251: * cite248†Steam Hardware L252: * cite249†Getting your game ready for Steam Deck and Steam Machine L253: * cite250†How to debug Windows games on Steam Deck and Steam Machine L254: * cite251†How to load and run games on Steam Deck and Steam Machine L255: * cite252†Steam Deck L256: * cite253†Social Media Templates L257: * cite254†Steam Deck Brand Guidelines and Logos L258: * cite255†Steam Deck Developer Kits L259: * cite256†Steam Deck FAQ L260: * cite257†Steam Deck SVG Line Art L261: * cite258†Steamworks Virtual Conference: Steam Deck - Nov 12th 2021 L262: * cite259†Steam Deck and Steam Machine Compatibility Review L263: * cite260†Steam Deck Verified Landing Pages L264: * cite261†Steam Frame L265: * cite262†Connecting adb to Lepton L266: * cite263†How to load and run games on Steam Frame L267: * cite264†How to upload Android APKs to Steam L268: * cite265†OpenXR Game Engine Integrations L269: * cite266†Custom Engines L270: * cite267†Godot L271: * cite268†Unity L272: * cite269†Unreal Engine L273: * cite270†Setting up your Steam Frame for development L274: * cite271†Steam Frame Controllers L275: * cite272†Steam Frame Debugging L276: * cite273†Steam Frame Standalone Compatibility Review Process L277: * cite274†Performance Assessment Overlay (VR titles) L278: * cite275†Suggesting default user settings for your game L279: * cite276†What games can run standalone on Steam Frame L280: * cite277†Steam Hardware and Proton L281: * cite278†Steam Machine L282: * cite279†Steam PC Café Program L283: * cite280†Licensees L284: * cite281†PC Café Requirements and Sign Up Instructions L285: * cite282†Getting Started L286: * cite283†Setup instructions for the PC Café model (incl. PC Café Server and Content Cache)
{"chunk_id":"297ef4","wall_time_seconds":0.172823416,"exit_code":0,"original_token_count":218,"output":"511250 appid recommendationid timestamp_created timestamp_updated steam_purchase written_during_early_access\n511250 25761082 1475128652 1475128652 True True\n511250 25987799 1476216307 1476216307 True True\n511250 30082429 1487695738 1487695738 True True\n358130 appid recommendationid timestamp_created timestamp_updated steam_purchase written_during_early_access\n358130 15905915 1432067879 1432068084 True True\n358130 15907852 1432078468 1432078468 True True\n358130 15911092 1432106037 1542910072 True False\n"}
[Think]
**Checking official article details**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/catalog-vari...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"cc4020","wall_time_seconds":0.000004171,"exit_code":0,"original_token_count":129,"output":"{\"appid\": 979970, \"name\": \"IMAZE.EXE\", \"order\": 39, \"complete\": true, \"collected\": 72, \"summary_total\": 72, \"pages\": 2, \"snapshot_total\": 72}\n{\"appid\": 1630010, \"name\": \"Mathematic Adventures\", \"order\": 40, \"complete\": true, \"collected\": 0, \"summary_total\": 0, \"pages\": 1, \"snapshot_total\": 0}\n{\"appid\": 1455630, \"name\": \"THE GAME OF LIFE 2\", \"order\": 41, \"complete\": true, \"collected\": 3674, \"summary_total\": 3677, \"pages\": 38, \"snapshot_total\": 3680}\n398 steam-research/game-lifetimes-2026-09-07/requests.jsonl\n"}
[Think]
**Preparing chart data**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/catalog-vari...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"4a703a","wall_time_seconds":1.001605293,"session_id":97555,"original_token_count":0,"output":""}
{"chunk_id":"52888c","wall_time_seconds":0.000003279,"exit_code":0,"original_token_count":113,"output":"{\"appid\": 922710, \"name\": \"Knightin'+\", \"order\": 42, \"complete\": true, \"collected\": 235, \"summary_total\": 235, \"pages\": 4, \"snapshot_total\": 235}\n{\"appid\": 1720160, \"name\": \"旅者 Travelers\", \"order\": 43, \"complete\": true, \"collected\": 131, \"summary_total\": 131, \"pages\": 3, \"snapshot_total\": 131}\n{\"appid\": 2107590, \"name\": \"Magic or Machinations?\", \"order\": 44, \"complete\": true, \"collected\": 1, \"summary_total\": 1, \"pages\": 2, \"snapshot_total\": 1}\n"}
[Think]
**Checking label concentration metrics**
The lifetime collection is past 45 of the 60 games. Two release dates are clearly later than the games’ earliest surviving reviews; those early reviews include Early Access flags. I’m excluding those dates from launch-anchored comparisons and keeping a separate first-review clock.
The distinction matters: otherwise, reviews accumulated during Early Access could be counted as if they arrived before the game existed, or a later release date could make an old game appear to have launched unusually strongly.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/game-life...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"12669b","wall_time_seconds":1.001004296,"session_id":90361,"original_token_count":0,"output":""}
{"chunk_id":"3a5937","wall_time_seconds":0.000001829,"exit_code":0,"original_token_count":5,"output":"Passed 48 checks\n"}
[Think]
**Checking cross-publisher matches**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/catalog-vari...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"4f0431","wall_time_seconds":0.000005057,"exit_code":0,"original_token_count":175,"output":"{\"appid\": 515040, \"name\": \"Make America Great Again: The Trump Presidency\", \"order\": 49, \"complete\": true, \"collected\": 1627, \"summary_total\": 1627, \"pages\": 18, \"snapshot_total\": 1627}\n{\"appid\": 489380, \"name\": \"QuiVr\", \"order\": 50, \"complete\": true, \"collected\": 482, \"summary_total\": 482, \"pages\": 6, \"snapshot_total\": 482}\n{\"appid\": 443420, \"name\": \"Artificial Defense\", \"order\": 51, \"complete\": true, \"collected\": 70, \"summary_total\": 70, \"pages\": 2, \"snapshot_total\": 71}\n{\"appid\": 1296700, \"name\": \"Headbangers in Holiday Hell\", \"order\": 52, \"complete\": true, \"collected\": 34, \"summary_total\": 34, \"pages\": 2, \"snapshot_total\": 34}\n491 steam-research/game-lifetimes-2026-09-07/requests.jsonl\n"}
exec ({"code": "text(await tools.web__run({open:[{ref_id:\"https://steamcommunity.com/groups/steamworks/announcements/detai...)
[
{
"type": "text",
"text": "Script completed\nWall time 2.1 seconds\nOutput:\n"
},
{
"type": "text",
"text": "Steam :: Steamworks Development :: Introducing the Steamworks Tag Wizard, now available in Beta (https://steamcommunity.com/groups/steamworks/announcements/detail/2246679902968741150)\n\ue200cite\ue202turn8view0\ue201 [wordlim: 200] Crawled: yesterday; Content type: text/html; Source: open({\"ref_id\":\"https://steamcommunity.com/groups/steamworks/announcements/detail/2246679902968741150\",\"lineno\":null}); Total lines: 1\nL0: \ue200cite\ue2020\u2020Image\u2020community.akamai.steamstatic.com\ue201 "
},
{
"type": "image",
"note": "[image: shown below]"
},
{
"type": "text",
"text": "{\"chunk_id\":\"4ba4af\",\"wall_time_seconds\":0.00000321,\"exit_code\":0,\"original_token_count\":93,\"output\":\"{\\\"appid\\\": 443420, \\\"name\\\": \\\"Artificial Defense\\\", \\\"order\\\": 51, \\\"complete\\\": true, \\\"collected\\\": 70, \\\"summary_total\\\": 70, \\\"pages\\\": 2, \\\"snapshot_total\\\": 71}\\n{\\\"appid\\\": 1296700, \\\"name\\\": \\\"Headbangers in Holiday Hell\\\", \\\"order\\\": 52, \\\"complete\\\": true, \\\"collected\\\": 34, \\\"summary_total\\\": 34, \\\"pages\\\": 2, \\\"snapshot_total\\\": 34}\\n506 steam-research/game-lifetimes-2026-09-07/requests.jsonl\\n\"}"
}
]

[Think]
**Building follow-up plot code**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/game-lifetim...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"859995","wall_time_seconds":0.000003512,"exit_code":0,"original_token_count":93,"output":"{\"appid\": 443420, \"name\": \"Artificial Defense\", \"order\": 51, \"complete\": true, \"collected\": 70, \"summary_total\": 70, \"pages\": 2, \"snapshot_total\": 71}\n{\"appid\": 1296700, \"name\": \"Headbangers in Holiday Hell\", \"order\": 52, \"complete\": true, \"collected\": 34, \"summary_total\": 34, \"pages\": 2, \"snapshot_total\": 34}\n543 steam-research/game-lifetimes-2026-09-07/requests.jsonl\n"}
[Think]
**Validating follow-up metrics**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/game-life...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"d629e8","wall_time_seconds":0.000003348,"exit_code":0,"original_token_count":134,"output":"{\"appid\": 1296700, \"name\": \"Headbangers in Holiday Hell\", \"order\": 52, \"complete\": true, \"collected\": 34, \"summary_total\": 34, \"pages\": 2, \"snapshot_total\": 34}\n{\"appid\": 1007040, \"name\": \"EARTH DEFENSE FORCE 5\", \"order\": 53, \"complete\": true, \"collected\": 9365, \"summary_total\": 9367, \"pages\": 95, \"snapshot_total\": 9368}\n{\"appid\": 1222040, \"name\": \"Offroad Mania\", \"order\": 54, \"complete\": true, \"collected\": 367, \"summary_total\": 367, \"pages\": 5, \"snapshot_total\": 367}\n571 steam-research/game-lifetimes-2026-09-07/requests.jsonl\n"}
[Think]
**Validating review pagination**
The catalog study is finished and checked. Its main result is modestly broader advertised variety alongside much faster growth in the number of releases; the description comparisons don’t show a general increase in sameness.
The lifetime collection has finished its largest game and is on the final few titles. I’m now checking exact-day counts, zero-activity months, and the difference between a continuing trickle and a substantial later addition.
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/game-lifetimes-2026-09-07/collection.log; cat s...)
Script completed
Wall time 5.0 seconds
Output:
{"chunk_id":"1ee748","wall_time_seconds":0.000002852,"exit_code":0,"original_token_count":202,"output":"{\"appid\": 1222040, \"name\": \"Offroad Mania\", \"order\": 54, \"complete\": true, \"collected\": 367, \"summary_total\": 367, \"pages\": 5, \"snapshot_total\": 367}\n{\"appid\": 1462520, \"name\": \"BRINK Traveler\", \"order\": 55, \"complete\": true, \"collected\": 188, \"summary_total\": 188, \"pages\": 3, \"snapshot_total\": 187}\n{\"appid\": 3318950, \"name\": \"The Mirror's Curse\", \"order\": 56, \"complete\": true, \"collected\": 3, \"summary_total\": 3, \"pages\": 2, \"snapshot_total\": 3}\n{\n \"active\": true,\n \"max_requests\": 800,\n \"max_reviews\": 65000,\n \"max_response_bytes\": 2000000,\n \"min_interval_seconds\": 2,\n \"retries\": 0,\n \"stop_on_error\": true,\n \"scope\": \"60 frozen random games; complete surviving-review arrival histories; no text or accounts; new owner authorization for remaining avenues\",\n \"bulk_catalog_stays_paused\": true\n}"}
{"chunk_id":"82c06b","wall_time_seconds":5.00076735,"session_id":90361,"original_token_count":0,"output":""}
[Think]
**Checking artifact metadata**
sleep ({"duration_ms": 30000, "_codex": true})
Wall time: 30.0066 seconds
Sleep completed.
exec ({"code": "text(await tools.write_stdin({session_id:90361,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":1800...)
Script completed
Wall time 0.0 seconds
Output:
{"chunk_id":"e49af6","wall_time_seconds":0.000001216,"exit_code":0,"original_token_count":168,"output":"{\n \"sample\": 60,\n \"reviews\": 51127,\n \"valid_release_clocks\": 58,\n \"date_flags\": [\n {\n \"appid\": \"511250\",\n \"name\": \"Cloudbase Prime\",\n \"date\": \"2017-07-26 05:00:34+00:00\",\n \"first_review\": \"2016-09-29 05:57:32+00:00\",\n \"first_review_offset_days\": \"-299.96043981481483\"\n },\n {\n \"appid\": \"358130\",\n \"name\": \"Curious Expedition\",\n \"date\": \"2016-09-02 15:17:42+00:00\",\n \"first_review\": \"2015-05-19 20:37:59+00:00\",\n \"first_review_offset_days\": \"-471.7775810185185\"\n }\n ],\n \"exact_summary_matches\": 48,\n \"max_abs_summary_difference\": 4,\n \"full_calendar_end\": \"2026-09-01\",\n \"primary_population\": 65839\n}\n"}
{"chunk_id":"0415a2","wall_time_seconds":0.000002604,"exit_code":0,"original_token_count":113,"output":"{\"appid\": 2435900, \"name\": \"SharpShooter3D\", \"order\": 57, \"complete\": true, \"collected\": 2116, \"summary_total\": 2118, \"pages\": 23, \"snapshot_total\": 2118}\n{\"appid\": 1309990, \"name\": \"Creature Lab\", \"order\": 58, \"complete\": true, \"collected\": 341, \"summary_total\": 341, \"pages\": 5, \"snapshot_total\": 340}\n{\"appid\": 1651090, \"name\": \"Crown of Pain\", \"order\": 59, \"complete\": true, \"collected\": 83, \"summary_total\": 83, \"pages\": 2, \"snapshot_total\": 83}\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/game-lifetimes-2026-09-...)
Script completed
Wall time 1.5 seconds
Output:
{"chunk_id":"368053","wall_time_seconds":1.001323431,"session_id":96869,"original_token_count":64,"output":"{'at_least_10_after_year1': 43, 'at_least_50_after_year1': 33, 'at_least_100_after_year1': 29, 'at_least_500_after_year1': 14, 'n': 44, 'more_reviews_year2_than_year1': 3, 'mature_year2': 42, 'recent12_comparison_n': 42, 'recent12_more_than_first365': 1}\n"}
{"chunk_id":"d13ee7","wall_time_seconds":0.174089239,"exit_code":0,"original_token_count":1520,"output":" domain metric sample_n k estimate lo95 hi95\n all any_last12 60 49 0.631522 0.414609 0.848436\n all atleast12_last12 60 30 0.150087 0.111412 0.188762\n all active_9of12 60 28 0.134893 0.098444 0.171342\n all active_12of12 60 17 0.067565 0.044605 0.090524\n all late_burst_20_4 58 7 0.039942 0.013855 0.066029\n all burst_in_first2years 55 3 0.024583 0.000000 0.050488\n 50plus any_last12 45 41 0.881309 0.790476 0.972141\n 50plus atleast12_last12 45 30 0.551675 0.409517 0.693832\n 50plus active_9of12 45 28 0.495824 0.361849 0.629800\n 50plus active_12of12 45 17 0.248347 0.163956 0.332739\n 50plus late_burst_20_4 44 7 0.143781 0.050309 0.237253\n 50plus burst_in_first2years 42 3 0.086922 0.000000 0.177709\n1000plus any_last12 15 15 1.000000 NaN NaN\n1000plus atleast12_last12 15 15 1.000000 NaN NaN\n1000plus active_9of12 15 15 1.000000 NaN NaN\n1000plus active_12of12 15 13 0.876261 0.704547 1.000000\n1000plus late_burst_20_4 14 3 0.211990 0.000000 0.451346\n1000plus burst_in_first2years 14 0 0.000000 NaN NaN\n\nDISTRIBUTIONS\n domain metric n weighted_median unweighted_median\n all release_d30 58 7.000000 30.000000\n all release_d90 58 10.000000 45.500000\n all release_d365 58 13.000000 80.000000\n all year1_after90_share 55 0.200000 0.331699\n all year1_to90_ratio 55 1.250000 1.496333\n all year2_count 55 2.000000 35.000000\n all year2_to_year1 52 0.210526 0.296685\n all firstyear_share_of_current 57 0.558824 0.500000\n all postyear1_count 58 4.000000 94.500000\n all last12_count 60 2.000000 11.500000\n all last12_active_months 60 2.000000 6.500000\n 50plus release_d30 44 45.000000 60.500000\n 50plus release_d90 44 51.000000 84.500000\n 50plus release_d365 44 85.000000 137.500000\n 50plus year1_after90_share 44 0.331699 0.361990\n 50plus year1_to90_ratio 44 1.496333 1.567488\n 50plus year2_count 42 45.000000 69.500000\n 50plus year2_to_year1 42 0.411765 0.420144\n 50plus firstyear_share_of_current 44 0.500000 0.486617\n 50plus postyear1_count 44 103.000000 171.000000\n 50plus last12_count 45 12.000000 28.000000\n 50plus last12_active_months 45 8.000000 10.000000\n50plus_and_year1_ge10 release_d30 44 45.000000 60.500000\n50plus_and_year1_ge10 release_d90 44 51.000000 84.500000\n50plus_and_year1_ge10 release_d365 44 85.000000 137.500000\n50plus_and_year1_ge10 year1_after90_share 44 0.331699 0.361990\n50plus_and_year1_ge10 year1_to90_ratio 44 1.496333 1.567488\n50plus_and_year1_ge10 year2_count 42 45.000000 69.500000\n50plus_and_year1_ge10 year2_to_year1 42 0.411765 0.420144\n50plus_and_year1_ge10 firstyear_share_of_current 44 0.500000 0.486617\n50plus_and_year1_ge10 postyear1_count 44 103.000000 171.000000\n50plus_and_year1_ge10 last12_count 44 12.000000 27.000000\n50plus_and_year1_ge10 last12_active_months 44 8.000000 10.000000\n\nBANDS\nreview_band n any_last12 atleast12_last12 active_9of12 median_last12 median_active_months valid_release_n median_year1 median_after90_year1_share median_year2_year1\n 0-49 15 8 0 0 1.0 1.0 14 5.0 0.157895 0.150000\n 1000-9999 15 15 15 15 237.0 12.0 14 907.0 0.489188 0.418609\n 200-999 15 15 11 10 22.0 10.0 15 153.0 0.367442 0.475728\n 50-199 15 11 4 3 4.0 4.0 15 42.0 0.285714 0.380952\n\nCLOCK\n clock min_year1 n weighted_year1_to90 weighted_after90_share unweighted_year1_to90\n release 1 44 1.496333 0.331699 1.567488\n release 10 44 1.496333 0.331699 1.567488\nfirstreview 1 45 1.500000 0.333333 1.580882\nfirstreview 10 45 1.500000 0.333333 1.580882\n\nBURSTS\n threshold ratio population n games episodes\n 15 3 all_valid 58 11 11\n 15 3 50plus_valid 44 11 11\n 20 4 all_valid 58 7 7\n 20 4 50plus_valid 44 7 7\n 50 6 all_valid 58 4 4\n 50 6 50plus_valid 44 4 4\n"}
[Think]
**Recomputing supplementary estimates**
[Think]
**Recomputing supplementary estimates**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"d8207e","wall_time_seconds":0.190002871,"exit_code":0,"original_token_count":812,"output":" appid name threshold ratio start_month prior6 next3 age_years\n1915510 Yao-Guai Hunter 20 4 2025-02 104 283 1.833152\n1608470 Warstride Challenges 20 4 2023-07 4 45 1.198143\n1269300 This Means Warp 20 4 2023-05 35 76 1.121092\n1092590 沙雕之路 20 4 2026-04 13 35 6.511487\n 334540 Vox Machinae 20 4 2022-02 28 75 3.349157\n1720160 旅者 Travelers 20 4 2023-01 1 53 1.303535\n2693460 Christmas Nightmare 20 4 2025-10 11 32 1.826146\n name date collected release_d30 release_d90 release_d365 release_d730 last12_count last12_active_months\n Madness Cubed 2016-05-12 20:15:07+00:00 1063 10.0 27.0 101.0 167.0 83 12\n Yao-Guai Hunter 2023-04-03 10:35:12+00:00 2081 437.0 667.0 1114.0 1351.0 237 12\n Warstride Challenges 2022-04-19 09:04:32+00:00 240 81.0 95.0 120.0 202.0 14 8\n Superfighters Deluxe 2018-11-30 18:59:06+00:00 3106 180.0 246.0 634.0 1149.0 280 12\n V-Rally 4 2018-09-25 13:49:00+00:00 696 62.0 69.0 103.0 152.0 185 12\n This Means Warp 2022-03-17 12:30:39+00:00 434 102.0 136.0 215.0 361.0 22 9\n ---Red---Tether--> 2022-01-18 17:01:38+00:00 73 22.0 22.0 29.0 53.0 7 6\n 旅者 Travelers 2021-09-11 21:12:35+00:00 131 27.0 35.0 45.0 118.0 3 3\nEARTH DEFENSE FORCE 5 2019-07-11 07:02:55+00:00 9365 1092.0 1249.0 2945.0 4207.0 457 12\n domain metric n weighted_p25 weighted_median weighted_p75 unweighted_median\n50plus_no_known_ea year1_after90_share 32 0.241379 0.400000 0.611987 0.421242\n50plus_no_known_ea year1_to90_ratio 32 1.318182 1.666667 2.577236 1.729655\n50plus_no_known_ea year2_to_year1 31 0.258760 0.470297 0.806641 0.470297\n 50plus_price_le5 year1_after90_share 14 0.230769 0.333333 0.619141 0.444226\n 50plus_price_le5 year1_to90_ratio 14 1.300000 1.500000 2.625641 1.845229\n 50plus_price_le5 year2_to_year1 14 0.155221 0.380952 0.653465 0.425625\n 50plus_price_gt5 year1_after90_share 27 0.226190 0.328467 0.402484 0.356322\n 50plus_price_gt5 year1_to90_ratio 27 1.292308 1.489130 1.673597 1.553571\n 50plus_price_gt5 year2_to_year1 25 0.212747 0.411765 0.683333 0.411765\n"}
{"chunk_id":"2a2ed4","wall_time_seconds":0.000001194,"exit_code":0,"original_token_count":12,"output":"Passed 1272 checks; 604 requests; 51127 reviews\n"}
[Think]
**Preparing the graph view**
[Think]
**Preparing the graph view**
**Fixing burst grouping logic**
All 60 histories are complete: 51,127 surviving reviews from 604 requests, with no request errors.
Among the sampled games with at least 50 current reviews, the typical first-year total is about 1.5 times the first-90-day total. Continued activity years later is common in that group, but it is often modest. Dramatic late bursts are a separate pattern, and their measured frequency changes substantially with the threshold used to define one.
exec ({"code": "for(const p of [\"/media/logs/steam-market-research-7/a005-lifetime_examples.png\",\"/home...)
[
{
"type": "text",
"text": "Script completed\nWall time 0.0 seconds\nOutput:\n"
},
{
"type": "image",
"note": "[image: shown below]"
},
{
"type": "image",
"note": "[image: shown below]"
}
]


[Think]
**Reviewing figure readability**
[Think]
**Reviewing figure readability**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,numpy a...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"e8afbd","wall_time_seconds":0.165217836,"exit_code":0,"original_token_count":67,"output":"2016-18 n 14 year1 share current weighted median 0.43956043956043955\n2019-21 n 15 year1 share current weighted median 0.41689373297002724\n2022-24 n 15 year1 share current weighted median 0.6764705882352942\nexact summary n 33 weighted firstyear/90 1.447488584474886\n"}
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/game-life...)
Script completed
Wall time 0.6 seconds
Output:
{}
{}
{"chunk_id":"f5bcef","wall_time_seconds":0.402155692,"exit_code":0,"original_token_count":82,"output":"{'at_least_10_after_year1': 43, 'at_least_50_after_year1': 33, 'at_least_100_after_year1': 29, 'at_least_500_after_year1': 14, 'n': 44, 'more_reviews_year2_than_year1': 3, 'mature_year2': 42, 'recent12_comparison_n': 42, 'recent12_more_than_first365': 1}\ncatalog-variety-2026-09-07 27 files\ngame-lifetimes-2026-09-07 699 files\n"}
[Think]
**Validating sample comparisons**
exec ({"code": "text(await tools.mcpcodex_appopen_in_codex({target:{type:\"file\",path:\"/home/adn/a327ex/steam-researc...)
Script completed
Wall time 0.2 seconds
Output:
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
{"chunk_id":"4061d2","wall_time_seconds":0.000003178,"exit_code":0,"original_token_count":34,"output":"catalog-variety-2026-09-07 checks 48\ngame-lifetimes-2026-09-07 checks 1272\nLifetime active False\nLanguage active False\nBulk paused True\n"}
The two studies point to a fairly consistent picture: Steam is adding many more games within familiar advertised territory, while older games can continue receiving reviews for years without a dramatic revival. Neither finding establishes what causes that activity or how creatively different the games actually are.
I saved the complete catalog-variety findings and game-lifetime findings, with data and reproducible scripts.
Catalog growth is much larger than the increase in comparable advertised variety.
The comparison uses paid games outside Steam’s explicit-content descriptors. I examined all returned tags, a fixed set of 181 activity/genre tags, and short descriptions.
| Measurement | 2021 | 2025 | Change |
|---|---|---|---|
| Released game apps | 7,959 | 15,674 | +96.9% |
| Distinct activity-tag pairs | 5,549 | 7,074 | +27.5% |
| Expected distinct pairs in equally sized 3,000-game samples | 3,812 | 3,980 | +4.4% |
| Expected pairs represented at least five times in those samples | 999 | 1,068 | +6.9% |
| Share assigned to the ten most common primary activity labels | 59.7% | 56.8% | −2.9 percentage points |
A bigger collection almost automatically contains more rare combinations. Once that size difference is removed, the increase becomes modest.
There is some broadening: the primary activity labels become less concentrated, and an equally sized collection contains somewhat more recurring combinations. But it is nowhere near proportional to the doubling of releases.
The January–August comparison gives a similar result. Eligible releases increased 42.4% from 2025 to 2026, while comparable pair richness increased 3.7%.

The apparent change from 2019 is heavily affected by richer tagging.
In the 2019 cohort:
- The median game has nine returned tags.
- 35.2% have five or fewer.
By 2021, the median is twenty and only 1.8% have five or fewer. In 2025, that latter figure is 0.4%.
That makes older games look much less differentiated, even before asking whether they actually were. Steam’s introduction of the Tag Wizard in June 2020 is consistent with a change in tagging practice, although this snapshot cannot attribute the whole difference to that tool.
Restricting the comparison to games with exactly twenty tags substantially reduces the apparent 2019–2025 expansion in variety. The recent 2021–2025 result survives several coverage checks, but remains modest:
- Exactly twenty tags: comparable pair richness increases about 2.6%.
- Exactly three activity tags per qualifying game: about 4.5%.
- Games with at least 100 reviews: about 10.2%.
Those restrictions select different populations, so they are checks on the interpretation rather than interchangeable estimates.
Most absolute growth occurs under familiar labels, while some particular categories gain share.
The biggest additions between 2021 and 2025, using each game’s most prominent activity label, are:
| Primary activity label | Additional releases |
|---|---|
| Adventure | +897 |
| Action | +835 |
| Strategy | +709 |
| Horror | +521 |
| RPG | +388 |
| Action Roguelike | +321 |
Together, these account for approximately 47.6% of net growth.
Their relative positions change too. Horror rises from 2.5% to 4.6% of primary labels, Action Roguelike from 1.1% to 2.6%, and Idler and Incremental each reach about 1.3%. Generic Action and Puzzle lose share.
That is a redistribution within recognizable advertised activities. A more specific tag can also displace a broader one without representing a wholly new kind of game.
Of the activity pairs observed in 2025, 2,490 are absent from the 2021 cohort. But only 268 appear in at least five 2025 games, and just eleven in at least twenty. Those additional pairs account for only 4.5% of all 2025 pair occurrences.
The repeated additions include Desktop Companion + Idler, Management + Shop Keeper, Job Simulator + Management, and Idler + Loot. Pairs involving Bullet Heaven also appear—but our previous Vampire Survivors example makes clear why an apparently new label combination cannot be equated with a newly invented activity.
Short descriptions do not show a general increase in sameness.
I compared equally sized 3,000-game samples, measuring each game’s closest neighbor through:
- Tag overlap.
- Shared wording in short descriptions.
- Versions excluding games with the same developer credit.
- A stronger version also excluding shared publishers.
- Smaller random replications and one-game-per-credit samples.
The recent results are broadly flat. With different developer credits, median nearest tag similarity moves from 0.421 in 2021 to 0.429 in 2025. Median nearest short-description similarity moves from 0.156 to 0.153.
There are examples of exactly repeated puzzle descriptions, and separate editions of the same game. But many very similar neighbors share publishers or are variants. Those cases do not establish that the whole market is becoming clones.
Equally, different wording does not prove different gameplay. The short-description comparison is an English-oriented text analysis; it cannot measure all the variety uncovered in the previous language study.
My reading is therefore fairly specific: the storefront offers many more entries within familiar territory, accompanied by a smaller increase in the breadth of its labels. It does not support a sweeping statement about whether developers have become more or less creative.
The lifetime study finds substantial activity after launch, but also a large distinction between continued attention and a few isolated reviews.
I collected 51,127 surviving Steam-purchase reviews across 60 randomly selected games, using 604 requests with no request errors.
The sample spans three release eras—2016–2018, 2019–2021, and 2022–2024—and four current-review bands. Games with 10,000 reviews or more are outside this bounded study. The sampling frame contains 65,839 games, covering 98.6% of otherwise eligible app identities, but a much smaller share of their total review volume.
These are creation timestamps of currently returned reviews. Deleted or filtered records are absent, and a late review does not necessarily represent a new buyer.
Two recorded release dates were clearly too late: Cloudbase Prime and Curious Expedition have surviving reviews approximately 300 and 472 days earlier, including reviews marked as written during Early Access. I excluded those dates from launch-anchored comparisons and kept a separate first-review clock.
For games that accumulated at least fifty reviews, about a third of first-year reviews arrive after day ninety.
Among the 44 sampled games in that group with valid recorded dates:
- The weighted median first-year total is 1.50 times the first-90-day total.
- Approximately 33% of first-year reviews arrive during days 91–365.
- Using the first surviving review as the clock gives essentially the same result.
- Restricting to games whose returned rows exactly match their API totals gives about 1.45 times, so small count discrepancies do not drive it.
The size of that later contribution varies. Unweighted median shares arriving after day ninety are:
| Current review band | First-year reviews arriving after day 90 |
|---|---|
| 50–199 | 28.6% |
| 200–999 | 36.7% |
| 1,000–9,999 | 48.9% |
These groups are defined by their current totals. They are not launch-time categories from which we can forecast a new release.
This sample also does not establish a special cheap-game tail advantage: the first-year/day-90 ratio is 1.50 for games currently priced up to $5 and 1.49 above $5. There are only 14 and 27 valid cases respectively, so that is a limited comparison rather than a definitive rejection of a price-related difference.
Activity usually declines in year two, while still adding something substantial.
For the 42 qualifying games with mature second-year windows, the weighted median second-year count is 41% of the first-year count. Only three have more reviews in year two than in year one.
Yet among the 44 valid-date games with at least fifty current reviews:
- 43 add at least ten reviews after year one.
- 33 add at least fifty.
- 29 add at least one hundred.
- 14 add at least five hundred.
Those are observed sample counts, not population percentages.
At the current snapshot, the weighted median first-year share of accumulated reviews is 50%. But that number is strongly age-dependent: approximately 44% for 2016–2018 releases, 42% for 2019–2021, and 68% for 2022–2024. It would be wrong to turn it into a universal forecast that half a game’s eventual response comes after the first year.
Continuing review activity is common among moderately reviewed games. A large continuing audience is a different claim.
For games with fifty to 9,999 current reviews, the weighted estimates for September 2025 through August 2026 are:
| Recent activity | Estimated share of games | Approximate 95% sampling interval |
|---|---|---|
| At least one review during the year | 88.1% | 79.0–97.2% |
| At least twelve reviews | 55.2% | 41.0–69.4% |
| Reviews in at least nine months | 49.6% | 36.2–63.0% |
| Reviews in all twelve months | 24.8% | 16.4–33.3% |
With only five games per original sampling cell, these estimates are approximate. The directly observed band differences make the distinction clearer:
| Current review band | Games sampled | Any recent review | At least twelve recent reviews | Median recent count |
|---|---|---|---|---|
| 0–49 | 15 | 8 | 0 | 1 |
| 50–199 | 15 | 11 | 4 | 4 |
| 200–999 | 15 | 15 | 11 | 22 |
| 1,000–9,999 | 15 | 15 | 15 | 237 |
All fifteen games in the largest sampled band have reviews in at least nine recent months; thirteen have reviews in every month.
Conversely, the weighted median recent count across the entire frame is only two, because very quiet games are so numerous. Calling every late review a “revival” would conceal that difference.
The individual trajectories show several distinct forms of persistence.
| Game | First 30 days | First 90 days | First year | Sep 2025–Aug 2026 |
|---|---|---|---|---|
| Madness Cubed | 10 | 27 | 101 | 83 |
| Superfighters Deluxe | 180 | 246 | 634 | 280 |
| V-Rally 4 | 62 | 69 | 103 | 185 |
| Yao-Guai Hunter | 437 | 667 | 1,114 | 237 |
| Warstride Challenges | 81 | 95 | 120 | 14 |
| This Means Warp | 102 | 136 | 215 | 22 |

Madness Cubed is particularly interesting: its review stream remains small but persistent across many years. It does not need a spectacular later event to accumulate much more than its first-year total.
Superfighters Deluxe has a stronger early period followed by a sustained smaller stream.
V-Rally 4 gradually strengthens later. Its most recent full year contains more reviews than its first year, without passing the sharp-burst screen described below. It is the only such increase among the 42 comparable sampled games whose first-year and recent-year windows do not overlap.
Warstride Challenges has a different shape: early concentration, a distinct later increase, and then a very small recent stream. A late burst does not necessarily establish a permanently higher level of activity.
None of these curves tells us whether the developer was still updating the game, what promoted it, or whether the reviewers were newly arriving players. Those would require separate evidence.
Late bursts exist, but their frequency is sensitive to how we define one.
The main screen requires a three-month block starting after year one, with at least twenty reviews and at least four times the monthly rate in the preceding six months. It finds seven games among 58 valid release dates.
Examples:
| Game | Burst begins | Previous six months | Following three months |
|---|---|---|---|
| Yao-Guai Hunter | February 2025 | 104 | 283 |
| Warstride Challenges | July 2023 | 4 | 45 |
| This Means Warp | May 2023 | 35 | 76 |
| 旅者 Travelers | January 2023 | 1 | 53 |
| Vox Machinae | February 2022 | 28 | 75 |
| 沙雕之路 | April 2026 | 13 | 35 |
| Christmas Nightmare | October 2025 | 11 | 32 |
The durations differ, so the comparison is between rates.
Loosening the definition to fifteen reviews and three times the earlier rate finds eleven games. Tightening it to fifty reviews and six times the rate finds four. There is no threshold-independent “revival probability” here.
Older games have also had more opportunities to exhibit such an event. Restricting the opportunity to a mature first-two-year window leaves only three cases among 42 qualifying games with at least fifty current reviews—too few for a useful era trend or precise prediction.
The more useful distinction is between continued accumulation, gradual strengthening, and abrupt late bursts. A revival detector captures the last of those and can miss the other two entirely.
Both studies are complete. The catalog analysis passed 48 verification checks; the lifetime study passed 1,272, including cursor exhaustion, exact-day and monthly recounts, source-count tolerances, and collection limits. The figures were inspected, and all collection is closed.
<oai-mem-citation> <citation_entries> MEMORY.md:39-47|note=[Kept the remaining research within observable Steam metadata and existing source scope] MEMORY.md:53-55|note=[Retained bounded paced collection and stopping safeguards] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>


Let's run a final research direction into the lives of developers on the store. Like, what avenues do you think are good for me to learn about how developers evolve their lives on the store over time? Maybe dividing them into developers who have always released successful games, vs. some that only had one hit, vs. some that only had hits after a hit, etc, basically all sorts of permutations of questions like that that really probe at the differences in results that developers achieve over time and what we can learn from it. Let's discuss first before you start.
[Think]
**Reviewing prior career findings**
I’ll review the career findings we already have, then propose questions about whole career sequences rather than repeat the earlier next-game comparisons. I won’t start a new analysis or collection yet.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Scoping career-history metrics**
I think this is a good final direction, and I’d organize it around career sequences and changes in the level of response a developer receives.
We already know that prior traction is strongly associated with later traction. What remains interesting is how that relationship develops: whether one breakthrough changes the subsequent pattern, whether repeated hits establish something more durable, and what happens between the prominent games.
Your proposed categories are a useful starting point, but I’d distinguish several sequences that could otherwise get lumped together. Using Q for quiet, M for moderate response, and H for a substantial hit:
| Pattern | Example sequence | What makes it interesting |
|---|---|---|
| Consistently strong | H → H → H → H | Is consistency common beyond established studios and franchises? |
| Gradual ascent | Q → M → M → H | Does a breakthrough emerge from improving earlier results? |
| Abrupt breakthrough | Q → Q → H | How different is this from gradual ascent? |
| Breakthrough followed by consistency | M → H → H → H | Does the first hit precede a lasting change in results? |
| One exceptional peak, substantial surrounding work | M → H → M → M | A “one-hit developer” whose other games still matter |
| Peak followed by quiet releases | H → Q → Q | A materially different kind of one-hit history |
| Interrupted success | H → Q → H | What does a quiet intervening game tell us? |
| Delayed recovery | H → Q → Q → M → H | How often does substantial response return after several quiet releases? |
| Repeated alternation | H → M → H → Q → H | Is unevenness itself a stable career pattern? |
| No observed follow-up | Q → … or H → … | A separate outcome, rather than something excluded from the study |
Those would be descriptions of observed releases, not permanent identities assigned to their developers. A career can move between them.
The questions I’d prioritize are these.
1. Does a first hit precede a higher floor, another exceptional peak, or both?
This is the most important distinction missing from “successful developers succeed again.”
After a first hit, we could separately examine:
- The next game’s response.
- The median response across the next several games.
- The weakest subsequent release.
- Whether another game approaches the original peak.
- Whether the developer releases again at all.
A developer could never repeat a 50,000-review game while moving from earlier releases with twenty reviews to later releases consistently receiving 1,000. That would be a substantial change in the career, even though every subsequent game looks disappointing beside the peak.
Conversely, someone might produce two enormous games separated by several almost unnoticed ones. Their ceiling is repeatable; their floor is not.
For you, distinguishing a durable floor from a repeatable peak seems much more useful than another average re-hit percentage.
2. Is the second hit more informative than the first?
I’d compare developers arriving at a similar recent result through different histories:
- One hit and little earlier work.
- One hit following several quiet games.
- Two hits in succession.
- Two hits separated by quiet releases.
- Several moderate games whose combined response approaches that of one hit.
Then examine their subsequent releases.
This asks whether repetition tells us something beyond the size of the biggest game. For example, do two 1,000-review games distinguish later outcomes more strongly than one 10,000-review game? Does a recent moderate result matter more than an older exceptional one?
We would compare similar release eras, observation windows, and current catalog sizes. The result would remain an association, but it could reveal whether the structure of prior achievement matters beyond its maximum.
3. What kinds of “one-hit careers” actually exist?
I’d give this its own investigation because the category is so misleading.
We should separate:
- One hit followed by no further observed release.
- One hit followed by only one newer game.
- One hit followed by several substantially reviewed games.
- One hit surrounded by genuinely quiet releases.
- One hit that is recent enough that no follow-up should yet be expected.
- One dominant game that continues accumulating attention while the developer releases other work.
Our earlier portfolio study established that a dominant title often coexists with a substantial remainder. The next step is to examine the chronological differences within that group.
This would tell us whether “one-hit developer” usually describes a precarious sequence, a very unequal but substantial body of work, or simply an unfinished story.
4. After a quiet release, how much of the earlier career still distinguishes what happens next?
We touched this with selected examples and the older-catalog comparison. I’d now make it systematic.
The key comparisons would be:
- Q → Q versus H → Q.
- H → Q versus H → Q → Q.
- H → H → Q versus Q → H → Q.
- A quiet game after a modest hit versus after an exceptional hit.
- A well-received quiet game versus a poorly received one, where review counts are sufficient.
The question is whether one quiet result, or several in succession, changes how informative the earlier catalog is.
I would measure both another release appearing and the response to that release. Otherwise we only see the developers who returned and accidentally treat their results as the outcome for everyone.
This seems particularly relevant to making varied work: how often does unevenness coexist with continued substantial response, and when does the whole observed sequence actually shift downward?
5. How do late breakthroughs differ from early breakthroughs?
“First game was a hit” and “eighth game was a hit” could lead to quite different subsequent catalogs.
We could compare:
- First hits occurring early versus late in the release sequence.
- First hits after moderate predecessors versus after uniformly quiet predecessors.
- What changes immediately around the breakthrough: listed publisher, current price band, advertised genre, franchise continuity, release spacing.
- Whether those observed changes persist in later releases.
- Whether late-breakthrough developers subsequently become consistent or return to their earlier response levels.
We already found that some climbers price upward and have longer release gaps around their breakthrough. This would extend that observation across the before, breakthrough, and after sequence.
I would describe those recorded changes directly. Release gaps would not become development time, and tag changes would not become proof of creative reinvention.
6. What separates genuinely consistent catalogs from merely impressive averages?
For developers with several sufficiently mature releases, I’d examine consistency in multiple ways:
- Proportion of releases crossing a response threshold.
- Median and lower-end response.
- Dependence on the largest game.
- Variation between consecutive games.
- Consistency within one franchise versus across differently named works.
A developer whose games receive 800, 1,200, 900, and 1,100 reviews has a different pattern from one receiving 10, 10,000, 20, and 5—even if a summary statistic makes the latter look stronger.
We could then inspect what observable kinds of catalogs occupy these groups: release frequency, publisher arrangements, repeated franchises, and advertised activities. “Always successful” should require several releases and a meaningful observation period; two successes alone would be an early strong record.
7. How often does a new game coincide with renewed attention to older work?
This would add something the previous career studies did not measure directly.
For a bounded set of developers, we could examine earlier games’ review arrivals around subsequent releases:
- Does the older catalog receive a noticeable increase?
- Is it concentrated in the previous hit, or spread across older games?
- Does a quiet new release coincide with any older-game increase?
- Do sequels show a different pattern from unrelated titles?
That would measure coincident back-catalog activity, not prove transferred customers or causation. Sales and other events could happen simultaneously. But it would tell us whether a career’s public review record behaves like a collection of separate launches or sometimes shows connected episodes of attention.
There are three methodological choices I’d make from the outset.
First, I’d use several response levels rather than let one arbitrary “hit” line determine everything. A practical starting point would be under 100, 100–999, 1,000–9,999, and 10,000-plus reviews, with nearby-threshold checks. Recommendation rates would remain a separate dimension; these would not be profitability classes.
Second, I’d keep current catalog shapes separate from historically reconstructed sequences. We can map the former broadly with existing data. Claims about what a developer had achieved before their next launch require dated evidence. I’d concentrate additional historical collection on a bounded sample where it materially changes the classification.
Third, we should keep the language precise about “lives.” Steam can show an observed release history, public credits, and response. It cannot reliably show whether someone retired, changed jobs, spent years developing one game, or pursued work elsewhere.
My recommendation is to make 1–4 the core study: the floor after a first hit, the significance of repeated hits, the different forms of one-hit careers, and what happens after quiet intervening releases. Use 5–6 to explain the broader range of sequences, and treat 7 as a separate historical extension.
The question tying that together would be: what distinguishes careers that establish a lasting level of response from careers whose attention remains concentrated in isolated events? That seems both answerable in useful parts and closely aligned with your interest in a continuing, varied body of work.
All of these seem interesting, you may go ahead. Make sure that if your final report includes many concrete examples for your finding, linking to developer pages and games always when they're available.
I’ll run the full set, starting with the broad career sequences and then using dated review histories for the questions that need launch-time evidence. I’ll include concrete examples with Steam game and developer-page links, and distinguish durable patterns from cases where timing or missing history changes the interpretation.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Refining the study sample**
[Think]
**Refining the study sample**
**Screening developer cohorts**
[Think]
**Refining the study sample**
**Screening developer cohorts**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nx=pd....)
Script completed
Wall time 1.0 seconds
Output:
{"chunk_id":"a2da06","wall_time_seconds":0.862927692,"exit_code":0,"original_token_count":1512,"output":"['appid', 'name', 'type', 'visible', 'is_free', 'is_coming_soon', 'is_early_access', 'steam_release_date', 'original_release_date', 'original_steam_release_date', 'release_from_early_access_date', 'reviews_filtered_count', 'reviews_filtered_positive_percent', 'reviews_unfiltered_count', 'reviews_english_count', 'short_description', 'source_country', 'fetched_at', 'developer', 'publisher', 'developer_key', 'publisher_key', 'usd_list_price', 'adult_explicit', 'steam_date', 'first_date', 'known_ea_history', 'description', 'english_support', 'schinese_support', 'languages_count', 'demo_related', 'windows', 'native_linux', 'deck_code', 'store_url', 'year', 'quarter', 'month', 'reviews', 'positive_pct', 'valid_released', 'price_bucket', 'main', 'credit', 'credit_norm', 'creator_page_key', 'page_names', 'dev', 'ambiguous_name', 'promotional_title', 'included', 'cohort_pct', 'ordinal', 'prev_appid', 'prev_name', 'prev_first_date', 'prev_reviews', 'prev_positive_pct', 'prev_usd_list_price', 'prev_cohort_pct', 'prev_known_ea_history', 'prev_publisher_key', 'prev_publisher', 'prev_credit_norm', 'prev_page_names', 'gap_days', 'previous_max_now', 'similarity', 'shared_franchise', 'same_publisher', 'prior_band', 'gap_band', 'similarity_band', 'period']\n appid name credit reviews first_date creator_page_key page_names\n 760330 BYTEPATH a327ex 306 2018-02-24 00:51:44+00:00 clan:38655111 1.0\n 915310 SNKRX a327ex 4197 2021-05-17 09:28:11+00:00 clan:38655111 1.0\n 696480 The Norwood Suite Cosmo D 614 2017-10-02 12:57:31+00:00 clan:33031849 2.0\n1129920 Tales From Off-Peak City Vol. 1 Cosmo D 532 2020-05-15 15:59:15+00:00 clan:33031849 2.0\n 405640 Pony Island Daniel Mullins Games 14761 2016-01-04 17:35:42+00:00 clan:33030951 1.0\n 510420 The Hex Daniel Mullins Games 4480 2018-10-16 16:55:35+00:00 clan:33030951 1.0\n1092790 Inscryption Daniel Mullins Games 134744 2021-10-19 15:05:00+00:00 clan:33030951 1.0\n 415920 Voidspire Tactics Rad Codex 271 2015-11-02 18:23:16+00:00 clan:33037431 1.0\n 643900 Alvora Tactics Rad Codex 135 2017-06-01 13:46:12+00:00 clan:33037431 1.0\n1224290 Horizon's Gate Rad Codex 1212 2020-03-09 16:59:01+00:00 clan:33037431 1.0\n1366100 Azalea Rad Codex 40 2020-11-09 13:51:56+00:00 clan:33037431 1.0\n2276830 Kingsvein Rad Codex 303 2024-01-16 11:33:03+00:00 clan:33037431 1.0\n 251430 The Inner World Studio Fizbin 920 2013-09-27 17:43:00+00:00 clan:45329488 1.0\n 613470 The Inner World - The Last Wind Monk Studio Fizbin 455 2017-10-20 16:58:39+00:00 clan:45329488 1.0\n1191900 Say No! More Studio Fizbin 1758 2021-04-09 13:00:55+00:00 clan:45329488 1.0\n1049710 Minute of Islands Studio Fizbin 713 2021-06-13 21:01:17+00:00 clan:45329488 1.0\n1278750 Lost At Sea Studio Fizbin 43 2021-07-15 16:00:55+00:00 clan:45329488 1.0\n2129810 Reignbreaker Studio Fizbin 440 2025-03-18 16:58:36+00:00 clan:45329488 1.0\n 206190 Gunpoint Suspicious Developments 10274 2013-06-03 17:00:00+00:00 clan:32938364 1.0\n 494720 Morphblade Suspicious Developments 264 2017-03-03 18:01:49+00:00 clan:32938364 1.0\n 268130 Heat Signature Suspicious Developments 6851 2017-09-21 16:59:17+00:00 clan:32938364 1.0\n1043810 Tactical Breach Wizards Suspicious Developments 11457 2024-08-22 16:55:00+00:00 clan:32938364 1.0\n 92800 SpaceChem Zachtronics 2624 2011-03-02 19:20:00+00:00 clan:32946839 1.0\n 226960 Ironclad Tactics Zachtronics 236 2013-09-18 17:02:00+00:00 clan:32946839 1.0\n 300570 Infinifactory Zachtronics 1790 2015-06-30 17:46:00+00:00 clan:32946839 1.0\n 370360 TIS-100 Zachtronics 3384 2015-07-20 15:13:59+00:00 clan:32946839 1.0\n 504210 SHENZHEN I/O Zachtronics 3727 2016-11-17 18:00:44+00:00 clan:32946839 1.0\n 570490 SHENZHEN SOLITAIRE Zachtronics 205 2016-12-15 22:24:03+00:00 clan:32946839 1.0\n 558990 Opus Magnum Zachtronics 5919 2017-10-19 16:53:24+00:00 clan:32946839 1.0\n 716490 EXAPUNKS Zachtronics 1371 2018-08-09 16:13:27+00:00 clan:32946839 1.0\n 716500 Eliza Zachtronics 1008 2019-08-12 16:03:13+00:00 clan:32946839 1.0\n1168880 MOLEK-SYNTEZ Zachtronics 520 2019-11-04 22:15:24+00:00 clan:32946839 1.0\n 971160 Möbius Front '83 Zachtronics 327 2020-11-05 16:41:28+00:00 clan:32946839 1.0\n1511780 Last Call BBS Zachtronics 1220 2022-07-05 00:01:04+00:00 clan:32946839 1.0\n1988540 The Zachtronics Solitaire Collection Zachtronics 929 2022-09-06 16:39:53+00:00 clan:32946839 1.0\n"}
[Think]
**Comparing source counts**
[Think]
**Comparing source counts**
**Defining cohort criteria**
[Think]
**Comparing source counts**
**Defining cohort criteria**
exec ({"code": "text(await tools.exec_command({cmd:\"mkdir -p steam-research/developer-lives-2026-09-07; sed -n '1,45p' .cl...)
Script completed
Wall time 1.2 seconds
Output:
{"chunk_id":"cb086e","wall_time_seconds":0.000005464,"exit_code":0,"original_token_count":927,"output":"# CLAUDE.md\n\nGuidelines for Claude Code instances working in this repository.\n\n---\n\n## Communication Style\n\nBe thorough. Write as much as the subject warrants — explain reasoning, include relevant context, surface adjacent considerations. Stay roughly on topic, but don't truncate for brevity's sake. Thoroughness means more substance, not more structure — depth comes from reasoning and adjacent considerations, not from header scaffolding, preamble, or restating what was already said.\n\nDeliver analyses fully in chat. Session transcripts become published AI logs on a327ex.com — content locked inside files is invisible to log readers. When producing a long analysis, report, or research finding, print it in full in the reply; only also write it to a file when the project needs a durable artifact, and never treat the file as the primary delivery.\n\nCritique freely. Ideas, code, plans, artifacts — evaluate them honestly. Avoid sycophancy. Focus on what seems true rather than what's convenient or what you think I'd like to hear. I crave honest appraisal, including when it's uncomfortable.\n\nEmbrace contradiction. Truth often contains multiple seemingly opposite ideas. Don't censor yourself to avoid inconsistency — multiple perspectives can be correct simultaneously. Present the tension rather than forcing artificial resolution.\n\nStay object-level in free-form discussion. In open-ended, exploratory conversation — thinking through ideas rather than executing a defined task — never default to rationalist-mode discourse. Don't ask meta or audit questions (\"how do you reconcile X and Y,\" \"how do you guard against this bias,\" \"what's your check that you're not fooling yourself\"): they stand above an idea and ask me to defend a system against a pre-supposed flaw, their only outputs are valid/invalid, and so they generate nothing. Don't hedge against an imagined rationalist/LessWrong commenter or pre-empt objections nobody raised. Instead, engage a specific claim from inside it — what it actually asserts, what follows from it, where it leads, what it leaves unexplained — and extend it into territory it hasn't been pointed at yet, which is where insight comes from. Make committal, falsifiable moves: assert a reading even at the risk of being wrong, rather than asking a safe question that commits to nothing. Trust ideas enough to build on them, and find their flaws by leaning weight on them, not by pre-supposing them. The audit move is the safe move — it can't embarrass the asker and always sounds rigorous — but it produces the feeling of rigor without the risk that produces understanding.\n\n---\n\n## Working Style\n\n### When to Ask\n\nThe developer prefers being asked over having Claude guess wrong. When a\ndecision is open, lay it out in chat as a question with labeled options —\nthe same shape as a multiple-choice prompt, just written as prose: list\nthe options, give your recommendation, then stop and let him pick one *or*\nredirect entirely. Don't force a selection — he often wants a direction\nnone of the listed options covered, and the value is in seeing the choice\nframed, not in being made to answer. When you have several questions,\nbatch them into one message rather than asking them one at a time.\n\n**Ask first:**\n- Architecture decisions\n- API design choices\n- Design decisions (gameplay feel, mechanics, UI)\n- When uncertain about intent or priorities\n\n**Proceed, then explain:**\n- Implementation details where the path is clear\n- Performance optimization (get it working first, optimize later)\n\nOpen choices below the ask-first bar — reversible, not architecture,\nnot feel — don't get a standalone question: pick a default and flag it\n"}
{}
{"chunk_id":"e2c17e","wall_time_seconds":1.000819057,"session_id":15518,"original_token_count":0,"output":""}
[Think]
**Preparing reduced slot data**
[Think]
**Preparing reduced slot data**
**Defining cohort criteria**
[Think]
**Preparing reduced slot data**
**Defining cohort criteria**
I’m separating three things that can look similar in a summary: repeating a large peak, maintaining a substantial floor, and continuing to release at all. I’ll also keep games without enough follow-up time in their own category, rather than label them “one-hit careers.”
For links, I’ll use recorded Steam creator pages when they identify the developer cleanly, and Steam’s developer-filtered catalog pages otherwise.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"73c65f","wall_time_seconds":1.001533529,"session_id":21360,"original_token_count":0,"output":""}
{"chunk_id":"8c06b4","wall_time_seconds":0.000002,"exit_code":0,"original_token_count":289,"output":"{\n \"source_games\": 93013,\n \"developer_names\": 59259,\n \"identity\": \"Existing audited single-credit name table; no merging by creator-page ID. Ambiguous names and explicit promotional titles excluded by that table. Names are not verified individuals or corporate continuity.\",\n \"mature_cutoff\": \"2025-09-01 exclusive\",\n \"labels\": {\n \"Q\": \"<100 current reviews\",\n \"M\": \"100-999\",\n \"H\": \"1000-9999\",\n \"B\": \"10000+\"\n },\n \"strong_threshold_sensitivities\": [\n 500,\n 1000,\n 2000\n ],\n \"scope\": \"Currently paid games outside descriptors 3/4; dated public catalog only. Current outcome sequences are retrospective, not historical success at subsequent launches.\",\n \"first_hit_window\": \"Earliest released game now above threshold, eligible through August2020; outcomes among next included releases in five years. Not the date the game crossed the threshold.\",\n \"links\": \"Game URLs by observed app ID; unshared recorded creator pages where available, otherwise official Steam developer-filtered catalogs. Creator pages used for navigation only.\",\n \"source_sha256\": \"40f4c85cf3f013baa27a08a1d4c297957877173a5192e0f7c4a425b651a5b057\"\n}\n"}
[Think]
**Checking historical review filters**
[Think]
**Checking historical review filters**
**Checking catalog status**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"7c96fb","wall_time_seconds":1.001325536,"session_id":66817,"original_token_count":0,"output":""}
{"chunk_id":"f5c459","wall_time_seconds":0.000002604,"exit_code":0,"original_token_count":27,"output":"Catalog patterns 46455 core 2651 core with hit 683\nsteam-research/developer-lives-2026-09-07/catalogs.csv\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.7 seconds
Output:
{"chunk_id":"8c4c25","wall_time_seconds":0.519130182,"exit_code":0,"original_token_count":3069,"output":"pattern\nbreakthrough_then_all_strong 50\nevery_mature_game_1000plus 101\nno_1000_review_game 1968\none_hit_no_mature_followup 86\none_hit_one_mature_followup 56\none_hit_then_mixed_nonhits 82\none_hit_then_moderate_floor 63\none_hit_then_only_quiet 23\nrepeated_strong_with_variation 173\nstrong_quiet_strong 49\n\nHISTORY CANDIDATES\n\n breakthrough_then_all_strong available 23\n credit n peak total sequence developer_url\nBeijing Litchi Culture Media Co., Ltd. 3 4441 7174 M H H https://store.steampowered.com/curator/38472340/\n Coldwood Interactive 3 7458 11967 Q H H https://store.steampowered.com/search/?developer=Coldwood%20Interactive\n Cozy Bee Games 5 2039 5917 M M H H H https://store.steampowered.com/curator/36314378/\n CreativeForge Games 3 4099 8187 M H H https://store.steampowered.com/search/?developer=CreativeForge%20Games\n Digital Cybercherries 3 4506 8884 M H H https://store.steampowered.com/curator/8341435/\n Edelweiss 4 4993 7012 M M H H https://store.steampowered.com/search/?developer=Edelweiss\n Endlessfluff Games 3 2275 3548 M H H https://store.steampowered.com/search/?developer=Endlessfluff%20Games\n Explosive Squat Games 3 4044 7440 M H H https://store.steampowered.com/curator/40746671/\n Fallen Tree Games Ltd 8 7787 10563 M M M Q Q Q H H https://store.steampowered.com/search/?developer=Fallen%20Tree%20Games%20Ltd\n IllFonic 3 4620 5959 M H H https://store.steampowered.com/curator/2113939/\n\n every_mature_game_1000plus available 27\n credit n peak total sequence developer_url\n #workshop 3 3884 9221 H H H https://store.steampowered.com/search/?developer=%23workshop\n 5 Lives Studios 3 2618 4853 H H H https://store.steampowered.com/search/?developer=5%20Lives%20Studios\n Angry Demon Studio 3 1507 4374 H H H https://store.steampowered.com/curator/44077276/\nBadFly Interactive, a.s. 3 2935 6012 H H H https://store.steampowered.com/search/?developer=BadFly%20Interactive%2C%20a.s.\n CAPCOM CO., LTD 4 4007 10337 H H H H https://store.steampowered.com/search/?developer=CAPCOM%20CO.%2C%20LTD\n Clifftop Games 3 1855 4443 H H H https://store.steampowered.com/curator/33305025/\n Erik Asmussen 3 4140 7624 H H H https://store.steampowered.com/curator/32938557/\n Harvester Games 4 4792 8716 H H H H https://store.steampowered.com/curator/45711039/\n Jump Over The Age 3 8217 12636 H H H https://store.steampowered.com/curator/45226943/\n Killerfish Games 3 4598 9284 H H H https://store.steampowered.com/curator/45291654/\n\n one_hit_one_mature_followup available 49\n credit n peak total sequence developer_url\n 5minlab Corp. 5 2842 3246 Q Q Q H M https://store.steampowered.com/curator/45118405/\n Andrew Morrish 3 1486 1996 M H M https://store.steampowered.com/search/?developer=Andrew%20Morrish\n BULKHEAD 3 6244 6531 M H M https://store.steampowered.com/curator/42656369/\n Baked Games 3 2325 2449 Q H Q https://store.steampowered.com/curator/44980303/\nBedtime Digital Games 4 1339 3515 M M H M https://store.steampowered.com/curator/33021788/\n Big Way Games 3 1115 1388 M H Q https://store.steampowered.com/search/?developer=Big%20Way%20Games\n Capybara Games 4 1303 2498 M M H M https://store.steampowered.com/search/?developer=Capybara%20Games\n Cats Who Play 4 5235 6501 M M H Q https://store.steampowered.com/curator/33018557/\n Crenetic 3 4261 4868 M H Q https://store.steampowered.com/search/?developer=Crenetic\n Dlala Studios 3 2114 2164 Q H Q https://store.steampowered.com/search/?developer=Dlala%20Studios\n\n one_hit_then_mixed_nonhits available 73\n credit n peak total sequence developer_url\n AQUASTYLE 3 1731 2154 H M Q https://store.steampowered.com/search/?developer=AQUASTYLE\n AbstractArt 3 3335 3824 H M Q https://store.steampowered.com/curator/36022529/\n Arrowiz 4 1841 2064 Q H Q M https://store.steampowered.com/curator/41812719/\n Axyos Games 6 1629 1970 H Q Q Q Q M https://store.steampowered.com/curator/6136864/\n Big Boat Interactive 3 1043 1947 H M Q https://store.steampowered.com/search/?developer=Big%20Boat%20Interactive\n Cherry Pop Games 3 2206 2538 H M Q https://store.steampowered.com/curator/4998609/\n Convoy Games 3 1127 1361 H M Q https://store.steampowered.com/curator/33263305/\nCornfox & Brothers Ltd. 3 1341 1673 H M Q https://store.steampowered.com/search/?developer=Cornfox%20%26amp%3B%20Brothers%20Ltd.\n Crypton Future Media 4 1076 2061 M H Q M https://store.steampowered.com/search/?developer=Crypton%20Future%20Media\n Data Realms 3 2002 2432 H M Q https://store.steampowered.com/curator/35393276/\n\n one_hit_then_moderate_floor available 63\n credit n peak total sequence developer_url\n Akella 4 1307 1841 H M M M https://store.steampowered.com/search/?developer=Akella\n Alda Games 4 1266 2602 M H M M https://store.steampowered.com/curator/38392710/\n Animu Game 3 1851 3247 H M M https://store.steampowered.com/search/?developer=Animu%20Game\n Applique 3 3123 3681 H M M https://store.steampowered.com/search/?developer=Applique\n Aterdux Entertainment 3 1392 1704 H M M https://store.steampowered.com/curator/32944172/\n Battlecruiser Games 4 2666 3696 M H M M https://store.steampowered.com/curator/45170162/\n Big Robot Ltd 4 2875 3824 Q H M M https://store.steampowered.com/curator/33256260/\n Black Pants Studio 3 2777 3579 H M M https://store.steampowered.com/search/?developer=Black%20Pants%20Studio\n Blazing Planet Studio 7 1750 3657 M Q Q H M M M https://store.steampowered.com/curator/27817737/\nCAVE Interactive CO.,LTD. 3 1437 2984 H M M https://store.steampowered.com/search/?developer=CAVE%20Interactive%20CO.%2CLTD.\n\n one_hit_then_only_quiet available 23\n credit n peak total sequence developer_url\n A Crowd of Monsters 3 1109 1161 H Q Q https://store.steampowered.com/search/?developer=A%20Crowd%20of%20Monsters\n BancyCo 4 1138 1285 H Q Q Q https://store.steampowered.com/curator/33785138/\n BeautiFun Games 4 2296 2361 H Q Q Q https://store.steampowered.com/curator/33018510/\n Binogure Studio 🐺 3 1773 1852 H Q Q https://store.steampowered.com/curator/41663157/\n Captain Games 4 2147 2340 M H Q Q https://store.steampowered.com/curator/45965145/\n Cartboard Games 4 1049 1183 H Q Q Q https://store.steampowered.com/search/?developer=Cartboard%20Games\n Cradle Games 3 2581 2660 H Q Q https://store.steampowered.com/curator/44583280/\nEvery Single Soldier 5 1040 1481 M H Q Q Q https://store.steampowered.com/curator/35188426/\n Game Mechanics LLC 4 2817 2852 H Q Q Q https://store.steampowered.com/search/?developer=Game%20Mechanics%20LLC\n Insane Dreamers 7 1139 1366 Q H Q Q Q Q Q https://store.steampowered.com/curator/35141991/\n\n repeated_strong_with_variation available 109\n credit n peak total sequence developer_url\n @unepic_fran 5 5379 10422 H H M H M https://store.steampowered.com/search/?developer=%40unepic_fran\n AFOG 4 3226 8042 H H M H https://store.steampowered.com/search/?developer=AFOG\nALICE IN DISSONANCE 4 2362 5287 H H M M https://store.steampowered.com/curator/25368707/\n AQUAPLUS 6 1460 6022 H H H M M M https://store.steampowered.com/curator/41918152/\n AQURIA Co., Ltd. 3 5017 7327 H H M https://store.steampowered.com/search/?developer=AQURIA%20Co.%2C%20Ltd.\n AZAMATIKA 6 2300 5509 M H M M M H https://store.steampowered.com/search/?developer=AZAMATIKA\n Abbey Games 4 4888 10291 H H M H https://store.steampowered.com/curator/5207577/\nAbyte Entertainment 3 3985 5511 H H M https://store.steampowered.com/curator/34385377/\n Afterburn 4 2780 5761 H H H M https://store.steampowered.com/curator/42290292/\n Alientrap 8 4014 9710 M M H M M M H M https://store.steampowered.com/curator/32644677/\n\n strong_quiet_strong available 21\n credit n peak total sequence developer_url\n 34BigThings srl 6 3439 4821 Q H Q Q Q H https://store.steampowered.com/search/?developer=34BigThings%20srl\n Aspyr 6 7123 10614 M H Q H H M https://store.steampowered.com/search/?developer=Aspyr\n Black Forest Games 7 2263 5505 H M Q M M H H https://store.steampowered.com/search/?developer=Black%20Forest%20Games\n Blendo Games 7 1659 5184 M Q H H M Q H https://store.steampowered.com/curator/6857555/\n Blindflug Studios AG 5 1907 3520 M H Q Q H https://store.steampowered.com/curator/34051517/\n CREATIVE ASSEMBLY 5 4734 11572 H H Q H H https://store.steampowered.com/search/?developer=CREATIVE%20ASSEMBLY\n Choice Provisions 6 2237 4135 Q H M Q H Q https://store.steampowered.com/search/?developer=Choice%20Provisions\n Creepy Brothers 7 2375 6400 H Q H M H M M https://store.steampowered.com/curator/40408205/\n Draw Distance 6 2272 5618 H Q H H M M https://store.steampowered.com/search/?developer=Draw%20Distance\nHandelabra Games Inc. 7 1534 4103 H Q M M H Q Q https://store.steampowered.com/curator/33121510/\n"}
[Think]
**Checking punctuation-only name matches**
[Think]
**Checking punctuation-only name matches**
[Think]
**Checking punctuation-only name matches**
**Auditing punctuation variants**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 1.4 seconds
Output:
{"chunk_id":"22ae68","wall_time_seconds":1.217343769,"exit_code":0,"original_token_count":1240,"output":" appid name credit reviews date mature developer_page_url\n 222730 Reus Abbey Games 4888 2013-05-16 16:50:00+00:00 True https://store.steampowered.com/curator/5207577/\n 296970 Renowned Explorers: International Society Abbey Games 2305 2015-09-02 12:46:49+00:00 True https://store.steampowered.com/curator/5207577/\n 917150 Godhood Abbey Games 970 2019-07-10 10:52:29+00:00 True https://store.steampowered.com/curator/5207577/\n1875060 Reus 2 Abbey Games 2128 2024-05-28 13:58:06+00:00 True https://store.steampowered.com/curator/5207577/\n 252670 Nihilumbra BeautiFun Games 2296 2013-10-25 16:59:32+00:00 True https://store.steampowered.com/curator/33018510/\n 422650 Megamagic: Wizards of the Neon Age BeautiFun Games 23 2016-04-20 15:59:13+00:00 True https://store.steampowered.com/curator/33018510/\n 741520 Professor Lupo and his Horrible Pets BeautiFun Games 35 2019-07-11 07:23:17+00:00 True https://store.steampowered.com/curator/33018510/\n1292980 Professor Lupo: Ocean BeautiFun Games 7 2020-10-05 15:36:22+00:00 True https://store.steampowered.com/curator/33018510/\n 207670 AVSEQ Big Robot Ltd 30 2012-08-23 16:04:00+00:00 True https://store.steampowered.com/curator/33256260/\n 242880 Sir, You Are Being Hunted Big Robot Ltd 2875 2014-05-02 15:29:00+00:00 True https://store.steampowered.com/curator/33256260/\n 457760 The Signal From Tölva Big Robot Ltd 791 2017-04-10 16:53:05+00:00 True https://store.steampowered.com/curator/33256260/\n 853240 The Light Keeps Us Safe Big Robot Ltd 128 2018-10-11 15:56:02+00:00 True https://store.steampowered.com/curator/33256260/\n 55000 Flotilla Blendo Games 202 2010-04-29 17:16:00+00:00 True https://store.steampowered.com/curator/6857555/\n 55020 Air Forte Blendo Games 8 2010-09-29 17:00:00+00:00 True https://store.steampowered.com/curator/6857555/\n 55040 Atom Zombie Smasher Blendo Games 1108 2011-03-14 19:23:00+00:00 True https://store.steampowered.com/curator/6857555/\n 214700 Thirty Flights of Loving Blendo Games 1282 2012-08-21 00:11:00+00:00 True https://store.steampowered.com/curator/6857555/\n 240440 Quadrilateral Cowboy Blendo Games 896 2016-07-25 16:54:33+00:00 True https://store.steampowered.com/curator/6857555/\n 592100 Flotilla 2 Blendo Games 29 2018-08-17 17:01:32+00:00 True https://store.steampowered.com/curator/6857555/\n 301280 Skin Deep Blendo Games 1659 2025-04-30 12:57:15+00:00 True https://store.steampowered.com/curator/6857555/\n 109200 Legend of Fae Endlessfluff Games 105 2011-07-26 18:10:00+00:00 True https://store.steampowered.com/search/?developer=Endlessfluff%20Games\n 252030 Valdis Story: Abyssal City Endlessfluff Games 2275 2013-10-30 17:03:00+00:00 True https://store.steampowered.com/search/?developer=Endlessfluff%20Games\n 995980 Fae Tactics Endlessfluff Games 1168 2020-07-31 16:59:45+00:00 True https://store.steampowered.com/search/?developer=Endlessfluff%20Games\n 270450 Robot Roller-Derby Disco Dodgeball Erik Asmussen 2253 2015-02-19 17:52:56+00:00 True https://store.steampowered.com/curator/32938557/\n 860890 Factory Town Erik Asmussen 4140 2019-03-12 13:53:02+00:00 True https://store.steampowered.com/curator/32938557/\n2207490 Factory Town Idle Erik Asmussen 1231 2023-04-20 16:01:42+00:00 True https://store.steampowered.com/curator/32938557/\n3312130 Factory Town 2: Paradise Erik Asmussen 149 2026-07-14 16:08:31+00:00 False https://store.steampowered.com/curator/32938557/\ntotal 32981 games 26 estimated requests 370\n"}
[Think]
**Copying collection script**
I’ve selected six contrasting catalogs for a bounded historical check: Erik Asmussen, Endlessfluff Games, Blendo Games, Big Robot, BeautiFun Games, and Abbey Games. Together they cover consistent response, success after earlier work, uneven repetition, and different kinds of one-peak catalogs.
Their histories will also let me check whether later releases coincide with renewed review activity in older games. I’ll combine those with the already collected career histories, while keeping this illustrative historical sample separate from the broad catalog statistics.
exec ({"code": "text(await tools.exec_command({cmd:\"cp steam-research/game-lifetimes-2026-09-07/collect.py steam-research/...)
Script completed
Wall time 1.6 seconds
Output:
{"chunk_id":"be1039","wall_time_seconds":1.001456687,"session_id":57618,"original_token_count":0,"output":""}
{"chunk_id":"665506","wall_time_seconds":0.292248598,"exit_code":0,"original_token_count":1417,"output":"Latest transitions small/all 8422 8751\n\n first_strong_summary.csv\n threshold timing n returned return_rate repeat_any repeat_rate repeat_among_returners next100_rate next_strong_rate median_followup_median three_followups first3_floor100_rate first3_floor_strong_rate first3_median\n 500 all 1822 760 0.417124 461 0.253019 0.606579 0.803947 0.507895 492.50 182 0.494505 0.208791 280.0\n 500 first_game 1576 610 0.387056 375 0.237944 0.614754 0.827869 0.527869 594.00 125 0.560000 0.232000 327.0\n 500 second_or_third 204 119 0.583333 63 0.308824 0.529412 0.714286 0.420168 303.00 35 0.342857 0.114286 172.0\n 500 fourth_plus 42 31 0.738095 23 0.547619 0.741935 0.677419 0.451613 276.00 22 0.363636 0.227273 196.0\n 1000 all 1268 529 0.417192 286 0.225552 0.540643 0.831758 0.453686 804.50 129 0.558140 0.170543 547.0\n 1000 first_game 1053 399 0.378917 220 0.208927 0.551378 0.864662 0.483709 921.50 74 0.635135 0.202703 602.0\n 1000 second_or_third 179 101 0.564246 44 0.245810 0.435644 0.702970 0.316832 385.00 34 0.411765 0.117647 286.0\n 1000 fourth_plus 36 29 0.805556 22 0.611111 0.758621 0.827586 0.517241 891.50 21 0.523810 0.142857 576.0\n 2000 all 876 360 0.410959 189 0.215753 0.525000 0.875000 0.416667 1357.25 86 0.627907 0.116279 710.5\n 2000 first_game 699 247 0.353362 129 0.184549 0.522267 0.902834 0.453441 1752.00 33 0.696970 0.151515 744.0\n 2000 second_or_third 140 82 0.585714 36 0.257143 0.439024 0.792683 0.317073 720.50 32 0.562500 0.062500 374.5\n 2000 fourth_plus 37 31 0.837838 24 0.648649 0.774194 0.870968 0.387097 1038.00 21 0.619048 0.142857 755.0\n\n repeat_hit_information.csv\n scope prior_hits n strong strong_rate lo95 hi95 atleast100 atleast100_rate median_reviews median_price supported support_rate observed expected oe\n catalog_le10 none 7411 263 0.035488 0.031510 0.039946 1231 0.166104 11.0 5.99 0 0.000000 0 0.000000 NaN\n catalog_le10 one 705 257 0.364539 0.329833 0.400713 544 0.771631 530.0 14.99 8 0.011348 4 4.071429 0.982456\n catalog_le10 three_plus 114 69 0.605263 0.513511 0.690152 104 0.912281 1547.0 19.99 3 0.026316 1 0.285714 3.500000\n catalog_le10 two 192 99 0.515625 0.445324 0.585313 165 0.859375 1101.5 19.99 67 0.348958 35 27.509398 1.272292\nall_catalog_sizes none 7677 264 0.034388 0.030539 0.038703 1242 0.161782 10.0 5.99 0 0.000000 0 0.000000 NaN\nall_catalog_sizes one 719 257 0.357441 0.323253 0.393144 549 0.763561 504.0 14.99 8 0.011127 4 4.071429 0.982456\nall_catalog_sizes three_plus 154 80 0.519481 0.441060 0.596952 137 0.889610 1034.5 19.99 3 0.019481 1 0.285714 3.500000\nall_catalog_sizes two 201 99 0.492537 0.424212 0.561142 168 0.835821 862.0 19.99 67 0.333333 35 27.509398 1.272292\n\n quiet_state_presence.csv\nearlier_hits n returned return_rate any1000_all next1000_returners\n none 20004 1897 0.094831 0.004399 0.037428\n one 156 66 0.423077 0.147436 0.257576\n two_plus 39 25 0.641026 0.358974 0.400000\n\n consistency.csv\n group n all100 all1000 atleast_half1000 median_minimum median_catalog_median median_peak_share\n all 2014 226 35 163 8.0 29.25 0.484848\n peak1000 426 186 35 163 78.0 578.00 0.584525\npeak10000 99 62 27 83 264.0 4551.50 0.614982\n"}
[Think]
**Revising matching strata**
[Think]
**Revising matching strata**
**Fixing one-hit follow-up**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,html,re...)
Script completed
Wall time 1.1 seconds
Output:
{"chunk_id":"a8e35f","wall_time_seconds":0.922453091,"exit_code":0,"original_token_count":1381,"output":"ambiguous punctuation keys 380 names 772\n developer_id credit creator_page_key key\n &y &y clan:44983088 y\n - - name:- \n --- --- name:--- \n ----- ----- name:----- \n -yu- -yu- name:-yu- yu\n . . name:. \n /newgame /newgame clan:45514121 newgame\n 221 games 221 Games clan:38339489 221games\n 221games 221GAMES name:221games 221games\n 2pi interactivee pvt. ltd 2Pi Interactivee Pvt. Ltd name:2pi interactivee pvt. ltd 2piinteractiveepvtltd\n2pi interactivee pvt. ltd. 2Pi Interactivee Pvt. Ltd. name:2pi interactivee pvt. ltd. 2piinteractiveepvtltd\n 3t games 3T Games name:3t games 3tgames\n 3tgames 3Tgames name:3tgames 3tgames\n 9900 studio 9900 Studio clan:45224705 9900studio\n 9900studio 9900Studio clan:45224705 9900studio\n [ n / a ] [ N / A ] name:[ n / a ] na\n [supertype] [SuperType] name:[supertype] supertype\n __theengineer__ __TheEngineer__ clan:46050084 theengineer\n _jester_ _Jester_ name:_jester_ jester\n _k.y. _k.y. name:_k.y. ky\n a n t games a n t games name:a n t games antgames\n a's games A's Games clan:45003827 asgames\n a.p games A.P Games name:a.p games apgames\n a.s. A.S. name:a.s. as\n ac games Ac Games name:ac games acgames\n accolade inc. Accolade Inc. name:accolade inc. accoladeinc\n accolade, inc Accolade, Inc name:accolade, inc accoladeinc\n accolade, inc. Accolade, Inc. name:accolade, inc. accoladeinc\n acgames ACGames clan:37059298 acgames\n after school games After School Games name:after school games afterschoolgames\n afterschool games Afterschool Games name:afterschool games afterschoolgames\n ak games AK Games clan:42167577 akgames\n akgames AKGames name:akgames akgames\n aleph null Aleph Null name:aleph null alephnull\n aleph=null Aleph=Null name:aleph=null alephnull\n\nTWO versusONE\n group n strong strong_rate lo95 hi95 atleast100 atleast100_rate median_reviews median_price\ntwo_or_more_1000_4999_peaks 123 43 0.349593 0.271039 0.437259 101 0.821138 410.0 14.99\n one_10000_19999_peak 50 36 0.720000 0.583346 0.825260 46 0.920000 1953.5 19.99\n one_1000_4999_peak 502 138 0.274900 0.237665 0.315555 364 0.725100 347.0 14.99\n\nQUIET\n history quiet_streak n strong_rate atleast100_rate median_reviews\n no_earlier_hit none 1291 0.109218 0.520527 108.0\n no_earlier_hit one 4047 0.023227 0.104522 7.0\n no_earlier_hit three_plus 940 0.010638 0.046809 6.0\n no_earlier_hit two 1133 0.015887 0.081200 7.0\n one_earlier_hit none 623 0.394864 0.815409 656.0\n one_earlier_hit one 54 0.111111 0.500000 96.0\n one_earlier_hit three_plus 7 0.428571 0.571429 177.0\n one_earlier_hit two 21 0.095238 0.238095 39.0\ntwo_or_more_hits none 288 0.559028 0.892361 1210.5\ntwo_or_more_hits one 16 0.375000 0.625000 409.0\ntwo_or_more_hits three_plus 1 1.000000 1.000000 1727.0\ntwo_or_more_hits two 1 0.000000 1.000000 156.0\n"}
[Think]
**Checking core sensitivity**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"887e22","wall_time_seconds":1.001298715,"session_id":61646,"original_token_count":0,"output":""}
{"chunk_id":"b26c52","wall_time_seconds":0.000003589,"exit_code":0,"original_token_count":51,"output":"{\"appid\": 222730, \"name\": \"Reus\", \"order\": 0, \"complete\": true, \"collected\": 4889, \"summary_total\": 4889, \"pages\": 50, \"snapshot_total\": 4888}\n69 steam-research/developer-lives-2026-09-07/requests.jsonl\n"}
[Think]
**Collecting history data**
[Think]
**Collecting history data**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"f95962","wall_time_seconds":0.178334741,"exit_code":0,"original_token_count":1112,"output":"\n repeat_hit_adjusted.csv\nprior_hits controls n strong strong_rate lo95 hi95 atleast100 atleast100_rate median_reviews median_price supported support_rate observed expected oe\n two era+peak_coarse 192 99 0.515625 0.445324 0.585313 165 0.859375 1101.5 19.99 192 1.000000 99 65.926299 1.501677\n two era+peak_coarse+price_coarse 192 99 0.515625 0.445324 0.585313 165 0.859375 1101.5 19.99 165 0.859375 78 69.690240 1.119238\n two era+peak_coarse+price_coarse+prior_n_band 192 99 0.515625 0.445324 0.585313 165 0.859375 1101.5 19.99 143 0.744792 64 58.302379 1.097725\nthree_plus era+peak_coarse 114 69 0.605263 0.513511 0.690152 104 0.912281 1547.0 19.99 114 1.000000 69 36.670098 1.881642\nthree_plus era+peak_coarse+price_coarse 114 69 0.605263 0.513511 0.690152 104 0.912281 1547.0 19.99 79 0.692982 40 35.162936 1.137561\nthree_plus era+peak_coarse+price_coarse+prior_n_band 114 69 0.605263 0.513511 0.690152 104 0.912281 1547.0 19.99 43 0.377193 16 10.488095 1.525539\n two_plus era+peak_coarse 306 168 0.549020 0.493002 0.603821 269 0.879085 1188.5 19.99 306 1.000000 168 102.596396 1.637484\n two_plus era+peak_coarse+price_coarse 306 168 0.549020 0.493002 0.603821 269 0.879085 1188.5 19.99 244 0.797386 118 104.853176 1.125383\n two_plus era+peak_coarse+price_coarse+prior_n_band 306 168 0.549020 0.493002 0.603821 269 0.879085 1188.5 19.99 186 0.607843 80 68.790474 1.162952\n\n identity_pattern_sensitivity.csv\n scope pattern n denominator share\n main breakthrough_then_all_strong 50 683 0.073206\n main every_mature_game_1000plus 101 683 0.147877\n main one_hit_no_mature_followup 86 683 0.125915\n main one_hit_one_mature_followup 56 683 0.081991\n main one_hit_then_mixed_nonhits 82 683 0.120059\n main one_hit_then_moderate_floor 63 683 0.092240\n main one_hit_then_only_quiet 23 683 0.033675\n main repeated_strong_with_variation 173 683 0.253294\n main strong_quiet_strong 49 683 0.071742\nexclude_possible_name_fragments breakthrough_then_all_strong 49 671 0.073025\nexclude_possible_name_fragments every_mature_game_1000plus 97 671 0.144560\nexclude_possible_name_fragments one_hit_no_mature_followup 86 671 0.128167\nexclude_possible_name_fragments one_hit_one_mature_followup 56 671 0.083458\nexclude_possible_name_fragments one_hit_then_mixed_nonhits 82 671 0.122206\nexclude_possible_name_fragments one_hit_then_moderate_floor 62 671 0.092399\nexclude_possible_name_fragments one_hit_then_only_quiet 23 671 0.034277\nexclude_possible_name_fragments repeated_strong_with_variation 168 671 0.250373\nexclude_possible_name_fragments strong_quiet_strong 48 671 0.071535\n\n one_hit_age_states.csv\n peak_age followup_state n\nat_least3years atleast_two_mature_followups 179\nat_least3years none_observed_after_peak 700\nat_least3years one_mature_followup 230\nat_least3years only_immature_followup 61\n under3years atleast_two_mature_followups 2\n under3years none_observed_after_peak 86\n under3years one_mature_followup 3\n under3years only_immature_followup 8\n\nPaired floor 21 higher min 11 higher median 15 medians {'pre_min': 39.0, 'post_min': 115.0, 'pre_median': 108.0, 'post_median': 576.0}\n"}
[Think]
**Refining comparison design**
[Think]
**Refining comparison design**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.8 seconds
Output:
{"chunk_id":"e825bf","wall_time_seconds":0.641321933,"exit_code":0,"original_token_count":2714,"output":" credit anchor_name anchor_reviews first_strong_index followup_n repeat_strong next_reviews\nBANDAI NAMCO Studios Inc. Tales of Berseria™ 14370 6 4 True 67942.0\n Big Ant Studios Cricket 19 4074 9 6 True 1230.0\n Bloober Team SA Layers of Fear (2016) 13135 4 3 True 4023.0\n Chilla's Art [Chilla's Art] Aka Manto | 赤マント 1071 6 20 True 1272.0\n ClockStone Bridge Constructor Portal 6608 7 2 True 230.0\n CUTE ANIME GIRLS NALOGI 1514 5 10 False 283.0\n David Szymanski DUSK 22045 4 4 True 380.0\n Dead Mage Children of Morta 18108 4 0 False NaN\n Deck13 The Surge 9120 4 1 True 7448.0\n Dire Wolf Root 5025 4 12 True 1700.0\n Dovetail Games Train Simulator Classic 19440 5 5 True 1496.0\n Eversim Power & Revolution 1169 5 4 True 25.0\n Fallen Tree Games Ltd American Fugitive 1963 7 0 False NaN\n Forceight Bad Guys at School 1799 4 1 False 920.0\n GameChanger Studio My Lovely Daughter 1162 4 0 False NaN\n HFM Games Cockroach Simulator 2367 4 6 True 640.0\n inkle Ltd Heaven's Vault 1956 4 3 False 115.0\n Kazakov Oleg Gedonia 3649 7 1 False 890.0\n Ludosity Slap City 2409 7 0 False NaN\n Owlchemy Labs Job Simulator 4400 4 2 True 2281.0\n\nCONSISTENT\n credit n minimum peak sequence titles\n Airship Syndicate 4 5572 25067 H B B B Battle Chasers: Nightwar | Darksiders Genesis | Ruined King: A League of Legends Story™ | Wayfinder\n AMPLITUDE Studios 6 2950 22100 H B H B B H ENDLESS Space™ - Definitive Edition | ENDLESS Legend™ | Dungeon of the ENDLESS™ | ENDLESS Space™ 2 | HUMANKIND™ | ENDLESS Dungeon™ - Definitive Edi...\nArrowhead Game Studios 4 6684 837516 B H B B Magicka | Gauntlet™ Slayer Edition | HELLDIVERS™ Dive Harder Edition | HELLDIVERS™ 2\n CAPCOM CO., LTD 4 1527 4007 H H H H Mega Man Legacy Collection 2 | Mega Man X Legacy Collection | Mega Man X Legacy Collection 2 | Onimusha: Warlords\n Coffee Stain Studios 5 1015 234548 H H H B B Sanctum | Super Sanctum TD | Sanctum 2 | Goat Simulator | Satisfactory\nCyberConnect2 Co. Ltd. 6 3441 72348 B B H H B B NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst HD | NARUTO SHIPPUDEN: Ultimate Ninja STORM 4 | NARUTO: Ultimate Ninja STORM | NARUTO SHIPPUDEN...\n Deck Nine 4 2364 12341 B H H H Life is Strange: True Colors | Life is Strange Remastered | Life is Strange: Before the Storm Remastered | The Expanse: A Telltale Series\n Digitalmindsoft 4 1135 35708 H B B H Men of War: Assault Squad | Men of War: Assault Squad 2 | Call to Arms | Men of War: Assault Squad 2 - Cold War\n Dimps Corporation 4 1209 15462 B H H H Sword Art Online: Fatal Bullet | DRAGON BALL: THE BREAKERS | SWORD ART ONLINE Fractured Daydream | FREEDOM WARS Remastered\n Double W 5 1781 6526 H H H H H Miss Neko | Love wish | Yokai's Secret | Miss Neko 2 | Miss Neko 3\n Freebird Games 5 3782 69477 B H B B H To the Moon | A Bird Story | Finding Paradise | Impostor Factory | Just a To the Moon Series Beach Episode\n Grimlore Games 4 1334 17301 H H H B SpellForce 3 Reforced | SpellForce 3 Soul Harvest | SpellForce 3 Fallen God | Titan Quest II\n Harvester Games 4 1029 4792 H H H H The Cat Lady | Downfall | Lorelai | Burnhouse Lane\n Hopoo Games 4 4851 239710 B H B B Risk of Rain (2013) | DEADBOLT | Risk of Rain 2 | Risk of Rain Returns\n Lazy Bear Games 4 1240 39416 B B H H Punch Club | Graveyard Keeper | Punch Club 2: Fast Forward | Bandle Tale: A League of Legends Story\n Mimimi Games 5 1111 30812 H B B H H The Last Tinker™: City of Colors | Shadow Tactics: Blades of the Shogun | Desperados III | Shadow Tactics: Aiko's Choice | Shadow Gambit: The Curse...\n\nKNOWN\n credit name reviews game_url developer_page_url\n Daniel Mullins Games Pony Island 14761 https://store.steampowered.com/app/405640/ https://store.steampowered.com/curator/33030951/\n Daniel Mullins Games The Hex 4480 https://store.steampowered.com/app/510420/ https://store.steampowered.com/curator/33030951/\n Daniel Mullins Games Inscryption 134744 https://store.steampowered.com/app/1092790/ https://store.steampowered.com/curator/33030951/\n Freebird Games To the Moon 69477 https://store.steampowered.com/app/206440/ https://store.steampowered.com/curator/2750327/\n Freebird Games A Bird Story 8206 https://store.steampowered.com/app/327410/ https://store.steampowered.com/curator/2750327/\n Freebird Games Finding Paradise 18101 https://store.steampowered.com/app/337340/ https://store.steampowered.com/curator/2750327/\n Freebird Games Impostor Factory 11953 https://store.steampowered.com/app/1182620/ https://store.steampowered.com/curator/2750327/\n Freebird Games Just a To the Moon Series Beach Episode 3782 https://store.steampowered.com/app/2159210/ https://store.steampowered.com/curator/2750327/\n Nolla Games Noita 80977 https://store.steampowered.com/app/881100/ https://store.steampowered.com/curator/35664460/\nSuspicious Developments Gunpoint 10274 https://store.steampowered.com/app/206190/ https://store.steampowered.com/curator/32938364/\nSuspicious Developments Morphblade 264 https://store.steampowered.com/app/494720/ https://store.steampowered.com/curator/32938364/\nSuspicious Developments Heat Signature 6851 https://store.steampowered.com/app/268130/ https://store.steampowered.com/curator/32938364/\nSuspicious Developments Tactical Breach Wizards 11457 https://store.steampowered.com/app/1043810/ https://store.steampowered.com/curator/32938364/\n Zachtronics SpaceChem 2624 https://store.steampowered.com/app/92800/ https://store.steampowered.com/curator/32946839/\n Zachtronics Ironclad Tactics 236 https://store.steampowered.com/app/226960/ https://store.steampowered.com/curator/32946839/\n Zachtronics Infinifactory 1790 https://store.steampowered.com/app/300570/ https://store.steampowered.com/curator/32946839/\n Zachtronics TIS-100 3384 https://store.steampowered.com/app/370360/ https://store.steampowered.com/curator/32946839/\n Zachtronics SHENZHEN I/O 3727 https://store.steampowered.com/app/504210/ https://store.steampowered.com/curator/32946839/\n Zachtronics SHENZHEN SOLITAIRE 205 https://store.steampowered.com/app/570490/ https://store.steampowered.com/curator/32946839/\n Zachtronics Opus Magnum 5919 https://store.steampowered.com/app/558990/ https://store.steampowered.com/curator/32946839/\n Zachtronics EXAPUNKS 1371 https://store.steampowered.com/app/716490/ https://store.steampowered.com/curator/32946839/\n Zachtronics Eliza 1008 https://store.steampowered.com/app/716500/ https://store.steampowered.com/curator/32946839/\n Zachtronics MOLEK-SYNTEZ 520 https://store.steampowered.com/app/1168880/ https://store.steampowered.com/curator/32946839/\n Zachtronics Möbius Front '83 327 https://store.steampowered.com/app/971160/ https://store.steampowered.com/curator/32946839/\n Zachtronics Last Call BBS 1220 https://store.steampowered.com/app/1511780/ https://store.steampowered.com/curator/32946839/\n Zachtronics The Zachtronics Solitaire Collection 929 https://store.steampowered.com/app/1988540/ https://store.steampowered.com/curator/32946839/\n"}
[Think]
**Verifying release windows**
[Think]
**Verifying release windows**
[Think]
**Verifying release windows**
**Merging career histories**
The broad results already distinguish repetition from magnitude. More prior strong games are associated with stronger next releases, but two modest hits do not outperform one much larger peak in the raw comparison. Much of the apparent repetition advantage also shrinks when I compare similar peak sizes and current price bands.
Another useful distinction: maintaining at least moderate response across several games is considerably more common than having every game clear the “hit” threshold. I’m checking these patterns against name ambiguities and the historical cases before drawing the final conclusions.
exec ({"code": "text(await tools.exec_command({cmd:\"tail -4 steam-research/developer-lives-2026-09-07/history_collection.l...)
Script completed
Wall time 0.8 seconds
Output:
{"chunk_id":"662d8a","wall_time_seconds":0.62206499,"exit_code":0,"original_token_count":707,"output":"{\"appid\": 741520, \"name\": \"Professor Lupo and his Horrible Pets\", \"order\": 6, \"complete\": true, \"collected\": 35, \"summary_total\": 35, \"pages\": 2, \"snapshot_total\": 35}\n{\"appid\": 1292980, \"name\": \"Professor Lupo: Ocean\", \"order\": 7, \"complete\": true, \"collected\": 7, \"summary_total\": 7, \"pages\": 2, \"snapshot_total\": 7}\n{\"appid\": 207670, \"name\": \"AVSEQ\", \"order\": 8, \"complete\": true, \"collected\": 30, \"summary_total\": 30, \"pages\": 2, \"snapshot_total\": 30}\n{\"appid\": 242880, \"name\": \"Sir, You Are Being Hunted\", \"order\": 9, \"complete\": true, \"collected\": 2873, \"summary_total\": 2874, \"pages\": 30, \"snapshot_total\": 2875}\n175 steam-research/developer-lives-2026-09-07/requests.jsonl\n credit appid name reviews date mature developer_page_url\nDavid Szymanski 329830 The Moon Sliver 988 2014-10-28 18:37:35+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 359040 The Music Machine 494 2015-05-06 13:07:53+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 395270 A Wolf in Autumn 405 2015-10-27 12:56:43+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 519860 DUSK 22045 2018-12-10 19:02:00+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 1465510 DUSK '82: ULTIMATE EDITION 380 2021-10-22 22:00:38+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 1846170 Iron Lung 10141 2022-03-10 05:25:54+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 1935660 Chop Goblins 2873 2022-12-12 17:22:48+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 2535830 Squirrel Stapler 2046 2023-09-12 00:48:33+00:00 True https://store.steampowered.com/curator/34055240/\nDavid Szymanski 2512560 Butcher's Creek 1529 2025-01-23 16:13:08+00:00 True https://store.steampowered.com/curator/34055240/\nHarvester Games 253110 The Cat Lady 4792 2013-12-04 17:53:00+00:00 True https://store.steampowered.com/curator/45711039/\nHarvester Games 364390 Downfall 1455 2016-02-15 14:52:19+00:00 True https://store.steampowered.com/curator/45711039/\nHarvester Games 593960 Lorelai 1440 2019-04-26 18:24:06+00:00 True https://store.steampowered.com/curator/45711039/\nHarvester Games 1846460 Burnhouse Lane 1029 2022-12-02 08:16:07+00:00 True https://store.steampowered.com/curator/45711039/\n Nolla Games 881100 Noita 80977 2019-09-24 15:00:58+00:00 True https://store.steampowered.com/curator/35664460/\n"}
[Think]
**Comparing threshold patterns**
[Think]
**Comparing threshold patterns**
[Think]
**Comparing threshold patterns**
**Merging historical reviews**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 0.0 seconds
Output:
{}
{"chunk_id":"268ad6","wall_time_seconds":0.000003121,"exit_code":0,"original_token_count":126,"output":"{\"appid\": 592100, \"name\": \"Flotilla 2\", \"order\": 17, \"complete\": true, \"collected\": 29, \"summary_total\": 29, \"pages\": 2, \"snapshot_total\": 29}\n{\"appid\": 301280, \"name\": \"Skin Deep\", \"order\": 18, \"complete\": true, \"collected\": 1659, \"summary_total\": 1659, \"pages\": 18, \"snapshot_total\": 1659}\n{\"appid\": 109200, \"name\": \"Legend of Fae\", \"order\": 19, \"complete\": true, \"collected\": 105, \"summary_total\": 105, \"pages\": 3, \"snapshot_total\": 105}\n250 steam-research/developer-lives-2026-09-07/requests.jsonl\n"}
[Think]
**Calculating self-published consistency**
[Think]
**Calculating self-published consistency**
**Defining franchise coverage**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/developer...)
Script completed
Wall time 2.3 seconds
Output:
{}
{"chunk_id":"47fb26","wall_time_seconds":1.001266831,"session_id":90568,"original_token_count":0,"output":""}
{"chunk_id":"c0ddec","wall_time_seconds":1.001326854,"session_id":77012,"original_token_count":0,"output":""}
[Think]
**Patching the consistency filter**
[Think]
**Patching the consistency filter**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/developer...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"dff136","wall_time_seconds":1.000967324,"session_id":51688,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/developer-lives-2026-09-07/history_collection.l...)
Script completed
Wall time 5.0 seconds
Output:
{"chunk_id":"cf3cd5","wall_time_seconds":0.000003164,"exit_code":0,"original_token_count":282,"output":"{\"appid\": 252030, \"name\": \"Valdis Story: Abyssal City\", \"order\": 20, \"complete\": true, \"collected\": 2274, \"summary_total\": 2275, \"pages\": 24, \"snapshot_total\": 2275}\n{\"appid\": 995980, \"name\": \"Fae Tactics\", \"order\": 21, \"complete\": true, \"collected\": 1168, \"summary_total\": 1169, \"pages\": 13, \"snapshot_total\": 1168}\n{\"appid\": 270450, \"name\": \"Robot Roller-Derby Disco Dodgeball\", \"order\": 22, \"complete\": true, \"collected\": 2253, \"summary_total\": 2253, \"pages\": 24, \"snapshot_total\": 2253}\n{\n \"active\": true,\n \"max_requests\": 450,\n \"max_reviews\": 40000,\n \"max_response_bytes\": 2000000,\n \"min_interval_seconds\": 2,\n \"retries\": 0,\n \"stop_on_error\": true,\n \"scope\": \"26 currently listed paid games from six deliberately contrasting credited catalogs; historical sequence audit and back-catalog event study. Not a representative developer sample.\",\n \"sample_sha256\": \"aff55bdbac5eb2292b396b4e763ad243a516b68fd94b459e362b4ae7b9bfe94f\",\n \"bulk_catalog_stays_paused\": true,\n \"review_text_and_accounts\": \"Not retained; only review IDs, creation/update timestamps, Steam-purchase and EA flags.\"\nContext comparisons complete\n"}
{"chunk_id":"7c9622","wall_time_seconds":5.001774181,"session_id":77012,"original_token_count":0,"output":""}
[Think]
**Preparing source plots**
[Think]
**Preparing source plots**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 0.9 seconds
Output:
{}
{"chunk_id":"be3382","wall_time_seconds":0.752251769,"exit_code":0,"original_token_count":130,"output":"Linked case atlas 17 developer names 81 games\n{\"appid\": 860890, \"name\": \"Factory Town\", \"order\": 23, \"complete\": true, \"collected\": 4140, \"summary_total\": 4140, \"pages\": 43, \"snapshot_total\": 4140}\n{\"appid\": 2207490, \"name\": \"Factory Town Idle\", \"order\": 24, \"complete\": true, \"collected\": 1231, \"summary_total\": 1231, \"pages\": 14, \"snapshot_total\": 1231}\n{\"appid\": 3312130, \"name\": \"Factory Town 2: Paradise\", \"order\": 25, \"complete\": true, \"collected\": 147, \"summary_total\": 147, \"pages\": 3, \"snapshot_total\": 149}\n"}
{"chunk_id":"767d73","wall_time_seconds":0.000001323,"exit_code":0,"original_token_count":35,"output":"Historical games 50 review records 48419 complete catalogs 11 transitions 38\nBackcatalog events 31 isolated 26 seasonal placebo pairs 22\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/developer-lives-2026-09...)
Script completed
Wall time 1.5 seconds
Output:
{"chunk_id":"d707d7","wall_time_seconds":1.001024755,"session_id":19143,"original_token_count":0,"output":""}
{"chunk_id":"eca609","wall_time_seconds":0.18073651,"exit_code":0,"original_token_count":2887,"output":"\n backcatalog_summary.csv\n group n developers increases increases_ge10 median_before median_after median_difference median_ratio\n all_events 31 11 16 7 37.0 42.0 1.0 1.021505\n isolated 26 11 15 7 36.5 48.5 5.0 1.117281\nisolated_baseline_ge5 24 10 13 6 38.5 50.5 2.5 1.032143\n\n historical_sequences.csv\n developer_id credit clock n sequence values appids developer_url\n a327ex a327ex current 2 M H 306;4197 760330;915310 https://store.steampowered.com/curator/38655111/\n a327ex a327ex day365 2 M H 134;3322 760330;915310 https://store.steampowered.com/curator/38655111/\n abbey games Abbey Games current 4 H H M H 4889;2306;969;2127 222730;296970;917150;1875060 https://store.steampowered.com/curator/5207577/\n abbey games Abbey Games day365 3 M M H 845;343;1776 296970;917150;1875060 https://store.steampowered.com/curator/5207577/\n beautifun games BeautiFun Games current 4 H Q Q Q 2295;23;35;7 252670;422650;741520;1292980 https://store.steampowered.com/curator/33018510/\n beautifun games BeautiFun Games day365 2 Q Q 11;17 422650;741520 https://store.steampowered.com/curator/33018510/\n big robot ltd Big Robot Ltd current 4 Q H M M 30;2873;791;128 207670;242880;457760;853240 https://store.steampowered.com/curator/33256260/\n big robot ltd Big Robot Ltd day365 2 M Q 313;58 457760;853240 https://store.steampowered.com/curator/33256260/\n blendo games Blendo Games current 7 M Q H H M Q H 202;8;1108;1282;895;29;1659 55000;55020;55040;214700;240440;592100;301280 https://store.steampowered.com/curator/6857555/\n blendo games Blendo Games day365 3 M Q H 290;13;1551 240440;592100;301280 https://store.steampowered.com/curator/6857555/\n desert fox Desert Fox current 7 H Q M Q Q Q Q 1966;85;116;54;41;41;31 538070;1527880;1692060;1837820;2313780;2540460;3202410 https://store.steampowered.com/curator/45172409/\n desert fox Desert Fox day365 6 M Q Q Q Q Q 182;40;36;29;20;19 538070;1527880;1692060;1837820;2313780;2540460 https://store.steampowered.com/curator/45172409/\nendlessfluff games Endlessfluff Games current 3 M H H 105;2274;1168 109200;252030;995980 https://store.steampowered.com/search/?developer=Endlessfluff%20Games\nendlessfluff games Endlessfluff Games day365 1 M 561 995980 https://store.steampowered.com/search/?developer=Endlessfluff%20Games\n erik asmussen Erik Asmussen current 4 H H H M 2253;4140;1231;147 270450;860890;2207490;3312130 https://store.steampowered.com/curator/32938557/\n erik asmussen Erik Asmussen day365 2 H M 1363;768 860890;2207490 https://store.steampowered.com/curator/32938557/\n rad codex Rad Codex current 5 M M H Q M 271;135;1212;40;303 415920;643900;1224290;1366100;2276830 https://store.steampowered.com/curator/33037431/\n rad codex Rad Codex day365 5 Q Q M Q M 36;24;296;22;225 415920;643900;1224290;1366100;2276830 https://store.steampowered.com/curator/33037431/\n studio fizbin Studio Fizbin current 6 M M H M Q M 920;455;1757;714;43;440 251430;613470;1191900;1049710;1278750;2129810 https://store.steampowered.com/curator/45329488/\n studio fizbin Studio Fizbin day365 5 Q M M Q M 57;379;243;6;417 613470;1191900;1049710;1278750;2129810 https://store.steampowered.com/curator/45329488/\n tuatara games Tuatara Games current 3 H Q M 1082;13;216 505630;1186660;2050800 https://store.steampowered.com/curator/41777358/\n tuatara games Tuatara Games day365 2 M Q 246;12 505630;1186660 https://store.steampowered.com/curator/41777358/\n\n consistency_context.csv\n group n every100 every1000 every1000_and80 every100_rate every1000_rate median_floor\n all_with_1000_peak 426 186 35 16 0.436620 0.082160 78.0\n same_publisher 232 96 14 7 0.413793 0.060345 64.5\n different_publishers 194 90 21 9 0.463918 0.108247 83.0\n all_selfpub 189 72 9 4 0.380952 0.047619 59.0\nreported_franchise_in_majority 223 128 28 13 0.573991 0.125561 151.0\n other_or_unreported_franchise 203 58 7 3 0.285714 0.034483 44.0\n\n breakthrough_context.csv\n timing n median_anchor_price paired_price_n median_price_ratio publisher_changed_n publisher_changed_rate primary_changed_rate\n first_game 1053 14.99 0 NaN 0 NaN NaN\n fourth_plus 36 14.99 36 1.500501 36 0.277778 0.805556\nsecond_third 179 14.99 168 1.646447 178 0.280899 0.865922\n\nPrior count changes 8 of 38\n credit next_name prior_now_best prior_then_best prior_now_hits prior_then_hits next90 next365\n Blendo Games Thirty Flights of Loving 1108 334 1 0 58.0 261.0\n Blendo Games Quadrilateral Cowboy 1282 831 2 0 200.0 290.0\n Blendo Games Flotilla 2 1282 944 2 0 9.0 13.0\n Rad Codex Azalea 1212 231 1 0 19.0 22.0\n Rad Codex Kingsvein 1212 809 1 0 165.0 225.0\nStudio Fizbin Minute of Islands 1758 424 1 0 158.0 243.0\nStudio Fizbin Lost At Sea 1758 433 1 0 4.0 6.0\nTuatara Games Bare Butt Boxing 1082 866 1 0 12.0 12.0\n\nBackcatalog events:\n credit new_game pre90 post90 difference ratio isolated\n a327ex SNKRX 4 12 8 2.777778 True\n Abbey Games Renowned Explorers: International Society 105 68 -37 0.649289 True\n Abbey Games Godhood 210 61 -149 0.292162 True\n Abbey Games Reus 2 40 61 21 1.518519 True\n BeautiFun Games Megamagic: Wizards of the Neon Age 93 97 4 1.042781 True\n BeautiFun Games Professor Lupo and his Horrible Pets 34 16 -18 0.478261 True\n Big Robot Ltd The Signal From Tölva 59 71 12 1.201681 True\n Big Robot Ltd The Light Keeps Us Safe 52 67 15 1.285714 True\n Blendo Games Quadrilateral Cowboy 46 47 1 1.021505 True\n Blendo Games Flotilla 2 37 32 -5 0.866667 True\n Blendo Games Skin Deep 32 58 26 1.800000 True\n Desert Fox Darkness Under My Bed 131 77 -54 0.589354 True\n Desert Fox Bad Dream: Stories 59 86 27 1.453782 True\n Desert Fox Faded Stories: Greenberg 36 43 7 1.191781 True\n Desert Fox Bad Dream: Purgatory 51 42 -9 0.825243 False\n Desert Fox Faded Stories: Full Moon 43 39 -4 0.908046 False\n Desert Fox Bad Dream: Afterlife 27 50 23 1.836364 True\nEndlessfluff Games Fae Tactics 20 28 8 1.390244 True\n Erik Asmussen Factory Town 24 15 -9 0.632653 True\n Erik Asmussen Factory Town Idle 111 91 -20 0.820628 True\n Rad Codex Alvora Tactics 9 16 7 1.736842 True\n Rad Codex Horizon's Gate 14 20 6 1.413793 True\n Rad Codex Azalea 8 17 9 2.058824 True\n Rad Codex Kingsvein 72 51 -21 0.710345 True\n Studio Fizbin The Inner World - The Last Wind Monk 4 16 12 3.666667 True\n Studio Fizbin Say No! More 39 29 -10 0.746835 False\n Studio Fizbin Minute of Islands 32 29 -3 0.907692 False\n Studio Fizbin Lost At Sea 27 32 5 1.181818 False\n Studio Fizbin Reignbreaker 204 149 -55 0.731051 True\n Tuatara Games Bare Butt Boxing 15 15 0 1.000000 True\n Tuatara Games Let Them Come: Onslaught 11 5 -6 0.478261 True\n"}
[Think]
**Reconciling historical counts**
[Think]
**Reconciling historical counts**
[Think]
**Reconciling historical counts**
[Think]
**Reconciling historical counts**
**Computing latest-per-developer results**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd,numpy a...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"40ae20","wall_time_seconds":0.172547384,"exit_code":0,"original_token_count":1679,"output":" credit new_game placebo_pre placebo_post event_pre event_post difference_in_changes relative_ratio\n a327ex SNKRX 7 7 4 12 8 2.777778\n Abbey Games Renowned Explorers: International Society 304 114 105 68 153 1.726712\n Abbey Games Godhood 322 86 210 61 87 1.089273\n Abbey Games Reus 2 49 46 40 61 24 1.616487\n BeautiFun Games Megamagic: Wizards of the Neon Age 86 117 93 97 -27 0.767664\n BeautiFun Games Professor Lupo and his Horrible Pets 52 26 34 16 8 0.947498\n Big Robot Ltd The Signal From Tölva 94 75 59 71 31 1.504090\n Big Robot Ltd The Light Keeps Us Safe 49 54 21 43 17 1.837636\n Blendo Games Quadrilateral Cowboy 62 23 46 47 40 2.716770\n Blendo Games Flotilla 2 48 45 37 32 -2 0.923810\n Blendo Games Skin Deep 22 39 32 58 9 1.025316\n Desert Fox Darkness Under My Bed 94 107 131 77 -67 0.518083\n Desert Fox Bad Dream: Afterlife 55 35 22 48 46 3.369953\nEndlessfluff Games Fae Tactics 46 12 20 28 42 5.171707\n Erik Asmussen Factory Town 62 38 24 15 15 1.027034\n Erik Asmussen Factory Town Idle 139 134 111 91 -15 0.851134\n Rad Codex Horizon's Gate 13 3 14 20 16 5.453202\n Rad Codex Kingsvein 55 37 72 51 -3 1.051310\n Studio Fizbin The Inner World - The Last Wind Monk 10 10 4 16 12 3.666667\n Studio Fizbin Reignbreaker 154 132 204 149 -33 0.852433\n Tuatara Games Bare Butt Boxing 72 58 15 15 14 1.239316\n Tuatara Games Let Them Come: Onslaught 13 13 11 5 -6 0.478261\nn 22 positive DiD 15 median 13.0 medianrat 1.1642944795499268\nlatest perdev 11 positive 6 median 8.0 ratio 1.2857142857142858\n\nDateflags\n credit name date first_offset_days\nBeautiFun Games Professor Lupo: Ocean 2020-10-05 15:36:22+00:00 56.285648\n Big Robot Ltd Sir, You Are Being Hunted 2014-05-02 15:29:00+00:00 -255.677928\n Blendo Games Flotilla 2010-04-29 17:16:00+00:00 173.396806\n Blendo Games Air Forte 2010-09-29 17:00:00+00:00 742.523495\n Erik Asmussen Robot Roller-Derby Disco Dodgeball 2015-02-19 17:52:56+00:00 -327.979688\n\nlinkchecks\n credit status page_title final_url\n a327ex 200 Steam Curator: a327ex https://store.steampowered.com/curator/38655111/\n Abbey Games 200 Steam Curator: Abbey Games https://store.steampowered.com/curator/5207577/\n BeautiFun Games 200 Steam Curator: BeautiFun Games https://store.steampowered.com/curator/33018510/\n Big Robot Ltd 200 Steam Curator: Big Robot Ltd https://store.steampowered.com/curator/33256260/\n Blendo Games 200 Steam Curator: BlendoGames https://store.steampowered.com/curator/6857555/\n Daniel Mullins Games 200 Steam Curator: Daniel Mullins Games https://store.steampowered.com/curator/33030951/\n David Szymanski 200 Steam Curator: David Szymanski https://store.steampowered.com/curator/34055240/\n Endlessfluff Games 200 Steam Search https://store.steampowered.com/search/?developer=Endlessfluff%20Games\n Erik Asmussen 200 Steam Curator: 82apps https://store.steampowered.com/curator/32938557/\n Freebird Games 200 Steam Curator: Freebird Games https://store.steampowered.com/curator/2750327/\n Harvester Games 200 Steam Curator: Harvester Games https://store.steampowered.com/curator/45711039/\n Nolla Games 200 Steam Curator: Nolla Games community https://store.steampowered.com/curator/35664460/\n Rad Codex 200 Steam Curator: Rad Codex https://store.steampowered.com/curator/33037431/\n Studio Fizbin 200 Steam Curator: Studio Fizbin https://store.steampowered.com/curator/45329488/\nSuspicious Developments 200 Steam Curator: Suspicious Developments https://store.steampowered.com/curator/32938364/\n Tuatara Games 200 Steam Curator: Tuatara Games https://store.steampowered.com/curator/41777358/\n Zachtronics 200 Steam Curator: Zachtronics https://store.steampowered.com/curator/32946839/\n"}
[Think]
**Preparing 60-game controls**
[Think]
**Preparing 60-game controls**
**Defining control criteria**
[Think]
**Preparing 60-game controls**
**Defining control criteria**
The historical checks show why the retrospective labels need care: in 8 of 38 selected transitions, counting today’s reviews gives the developer more earlier “hits” than the surviving records show before the next launch.
The back-catalog result is mixed so far. Some later launches coincide with extra reviews for older games; others coincide with declines. I’m comparing those changes with earlier seasonal windows and a small independent control set before calling any of them a general launch benefit.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script failed
Wall time 0.0 seconds
Output:
Script error:
apply_patch verification failed: invalid hunk at line 35, 'group.to_csv(R/'backcatalog_control_events.csv',index=False)' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"9bf34e","wall_time_seconds":1.000802391,"session_id":21383,"original_token_count":0,"output":""}
[Think]
**Comparing selected game evidence**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"03cf97","wall_time_seconds":1.001526373,"session_id":26499,"original_token_count":0,"output":""}
{"chunk_id":"a0c7c7","wall_time_seconds":0.000001462,"exit_code":0,"original_token_count":141,"output":"{\n \"eligible_older_game_event_pairs\": 49,\n \"matched_pairs\": 18,\n \"events\": 12,\n \"developers\": 7,\n \"observed_post\": 280,\n \"expected_post\": 244.23389965838496,\n \"pooled_oe\": 1.1464419983943337,\n \"median_event_oe\": 1.610730146290491,\n \"note\": \"Selected historical cases and controls from prior random lifetime sample, not randomized launches. Controls match baseline count within factor2 and age within3years; at least3 up to5, no recorded paid launch within180days. No causal interpretation; unsupported pairs excluded from both observed and expected.\"\n}\n"}
[Think]
**Comparing pooled versus median**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"946b59","wall_time_seconds":0.19616137,"exit_code":0,"original_token_count":59,"output":"next3 worst median 165.0 median next3 median 547.0 counts>=100 72 >=1000 22\noldonehit 1170 {'none_observed_after_peak': 700, 'one_mature_followup': 230, 'atleast_two_mature_followups': 179, 'only_immature_followup': 61}\nyoung3year 99\n"}
[Think]
**Refining hit-pattern labels**
[Think]
**Refining hit-pattern labels**
exec ({"code": "text(await tools.write_stdin({session_id:61646,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":500}...)
[
{
"type": "text",
"text": "Script completed\nWall time 0.1 seconds\nOutput:\n"
},
{
"type": "text",
"text": "{\"chunk_id\":\"c8355d\",\"wall_time_seconds\":0.00000129,\"exit_code\":0,\"original_token_count\":15,\"output\":\"Identity names excluded in sensitivity 793 core affected 61\\n\"}"
},
{
"type": "image",
"note": "[image: shown below]"
},
{
"type": "text",
"text": "{\"chunk_id\":\"493832\",\"wall_time_seconds\":0.000004901,\"exit_code\":0,\"original_token_count\":230,\"output\":\"{\\\"active\\\": false, \\\"max_requests\\\": 450, \\\"max_reviews\\\": 40000, \\\"max_response_bytes\\\": 2000000, \\\"min_interval_seconds\\\": 2, \\\"retries\\\": 0, \\\"stop_on_error\\\": true, \\\"scope\\\": \\\"26 currently listed paid games from six deliberately contrasting credited catalogs; historical sequence audit and back-catalog event study. Not a representative developer sample.\\\", \\\"sample_sha256\\\": \\\"aff55bdbac5eb2292b396b4e763ad243a516b68fd94b459e362b4ae7b9bfe94f\\\", \\\"bulk_catalog_stays_paused\\\": true, \\\"review_text_and_accounts\\\": \\\"Not retained; only review IDs, creation/update timestamps, Steam-purchase and EA flags.\\\", \\\"requests_used\\\": 370, \\\"reviews_written\\\": 32974, \\\"finished_at\\\": \\\"2026-09-07T14:23:04.551736+00:00\\\"}repeat_hit_adjusted.csv\\nrepeat_hit_information.csv\\nrepeat_hits_by_peak.csv\\nrequests.jsonl\\nrobustness.py\\nsample.parquet\\nselected_case_records.csv\\nstatus.json\\nstudy_spec.json\\ntransition_run.log\\ntransitions.py\\ntwo_modest_vs_one_large.csv\\n\"}"
}
]

[Think]
**Checking validation cases**
[Think]
**Checking validation cases**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"072d2d","wall_time_seconds":1.001100326,"session_id":86484,"original_token_count":0,"output":""}
[Think]
**Checking coverage definitions**
[Think]
**Checking coverage definitions**
[Think]
**Checking coverage definitions**
exec ({"code": "text(await tools.write_stdin({session_id:86484,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":1500...)
[
{
"type": "text",
"text": "Script completed\nWall time 0.0 seconds\nOutput:\n"
},
{
"type": "text",
"text": "{\"chunk_id\":\"75f028\",\"wall_time_seconds\":0.000001278,\"exit_code\":0,\"original_token_count\":10,\"output\":\"Passed 1181 checks; new reviews 32974\\n\"}"
},
{
"type": "image",
"note": "[image: shown below]"
}
]

[Think]
**Checking chart links**
[Think]
**Checking chart links**
**Checking developer links**
[Think]
**Checking chart links**
**Checking developer links**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/developer...)
Script completed
Wall time 1.2 seconds
Output:
{}
{}
{"chunk_id":"c0919b","wall_time_seconds":1.000699149,"session_id":30561,"original_token_count":12,"output":"Linked case atlas 18 developer names 88 games\n"}
[Think]
**Refining catalog table columns**
[Think]
**Refining catalog table columns**
**Preparing cohort comparison tables**
[Think]
**Refining catalog table columns**
**Preparing cohort comparison tables**
[Think]
**Refining catalog table columns**
**Preparing cohort comparison tables**
[Think]
**Refining catalog table columns**
**Preparing cohort comparison tables**
The analyses and historical checks are complete. I’m assembling the linked report now, including 18 developer pages and 88 game links in the case atlas.
The clearest examples separate very different careers that would all be called “one-hit” or “uneven”: Big Robot retains moderate response after its largest game; BeautiFun’s later included games remain much quieter; Blendo returns to substantial response after a quiet release; and Nolla has one included paid game, which is a different situation from releasing unsuccessful follow-ups.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/developer-li...)
Script completed
Wall time 1.0 seconds
Output:
{}
{"chunk_id":"7677bc","wall_time_seconds":0.825829423,"exit_code":0,"original_token_count":9,"output":"Report written 2438 words\nFiles 475\n"}
[Think]
**Validating updated report count**
[Think]
**Validating updated report count**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/developer...)
Script completed
Wall time 1.6 seconds
Output:
{}
{"chunk_id":"247ea3","wall_time_seconds":1.00159819,"session_id":76475,"original_token_count":0,"output":""}
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
[Think]
**Rechecking return-count definitions**
[Think]
**Rechecking return-count definitions**
**Checking creator-page sources**
exec ({"code": "text(await tools.write_stdin({session_id:76475,chars:\"\",\"yield_time_ms\":1000,\"max_output_tokens\":800}...)
Script completed
Wall time 0.2 seconds
Output:
{"chunk_id":"c6794a","wall_time_seconds":0.000001244,"exit_code":0,"original_token_count":16,"output":"Passed 1182 checks; new reviews 32974\nReport written 2438 words\n"}
{"chunk_id":"c418e5","wall_time_seconds":0.039748614,"exit_code":0,"original_token_count":14,"output":"Final checks 1182 files 475 all collection closed True\n"}
I completed all seven avenues. The main distinction is between maintaining a substantial floor, repeating a large peak, and continuing to release at all. Those properties overlap, but they describe different careers.
The full report and linked case atlas are saved. The atlas contains 18 developer pages and 88 games, with dates, review counts, recommendation percentages, and maturity flags.
The broad analysis uses 93,013 games across 59,259 credited developer names. For shorthand:
- Quiet: fewer than 100 reviews.
- Moderate: 100–999.
- Strong: 1,000 or more.
- Large: 10,000 or more.
These are response levels, not profitability or artistic-value judgments. Broad sequences use September 5’s cumulative counts; historical launch-time evidence is examined separately. Games less than a year old are excluded from mature-sequence statistics.

1. A substantial floor is more common than consistently repeating “hits.”
I examined 1,268 developers whose earliest released game currently above 1,000 reviews dates from 2015 through August 2020, allowing a fixed five-year follow-up window.
Of these, 529 released another included game within five years: 41.7%.
Among those returners:
- 83.2% had a next game reaching 100 reviews.
- 45.4% had a next game reaching 1,000.
- 54.1% had another 1,000-review game somewhere in the five-year window.
Including developers with no observed follow-up, that last figure becomes 22.6%. This is why a re-hit percentage should never quietly omit the decision—or opportunity—to release again.
The floor comparison is more revealing. Of 129 developers who released at least three follow-ups within five years, considering exactly their first three:
| Subsequent consistency | Developers |
|---|---|
| All three follow-ups reach 100 reviews | 72/129 — 55.8% |
| All three reach 1,000 | 22/129 — 17.1% |
The median weakest follow-up was 165 reviews. The median of their three-game medians was 547.
That suggests a recognizable pattern: continued substantial response often exists below the earlier peak.
Big Robot illustrates one form:
AVSEQ 30 → Sir, You Are Being Hunted 2,875 → The Signal From Tölva 791 → The Light Keeps Us Safe 128.
Compare BeautiFun Games:
Nihilumbra 2,296 → Megamagic 23 → Professor Lupo and his Horrible Pets 35 → Professor Lupo: Ocean 7.
Both have one game above 1,000 reviews. Their surrounding work received markedly different levels of response. Calling both “one-hit developers” loses that distinction.
2. Repeated strong games add information, but the magnitude of the peak matters considerably.
Using one latest qualifying transition per developer, among catalogs with at most ten mature games:
| Earlier strong games | Developers | Next game reaches 1,000 | Median next-game reviews |
|---|---|---|---|
| One | 705 | 36.5% | 530 |
| Two | 192 | 51.6% | 1,102 |
| Three or more | 114 | 60.5% | 1,547 |
The raw progression is clear. But repeated-hit developers also differ in their earlier peak sizes and the kinds of later games they release.
Comparing similar era, prior-peak, and current-price groups reduces the repeated-hit observed/expected ratio to about 1.13, with adequate comparisons for 244 of 306 repeated-hit cases. More detailed matching loses substantial coverage.
So repetition remains informative, but the entire raw difference cannot be assigned to “having proved yourself twice.”
A particularly useful contrast:
- Developers with two or more strong games but no prior game above 4,999 reviews: 35.0% of next games reach 1,000, across 123 cases.
- Developers with one strong game at 10,000–19,999 reviews: 72.0%, across fifty cases.
The latter also have higher current next-game prices. This is observational, but it clearly rejects a simple ordering in which two modest successes must be stronger evidence than one much larger success.
Daniel Mullins Games also illustrates why peak-relative judgments can mislead:
Pony Island 14,761 → The Hex 4,480 → Inscryption 134,744.
The middle game is much smaller than its predecessor and still substantial. “Failed to match the previous game” would be a poor description of its absolute response.
3. Most older one-hit catalogs have too little subsequent work to fit the usual one-hit-wonder story.
Among 1,170 one-hit catalogs whose sole currently qualifying title was released at least three years ago:
| Subsequent included releases | Catalogs |
|---|---|
| None observed after that title | 700 |
| Only a follow-up less than a year old | 61 |
| One mature follow-up | 230 |
| At least two mature follow-ups | 179 |
The largest category is not “tried repeatedly and failed to repeat.” It is no subsequent included paid release.
Nolla Games has one included paid title, Noita, with 80,977 reviews. That is fundamentally different from a catalog containing multiple quiet follow-ups. The store record alone cannot tell us whether someone is inactive, working on the existing game, developing something new, or working elsewhere.
Among the narrower set of 683 catalogs with three to ten mature releases, an older observed start, and at least one strong game, the permutations look like this:
| Observed pattern | Catalogs |
|---|---|
| Every mature game is strong | 101 |
| Earlier quieter work, then exclusively strong releases | 50 |
| Repeated strong games with other uneven results | 173 |
| A quiet game between strong games | 49 |
| One hit followed by consistently moderate games | 63 |
| One hit followed by exclusively quiet games | 23 |
| One hit followed by mixed quiet/moderate games | 82 |
| One hit with zero or one mature follow-up | 142 |
These are unfinished observed sequences, not permanent developer types. Another release—or continued review accumulation—can change the category.
4. Quiet releases are informative, but earlier strength remains relevant.
Among developers who release again after one immediately preceding quiet game:
| Earlier history | Cases | Next reaches 100 | Next reaches 1,000 |
|---|---|---|---|
| No older strong game | 4,047 | 10.5% | 2.3% |
| One older strong game | 54 | 50.0% | 11.1% |
| Two or more older strong games | 16 | 62.5% | 37.5% |
The small denominators in the last rows matter, but the older catalog is plainly relevant.
After two consecutive quiet games, the one-earlier-hit group has only 21 cases: 23.8% reach 100 next and 9.5% reach 1,000. The evidence becomes much less precise as we examine longer permutations. An apparent rebound after three quiet games is only three strong outcomes among seven cases; I would not build a rule around it.
Separately, a fixed three-year study keeps developers who do not release again. Another included release appears after 9.5% of quiet states without an earlier hit, 42.3% with one, and 64.1% with multiple earlier hits. That measures observed continuation, not retirement or motivation.
Blendo Games provides a concrete uneven sequence:
Flotilla 202 → Air Forte 8 → Atom Zombie Smasher 1,108 → Thirty Flights of Loving 1,282 → Quadrilateral Cowboy 896 → Flotilla 2 29 → Skin Deep 1,659.
The last two releases are dated 2018 and 2025. The quiet-to-strong return is observable. Whether the intervening gap helped, hurt, or changed the work is not established.
Suspicious Developments demonstrates another distinction:
Gunpoint 10,274 → Morphblade 264 → Heat Signature 6,851 → Tactical Breach Wizards 11,457.
The smaller intervening title is moderate, not quiet under this definition. Relative to an exceptional peak, substantially reviewed work can look almost invisible.
5. Late breakthroughs can precede durable response, but late-breakthrough developers are already selected for persistence.
In the fixed five-year study, 29 of the 36 developers whose first qualifying game appears fourth or later release again. Twenty-two of those 29 produce another strong game:
- 80.6% release again.
- 75.9% of those returners repeat the strong outcome.
For first-game breakthroughs, the corresponding figures are 37.9% and 55.1%.
This does not mean a late breakthrough is intrinsically better. The late group is small and consists of people who had already repeatedly released work.
David Szymanski is a useful example:
The Moon Sliver 988, The Music Machine 494, and A Wolf in Autumn 405, followed by DUSK 22,045.
Later work includes DUSK ’82 380, Iron Lung 10,141, Chop Goblins 2,873, Squirrel Stapler 2,046, and Butcher’s Creek 1,529.
The large step and subsequent substantial body of work are clear. The exact “first hit” index is threshold-sensitive: at 500 reviews, the earliest title already qualifies.
Endlessfluff Games offers a smaller-scale pattern:
Legend of Fae 105 → Valdis Story: Abyssal City 2,275 → Fae Tactics 1,168.
Repetition need not mean a continually increasing ceiling.
Around later first-qualifying titles, current prices are typically about 1.5–1.65 times the preceding title’s current price, and approximately 28% have a different current publisher label. Those are observable present-day differences. They do not establish historical launch prices, when publishing arrangements changed, or what caused the breakthrough.
6. Consistency becomes uncommon when the requirement is that every release clear a demanding benchmark.
Among 426 catalogs with four to ten mature releases and at least one strong game:
- 186 — 43.7% keep every game above 100 reviews.
- 35 — 8.2% keep every game above 1,000.
- 16 also keep every game at or above 80% positive.
Among the 99 catalogs with a 10,000-review peak, 62 maintain the 100-review floor and 27 maintain the 1,000-review floor. Again, the scale of prior response matters.
Harvester Games has:
The Cat Lady 4,792 → Downfall 1,455 → Lorelai 1,440 → Burnhouse Lane 1,029.
That is a substantial floor with unequal current totals.
Freebird Games has:
To the Moon 69,477 → A Bird Story 8,206 → Finding Paradise 18,101 → Impostor Factory 11,953 → Just a To the Moon Series Beach Episode 3,782.
A dominant first peak coexists with a substantial continuing catalog.
Erik Asmussen’s developer page, 82apps, has three mature qualifying games:
Robot Roller-Derby Disco Dodgeball 2,253, Factory Town 4,140, and Factory Town Idle 1,231.
Factory Town 2: Paradise is dated July 2026. Its 149 snapshot reviews are explicitly excluded from mature-sequence statistics rather than used to declare that consistency has ended.
Reported franchise continuity is associated with a higher floor, but missing franchise fields prevent a clean comparison with unrelated new IP. Same-publisher status alone does not show a clearly superior floor. Neither result supports a general instruction to remain within one franchise or publishing arrangement.
7. A new release sometimes coincides with renewed back-catalog activity, but the effect is uneven and generally modest in these cases.
I collected 32,974 additional surviving review records from 26 games across six contrasting catalogs. Combined with the earlier histories, that gives 48,419 records across fifty games and eleven complete included paid catalogs.
There are 26 eligible later launches isolated from another included paid release by at least 180 days either side. Earlier games had to be at least a year old.
- Fifteen show increased older-game reviews in the following ninety days.
- Seven gain at least ten reviews.
- The median paired increase is five reviews.
- Requiring at least five pre-event reviews leaves a median increase of 2.5.
| Developer and later release | Earlier-catalog reviews in prior 90 days | Following 90 days |
|---|---|---|
| Blendo Games: Skin Deep | 32 | 58 |
| Abbey Games: Reus 2 | 40 | 61 |
| a327ex: SNKRX, with BYTEPATH as the earlier game | 4 | 12 |
| Erik Asmussen: Factory Town Idle | 111 | 91 |
| Studio Fizbin: Reignbreaker | 204 | 149 |
Seasonally aligned prior-year comparisons show a modest positive association, but changes in the older games’ underlying rates remain a confounder.
An independent control comparison supports only eighteen of 49 eligible older-game/event pairs. It finds 280 subsequent reviews versus 244 expected, approximately 1.15 times expectation. That limited support, and the deliberately selected catalogs, make it unsuitable as a general launch multiplier.
The evidence supports particular episodes of connected catalog attention. It does not establish transferred players or a dependable rule that publishing something new lifts every older game.
The historical audit changes several apparent career stories.
In eight of 38 selected transitions, today’s counts assign more earlier strong games to the developer than the surviving records dated before the subsequent launch do.
For Blendo Games, neither of its two earlier games that currently exceed 1,000 reviews had 1,000 surviving reviews dated before Quadrilateral Cowboy.
For Rad Codex, Horizon’s Gate had 809 surviving reviews before Kingsvein, versus 1,212 now.
Equal-age comparisons can also reverse how the later work looks:
- For Abbey Games, Renowned Explorers has 845 reviews by day 365, Godhood 343, and Reus 2 1,776. The newest title is slightly smaller than the first in current totals, but more than twice as large at year one.
- For Blendo Games, Quadrilateral Cowboy has 290 by year one, Flotilla 2 13, and Skin Deep 1,551. The rebound is materially stronger at equal age than the current totals alone suggest.
These histories remain incomplete records of original reception because reviews can be deleted or filtered. Some early release dates and first-review windows are also unsuitable for direct comparison, so the historical tables identify their exact subsets.
For the varied body of work you’ve described wanting to make, the distinction I’d retain is a continuing level of response versus continually matching your largest work. The data contain plenty of substantial, uneven catalogs. They also contain genuinely quiet subsequent sequences, and those should not be explained away. Measuring both absolute response and position within the developer’s own history makes those differences visible.
The full report contains the specifications, sensitivities, and linked examples; the case atlas includes all 88 games. All eighteen developer links were checked successfully. The study passed 1,182 verification checks, and collection is closed.
<oai-mem-citation> <citation_entries> MEMORY.md:39-47|note=[Used the established Steam dataset and kept career claims within observable evidence] MEMORY.md:53-55|note=[Retained bounded paced collection and stopping safeguards] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>

One final question, given all this, should I update SNKRX? Find me data to answer this question one way or another. Assume that this is a task that takes no effort for me whatsoever (that's false), but assume that there's nothing being compared against, if possible. Just find data on, in cases like my game, no updates for \~5 years, does it make sense at all? Tell me first if you can even answer that correctly given the data you have, or what approach you plan to take.
[Think]
**Reviewing existing project data**
I’ll check what the saved SNKRX history and earlier revival work actually contain, then distinguish the question we can answer from what would need new evidence. I’ll use your zero-effort assumption and won’t compare the update against another project.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Reviewing existing Fable data**
[Think]
**Reviewing existing Fable data**
[Think]
**Reviewing existing Fable data**
**Defining comparable update events**
[Think]
**Reviewing existing Fable data**
**Defining comparable update events**
Not reliably from the data we currently have alone. We can measure SNKRX’s existing review activity and study old games’ trajectories, but we don’t yet have a verified population of games that received substantial updates after roughly five years without one.
There is also an important correction to the earlier research: Fable’s revival rates do not answer this question. His dormancy definition started at six months of low review activity. That is different from five years without updates. The distinction matters because a game can remain active while its developer leaves it unchanged.
Your zero-effort assumption changes what we should test. We don’t need to establish that updating beats making another game, pays for development time, or produces a major relaunch. A modest benefit could be sufficient. Conversely, an absence of new reviews would not prove the update was pointless: existing owners could enjoy it without writing another review.
I’d investigate it as follows.
1. Find actual late-update attempts, independently of whether they succeeded.
Start with older paid games and their public update histories, then identify substantial gameplay/content updates following approximately four to six years without a comparable update. Keep a strict five-year subset separate.
For each case, verify the gap using dated announcements, changelogs, and explicit developer statements where available. An empty news feed alone would not establish “no updates.” Compatibility fixes, content additions, major rewrites, and Early Access graduations would be distinguished.
Crucially, I’d look for attempts, including ones that attracted little attention. Searching only for celebrated comebacks would answer the wrong question.
2. Establish which cases actually resemble SNKRX.
The most relevant characteristics would be:
- A previously established paid game, rather than an unnoticed release.
- A substantial accumulated review record before the update.
- Low but continuing activity beforehand.
- Several years without substantial new content.
- A conventional update to the existing game.
Genre and price could provide narrower comparisons if enough cases exist. I wouldn’t make the definition so specific that we end up with three handpicked examples and call them a population.
3. Measure what happened around the update.
Using dated reviews, compare:
- The preceding six or twelve months.
- The first 30 and 90 days afterward.
- Months four through twelve, where enough time has elapsed.
- Absolute additional activity as well as percentage increases.
A jump from one review to four is different from an additional several hundred reviews. A brief spike is different from a sustained increase.
I’d compare those changes with similar old games that did not receive a substantial update during the same period. Discounts, price changes, major promotion, and other simultaneous events would remain visible. If an update launched alongside a promotional campaign, we could measure that combined event without pretending to isolate the code change.
4. Look separately for benefits to existing owners.
A bounded examination of reviews and public responses explicitly discussing the update could establish whether existing players welcomed it, returned for it, or disliked particular changes. That would provide concrete evidence of benefit or dissatisfaction, even when new-review volume barely moved.
It would not give us a reliable percentage of all existing owners who benefited.
The resulting answer should distinguish:
- Whether meaningful positive outcomes after such long gaps demonstrably occur.
- How large and persistent those outcomes were among the attempts we found.
- Whether the comparable evidence is strong enough to support updating SNKRX under your zero-effort assumption.
I can investigate those questions credibly. I cannot promise a causal estimate or an accurately calibrated “SNKRX has an X% chance” answer.
My default would be to study a substantial free gameplay/content update with an ordinary Steam announcement, keeping repricing and paid expansions separate. The first step would be a feasibility pass on the update histories. If the genuine five-year-gap sample is too small or poorly documented, I’d say that explicitly rather than substitute ordinary update cases and present them as an answer.
<oai-mem-citation> <citation_entries> MEMORY.md:45-56|note=[Used the established dataset limits and review-history interpretation boundaries] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>
Go ahead.
I’ll start by finding documented long-gap update attempts and checking whether there are enough comparable cases. Then I’ll measure the response around those updates, including quiet outcomes, and keep the conclusion tied to your zero-effort assumption.
exec ([memory: sealed target])
[sealed content withheld: memory]
[Think]
**Preparing short web queries**
[Think]
**Preparing short web queries**
**Shortlisting update cases**
[Think]
**Preparing short web queries**
**Shortlisting update cases**
exec ({"code": "text(await tools.web__run({search_query:[{q:'Steam game \"update\" \"after five years\" \"patch\"',domains:...)
Script completed
Wall time 2.4 seconds
Output:
Steam Community :: The Day Before (https://steamcommunity.com/app/1372880/announcements/)
citeturn10search0 [wordlim: 200] Published: 2.7 years ago; Crawled: yesterday; Update ... As previously communicated, Mytona, as the investor, has been working in collaboration with Steam to facilitate refunds for all game purchasers. ... Patch 1.0.2 - Big Performance Hotfix ... After five years of blood, sweat, and tears, we can finally say these words: ... The game will be available on Steam and GeForce Now.
We'll continue working on new patches, and we understand the responsibility to those who have waited so long for the game. We also want to thank all the streamers - watching the players exploring our New Fortune City for the first time was priceless.
Patch 1.0.1 Changelog:
• Server Browser - Removed "full" servers completely so now you will see only the servers that have free slots.
• Fixed that the door from Leonard's room sometimes could not be opened.
We've also added some necessary sound fixes. We're continuing to monitor the situation, and we'll release new hotfixes as soon as possible. Thank you!
The Day Before is Out Now!
Dec 7, 2023
After five years of blood, sweat, and tears, we can finally say these words:
THE DAY BEFORE IS OUT NOW!
Image
Revelations From Fntastic — Ahead of the Day Before's Release
Dec 4, 2023
Image
Image
... [348 more lines]
[Think]
**Checking news-history coverage**
[Think]
**Checking news-history coverage**
exec ({"code": "text(await tools.web__run({search_query:[{q:'\"Delver\" \"update\" \"years\"',domains:[\"steamcommunity.com...)
Script completed
Wall time 2.3 seconds
Output:
News - Steam Community Announcements (https://store.steampowered.com/news/?appgroupname=Steredenn&appids=347160&feed=steam_community_announcements&headlines=0)
citeturn11search0 [wordlim: 200] Crawled: last month; Nov 9, 2025Steredenn 2.7.3 - Updating discord URL ... Very minor update: we're merging all our discord server into a single one.
Hello!
Last month, we celebrated the 10th anniversary of the release of Steredenn 1.0.
And to mark the occasion, we shared in our newsletter exclusive information about the game: sales figures, videos of prototype versions, anecdotes, etc.
You can read everything here:
https://substack.com/inbox/post/173736298?r=5ozw05&utm_campaign=post&utm_medium=web&showWelcomeOnShare=true&triedRedirect=true
And here's the video of the old versions of the game. If you played it during Early Access, it will surely bring you memories.
https://www.youtube.com/watch?v=NwAuoB-GFXM
Now what's next? Well... we hope we'll announce something soon!
Meanwhile, keep having fun with the game!
— Steredenn’s team.
Image
Nov 9, 2025
... [665 more lines]
[Think]
**Preparing metadata fields**
[Think]
**Preparing metadata fields**
[Think]
**Preparing metadata fields**
**Probing Steam news feeds**
The first checks confirm that “first update in years” is often misleading: some examples are only maintenance patches, while others had intervening updates or are actually new releases.
I’m adding a fixed sample of older games’ announcement histories, selected without looking for a successful comeback. That will help find quieter attempts and prevent the study from consisting only of famous revival stories.
exec ({"code": "text(await tools.exec_command({cmd:\"mkdir -p steam-research/late-updates-2026-09-07; steam-research/.venv/...)
Script completed
Wall time 3.7 seconds
Output:
{"chunk_id":"ba269e","wall_time_seconds":2.392152589,"exit_code":0,"original_token_count":6,"output":"frame 7118 sample 90\n"}
{}
{"chunk_id":"de2068","wall_time_seconds":1.001132945,"session_id":71471,"original_token_count":0,"output":""}
exec ({"code": "text(await tools.web__run({search_query:[{q:'\"Dungeons of Dredmor\" \"update\" \"2025\"'},{q:'\"game\" \"f...)
Script completed
Wall time 2.5 seconds
Output:
Update #100 - 10 year anniversary - December 5th, 2025 · Nuclear Throne update for 5 December 2025 · SteamDB (https://steamdb.info/patchnotes/21075708/)
citeturn12search0 [wordlim: 200] Published: 9 months ago; Crawled: 4 days ago; # Update #100 - 10 year anniversary - December 5th, 2025 ... The gang got back together, with Jan Willem Nijman, Paul Veer, Jukio Kallio, Joonas Turner, and Justin Chan, as well as YellowAfterlife (and a secret little feature for Doseone) to bring you what might just be the biggest and baddest update in Nuclear Throne History!
# Nuclear Throne » Patches
# Update #100 - 10 year anniversary - December 5th, 2025
Major 5 December 2025 Build 21075708 Edited 5 December 2025 – 21:09:03 UTC by Image Wendy
Update notes via Steam Community
Nuclear Throne launched 10 years ago, can you believe it?
And today is the day we bring you Update 100!
Image
The gang got back together, with Jan Willem Nijman, Paul Veer, Jukio Kallio, Joonas Turner, and Justin Chan, as well as YellowAfterlife (and a secret little feature for Doseone) to bring you what might just be the biggest and baddest update in Nuclear Throne History! At least it's the one that took the longest!
Now here's what you've been waiting for, the changelog:
* A thirteenth character: Cuz is not afraid to show his emotions, with a Cry ability that tears through enemies and projectiles alike. Oh, and he gets to carry 3 (three) weapons.
* Custom mode, allowing you to modify Nuclear Throne to your liking, create unique runs and challenges, and to get to know the game better than ever before.
* New unlockable C-skins for every character (and new achievements for these).
... [324 more lines]
[Think]
**Verifying Crypt update dates**
[Think]
**Verifying Crypt update dates**
exec ({"code": "text(await tools.web__run({search_query:[{q:'\"Dungeon Warfare\" \"update\" \"years\"',domains:[\"steamcomm...)
Script completed
Wall time 4.7 seconds
Output:
Steam Community :: Dungeon Warfare (https://steamcommunity.com/app/355980/allnews/)
citeturn13search0 [wordlim: 200] Published: last year; Crawled: 2 weeks ago; Almost two years have passed since we announced DW 3, and we could not have made it here without your support. ... Dungeon Warfare 3 Demo Update
Dungeon Warfare
All Discussions Screenshots Artwork Broadcasts Videos Workshop News Guides Reviews
[Select]
### Dungeon Warfare
All News
Dungeon Warfare 3 is OUT NOW!
Aug 29, 2025
Dungeon Warfare 3 is OUT NOW!
https://store.steampowered.com/app/3419220/Dungeon_Warfare_3/
What, are you still reading? Okay, here we go:
It has been a long journey. Almost two years have passed since we announced DW 3, and we could not have made it here without your support. Thank you to everyone who played the demo and left feedback. It truly helped shape the game.
We pushed hard to make DW3 worthy of the series. The pressure to top the previous games was real, and we hope you enjoy what we’ve built.
What’s next? Free updates
Even after a few delays, some promised features did not make it into 1.0. They will arrive as free content updates every couple of months.
... [286 more lines]
[Think]
**Narrowing game candidates**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/late-updates-2026-09-07/news_collection.log; py...)
Script completed
Wall time 1.3 seconds
Output:
{"chunk_id":"58e220","wall_time_seconds":0.00000391,"exit_code":0,"original_token_count":1611,"output":"{\"completed\": 76, \"of\": 91, \"appid\": 207610, \"news\": 21, \"possibly_truncated\": false}\n{\"completed\": 77, \"of\": 91, \"appid\": 275570, \"news\": 0, \"possibly_truncated\": false}\n{\"completed\": 78, \"of\": 91, \"appid\": 268220, \"news\": 12, \"possibly_truncated\": false}\n[\n {\n \"appid\": 362860,\n \"gap_years\": 4.85,\n \"previous\": \"Update - Achievement glitch\",\n \"previous_date\": \"2017-08-31\",\n \"next\": \"SYLVIO UPDATE\",\n \"next_date\": \"2022-07-06\",\n \"content\": \"[b]Important stuff first:[/b]\\n\\n[list]\\n[*] Added the ability to Run.\\n[*] Added Custom Key Binding.\\n[*] Rearranged the gameplay in the second level, to make it more intuitive.\\n[*] Took away the combination lock function on all lockers. I've always seen it as a feature creep, and it makes the game unplayable for deaf players. \\n[*] Killed some long-living bugs. \\n[*] Various cosmetica.\\n[/list]\\n\\nIt's been five years since the last update. The release of Sylvio 2 caused me to burn out of gamedev I got back into working as a freelance composer, I co-founded an environmental startup, coded some apps. In 2021 I dipped my toe into gamedev again, with a project called Guidance.\\n\\nIn the beginning of 2022, I got invited to join the Dread X Collection 5, a horror game collection put together by Dread XP. I had roughly two months to put together a game with a playtime of 45 minutes. \\nMan, it was so intense, to just go from scratch zero to finished project in that short amount of time, but it was an amazing experience.\\n\\nYou can get the collection here. The game I made is called KARAO.\\n\\n[url=https://store.steampowered.com/app/1899810/Dread_X_Collection_5/]https://store.steampowered.com/app/1899810/Dread_X_Collection_5/[/url]\\n\\n[img]{STEAM_CLAN_IMAGE}/8831055/3fab6bae03115027502c924953113bb0548049fe.png[/img]\\n\\nThe experience made me relearn what it is I love about creating horror games. I am currently exploring paths for future horror game projects, and will keep you posted when something materialises. Guidance is put on hold for the moment.\\n\\nDigging up the old Sylvio project and getting into that spaghetti code has been cleansing, in a way. I'm so thankful for all the people that have been playing it through the years, and as it's still being picked up by new players, it feels good to give it an update.\\n\\nAs always, let me know of any bugs, either on the forum or on [email protected]\\n\\nIf you have any problem with the new build, you can use the password Play2017Sylvio to access the old build. \\n\\nSee you soon,\\nNiklas, Stroboskop\",\n \"url\": \"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/4474904295777248861\"\n },\n {\n \"appid\": 239820,\n \"gap_years\": 4.82,\n \"previous\": \"1.7.6/1.8.6 Small bug fix update\",\n \"previous_date\": \"2020-12-07\",\n \"next\": \"1.7.8 Small bug fix update\",\n \"next_date\": \"2025-10-01\",\n \"content\": \"[p]Fixed: Error when engine does not have a name set.[/p][p]Fixed: Platform/genre and platform/audience weighting on custom console wasn't always correct.[/p][p]New: Show a permanently dismissable banner on the main menu for new games from us.[/p]\",\n \"url\": \"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1811772772440431\"\n },\n {\n \"appid\": 626690,\n \"gap_years\": 5.31,\n \"previous\": \"August 2019 Patch Update\",\n \"previous_date\": \"2019-08-28\",\n \"next\": \"SWORD ART ONLINE Fractured Daydream Demo Version Released\",\n \"next_date\": \"2024-12-20\",\n \"content\": \"[h3]The demo for SWORD ART ONLINE Fractured Daydream has been released![/h3]\\n\\nhttps://store.steampowered.com/app/3319640/\\n\\n[h3]Play as select characters from the roster and try the Co-Op Quest and Boss Raid! Challenge Illfang the Kobold Lord and The Skull Reaper together with other demo players!\\n\\nTake a look at the System Trailer for more details on the game systems! [/h3]\\n[previewyoutube=2kRe0iaUDiM;full][/previewyoutube]\\n\\n[h3]Take the first step to LINK START!\\n\\nFollow us on on the official X account for more information on the game![/h3]\\n[url=https://x.com/saogames]https://x.com/saogames[/url]\\n\\nhttps://store.steampowered.com/app/1858630/\",\n \"url\": \"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1786573930645943\"\n },\n {\n \"appid\": 57300,\n \"gap_years\": 6.63,\n \"previous\": \"Smallish update - Total conversion mods fix\",\n \"previous_date\": \"2016-10-15\",\n \"next\": \"Update notes for June 2\",\n \"next_date\": \"2023-06-02\",\n \"content\": \"Added Steam Workshop support - regular mods can now be uploaded to Steam Workshop and subscribed to.\",\n \"url\": \"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/5151601211229602639\"\n },\n {\n \"appid\": 209080,\n \"gap_years\": 4.46,\n \"previous\": \"8th Anniversary Update\",\n \"previous_date\": \"2020-10-22\",\n \"next\": \"An Update from the Muse Games Team\",\n \"next_date\": \"2025-04-08\",\n \"content\": \"Greetings, captains and crews of the skies,\\n\\nIt’s been a long while since we’ve spoken to you here, and it’s about time we caught up. We, Muse Games, have grown up as a team. We’ve worked on and released multiple titles, and we are independent. So, what are we here to talk about? First of all, you. \\n\\nThe Guns of Icarus community have been with us for over a decade now. That’s incredibly humbling, and heartwarming for the entire team. To see you all still out there, flying in the skies we first created in Flight of the Icarus back in 2010 is amazing. So, firstly, we wanted to say, thank you.\\n\\nThank you for investing in our world, and thank you for helping shape and share the story we’ve all made together. Not many studios are as lucky to have a community as strong as the Guns of Icarus community, and we do not take that for granted. \\n\\nWe wanted to let you know that we’ve been working on something. Something we think you’re going to like. A lot. We’re going back to our roots. While we can’t tell you too much more at the moment, let’s just say that the sky is no longer the limit. \\n\\nYou’re going to be hearing a lot more from us in the coming weeks and months, so be sure to stick around and [url=https://discord.gg/5dbmkwR4tt]join us on Discord[/url]. \\n\\nSee you in the skies, and beyond…\\n\\nHoward for Team Muse\\n\",\n \"url\": \"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1795917897489435\"\n }\n]\n"}
{"chunk_id":"896364","wall_time_seconds":1.001704237,"session_id":9280,"original_token_count":0,"output":""}
[Think]
**Reviewing update histories**
[Think]
**Reviewing update histories**
**Screening five-year update cases**
[Think]
**Reviewing update histories**
**Screening five-year update cases**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/late-updates-2026-09-07/news_collection.log; ta...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"01cfdf","wall_time_seconds":0.000003483,"exit_code":0,"original_token_count":3212,"output":"{\"completed\": 89, \"of\": 91, \"appid\": 958320, \"news\": 6, \"possibly_truncated\": false}\n{\"completed\": 90, \"of\": 91, \"appid\": 445310, \"news\": 0, \"possibly_truncated\": false}\n{\"completed\": 91, \"of\": 91, \"appid\": 571310, \"news\": 33, \"possibly_truncated\": false}\n{\"completed\": 12, \"of\": 14, \"appid\": 274500, \"news\": 147, \"possibly_truncated\": false}\n{\"completed\": 13, \"of\": 14, \"appid\": 70300, \"news\": 11, \"possibly_truncated\": false}\n{\"completed\": 14, \"of\": 14, \"appid\": 221640, \"news\": 2, \"possibly_truncated\": false}\n\nAPP 241600 items 40\n2022-09-03 Linux/macOS Update, Steam Deck\n2022-04-28 Rogue Legacy 2 v1.0 Available Now!\n2020-03-26 Lament of Zors Update - v1.5.1\n2020-03-22 Lament of Zors Update - v1.5\n2018-07-24 Rogue Legacy - The 5 Year Anniversary Update is LIVE!!!\n2018-06-21 Rogue Legacy Version 1.3.0-beta is now Live!\n2013-12-17 Rogue Legacy Content Patch v1.2.0 has been released\n2013-12-17 Rogue Legacy Content Patch v1.2.0 has been released\n2013-10-16 Rogue Legacy v1.1.0 Update Released\n2013-10-16 Mac and Linux Versions Out Now!\n\nAPP 247080 items 129\n2024-08-19 Update v4.1.1\n2024-03-13 Crypt of the NecroDancer v4.0.0\n2023-11-14 Update v3.7.5 and we're officially Steam Deck Verified!\n2023-10-17 Update v3.7.4 and the Halloween Event Returns!\n2023-08-29 SYNCHRONY Hotfix v3.7.3\n2023-08-21 Update v3.7.2\n2023-08-14 Rift of the NecroDancer welcomes Klei as its new publisher for a 2024 release\n2023-05-16 SYNCHRONY Update v3.7.1\n2023-05-08 SYNCHRONY Update v3.7.0\n2023-03-16 SYNCHRONY Update v3.6.1\n2023-03-01 SYNCHRONY Update v3.6.0\n2023-02-03 SYNCRHONY v3.5.1\n2023-02-02 SYNCHRONY Update v3.5.0\n2022-12-21 Crypt of the NecroDancer v3.4.1 is now available!\n2022-12-19 Crypt of the NecroDancer v3.4.0 is now available!\n2022-12-06 SYNCHRONY Update v3.3.2\n2022-11-25 SYNCHRONY Update v3.3.1\n2022-11-24 SYNCHRONY Update v3.3.0\n2022-10-24 NecroDancer Trick-or-Treat Versus Mode Available Now! - SYNCHRONY Update v3.2.0\n2022-10-11 SYNCHRONY Update v3.1.5\n2022-10-04 Crypt of the NecroDancer v3.1.4 is now available!\n2022-08-19 SYNCHRONY Update v3.1.3\n2022-08-11 SYNCHRONY Update v3.1.2\n2022-08-09 SYNCHRONY Update v3.1.1\n2022-08-04 NecroDancer SYNCHRONY DLC Available Now! - Update v3.1.0\n2022-07-15 Update v3.03\n2022-07-11 Update v3.0.2\n2022-07-05 Update v3.0.1\n2022-07-01 Update v3.0.0-b1560\n2022-06-30 NecroDancer Update v3.0.0\n2017-10-12 Amplified v2.59 Changelog!\n2017-09-08 AMPLIFIED v2.58 is now Live!\n2017-08-25 UPDATE! Base Game v1.29 / Amplified v2.57\n2017-08-22 Huge FREE Chipzel and Danganronpa update!\n2017-07-20 Amplified v2.55 is now live!\n2017-04-02 Amplified v2.45: Tomes, Magic Food, and Bugfixes!\n2017-03-16 Amplified v2.44: New Shrines + Bugfixes!\n2017-03-09 Amplified v2.42 & 2.43: New Character, New Mode, New items + Bugfixes!\n2017-02-09 Amplified v2.40: Bugfixes + New Item: Heavy Glass Armor!\n2017-02-02 Amplified v2.38: Bugfixes + New Items: Electric Dagger & Battle Shovel!\n2017-01-28 Amplified v2.35: Bugfixes, Localizations, and New Items!\n2016-05-01 BIG UPDATE! 2 new playable OSTs, new languages, and more!\n2015-10-04 NecroDancer LANGUAGE UPDATE!\n2015-03-22 Update #18: Blood Shovel, Lucky Charm, and a bajillion other improvements!\n2015-02-22 Update #17: Our biggest update EVER! New boss, new characters, new NPCs, and more!\n2015-02-03 Update #16: Leprechaun, new items, shrines, and more!\n2015-01-22 Update #15: Steam Trading Cards and 11 new items!\n2015-01-10 Update #14: Eli, Rifle, \"Beta\" and tons more!\n2014-12-23 Update #13: Merry Cryptmas!\n2014-12-16 Update #12: Blood magic!\n2014-12-10 Update #11: Teh Urn!\n2014-12-03 Update #10: Miner's Cap OP!\n2014-11-26 Update #9: STEAM WORKSHOP, and more!\n2014-11-07 Update #8: New torches, bombable shrines, and TONS more!\n2014-10-30 HUGE HALLOWEEN UPDATE! (Update #7)\n2014-10-23 Update #6: New Bolt graphics, Scroll of Need improvements, and other fixes!\n2014-10-16 Update #5: Helpful new options!\n2014-10-15 Update #4: Tons of bug fixes and tweaks\n2014-09-25 Update #3! New ways to battle the shopkeeper, new weapons, spells, and more!\n2014-09-25 Updates #1 and #2!\n\nAPP 12900 items 200\n\nAPP 242680 items 200\n2025-12-05 Update #100 - 10 year anniversary - December 5th, 2025\n2025-09-01 Nuclear Throne update 100 launch date & a Y.V. plushie!\n2017-11-06 Update #99 - Update 99 - November 6th, 2017\n2017-11-01 November 6th: AMA + Update 99 Release!\n2016-02-21 Update #98 - Thronebutt - February 21st, 2016\n2015-12-15 Update #97 - Clouds and Tweaks - December 15th, 2015\n2015-12-06 Update #96 - The Real Deal - December 5th, 2015\n2015-11-17 Update #95 - Shiny Throne - November 17th\n2015-10-26 Note: Update 95 has been delayed\n2015-10-17 Update #94 - Weeklies! - Weekend of October 16th\n2015-10-11 Update #93 - Happy Birthday, Nuclear Throne! - Weekend of October 9th\n2015-10-08 Hotfix #10 - The slowest hotfix in history - Hotfix to Update #92\n2015-09-27 Update #92 - The Beginning Of The End Part II - Weekend of September 27th\n2015-09-21 Update #91 - The Beginning Of The End - Weekend of September 18th\n2015-09-13 Update #90 - Grab a Friend! - Weekend of September 11th\n2015-09-06 Update #89 - Looping - Weekend of September 4th\n2015-08-31 Update #88 - Tweak Tweak, Fix Fix - Weekend of August 28th\n2015-08-22 Update #87 - Efficiency - Weekend of August 21st\n2015-08-16 Update #86 - Meta Update - Weekend of August 14th\n2015-08-09 Update #85 - Secret Update - Weekend of August 7th\n2015-08-02 Update #84 - Daily Updates - Weekend of July 31st\n2015-07-26 Update #83 - Ultra Update - Weekend of July 24th\n2015-07-19 Update #82 - Crystal Party! - Weekend of July 17th\n2015-07-12 Update #81 - We just really want weekend right now - Weekend of July 10th\n2015-07-05 Update #80 - Bear with us - Weekend of July 5th\n2015-06-28 Update #79 - Crown Mess - Weekend of June 26th\n2015-06-21 Update #78 - That's the sound of the beast! - Weekend of June 19th\n2015-06-14 Update #77 - This is not the update in which we add Jungle - Weekend of June 12th\n2015-06-08 Update #76 - Fasten your seatbelts - Weekend of June 5th\n2015-06-01 Update #75 - Golden Age - Weekend of May 29th\n2015-05-25 Update #74 - Revival Time! - Weekend of May 22nd\n2015-05-17 Update #73 - Shielder shields shield Shielders - Weekend of May 15th\n2015-05-09 Update #72 - The Beautiful Update - Weekend of May 8th\n2015-05-03 Update #71 - Literally a million tiny things - Weekend of May 1st\n2015-04-27 Update #70 - Bolt Variety - Weekend of April 24th\n2015-04-19 Hotfix #9 - A way out - Hotfix for Update #69\n2015-04-19 Update #69 - Four assassins - Weekend of April 17th\n2015-04-13 Update #68 - The Long Overhaul - Weekend of April 10th\n2015-04-06 Update #67 - What dog? - Weekend of April 3rd\n2015-04-01 Hotfix #8 - Big Bites - Hotfix for Update #66\n2015-03-29 Update #66 - Yung Update - Weekend of March 27th\n2015-03-21 Update #65 - Warming Up - Weekend of March 20th\n2015-03-02 Update #64 - Maintenance Week - Weekend of February 27th\n2015-02-21 Update #63 - Free Crowns - Weekend of February 20th\n2015-02-08 Update #62 - Terribly Special Effects - Weekend of February 6th\n2015-02-01 Update #61 - Taking out the Trash - Weekend of January 28th\n2015-01-27 Hotfix #7 - Dogs and Claws - Hotfix for Update #60\n2015-01-25 Update #60 - The Gun Update - Weekend of January 23rd\n2015-01-11 Update #59 - Little bit of balancing - Weekend of January 10th\n2015-01-04 Update #58 - Highly Experimental Mutations - Weekend of January 2nd\n2014-12-26 Hotfix #6 - Too much irradiated snow - Hotfix for Update #57\n2014-12-25 Update #57 - Mutant holidays and a happy new year! - Weekend of December 26th\n2014-12-21 Update #56 - Portals and bolts - Weekend of December 19th\n2014-12-17 Hotfix #5 - HUDs and Darkness - Hotfix for Update #55\n2014-12-17 Update #55 - I can't believe it's Daily Runs! - Weekend of December 12th\n2014-12-09 Update #54 - Sweet Sounds Of The Future - Weekend of December 5th\n2014-11-30 Hotfix #4 - Laser and Loop Fixes - Hotfix for Update #53\n2014-11-30 Update #53 - Ultra Fixes - Weekend of November 30th\n2014-11-23 Update #52 - Craters & Flames - Weekend of November 21st\n2014-11-18 Update #51 - The Tired Update - Weekend of November 14th\n2014-11-10 Update #50 - Cleaning up! - Weekend of November 7th\n2014-11-02 Update #49 - The Distant Future - Week of October 31st\n2014-10-28 Update #48 - The same level over and over and over and over and over and over and over and over and over and over and over and over and over\n2014-10-19 Update #47 - Week of Sound - Week of October 17th\n2014-10-12 Update #46 - Happy Birthday Nuclear Throne - Week of October 10th\n2014-10-04 Update #45 - The Rogue Update - Week of October 3rd\n2014-09-21 Update #44 - Small Grenades - Week of September 19th\n2014-09-09 Update #43 - Bugs and Balancing and all the beautiful stuff games are made from - Week of September 5th\n2014-09-04 Update #41 & Update #42 - Heavy Load - Weeks of August 23rd and September 1st\n2014-08-20 Update #40 - Shells of Fire - Week of August 16th\n2014-08-10 Update #39 - Quality Time - Week of August 8th\n2014-08-02 Update #38 - No Mountain Too High - Week of August 1st\n2014-07-28 Update #37 - If you say Balance over and over again it doesn't sound like a word anymore - Week of July 25th\n2014-07-20 Update #36 - The Fire In My Heart - Week of July 18th\n2014-07-12 Update #35 - Shiny guns and fancy Thrones\n2014-07-05 Update #34 - The Horror! The Horror! - Week of July 4th\n2014-06-29 Update #33 - Just A Nuclear Throne Update - Week of June 27th\n2014-06-22 Update #32 - Tiny Explosions - Week of June 20th\n2014-06-16 Update #31 - The tiniest update - Week of June 13th\n2014-06-08 Update #30 - Look at that Ally Animation! - Week of June 6th\n2014-05-31 Update #29 - Guns that Think - Week of May 30th\n2014-05-25 Update #28 - Interdimensional Chests - Week of May 23rd\n2014-05-18 Update #27 - Fiery Scraps - Week of May 16th\n2014-05-10 Update #26 - The Guardians - Week of May 9nd\n2014-05-04 Update #25 - Getting closer to the Nuclear Throne - Week of May 2nd\n2014-04-27 Hotfix to update #24\n2014-04-27 Hotfix to update #24\n2014-04-27 Update #24 - Can you hear me? - Week of April 25th\n2014-04-20 Update #23 - Back to old-school action - Week of April 18th\n2014-04-13 Update #22 - Friendship - Week of April 11th\n2014-04-09 Update #21 - Second Start - Week of April 5th\n2014-04-01 Update #20 - A New Direction - April 1st, 2014\n2014-03-30 Sorry, no update this week.\n2014-03-09 Update #19 - Thunder in my Heart - Week of March 7th\n\nAPP 1094870 items 20\n2023-09-07 Acron Patch 1.17\n2023-06-27 Acron Update 1.16: Localization Update\n2020-10-29 Game Update 1.14\n2020-10-21 Game Update: Sulky Swamp Halloween Update\n2019-12-11 Update: Various Bug Fixes\n2019-10-31 Release the Haunting Horrors!\n2019-08-02 Acron: Attack of the Squirrels! Release Date\n\nAPP 347160 items 69\n2025-04-14 Our new game CTHULOOT is now released!\n2018-03-08 Steredenn: Binary Stars released on Nintendo Switch\n2015-09-07 Steredenn: release on October, 1st\n\nAPP 98800 items 0\n\nAPP 29800 items 6\n\nAPP 274500 items 147\n2026-06-10 BRIGADOR KILLERS DEMO UPDATE LIVE NOW\n2023-02-10 Updated Visual C++ Redistributables for 2023\n2022-07-01 Minor Modkit Update July 1\n2022-06-29 Patch Notes, June 29 2022\n2022-06-23 YOU WON'T BELIEVE WHAT'S IN THIS NEWS UPDATE\n2022-01-26 Update Notes, January 26, 2022\n2021-12-10 NO December Update... But Why?!\n2021-10-28 Grave To The Rave Update Is Now Live\n2021-10-08 Patch Reverted - Oct 8\n2021-10-08 Update Notes, October 8, 2021 \n2021-06-24 Part II of the Blood Anniversary Is Now Live\n2021-06-07 The Blood Anniversary Update Is Now Live\n2021-05-31 BIG UPDATE INCOMING FOR BRIGADOR\n2020-11-27 Minor UI Update Coming Soon\n2019-07-29 COMMUNITY REINFORCEMENTS UPDATE\n2018-12-20 WITAMY BRIGADOR UPDATE\n2018-06-18 Our 'Nĭ Hăo a Tutti' update is live!\n2017-11-06 the All Saints Update - new missions plus HORNS!\n2017-06-04 Patch notes, June 4 2017 (cumulative)\n2017-04-02 The Design Bureau Update & Re-Launch Announcement!\n2016-11-12 Brigador v1.16 - Revised Audio-Kinetic Pulse\n2016-11-02 Brigador 1.15 Halloween Updates 4 of 4\n2016-11-01 Brigador 1.14.5 Halloween Updates 3.5 of 4\n2016-10-30 Brigador 1.14 Halloween Updates 3 of 4\n2016-10-29 Brigador 1.13 Halloween Updates 2 of 4\n2016-10-28 Brigador 1.12 Halloween Updates 1 of 4\n2016-08-26 Brigador v1.11 patch and new movement scheme\n2016-04-05 April Progress Update\n2016-03-03 March Progress Update\n2016-02-04 February Progress Update\n2016-01-22 January Progress Update\n2016-01-08 Progress Update for the New Year\n2015-12-10 12-10-2015 Update & Experimental Build\n2015-11-25 Pre-Thanksgiving Update 11-25-2015\n2015-11-18 New Update - 11-18-2015\n2015-11-11 New Update - 11-11-2015\n2015-10-24 New Update - 10-23-2015\n2015-05-11 May Progress Update\n2015-04-02 April Progress Update\n2015-03-24 Progress Update\n2014-09-26 Client Update\n\nAPP 70300 items 11\n2014-06-12 VVVVVV 2.2 Update out today, with achievements!\n\nAPP 221640 items 2\n"}
[Think]
**Preparing full title scan**
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport json,re,datetime\...)
Script completed
Wall time 2.4 seconds
Output:
{"chunk_id":"27a9f1","wall_time_seconds":0.000003599,"exit_code":0,"original_token_count":682,"output":"\nAPP 70300\n2026-04-21 2.4.4\n2025-06-19 2.4.3\n2024-08-23 2.4.2\n2024-02-13 2.4.1\n2024-01-10 VVVVVV 2.4 out now!\n2021-12-22 2.3.6\n2021-12-21 2.3.5\n2021-08-31 VVVVVV 2.3 out now!\n2019-04-26 Trading cards, 50% off sale, and a new game coming soon\n2014-06-12 VVVVVV 2.2 Update out today, with achievements!\n\nAPP 221640\n2022-05-30 Super Hexagon Verified for Steam Deck\n2019-04-26 Trading cards, 50% off sale, and a new game coming soon\n\nAPP 29800\n2025-09-19 Keys of Fury Demo Out Now!\n2016-03-01 Giant sale on Caster!!!\n2015-07-27 Epic new RPG needs your help to be Greenlit!\n2015-05-28 Optional toon shading\n2015-03-25 Cards and Badges\n\nAPP 1094870\n2026-06-12 We're Certified by Good Virtual Reality!\n2025-11-19 Engine Upgrade\n2023-09-07 Acron Patch 1.17\n2023-06-27 Acron Update 1.16: Localization Update\n2023-02-14 Join the Resolution Games Discord!\n2022-01-13 Acorn Community Virtual Hangout\n2021-07-02 New content is under construction!\n2021-05-06 Demeo Launch Celebration Sale\n2020-10-29 Game Update 1.14\n2020-10-21 Game Update: Sulky Swamp Halloween Update\n2020-07-07 Bug Fix: Android Crash at Start-Up\n2019-12-11 Update: Various Bug Fixes\n2019-10-31 Release the Haunting Horrors!\n2019-10-02 Dev Chat: Concept Art with Louise\n2019-09-30 Please meet Doug!\n2019-09-26 Meet the tree!\n2019-09-16 Introducing Sim, a quirky squirrel with a love for building bridges!\n2019-09-12 Say 'hello' to Chunk!\n\nAPP 347160\n2026-03-10 Announcing Cosmo Cargo + Playable Demo on Itch.io\n2025-11-10 10 years of Steredenn\n2025-11-09 Steredenn 2.7.3 - Updating discord URL\n2025-04-14 Our new game CTHULOOT is now released!\n2024-07-24 Steredenn 2.7.2\n2024-07-23 Steredenn 2.7.1\n2024-05-17 Pixelnest announces CTHULOOT!\n2024-02-25 Steredenn: Steam hull maintenance\n2023-09-30 Steredenn 2.6.4: hotfix\n2023-09-26 Steredenn 2.6.3: hotfix (Linux)\n2023-09-26 Steredenn 2.6.2: hotfix\n2023-09-23 Steredenn 2.6.1: hotfix\n2023-09-22 Steredenn 2.6.0: Incoming Transmission\n2019-10-21 Beyond the Galactic vortex\n2019-01-11 Steredenn 2.5.0: Enigma Machine\n2018-11-28 Steredenn 2.4.1: See The Light\n2018-09-14 Steredenn 2.4.0: The Sixth Extinction\n2018-07-23 Steredenn 2.3.1: Eternal Space\n\nAPP 12900\n2026-02-23 New Character! Next Fest 2026! AUDIOMECH!\n2020-02-15 Corkscrews and Widescreens!\n2015-01-24 Song of the Day fixed\n2014-09-22 new feature: Song of the Day!\n2012-03-03 009 - YouTube National Anthem\n2011-12-24 Cascading Doom Pony\n2011-12-09 Phantasma's Halcyon\n2011-11-05 Multi-track Rupture\n2011-10-12 JORISMA on Radio\n2011-09-13 Solar Storm BS\n2011-08-27 Impeccable Micro\n2011-08-13 Mr. Araldi\n2011-08-05 The newer Pollution\n2011-07-23 Pendulum\n2011-07-14 Blastage!\n2011-06-25 Back in Fire-Black\n2011-06-12 Silent Dogs of War\n2011-06-05 Parallel Dimension\n"}
Patch v3.0.0 - Brace Yourself Games (https://braceyourselfgames.com/updates/crypt-of-the-necrodancer/patch-v3-0-0/)
citeturn14search0 [wordlim: 200] Published: 4.2 years ago; Crawled: last month; After 1,721 days, Crypt of the NecroDancer is getting another update. ... ### List of New Features in v3.0.0 ... * Suspended and resumed runs can be submitted to the Deathless, Story and All-Characters leaderboards. ... * Audio files in the MP3, OGG and FLAC formats are supported. ... * Boss songs and special tracks can be chosen in custom levels, allowing the usual song-length time limit to be removed.
# Patch v3.0.0
Released: 30th June 2022
Image
Yup. You’re seeing this right. After 1,721 days, Crypt of the NecroDancer is getting another update. And it’s a big one.
You might be saying, “Brace Yourself Games, it’s been 5 years. Why are you updating now?”
Well, let’s just say this is a precursor to something bigger coming your way, and we want to make sure that we address some of the community’s most significant feedback before we get there.
From your feedback, here are some of the biggest things you wanted us to address:
1. Loading times
2. Difficulty spike
3. Custom music
4. Controller support/control inputs
Good news – we’ve got something in the bank for all of these points today and SO much more, including improved co-op and mod support. We’ve got a lot of changes to go through, so that’s enough preamble. Strap in!
### List of New Features in v3.0.0
... [299 more lines]
[Think]
**Checking Steredenn timeline**
[Think]
**Checking Steredenn timeline**
[Think]
**Checking Steredenn timeline**
**Checking Sylvio update URL**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/late-updates...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"66482e","wall_time_seconds":1.001382392,"session_id":84845,"original_token_count":55,"output":"recent_range n 100 summary {'num_reviews': 100, 'review_score': 8, 'review_score_desc': 'Very Positive', 'total_positive': 102, 'total_negative': 16, 'total_reviews': 118} all_in_window True minmax 1739899698 1766940438\n"}
{"chunk_id":"8b9da5","wall_time_seconds":0.000003715,"exit_code":0,"original_token_count":4546,"output":"\n 241600 2018-07-24 Rogue Legacy - The 5 Year Anniversary Update is LIVE!!! https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/2462791699363750591\n[img]https://steamcdn-a.akamaihd.net/steamcommunity/public/images/clans/4876004/202f0b5e684584626fb7f9e44c34c5783fbd25c6.png[/img]\r\n\r\n[b]A special thanks to all the people who playtested while it was in Beta. Your feedback has been tremendously helpful! :) :) :)[/b]\r\n\r\n\r\nAfter 4 long years, we've updated Rogue Legacy!\r\n\r\n[h1]Translations[/h1]\r\n------------------------------------------------------------------------------\r\n[list]\r\n[*] Olá! Rogue Legacy hass been fully translated into 8 different languages! Enjoy being robbed by Charon in your native tongue! :) \r\n[list]\r\n[*]English \r\n[*]French\r\n[*]German\r\n[*]Spanish\r\n[*]Brazilian Portuguese\r\n[*]Russian\r\n[*]Polish\r\n[*]and Simplified Chinese! :)\r\n\r\n[/list]\r\n[/list]\r\n\r\n\r\n[h1]Content Update[/h1]\r\n------------------------------------------------------------------------------\r\n[list]\r\n[*]Mac and Linux versions have been updated to the newest patch.\r\n[*]Cloud saving has been enabled. Now you can play on a plane!\r\n[*]Boss remixes now only spawn in NG+ and up.\r\n[*]Donation boxes have been added to the game. \r\n[list]\r\n[*]Having trouble with the Remixes? Power up your heroes from the past and give yourself that extra edge! Be warned, the price is high.\r\n[/list]\r\n[*]Prosopagnosia trait has been added to the game. You are bad with faces.\r\n[*]Clonus trait added. You've got the shakes.\r\n[*]Thanatophobia, a new achievement has been added! \r\n[list] \r\n[*]Complete the game in 15 lives or less to earn this super difficult achievement.\r\n[/list]\r\n[*]Achievement Hunters Grace Period has been added. \r\n[list] \r\n[*][spoiler]It wouldn't be fair to take away 100% Achievements from those who've already earned it. For a limited time, if you have all achievements except Thanatophobia, at the title screen, hold [L. ALT] + [CAPSLOCK] then press [T] to unlock it. [/spoiler]\r\n[/list]\r\n[*]Mouse rebinding has been added. \r\n[list] \r\n[*] 2207 comments later and we finally got the message. I hope you degenerates are grateful!\r\n[/list]\r\n[*] Stat drops now scale with NG+ level.\r\n[*] A new mystery portrait has been added to the game... Spook city.\r\n[*] Profile card layout has been updated. Pssshh. :\\\r\n[/list]\r\n\r\n\r\n[h1]Bug Fixes[/h1]\r\n------------------------------------------------------------------------------\r\n[*]Removed the forced aspect ratio from the game.\r\n[*]Improved graphics stability for Intel Integrated video cards\r\n[*]Numerous bug fixes to calculating total time played.\r\n[*]Fixed longstanding bug with dashing forever\r\n[*]Fixed longstanding bug for being invincible forever.\r\n[*]Fixed crash bug when being awarded too much money in the elf mini-game\r\n\n\n 241600 2018-06-21 Rogue Legacy Version 1.3.0-beta is now Live! https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/2499943313630732643\nHey all!\r\n\r\nAfter 4 long years, we're pushing a new BETA build of Rogue Legacy to the public. There may be a few bugs, but we wanted to get something out during the Summer Sale so we thought we'd go for it. Expect a final more bug-free version with updates in the near future. \r\n\r\n**We plan to roll out these updates to Mac and Linux once it goes final.\r\n\r\n\r\nTranslations!\r\n------------------------------------------------------------------------------\r\n- Localization is finally in! You can now play RL in English, French, German, Spanish, Brazilian Portuguese, Russian, Polish, and Simplified Chinese! :)\r\n- If you run into any translation bugs, please send an email to [email protected]\r\n\r\n\r\nGameplay Updates\r\n------------------------------------------------------------------------------\r\n- Boss remixes now only spawn in NG+ and up.\r\n- Donation boxes have been added to the game. Having trouble with the Remixes? You can now level up the Pre-fab characters multiple times in order to give yourself that extra edge you need. But be warned, it will cost you!\r\n- Prosopagnosia trait added.\r\n- Clonus trait added.\r\n\r\n\r\nStability Fixes\r\n-----------------------------------------------------------------------------\r\n- Improved graphics stability for Intel Integrated video cards\r\n- Numerous bug fixes to calculating total time played.\r\n\r\n\r\nFuture (official patch launch)\r\n------------------------------------------------------------------------------\r\n- Will add mouse buttons to Key config to allow you to bind mouse buttons.\r\n- A new portrait will been added to the game.\n\n 247080 2022-06-30 NecroDancer Update v3.0.0 https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/4474904295756048702\n[img]{STEAM_CLAN_IMAGE}/6005263/ad5cdac102b9515d9c40adc8670b9ae476da5a98.png[/img]\n\nYup. You’re seeing this right. After 1,721 days, Crypt of the NecroDancer is getting another update. And it’s a big one.\n\nYou might be saying, “Brace Yourself Games, it’s been 5 years. Why are you updating now?” \n\nWell, let’s just say this is a precursor to something bigger coming your way, and we want to make sure that we address some of the community’s most significant feedback before we get there.\n\nFrom your feedback, here are some of the biggest things you wanted us to address:\n[olist]\n[*] Loading times\n[*] Difficulty spike\n[*] Custom music\n[*] Controller support/control inputs\n[/olist]\nGood news - we’ve got something in the bank for all of these points today and SO much more, including improved co-op and mod support. We’ve got a lot of changes to go through, so that’s enough preamble. Strap in!\n\n[h1]List of New Features in v3.0.0[/h1]\n\n[b]EDIT:[/b] Fixed a big that granted achievements for No Beat Mode (sorry)\n\n[h3]No Beat Mode[/h3]\n[list]\n[*] Added [b]No Beat mode[/b], enabling Bard-like gameplay for any character. Yes, even Aria for anyone who would like to experience the game’s story in an easier way! \n[/list]\n[h3]Save and Quit Anytime[/h3]\n[list]\n[*] Added a [b]Save and Quit[/b] feature to allow exiting the game and resuming the session later.\n[list]\n[*] The session is also automatically saved when closing the game window.\n[*] Suspended and resumed runs can be submitted to the Deathless, Story and All-Characters leaderboards.\n[/list][/list]\n[h3]Greatly Reduced Load Times[/h3]\n[list]\n[*] Greatly reduced loading time when starting the game by streaming more resources on demand.\n[/list]\n[h3]Updated Controller and Steam Deck Support[/h3]\n[list]\n[*] Added improved [b]controller support[/b] via Steam Input, with gamepad-specific button symbols and [b]Steam Deck support[/b].\n[/list]\n[h3]Controls and Input Improvements[/h3]\n[img]{STEAM_CLAN_IMAGE}/6005263/ba1c6f125ec2f6717b2ff49eb547652d71875c7d.png[/img]\n[list]\n[*] Added various improvements to the controls and input system.\n[list]\n[*] Added the ability to assign multiple keys or buttons to the same action.\n[*] Added support for custom multi-key combos for any in-game action.\n[*] Most menu controls can now be customized.\n[*] Mouse buttons can now be assigned to in-game actions.\n[*] Added a menu for quickly switching between keyboard/controller schemes for co-op players.\n[/list][/list]\n[h3]Custom Music Overhaul[/h3]\n[list]\n[*] Added an overhauled [b]custom music[/b] system with the ability to save multiple playlists and switch between them.\n[list]\n[*] Audio files in the MP3, OGG and FLAC formats are supported.\n[*] Beat detection is performed in the background, allowing more songs to be selected in the meantime.\n[*] Special tracks (story bosses, training, tutorial) can also be customized.\n[*] Imported songs and their beatmaps can be previewed directly in the Custom Music menu.\n[*] On Linux, a native file chooser dialog is now used in place of the in-game selection menu.\n[/list][/list]\n[h3]New and Improved Co-op[/h3]\n[img]{STEAM_CLAN_IMAGE}/6005263/0fa88da76d778fa7c0343e208427733aeee276b9.png[/img]\n[list]\n[*] Added dynamic view scaling for local co-op sessions when players move away from each other.\n[*] Added independent per-player beatmaps in co-op mode: play any combination of Cadence, Bolt and Bard!\n[list]\n[*] Each player tracks their own rhythm: the presence of a Bard or Bolt does not transfer their effects to all players.\n[*] Adjusted the behavior of all enemies to follow the rhythm of the nearest player.[/list]\n[/list]\n[h3]Updated Replay System[/h3]\n[list]\n[*] Added an advanced option to view post-death replays from the perspective of the enemy that ended the run.\n[*] Added a redesigned [b]replay system[/b] with hotkeys for seeking through and skipping levels.\n[list]\n[*] Multi-run replays (Deathless, Story, All-Characters) now record and playback gameplay across all runs.\n[*] Replays now reproduce accurate input timings for Bard, in No Beat Mode or with Custom Music enabled.\n[*] Replay auto-saving can be configured to record all runs, only victories, or no runs at all.\n[/list][/list]\n[h3]Leaderboards[/h3]\n[list]\n[*] Added a warning to the leaderboard menu if mods or custom rules are causing the leaderboards to be disabled.\n[*] Split co-op leaderboards into 'Cadence + Cadence' and 'Mixed Characters'.\n[*] Changed Custom Music leaderboards to also include No-Beat Mode and other rhyt\n\n 12900 2020-02-15 Corkscrews and Widescreens! https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/3183419193835531768\n[img]{STEAM_CLAN_IMAGE}/1035253/cdc69d0ba3a799ef49801f7cef7daddbba5eefe1.png[/img]\n\n[h1]Widescreens[/h1]\nWidescreen scaling is now handled much better. This is especially noticeable on ultrawide monitors, but it's an improvement for 16:9 displays too (Audiosurf was originally designed for 4:3). Most of the menu screens do still fully stretch.\n\n[h1]Corkscrews[/h1]\nCorkscrew twists were completely random, but now they highlight a big moment in the song. There's still the same 25% chance of a ride having a corkscrew (except for songs that really want one and therefore always have one).\n\nYou can now play in narrowscreen too if that’s your thing.\n\n[img]{STEAM_CLAN_IMAGE}/1035253/c5fd77fd953548d3db5b493b9e819d2dabd2eef0.png[/img]\n\nHave fun!\nDylan\n\n 12900 2015-01-24 Song of the Day fixed https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/519372501708812249\nThe problems with Song of the Day some of you noticed have been fixed. Thanks for the reports!\n\n 12900 2015-01-24 Song of the Day fixed https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/3819571572127214944\nThe problems with Song of the Day some of you noticed have been fixed. Thanks for the reports!\n\n 347160 2023-09-22 Steredenn 2.6.0: Incoming Transmission https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/5219165352627082334\nHello!\n\nYou were probably not expecting an update, but here it is! 🚀\n\n[h1]Features[/h1]\n[list]\n[*] Add Basque translation\n[*] Add a proper ending\n[*] Add an \"easy\" mode: It's not going to be super easy, despite the name \"Space Tour\", but it should allow more people to enjoy the game: more damages, more lives, slower bullets, more invincible time, slower bosses. Leaderboards are now split by difficulty. You can select the difficulty before starting a new solo or coop game. Arena and Daily runs will are locked in Normal. ALl unlocks and achievements are available in the easy mode.\n[*] New keyart/capsules\n[/list]\n\n[h1]Balances[/h1]\n\n[h2]Red Baron[/h2]\n[list]\n[*] add middle shot to spread\n[*] up laser dmg\n[*] +1 HP\n[/list]\n\n[h2]Game[/h2]\n[list]\n[*] Drop medikit before a boss after level 4 (Normal mode)\n[/list]\n\n[h2]Bosses[/h2]\n[list]\n[*] Nerf bomber MK1 very, very slightly\n[*] Nerf Battleship (first pattern)\n[/list]\n\n[h1]Bug fixes/technical stuffs[/h1]\n[list]\n[*] Use engine pixel perfect camera instead of a custom one (so we have a perfect ratio!)\n[*] Remove weird resolution tricks\n[*] Add discord link to menu\n[*] Update unity runtime and .NET version\n[*] Settings: allow fine tuning of camera shake value\n[*] Fix destroyer MK2 looping sound\n[/list]\n\nHave fun with the game!\n\n— Steredenn’s team.\n\n 347160 2019-10-21 Beyond the Galactic vortex https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/2404285581876081949\nGalactic warriors, mighty space pirate crushers.\n\nThe time has come again to battle along with your friends and loved ones against the pirates invasion.\n\nThanks to the new Steam feature \"Remote Play Together\" ([url=https://steamcommunity.com/games/593110/announcements/detail/3032537193879549687]more info here[/url]), you can now test your friendship, but at a safe distance.\n\nExperience chaos, destruction, frenetic action together ... but beware of the single lifebar!\n\nMay you win this battle for eternity.\n\nOut.\n\n\n— Steredenn’s team.\n\n 347160 2019-01-11 Steredenn 2.5.0: Enigma Machine https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/2711631078217758158\nHello,\r\n\r\nWe found a few bugs in the Daily Run and for some rarer screen aspect ratios. 💥 Boom, fixed. Done. Good job everyone. 🙏\r\n\r\n[h1]Features[/h1]\r\n[list]\r\n[*] Add more variety to Daily Run configurations.\r\n[*] Increase the chances to have the Fortress, Fury, Specialist or Red Baron in Daily Run configurations.\r\n[/list]\r\n[h1]Bug fixes/technical stuffs[/h1]\r\n[list]\r\n[*] Fix a bug with the Red Baron and Specialist in Daily Run.\r\n[*] Fix a bug with portrait resolutions (e.g. 1080x1920).\r\n[/list]\r\n\r\n— Steredenn’s team.\n\n 70300 2021-08-31 VVVVVV 2.3 out now! https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/4018887653998925108\nHey everyone! I am super proud to announce VVVVVV 2.3, the first major update to the game in seven years!\n\n[img]{STEAM_CLAN_IMAGE}/3949770/6fd3b53f6963bf0faca25d15452630b21663754a.png[/img]\n(Adorable fan art by Cheep! Check out more of their work [url=https://twitter.com/CheepThePeanut]on Twitter[/url]!)\n\nThis release was made possible as a direct result of making the game's source code available last year, and accepting contributions from the community. It's the result of [i]nearly 2000 commits[/i] to the codebase, fixing hundreds of small bugs and making the game run at its best on modern computers. A really big thanks to all of our contributors for helping to make this happen - [i]especially[/i] Ethan Lee and [i]especially especially[/i] InfoTeddy, who contributed the vast majority of the fixes to this version.\n\nI'll link the complete changelog below, but the highlights are:\n[list][*]60+ FPS support\n[*]Improved graphical options\n[*]New features in the editor\n[*]Hundreds of bug fixes\n[/list]\n[url=https://vsix.dev/wiki/Version_2.3]For the complete change log, see here![/url] Enjoy the update!\n\n 1094870 2025-11-19 Engine Upgrade https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1816849002007789\n- Upgraded to newer version of game engine\n\n 242680 2025-12-05 Update #100 - 10 year anniversary - December 5th, 2025 https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1818118366177392\n[p]Nuclear Throne launched 10 years ago, can you believe it?[/p][p]And today is the day we bring you Update 100![/p][p][/p][p][img src=\"{STEAM_CLAN_IMAGE}/5197250/7f69f985d2e088ca93ca6ae7792fcf62faccd47e.png\"][/img][/p][p]The gang got back together, with Jan Willem Nijman, Paul Veer, Jukio Kallio, Joonas Turner, and Justin Chan, as well as YellowAfterlife (and a secret little feature for Doseone) to bring you what might just be the biggest and baddest update in Nuclear Throne History! At least it's the one that took the longest![/p][p][/p][p]Now here's what you've been waiting for, the changelog:[/p][list][*][p]A thirteenth character: [b]Cuz [/b]is not afraid to show his emotions, with a Cry ability that tears through enemies and projectiles alike. Oh, and he gets to carry 3 (three) weapons.[/p][/*][*][p][b]Custom mode,[/b] allowing you to modify Nuclear Throne to your liking, create unique runs and challenges, and to get to know the game better than ever before.[/p][/*][*][p]New unlockable [b]C-skins[/b] for every character (and new achievements for these).[/p][/*][*][p]Localization for [b]15 languages[/b]: English, French, Italian, German, Spanish, Polish, BR Portuguese, Russian, Korean, Simplified Chinese, Traditional Chinese, Japanese, Ukrainian, Turkish, & Dutch. Tell your friends around the world![/p][/*][*][p]The game now supports up to [b]4 player local co-op[/b].[/p][/*][*][p]Co-op reviving has been reworked and now works with Revive Chests.[/p][/*][*][p]Co-op Ultra Mutations have been slightly changed to work with 2-4 characters.[/p][/*][*][p]Reworked and re-organized the settings menu.[/p][/*][*][p]The game now runs at [b]60+ fps[/b] (but 30 is still supported for the true believers).[/p][/*][*][p][b]Widescreen[/b] support.[/p][/*][*][p]New side art and a new cursor.[/p][/*][*][p]Open Mind has been buffed a little.[/p][/*][*][p]Mutations and weapons in the HUD now show information on hover.[/p][/*][*][p]The GO button in the menu has been replaced with a cool little icon. This was done [strike]to save money on localization[/strike] so that we could fit Cuz in![/p][/*][*][p]We are now Steam Deck™ Verified.[/p][/*][*][p]Updates Mac build to run on 64-bit devices including Apple Silicon.[/p][/*][*][p]Gamepads should work better, especially on computers with a bunch of them connected.[/p][/*][*][p]Community leaderboards site [url=\"https://thronebutt.com/daily\"]Thronebutt[/url] has gotten a beautiful overhaul![/p][/*][*][p]Many more little fixes and quality of life changes that you might already know from the beta branch. Full changelog can be found [url=\"https://github.com/YAL-Game-Tools/bits-of-nuclear-throne/blob/main/Changelog.md\"]here[/url].[/p][/*][*][p]We forgot to add any secrets. Sorry.[/p][/*][/list][p][/p][p]Oh, and don't forget to get your hands on a [url=\"https://www.makeship.com/products/y-v-plushie\"]Y.V. plushie[/url]![/p][p][/p][p]We sincerely hope you love this update as much as we loved making it! Happy Throning.[/p][p]-JW[/p][p][/p][p][img src=\"{STEAM_CLAN_IMAGE}/5197250/d555daae880d0ea4266ca4db61088ac9c02beeef.png\"][/img][/p][p][/p]\n"}
I’ve found several documented cases close to the question: Sylvio after about 4.9 years, Steredenn after about 4.7 years, and Crypt of the NecroDancer after 1,721 days. Audiosurf supplies a five-year case with smaller changes; Nuclear Throne and VVVVVV supply longer-gap examples.
There’s also a useful technical result: Steam’s date filters appear to work for review retrieval. I’m checking them against SNKRX’s already collected history so we can measure the relevant windows directly instead of downloading every review those games have ever received.
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/late-updates...)
Script completed
Wall time 1.4 seconds
Output:
{}
{"chunk_id":"ef2f43","wall_time_seconds":1.001484338,"session_id":98406,"original_token_count":0,"output":""}
{"chunk_id":"284f81","wall_time_seconds":0.000004087,"exit_code":0,"original_token_count":5,"output":"news records 2751\n"}
[Think]
**Tuning update-candidate filters**
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport pandas as pd,re\n...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"948a39","wall_time_seconds":0.000004209,"exit_code":1,"original_token_count":30,"output":"Traceback (most recent call last):\n File \"<stdin>\", line 2, in <module>\nModuleNotFoundError: No module named 'pandas'\n"}
{"chunk_id":"a865d8","wall_time_seconds":0.000004987,"exit_code":0,"original_token_count":48,"output":"{\n \"returned\": 118,\n \"summary\": 118,\n \"pages_after_first\": [\n 18,\n 0\n ],\n \"all_dates_in_range\": true,\n \"existing_history_count\": 118,\n \"new_ids\": [],\n \"missing_old_ids\": []\n}\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nfrom pathlib import Path\n...)
Script completed
Wall time 0.9 seconds
Output:
{"chunk_id":"784abe","wall_time_seconds":0.774045407,"exit_code":0,"original_token_count":3442,"output":"Warning: truncated output (original token count: 3442)\nTotal output lines: 134\n\nRANDOM FRAME TITLES\nSATAZIUS; Serious Sam Double D XXL; F.E.A.R.; Sylvio; Eryi's Action; Game Dev Tycoon; Isotiles - Isometric Puzzle Game; Higurashi When They Cry Hou - Ch.3 Tatarigoroshi; Valley; Nancy Drew®: Trail of the Twister; Tomb Raider II (1997); Sonic Adventure DX; Richard & Alice; Imperial Glory; Hand of Fate; Riptide GP: Renegade; Sudoku Universe / 数独宇宙; Sword Art Online: Fatal Bullet; Worms Crazy Golf; Kung Fu Strike - The Warrior's Rise; Amnesia: The Dark Descent; GIGANTIC ARMY; Turbo Pug; Titan Souls; ARCADE GAME SERIES: Ms. PAC-MAN; Slice, Dice & Rice; Lucy -The Eternity She Wished For-; Inversion™; Painkiller Hell & Damnation; Max Payne; The Secret Order 2: Masked Intent; The Yawhg; Dust: An Elysian Tail; Achievement Lurker: Respectable Accomplishment; True Fear: Forsaken Souls Part 1; The Escapists 2; Puzzler World; Solar 2; Supreme Commander: Forged Alliance; Sid Meier’s Ace Patrol; Tallowmere; Men of War: Assault Squad 2; Need to Know; Sword and Fairy 5; House Party; King Arthur II: The Role-Playing Wargame; Rock of Ages; Guns of Icarus Online; Etherlords; Abyss Odyssey; Kerbal Space Program; Celestial Crossing; Scalak; Dragon Cliff; Greed: Black Border; Botanicula; Just Cause 2; Freespace 2; Knightmare Tower; The Walking Dead: Season Two; Amber's Airline - High Hopes; Cursed; Day of Infamy; English Country Tune; The Dream Machine: Chapter 1 & 2; BioShock® 2; ALPAGES : THE FIVE BOOKS; Ys I & II Chronicles+; Rising World; Blitz Breaker; The Crown of Leaves; Battle Chasers: Nightwar; The Cursed Crusade; Syberia II; The Walking Dead; Summoner; Meltdown; Deus Ex: Human Revolution - Director's Cut; Venture Kid; Shio; SUPERHOT; Check vs Mate; Primal Carnage; XCOM: Enemy Unknown; Avoid - Sensory Overload; Human Resource Machine; Watch_Dogs™; A Front Too Far: Normandy; Might and Magic: Heroes VII – Trial by Fire; SteamWorld Dig 2\n\nCANDIDATES\n appid name gap previous prev_date next next_date\n 57300 Amnesia: The Dark Descent 6.628337 Smallish update - Total conversion mods fix 2016-10-15 Update notes for June 2 2023-06-02\n209080 Guns of Icarus Online 4.457221 Hotfix 2.0.20 (695) 2020-10-23 An Update from the Muse Games Team 2025-04-08\n362860 Sylvio 4.845996 Update - Achievement glitch 2017-08-31 SYLVIO UPDATE 2022-07-06\n626690 Sword Art Online: Fatal Bullet 5.314168 August 2019 Patch Update 2019-08-28 SWORD ART ONLINE Fractured Daydream Demo Version Released 2024-12-20\n\nEXPLICIT LONG GAP TEXT\n362860 2022-07-06 SYLVIO UPDATE [b]Important stuff first:[/b]\n\n[list]\n[*] Added the ability to Run.\n[*] Added Custom Key Binding.\n[*] Rearranged the gameplay in the second level, to make it more intuitive.\n[*] Took away the combination lock function on all lockers. I've always seen it as a feature creep, and it makes the game unplayable for deaf players. \n[*] Killed some long-living bugs. \n[*] Various cosmetica.\n[/list]\n\nIt's been five years since the last update. The release of Sylvio 2 caused me to burn out of gamedev I got back into working as a freelance composer, I co-founded an environmental startup, coded some apps. In 2021 I dipped my toe into gamedev again, with a project called Guidance.\n\nIn the beginning of 2022, I got invited to join the Dread X Collection 5, a horror game collection put together by Dread XP. I had roughly two months to put together a game with a playtime of 45 minutes. \nMan, it was so intense, to just go from scratch zero to finished project in that short amount of time, but it was an amazing experience.\n\nYou can get the collection here. The game I made is called KARAO.\n\n[url=https://store.steampowered.com/app/1899810/Dread_X_Collection_5/]https://store.steampowered.com/app/1899810/D\n440420 2018-11-02 True Fear: Forsaken Souls Part 2 is finally here! After almost five years in development, True Fear: Forsaken Souls Part 2 is finally here! Thank you for your support and your patience!\r\nWhile we are starting work on Part 3 (making sure not to repeat the same fiasco), let us know what you liked and disliked about the game.\r\nWe are also working on a story intensive Extra Episode for Part 2 that will should narrow down the number of working theories to just a few!\n641990 2017-08-22 The Escapists 2 is available now! [img]http://cdn.akamai.steamstatic.com/steamcommunity/public/images/clans/29624581/c8f5fa18592171da02c0ce0f5b14156d31887c6f.gif[/img]\r\nHi everyone!\r\n\r\nThe Escapists 2 has now launched globally across Steam (PC, Mac and Linux), PS4 and Xbox One! We’re already seeing a ton of great escapes and cool gameplay moments from all of you, and we can’t wait to see where else we – with your help – can take the game going forward!\r\n\r\nOn top of the great response from all of our players, we’ve already seen some great reviews from media, including\r\n[url=http://www.thesixthaxis.com/2017/08/22/the-escapists-2-review/]9/10 from Sixth Axis[/url]\r\n[url=http://www.trustedreviews.com/reviews/the-escapists-2]4/5 from Trusted Reviews[/url]\r\n[url=https://www.gamingnexus.com/Article/5437/The-Escapists-2/]8.5/10 from Gaming Nexus[/url]\r\n\r\nWhether you’re an experienced, new or even future escapist, there’s no better way to get in the mood of escaping virtual prisons than with a launch trailer:\r\n\r\nhttps://www.youtube.com/watch?v=AuqQEfOueSA\r\n\r\nIn case you missed it, The Escapists 2 supports 1-4 player local and online drop-in/drop-out co-op and versus modes. To those looking for fellow escapists to aid – or c\n611790 2022-07-16 House Party is out of Early Access and the Female Player is live! [img]{STEAM_CLAN_IMAGE}/29297549/bd16087adce5b6a2d1f630c4220b1e13eb3c17d0.png[/img]\n\nAfter five years of development, our passion project is final…442 tokens truncated…he’s still happy to help you find your way around the party!\n- We added and adjusted LOADS of dialogue and responses for a bunch of characters to smooth out gameplay for the female player across the entire Original Story. The characters most affected by these changes are Brittney, Derek, Madison, Rachael, and Vickie, but almost every character has something new for you to discover!!\n- We updated almost all of the romance scenes in the game to work with the female player, including dialogue and context, and redesigned much of the hookup logic to provide a more fulfilling experience \n611790 2022-06-22 House Party is Exiting Early Access on July 15th! After five years of development, House Party is leaving Steam Early Access on July 15th!\n\nThis is a huge milestone, and we’re stoked to finally be releasing the game after so many years of hard work. \n\n[img]{STEAM_CLAN_IMAGE}/29297549/41f103180e9a43eadf5d6e0cb2e229aea57692b4.png[/img]\n\nAt that point, the female player will be live and House Party will be a complete game, but we still have more to add - including her steamy threesome cutscenes, quality of life updates, VR, House Party DLC expansion packs (like this fall's Doja Cat DLC), and more!\n\nWe’re also planning a sequel to House Party, called Office Party, which we’ll start developing soon!\n\nWant to learn more? Read the full announcement: [url=https://www.gamespress.com/The-wildest-party-in-games-gets-even-wilder-as-House-Party-officially-]https://www.gamespress.com/The-wildest-party-in-games-gets-even-wilder-as-House-Party-officially-[/url]\n\nWishlist the Doja Cat DLC: https://store.steampowered.com/app/1648810/House_Party__Doja_Cat_Expansion_Pack/\n\nAnd, don't forget, the Steam Summer Sale starts soon! This will be our biggest sale for a while (50% off the base game and 69% off the explicit DLC), so be sure to get House Party \n611790 2020-08-31 House Party 0.17.3 (The Derek Update) Is Released! [img]{STEAM_CLAN_IMAGE}/29297549/fc3231bb137535ee562e1884c568c80aa38e1bb3.png[/img]\n\nIt's time, buddy. The new Derek update is here! House Party Version 0.17.3 is now live and in it is a ton of new content to explore and enjoy. This update is packed with some sweet new game mechanics and plenty of polish to keep your game experience clean and enjoyable.\n\nThis new release is all about spreading some love to our buddy Derek. We've expanded his storyline with awesome new content and added two brand new Opportunities and Achievements, one of which results in a full, repeatable, and very steamy intimacy reward.\n\nWe've also added more opportunities for getting your hands on booze around the party. Frank and Leah have had a major rework of their alcohol behaviors and we made it so all the booze in the liquor cabinet can now be interacted with.\n\n[img]{STEAM_CLAN_IMAGE}/29297549/d34593165ec5ffe2498aaf925a8c9cf1d9414ad7.png[/img]\n\nAlso in this update, Derek, Patrick, and Vickie all have had wardrobe revamps, so if you see them around the party they may look a little snazzier. Enjoy seeing the three of them with some extra style!\n\nAwesome new quality of life changes come with this update, too\n220200 2019-02-14 KSP Loading...KSP Enhanced Edition is getting some love [img]https://steamcdn-a.akamaihd.net/steamcommunity/public/images/clans/4463399/22dc74849d2f4cd732ff30c917eee4a928fd666a.png[/img]\r\nWe are sad to hear that after 14 years and 293 days (55 times longer than its planned lifetime) exploring the surface of Mars, Opportunity has ceased operations. So long, little explorer! On the bright side, [i]KSP Loading…[/i] is back with fresh news and updates! Do you want to learn about all the current developments of KSP? Here’s the place to be, so let's get started!\r\n\r\n[h1]KSP Enhanced Edition[/h1]\r\n\r\nYou’re reading correctly, [i]KSP Enhanced Edition[/i] is the first item in this issue of [i]KSP Loading…[/i]! It’s been a while since our last update to KSP on consoles, but we’ve had something very special for you in the making, and we’re thrilled to finally shed some light and reveal all the juicy details you’ve been craving for!\r\n\r\nFor a while now, we have been working hand in hand with [i][url=https://www.blitworks.com/home/]BlitWorks[/url][/i] on a console-optimized free update for [i]KSP Enhanced Edition[/i], as well as its first DLC: [i]The History and Parts Pack[/i]!\r\n\r\nReleasing on the same day, both the [i]History and Parts Pack[/i] and th\n858760 2024-09-01 MAZAICA Is Out - Go and draw some lines! Hey fam,\n\nYup. After 5 years I've finally released new game. It's been a wild ride, but I hope you'll really enjoy this one!\n[url=https://store.steampowered.com/app/1964420/MAZAICA/]Go MAZAICA on Steam[/url]\n\nHave fun,\nCheers\nYours, Hamster\n322500 2018-01-11 SUPERHOT: MIND CONTROL DELETE-Mirror Update [b] The following is an update for MIND CONTROL DELETE, the Early Access standalone expansion to the original SUPERHOT. Check it out [url=http://store.steampowered.com/app/690040/SUPERHOT_MIND_CONTROL_DELETE/] HERE\t[/url] [/b]\r\n\r\n\r\nHey there\r\n\r\nFinally here it is. Very first update for MIND CONTROL DELETE!\r\nLet’s get right to it and see what’s in store.\r\n\r\n[h1]Gameplay:[/h1]\r\n\r\n[list]\r\n[*]Four new levels (Desperados Bar, Lab, Office, Oil Rig)\r\nIf you’ve played SUPERHOT before you might recognise some of them.\r\nThey have been “refreshed” for MCD. We tweaked some covers, sprinkled it with new throwables and fixed spawning points. \r\nAlso, on a side note, Oil rig is a level that some of you might recognise from SUPERHOT VR.\r\nThis fella went through a lot of redesigning. From endless level through VR to finally finishing in MCD where it should be. There is a different \"feel\" about him but you have to check it out yourself.\r\n\r\n[img]http://cdn.edgecast.steamstatic.com/steamcommunity/public/images/clans/31387534/c1cebe41dacf7a53cd932466e9aacc3b5868c373.jpg[/img]\r\n\r\n[img]http://cdn.edgecast.steamstatic.com/steamcommunity/public/images/clans/31387534/193b94037b2605a09ef4ef0ff18d96926174dadc.\n"}
[Think]
**Checking GDT title rows**
[Think]
**Checking GDT title rows**
[Think]
**Checking GDT title rows**
**Checking sample coverage**
[Think]
**Checking GDT title rows**
**Checking sample coverage**
[Think]
**Checking GDT title rows**
**Checking sample coverage**
**Selecting matched controls**
[Think]
**Checking GDT title rows**
**Checking sample coverage**
**Selecting matched controls**
[Think]
**Checking GDT title rows**
**Checking sample coverage**
**Selecting matched controls**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/late-updates...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"515ba1","wall_time_seconds":1.000709466,"session_id":50195,"original_token_count":0,"output":""}
[Think]
**Preparing event matches**
[Think]
**Preparing event matches**
[Think]
**Preparing event matches**
**Compiling update-audit data**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/late-updates-2026-09-07/review_collection.log; ...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"b95889","wall_time_seconds":0.284265714,"exit_code":0,"original_token_count":2661,"output":"{\"appid\": 362860, \"name\": \"Sylvio\", \"collected\": 13, \"summary_total\": 13, \"total_so_far\": 13}\n{\"appid\": 347160, \"name\": \"Steredenn: Binary Stars\", \"collected\": 63, \"summary_total\": 63, \"total_so_far\": 76}\n{\"appid\": 241600, \"name\": \"Rogue Legacy\", \"collected\": 1801, \"summary_total\": 1801, \"total_so_far\": 1877}\nSNKRX mention matches 245 all records 4197\n\n 231814015 2026-08-01 positive True\nThis isn't a fun game, but this is a good game though.\r\n\r\nI've been stuck on NG+2 for 5 runs consisting of 10hrs of gameplay.\r\nIf you're looking for a roguelike, maybe rather go look at Brotato or soulstone survivors.\r\nCurrently this is missing the \"Rewrite update\" that the creator was going to make, but then cancelled it.\r\nAnd because of that there are some \"design flaws\" that make the game a lot more dependent on RNG. So there is no way to \"force\" a build or good items. Yes there is rerolls, but in early game there is so low money that it doesn't matter leading to losing in ~round 10-15\r\n\r\nThere are no ways to know what the NG+ difficulty does to enemies etc.\r\nSome relics/items are way better than others, leading to getting trash items and then having no money cause you spent it all on rerolls.\r\nThis game feels a lot more RNG than other autobattler games, though there is some skill involved in the levels. Dodging projectiles, collecting health and money.\r\nI was going for 100%, but it started getting frustrating losing every run at NG+2.\r\n\r\nI recommend you at least try this game for 2-4 runs.\r\nBut if you're going for 100% then... yeah.\n\n 227275117 2026-06-05 positive True\nThis game is less than $5. If you like rougelikes, then I think you should check it out. The music is charming, the graphics are very simple, I didn't find any bugs while playing and it kept me entertained for almost 30 hours. (I 100%-ed the game). Unfortunately there won't be any more updates for this game as stated by the developer in back 2022.\n\n 222726597 2026-04-07 positive True\nGreat game for such a low cost, shame it doesnt get updates anymore\n\n 222663377 2026-04-06 positive True\nUnbelievably fun and addictive game. It's a shame it didn't get the continued support and updates that I think it deserved.\n\n 214458841 2025-12-28 positive True\nthis game is so fun, is kinda genius in a way, I think the creator should launch more updates\n\n 201669918 2025-08-07 positive True\nGame will no longer be updated; It is, however, completely free on GitHub, source code and all.\n\nFun, but certainly glitchy. Mobile version is buggier.\n\n 196695622 2025-06-08 positive True\nGood game, but no updates\r\n\n\n 196115533 2025-06-01 positive True\nA single-dev game about interactive autochess. \n\nI love this game and am sad (though fully understand why) that the final overhaul update was dropped. Great game, definitely worth the money -- my \"value goal\" for games is always about $1 per hour of gameplay, and this game more than fulfills that.\n\n 188210820 2025-02-18 positive False\nUnderdeveloped Abandoned game. Really neat concept but you see what all the game has to offer within the first 2 hours of playtime. If it was more furbished and the developer wasnt MIA this would be a positive review and I wouldnt have refunded the game. Great concept, bad execution.\n\n 186448731 2025-01-26 positive False\nthis game feels like something fresh off the itch.io griddle, like, this is an idea of a game. Not a game. despite the updates it's gotten it feels like the dev just polished a demo. I feel like the game should straight up be free? dev is also not working on it anymore, so in its current state i gotta say just skip this one.\n\np.s. the youtubers will enjoy it more than you because they get paid for it xD\n\n 179140515 2024-11-16 positive True\nI don't get the absurd amount of complaints this game gets.... Its cheap, has a simple mechanic (Snake with combat).\nGames are not forever, this game is complete and fun for the price point. Development has stopped and that is ok, devs are not beholden to eternal updates.\n\nGrab the game, have 5+ hours of fun gameplay, go eat something and that is it.\n\n 178267222 2024-11-02 positive False\nSNKRX was a fun game while it was being developed. Although the depth of mechanics is somewhat lacking, figuring out the puzzle of what works and what doesn't was compelling. Unfortunately the developer abandoned the game in early 2022 and in its current state the game is not worth the purchase. The developer does not seem likely to produce games in the future, which is a real shame.\n\n 177452826 2024-10-21 positive False\nThe orange enemies are really annoying and overpowered and one shot for no reason. Very, very obnoxious. I want to build a build and I get none of the classes I want because they are so rare, which is annoying. This game also just needs a workshop so it doesn't get stale, its legit made for that kind of thing, but doesn't have one??? \n\nUpdate: Sadly I learned the dev doesn't give a ♥♥♥♥ about this game and is letting it die off I guess over NFTs. Kinda sucks. It really sucks getting one shot by nonsense like the hard to see mines or the hard to see orange enemies, really ruins the experience when one of my units dies from something I can't see due to all the visual clutter.\n\nAll and all, game feels like a prototype. Just not enough to keep me playing IMO, really generic and has gotten stale for me, mainly due to the fact I can't go other builds because of the rarity of certain body segments and how builds like the sorcerer get one shot by the orange enemies.\n\n 176782432 2024-10-10 positive False\ngame is a scam. no more updates, not even worth money.\n\n 169949608 2024-07-15 positive False\nFrom time to time, the game for SOME REASON fails to pause when I open the PAUSE MENU (or whatever you want to call it). Legit got some of my runs killed just because of this fun little issue. It probably won't get fixed as the game seems to be abandoned, which most likely means that my review is going to stay negative forever.\n\n 160064066 2024-03-07 positive True\ncute game, sometimes I still hope it would get updated but oh well I wish all the best for the developer, it was really cool to see it get implemented with new stuff as it went. recommended if you like autochess type games and roguelikes\n\n 159815779 2024-03-04 positive False\nStraight up abandonware\n\n 158054318 2024-02-11 positive True\nIt's a fun little game by a good developer. It's like snake with tower defense. Quite fun!\nThere's not really any meta-progression, which is fine, not every game needs to have that. And the balance is definitely interesting, in that there's a lot of relics that can change things a LOT, but some base units just suck period (Host I'm looking at you).\nPerformance can be bad when you have too many swarmers (they span little critters that attack your enemies), but you need a somewhat specific build to really grind the game to a halt. It seems the pathfinding/AI is not built to scale well with more and more units.\nA SNKRX 2 with meta progression, better performance for pathfinding, and a \"survival\" mode where instead of stages you gain xp in an open environment, etc, etc. That's just a cheap way to add more content tbh.\nIf the dev is reading this, I like Bytepath too, but it was a lot thrown at the player at once. This game eases you in a lot better. I'm excited to see what you make next!\n\n 148286969 2023-10-15 positive False\nSehr cooles Konzept für kleines Geld, aber leider Abandonware.\nSNKRX ist Roguelike trifft Autochess trifft Snake und kann großen Spaß machen wenn es will. Nur will es das nicht immer.\n\nZu beginn eines Runs startet man, ganz wie bei Autochess im shop, investiert sein Geld in die ersten \"Helden\". SNKRX verwendet für diese klassische Rollenspielmetaphern, sie kommen in Klassen wie Kriegern, Schurken oder Heilern, haben Namen wie Assassine oder Juggernaut, verfügen eine automatisch ausgelöste Fähigkeit und werden nach Level und tier sortiert, wobei das Tier die \"Güte\" und das Level die Entwicklung der Einheit angibt. Letztere steigt durch wiederholtes kaufen, wer schonmal einen Autobattler anhatte kennt das Prinzip, genau so wie das Konzept des Klassenbonuses; Jede Klasse hat einen Zähler mit Meilensteinen, welche Boni freischalten können. Schurken erhalten die Fähigkeit Kritische treffer zu verursachen, Krieger nehmen mehr schaden und Söldner ermöglichen es Gegnern Geld fallen zu lassen etc. Der Clou: Anders als in den typischen Battlern repräsentieren diese Helden nicht automatisch kämpfende Einheiten, sondern die Fragmente einer Schlange, welche vom Spieler gesteuert wird. Ziel der Kampfrunden ist es gegen immer stärker werdende Wellen von Gegnern zu überleben, möglichst bis Welle\n\n 146068668 2023-09-10 positive True\ngood game,but there are 3 points i dislike\n1: even though I have 2 3 stars 4 costs,I can't make any mistakes,or I will die and restart,that taste so bad\n2:when someone is already 3 stars,I don't think it should be in the store anymore\n3:we need Chinese!please!中文快点端上来!\nHope you will continue to update this game!\n\n 143744577 2023-08-09 positive True\nfantastic little roguelite, lots of fun. music slaps unnecessarily hard, and the audio effects when you take damage and pause the game are a great addition. the synergies and possible builds are mostly simple, but different enough from one another to make the game quite replayable for me. i would love to see some more characters, and possibly some bigger levels. its an interesting concept i could easily sink another 85 hours into with some more expansion and more content. \nas someone who loves roguelikes and roguelites, this is a good one, with a fairly low time commitment, simple mechanics, and challenging enemies. i recommend to fans of the genre, and to people looking for a quick, entertaining, visually stimulating, reimagined version of a timeless classic\n\n 142829329 2023-07-26 positive True\nWhile it is unfortunate that the rework update got cancelled, I still think that this game is great.\n\nThere are tons of combo's to find and it is really fun to play even though it does get quite difficult after a while.\n\n 139167175 2023-05-28 positive True\nPrzyjemny i prosty rougelike z odrobiną ekonomii. Gra jest, krótka, w sam raz na krótkie sesje. Mam wszystkie osiągnięcia i już jej nie odpalam ale polecam każdemu, żeby samemu spróbować. Gra nie ma już wsparcia i słusznie, nie jest to jakieś wiecznie ciągnący się update tylko kompletna gra. Pobawiłem się i było fajnie. :)\n\n 136391074 2023-04-09 positive True\nReally fun concept and a good twist on snake games, could use more content IMO\n"}
[Think]
**Filtering recent SNKRX reviews**
[Think]
**Filtering recent SNKRX reviews**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -4 steam-research/late-updates-2026-09-07/review_collection.log; ...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"0e318f","wall_time_seconds":0.248366965,"exit_code":0,"original_token_count":157,"output":"{\"appid\": 347160, \"name\": \"Steredenn: Binary Stars\", \"collected\": 63, \"summary_total\": 63, \"total_so_far\": 76}\n{\"appid\": 241600, \"name\": \"Rogue Legacy\", \"collected\": 1801, \"summary_total\": 1801, \"total_so_far\": 1877}\n{\"appid\": 247080, \"name\": \"Crypt of the NecroDancer\", \"collected\": 2859, \"summary_total\": 2859, \"total_so_far\": 4736}\n{\"appid\": 12900, \"name\": \"Audiosurf\", \"collected\": 717, \"summary_total\": 717, \"total_so_far\": 5453}\n177 steam-research/late-updates-2026-09-07/requests.jsonl\n2024-09-01 2025-09-01 128 0.8359375\n2025-09-01 2026-09-01 87 0.8850574712643678\n2022 480 14\n2023 269 7\n2024 151 8\n2025 118 6\n2026 55 4\n"}
[Think]
**Checking current player count**
[Think]
**Checking current player count**
[Think]
**Checking current player count**
**Validating review-date filters**
[Think]
**Checking current player count**
**Validating review-date filters**
exec ({"code": "text(await tools.exec_command({cmd:\"tail -3 steam-research/late-updates-2026-09-07/review_collection.log; ...)
Script completed
Wall time 0.8 seconds
Output:
{"chunk_id":"ca8766","wall_time_seconds":0.000003061,"exit_code":0,"original_token_count":102,"output":"{\"appid\": 12900, \"name\": \"Audiosurf\", \"collected\": 717, \"summary_total\": 717, \"total_so_far\": 5453}\n{\"appid\": 70300, \"name\": \"VVVVVV\", \"collected\": 857, \"summary_total\": 857, \"total_so_far\": 6310}\n{\"appid\": 242680, \"name\": \"Nuclear Throne\", \"collected\": 2062, \"summary_total\": 2062, \"total_so_far\": 8372}\n12900.parquet\n241600.parquet\n242680.parquet\n247080.parquet\n347160.parquet\n362860.parquet\n70300.parquet\n"}
{}
{"chunk_id":"a5f738","wall_time_seconds":0.581631915,"exit_code":0,"original_token_count":214,"output":" name anchor pre90 post90 pre365 post365 late_to_pre_rate\n Sylvio first_public_update 3 0 10 3.0 0.398182\n Steredenn: Binary Stars first_public_update 8 14 32 31.0 0.705114\n Rogue Legacy first_public_update 121 237 802 623.0 1.125959\n Rogue Legacy stable_release 192 142 781 878.0 1.250797\nCrypt of the NecroDancer first_public_update 258 587 1301 1558.0 0.990609\n Audiosurf first_public_update 112 107 345 372.0 1.019499\n VVVVVV first_public_update 125 140 441 416.0 0.830674\n Nuclear Throne first_public_update 154 875 762 NaN 1.094495\n"}
[Think]
**Validating Rogue Legacy windows**
[Think]
**Validating Rogue Legacy windows**
**Comparing review-window results**
[Think]
**Validating Rogue Legacy windows**
**Comparing review-window results**
[Think]
**Validating Rogue Legacy windows**
**Comparing review-window results**
[Think]
**Validating Rogue Legacy windows**
**Comparing review-window results**
**Selecting matched controls**
[Think]
**Validating Rogue Legacy windows**
**Comparing review-window results**
**Selecting matched controls**
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Add File: /home/adn/a327ex/steam-research/late-updates...)
Script completed
Wall time 1.2 seconds
Output:
{}
{"chunk_id":"f54126","wall_time_seconds":1.002099621,"session_id":39848,"original_token_count":0,"output":""}
[Think]
**Checking pre-update counts**
[Think]
**Checking pre-update counts**
**Validating pre-update counts**
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport pandas as pd\nr='st...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"714b6e","wall_time_seconds":0.182871281,"exit_code":0,"original_token_count":1907,"output":" name anchor pre30 post30 pre90 post90 pre365 post365 post_current_positive_pct\n Sylvio first_public_update 1 0 3 0 10 3.0 66.666667\n Steredenn: Binary Stars first_public_update 2 9 8 14 32 31.0 90.322581\n Rogue Legacy first_public_update 35 116 121 237 802 623.0 90.990991\n Rogue Legacy stable_release 97 88 192 142 781 878.0 91.571754\nCrypt of the NecroDancer first_public_update 100 175 258 587 1301 1558.0 94.608472\n Audiosurf first_public_update 25 34 112 107 345 372.0 93.279570\n VVVVVV first_public_update 30 70 125 140 441 416.0 96.634615\n Nuclear Throne first_public_update 53 593 154 875 762 NaN 93.384615\n\nCASE Audiosurf screened 3\n63667889 True Just remembered this game thanks to an article about the new update! A lot of very fond memories with this one. I never really play the fancier modes, but I love the standard Mono gameplay. A really amazing way to experience all genres of music, if you've never tried it I highly recommend it.\n66544271 True Came back for the oldschool Ninja Mono mode and was not dissapointed.\nI love every bit of it.\nIf you are not as picky as me with the gamemodes go and buy Audiosurf 2 instead since it has better visuals.\nStill I can recommend it to anyone regardless since all of the modes in this particular one are really well crafted.\nBetter than in Audiosurf 2 in my opinion in that regard.\n\nCASE Crypt of the NecroDancer screened 44\n117960481 False after the big update, it crashes on launch for me. also on pc it only has 4 levels whilst on switch it has 5, no dlc on either platform.\n118003714 True The last update removed all my progress so now I get to re-experience the joys of unlocking things again\n\nEdit: Got my stuff back. Love the game regardless\n\nEdit 2: HOLY SYNCHRONY\n\n118058817 True Really Great Game. Just watch for patterns! Also update has been really been a good one! :D Please play this game!\n118069831 True Really an excellent Roguelite all around, very ahead of it's time when it came out in 2015 (7 years ago!) and only holds up better now that it's had many updates since it's launch. New 3.0.0 update came out of nowhere and added a metric [b]♥♥♥♥ load[/b] of QoL and there's a bunch of workshop mods. No idea why I haven't reviewed this positively yet in all the time I had it.\n118081255 True Has finally been patched to load off an SSD at speeds higher then Wing Commander on a 386SX/16\n\nCASE Nuclear Throne screened 89\n212637322 True Damn! A content update in THIS day and age?! I probably should have left a review a decade ago. I've been playing Nuclear Throne since the Greenlight pre-release (anyone remember greenlight?), and have multiple thousands of hours in this game (way more than it shows in my profile because progress was reset on official launch). I don't play EVERY day, but I do play MOST days. The daily challenge gives a great reason to return. While I exclusively play as Robot, there are loads of interesting characters, each with their own cool mechanics, so there's guaranteed to be a playstyle that matches your personality. Great art and sound design, CHALLENGING game play that makes you want to try again and again. Lacks a lot of the depth you tend to see in other rogue-likes, but the stripped down gamepl\n212644723 True Pretty good update for quality of play to have fun so far. Adds Custom options etc.\n212656919 True OK, where do I start? This game is crazy awesome, played between 300-400 hours, excluding Ultra (bought it for my new account when the update came out lol), and i still haven't tired of it. I'm not even gonna talk about Update 100 (which is WAY better than I anticipated), but with this game, you might have to play for 10 hours or so before it starts to grow on you, and don't think you'll be able to zip through and beat the game in the first few runs. I can't really say much that hasn't already been said, but if you're into roguelites, this game is a MUST HAVE.\n212671529 True 10 years and 100 updates later and the devs still come back to the game, would reccomend\n212677753 True it is a wonderfull game.... Fast runs, lots of guns, way to many deaths caused by own stupidity and THE BULLET HELL \\^-^/.... but pls can we get a 100.1 patch that fixes the issue of saveing game option :c ? \ni don't want to start each game start of with disableing boss intros before i start a run :/\n\n*edit not even 12 Hours after this review they fixed the Problem, Thanks Vlambeer, tell us when you open up a tripple A studio with such a passion :D\n\nCASE Rogue Legacy screened 15\n42892794 False This game is actually quite good. I played 107 hours of it.\n\nTHEN THEY CHANGED THE PACE. AND NOW EVERYTHING IS TOO FAST. So fast I get nauseous just watching the walk animation! I can't play it anymore!\n\nIts possible that updating my GPU made it faster, but why would I go back just to test the performance of ONE game?\n42950733 True with new update i can play 60 fps only can you fix it pls ?\n44172990 True It's fine. It hasnt aged terribly so its a blast to play even now.\nI got really bored after the 16 hours mark though.\n\nI think i finished this game some years ago so i came back to play it again and i wasnt disappointed by it.\n\nCASE Steredenn: Binary Stars screened 1\n147898619 True Steredenn is a completely randomized shoot-em-up game and feels like a breath of fresh air. The difficulty is neither unfair nor very forgiving, and it's regurlarly being updated. The pixel art is truly feast for the eyes, and music is not your regular futuristic electro music. Ready for some good old metal instead?\n\nRating: A\n\nCASE VVVVVV screened 7\n98595440 False didn't even update the 3ds version\n98789324 True VVVVVV is a short but memorable precision platformer that asks a deceptively simple question: What if, instead of jumping, the player flipped gravity to progress through the game?\n\nAs of writing this review I've...\n- beaten this game at least four different times (several of which took place in one sitting)\n- gifted it once\n- bought the soundtrack (which is really, really good I might add)\n\nThe game is just somehow so fun to play. It's hard, even after beating it four times, but checkpoints are all over the place. Thus, while it is hard, it's not terribly punishing (unless you go for the optional collectibles). It's just very satisfying to weave your way through the spikes and other hazards successfully. It's not a very long game (my first playthrough was roughly two hours long) but I pers\n98869203 True Amazing game. A must buy, an update recently released that brought it up to modern day standards.\n\nFor only $5, if you dont already own it you should buy it.\n99066126 True Why are you even reading this? The soundtrack is superb and the gameplay is really fun and rewarding. Yes, it is challenging at times (well, most of the time), but it's very satisfying when you do persevere. I keep returning to VVVVVV every couple of years and it has never lost its appeal - which is, in and of itself, a true feat, especially for a platformer.\n\nJust do yourself a favour and buy it. :v\n99778987 True A fun platformer with a iconic look and mechanic, thank you so much for the 2.3 update.\nThis game looks so sexy on my 144hz monitor.\n"}
exec ({"code": "text(await tools.write_stdin({session_id:39848,chars:\"\",yield_time_ms:1000,max_output_tokens:1500}));\nte...)
Script completed
Wall time 0.0 seconds
Output:
{"chunk_id":"9ef7bc","wall_time_seconds":0.0000019,"exit_code":0,"original_token_count":637,"output":" event_name control_name pre365 pre90 post90\n Sylvio Catch a Falling Star 9 3 2\n Sylvio QuiVr 12 1 2\n Sylvio The Light Keeps Us Safe 11 2 2\n Sylvio Warcube 15 3 4\n Sylvio Welcome to Bummertown 8 0 0\n Steredenn: Binary Stars Make America Great Again: The Trump Presidency 33 11 12\n Steredenn: Binary Stars Quadrilateral Cowboy 39 13 15\n Steredenn: Binary Stars Voidspire Tactics 23 6 1\n Steredenn: Binary Stars The Signal From Tölva 28 9 6\n Steredenn: Binary Stars Robot Roller-Derby Disco Dodgeball 44 7 7\n Rogue Legacy Reus 630 274 76\n Rogue Legacy Robot Roller-Derby Disco Dodgeball 281 37 39\n Rogue Legacy Renowned Explorers: International Society 279 30 25\nCrypt of the NecroDancer Factory Town 1180 129 120\nCrypt of the NecroDancer EARTH DEFENSE FORCE 5 1202 280 320\nCrypt of the NecroDancer Dictators:No Peace Countryballs 1270 342 341\n VVVVVV Reus 220 44 36\n Nuclear Throne EARTH DEFENSE FORCE 5 558 133 117\n Nuclear Throne Superfighters Deluxe 305 60 70\n Nuclear Throne Dictators:No Peace Countryballs 358 64 74\n{'appid': 362860, 'name': 'Sylvio', 'old_pre90': 4, 'old_post90': 2}\n{'appid': 347160, 'name': 'Steredenn: Binary Stars', 'old_pre90': 5, 'old_post90': 6}\n{'appid': 241600, 'name': 'Rogue Legacy', 'old_pre90': 148, 'old_post90': 207}\n{'appid': 247080, 'name': 'Crypt of the NecroDancer', 'old_pre90': 409, 'old_post90': 333}\n{'appid': 12900, 'name': 'Audiosurf', 'old_pre90': 95, 'old_post90': 34}\n{'appid': 70300, 'name': 'VVVVVV', 'old_pre90': 119, 'old_post90': 95}\n{'appid': 242680, 'name': 'Nuclear Throne', 'old_pre90': 151, 'old_post90': 211}\n"}
{"chunk_id":"d688d8","wall_time_seconds":0.000003193,"exit_code":0,"original_token_count":618,"output":"total 7444\ndrwxr-xr-x 1 adn adn 38 Sep 7 13:03 __pycache__\n-rw-r--r-- 1 adn adn 3858 Sep 7 13:20 analyze.py\n-rw-r--r-- 1 adn adn 1634715 Sep 7 13:23 cached_control_reviews.parquet\n-rw-r--r-- 1 adn adn 242 Sep 7 13:23 collect_control_news.py\n-rw-r--r-- 1 adn adn 428 Sep 7 13:03 collect_news.py\n-rw-r--r-- 1 adn adn 2281 Sep 7 13:15 collect_windows.py\n-rw-r--r-- 1 adn adn 0 Sep 7 13:24 collection.lock\n-rw-r--r-- 1 adn adn 294 Sep 7 13:03 collection_policy.json\n-rw-r--r-- 1 adn adn 2237 Sep 7 13:23 control_candidates.csv\n-rw-r--r-- 1 adn adn 244 Sep 7 13:24 control_news.log\n-rw-r--r-- 1 adn adn 160 Sep 7 13:11 date_filter_validation.json\n-rw-r--r-- 1 adn adn 12863 Sep 7 13:20 event_months.csv\n-rw-r--r-- 1 adn adn 2407 Sep 7 13:20 event_results.csv\n-rw-r--r-- 1 adn adn 3841 Sep 7 13:15 events.csv\n-rw-r--r-- 1 adn adn 5479 Sep 7 13:15 events.json\n-rw-r--r-- 1 adn adn 6186 Sep 7 13:06 initial_gap_candidates.json\n-rw-r--r-- 1 adn adn 2333 Sep 7 13:03 net.py\ndrwxr-xr-x 1 adn adn 2622 Sep 7 13:24 news\n-rw-r--r-- 1 adn adn 7763 Sep 7 13:06 news_collection.log\n-rw-r--r-- 1 adn adn 5505817 Sep 7 13:11 news_inventory.csv\n-rw-r--r-- 1 adn adn 7278 Sep 7 13:03 news_sample.csv\n-rw-r--r-- 1 adn adn 144890 Sep 7 13:03 news_sample.parquet\n-rw-r--r-- 1 adn adn 1972 Sep 7 13:23 prepare_controls.py\n-rw-r--r-- 1 adn adn 3460 Sep 7 13:15 prepare_events.py\n-rw-r--r-- 1 adn adn 1181 Sep 7 13:10 probe_dates.py\ndrwxr-xr-x 1 adn adn 154 Sep 7 13:11 probes\n-rw-r--r-- 1 adn adn 4729 Sep 7 13:12 random_gap_candidates.csv\n-rw-r--r-- 1 adn adn 103818 Sep 7 13:24 requests.jsonl\n-rw-r--r-- 1 adn adn 734 Sep 7 13:18 review_collection.log\ndrwxr-xr-x 1 adn adn 2812 Sep 7 13:18 review_pages\ndrwxr-xr-x 1 adn adn 150 Sep 7 13:18 review_status\ndrwxr-xr-x 1 adn adn 192 Sep 7 13:18 review_windows\n-rw-r--r-- 1 adn adn 54342 Sep 7 13:20 screened_post_update_reviews.parquet\n-rw-r--r-- 1 adn adn 1185 Sep 7 13:23 seasonal.py\n-rw-r--r-- 1 adn adn 225 Sep 7 13:24 seasonal_comparisons.csv\ndrwxr-xr-x 1 adn adn 594 Sep 7 13:24 seasonal_summaries\n-rw-r--r-- 1 adn adn 133 Sep 7 13:20 snkrx_baseline.csv\n-rw-r--r-- 1 adn adn 17471 Sep 7 13:20 snkrx_update_mentions.csv\n-rw-r--r-- 1 adn adn 1075 Sep 7 13:03 spec.json\n-rw-r--r-- 1 adn adn 1192 Sep 7 13:07 target_news.log\n-rw-r--r-- 1 adn adn 1700 Sep 7 13:11 verify_dates.py\n"}
The evidence so far separates two outcomes: a late update can clearly please existing players and bring people back, but even the strongest review spikes often settle near the game’s previous pace. I’m checking seasonal effects and comparable games before drawing the conclusion for SNKRX.
exec ([memory: sealed target])
[sealed content withheld: memory]
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport pandas as pd,json...)
Script completed
Wall time 1.9 seconds
Output:
{"chunk_id":"037d6d","wall_time_seconds":0.000003111,"exit_code":1,"original_token_count":30,"output":"Traceback (most recent call last):\n File \"<stdin>\", line 2, in <module>\nModuleNotFoundError: No module named 'pandas'\n"}
VVVVVV 2.3 out now – distractionware (https://distractionware.com/blog/2021/08/vvvvvv-2-3-out-now/)
citeturn15search0 [wordlim: 200] Published: 5.0 years ago; Crawled: last month; # VVVVVV 2.3 out nowPosted in VVVVVVBy Terry Aug 31, 2021
# VVVVVV 2.3 out now
Posted in VVVVVV
By Terry Aug 31, 2021
Hey everyone! I’m back in London!
I’m gonna write a little blog post sometime soon about what I’m up to these days, and what I’m planning in the near future. Before all that, though, here’s a quick update about something exciting that’s happening today – it’s the first update to VVVVVV on PC in seven years!
Image
(Adorable fan art by Cheep! Check out more of their work on Twitter!)
I mentioned this update on twitter a little while back – we’ve been in beta for a while now, and it’s feeling pretty solid, so it’s time to make it official! The full 2.3 changelog is *immense* (you can read it here), but roughly speaking, the update adds:
* 60+ FPS support
* Improved graphical options
* New features in the editor
* Hundreds of bug fixes
This update is as a direct result of making the source code available last year, and accepting source contributions. I’ve personally added very, very little to this update – which is something that I feel maybe a little anxious about! But I’ve been very careful to make sure that every change is something I was happy with, and that none of the changes to the game were doing anything other than making this the best version of the 2010 game. I’m extremely grateful to everyone who contributed to that – especially – and I really can’t overstate this, especially InfoTeddy, who did by far and away the most to make this happen. (She recorded a little song to mark the occasion!)
... [727 more lines]
exec ({"code": "text(await tools.exec_command({cmd:\"ls -d steam-research/.venv /tmp/venv\",\"max_output_tokens\":1000}...)
Script completed
Wall time 0.1 seconds
Output:
{"chunk_id":"f702c3","wall_time_seconds":0.000003229,"exit_code":2,"original_token_count":20,"output":"ls: cannot access '/tmp/*venv*': No such file or directory\nsteam-research/.venv\n"}
{"chunk_id":"545ac1","wall_time_seconds":0.0000032,"exit_code":0,"original_token_count":139,"output":"{\n \"active\": true,\n \"max_requests\": 1000,\n \"max_response_bytes\": 4000000,\n \"min_interval_seconds\": 2,\n \"stop_on_error\": true,\n \"retries\": 0,\n \"max_reviews\": 80000,\n \"scope\": \"Late-update announcement audit and bounded review evidence; owner approved; root bulk catalog remains paused\"\n}event_appid,event_name,control_appid,control_name,control_date,pre365,pre90,post90,score\n362860,Sylvio,451880,Catch a Falling Star,2016-03-30 08:39:35+00:00,9,3,2,0.22287606635985724\n362860,Sylvio,489380,QuiVr,2016-12-20 00:44:26+00:00,12,1,2,0.4059755637361535\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nfrom pathlib import Path\n...)
Script completed
Wall time 1.9 seconds
Output:
{"chunk_id":"b9ae72","wall_time_seconds":0.212771993,"exit_code":0,"original_token_count":638,"output":"\n Sylvio 451880 Catch a Falling Star feed 20 oldest 2016-03-30\n[]\n\n Sylvio 489380 QuiVr feed 200 oldest 2017-03-12\n[]\n\n Sylvio 853240 The Light Keeps Us Safe feed 22 oldest 2018-07-22\n[]\n\n Sylvio 505060 Warcube feed 143 oldest 2016-08-12\n[]\n\n Sylvio 925520 Welcome to Bummertown feed 1 oldest 2018-09-14\n[]\n\n Steredenn: Binary Stars 515040 Make America Great Again: The Trump Presidency feed 27 oldest 2016-09-18\n[]\n\n Steredenn: Binary Stars 240440 Quadrilateral Cowboy feed 25 oldest 2016-07-18\n[]\n\n Steredenn: Binary Stars 415920 Voidspire Tactics feed 23 oldest 2015-11-04\n[]\n\n Steredenn: Binary Stars 457760 The Signal From Tölva feed 31 oldest 2017-04-11\n[]\n\n Steredenn: Binary Stars 270450 Robot Roller-Derby Disco Dodgeball feed 161 oldest 2014-03-31\n[]\n\n Rogue Legacy 222730 Reus feed 19 oldest 2015-08-30\n[('2018-05-17', 'Reus - Original Soundtrack now available! And a Daily Deal!'), ('2018-05-15', \"Patch 1.6: Reus' Fifth Anniversary\")]\n\n Rogue Legacy 270450 Robot Roller-Derby Disco Dodgeball feed 161 oldest 2014-03-31\n[('2018-07-30', 'Announcing a new game: Factory Town!'), ('2018-05-22', 'Disco Dodgeball for Switch, PS4, and XBox One NOW AVAILABLE !!!'), ('2018-05-11', '9.2 Now available - and Console port coming May 22!')]\n\n Rogue Legacy 296970 Renowned Explorers: International Society feed 93 oldest 2015-09-02\n[('2018-09-06', 'Renowned Explorers Three-year Anniversary!'), ('2018-05-16', \"Patch 26: Reus' Birthday\"), ('2018-04-01', 'Coming Soon: Renowned Explorers - Daring Dates DLC'), ('2018-04-01', 'Coming Soon: Renowned Explorers - Daring Dates DLC')]\n\n Crypt of the NecroDancer 860890 Factory Town feed 149 oldest 2018-07-27\n[('2022-07-07', '2.1 Patch Notes'), ('2022-07-03', '2.0.3 Patch Notes'), ('2022-06-24', '2.0.2 Patch Notes'), ('2022-06-23', '2.0.1 Patch Notes'), ('2022-06-22', '2.0 Update!')]\n\n Crypt of the NecroDancer 1007040 EARTH DEFENSE FORCE 5 feed 41 oldest 2019-07-11\n[('2022-06-24', '\"Ed-0: Zombie Uprising\" is on sale for the first time!')]\n\n Crypt of the NecroDancer 1139890 Dictators:No Peace Countryballs feed 1 oldest 2025-10-21\n[]\n\n VVVVVV 222730 Reus feed 19 oldest 2015-08-30\n[]\n\n Nuclear Throne 1007040 EARTH DEFENSE FORCE 5 feed 41 oldest 2019-07-11\n[('2025-10-23', '\"FULL METAL SCHOOLGIRL\" Available Now!!')]\n\n Nuclear Throne 855860 Superfighters Deluxe feed 53 oldest 2018-12-05\n[('2026-02-15', 'Superfighters Deluxe 1.5.0 update preview available now!')]\n\n Nuclear Throne 1139890 Dictators:No Peace Countryballs feed 1 oldest 2025-10-21\n[('2025-10-21', 'Update Notes for 21st Nov 2025')]\n"}
Internal Error ()
citeturn16view0 [wordlim: 200] Source: open({"ref_id":"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/4474904295777248861","lineno":null}); Total lines: 1
L0: URL https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/4474904295777248861 is not safe to open (non-retryable error)
--------------------------------------------------------------------------------
Internal Error ()
citeturn16view1 [wordlim: 200] Source: open({"ref_id":"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/5219165352627082334","lineno":null}); Total lines: 1
L0: URL https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/5219165352627082334 is not safe to open (non-retryable error)
--------------------------------------------------------------------------------
Internal Error ()
citeturn16view2 [wordlim: 200] Source: open({"ref_id":"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/3183419193835531768","lineno":null}); Total lines: 1
L0: URL https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/3183419193835531768 is not safe to open (non-retryable error)
--------------------------------------------------------------------------------
Internal Error ()
citeturn16view3 [wordlim: 200] Source: open({"ref_id":"https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/2499943313630732643","lineno":null}); Total lines: 1
L0: URL https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/2499943313630732643 is not safe to open (non-retryable error)
exec ({"code": "text(await tools.exec_command({cmd:\"cat > steam-research/late-updates-2026-09-07/pre_event_sizes.py <<'PY'...)
Script completed
Wall time 3.0 seconds
Output:
{"chunk_id":"dc5e6c","wall_time_seconds":1.00136732,"session_id":88212,"original_token_count":0,"output":""}
(https://store.steampowered.com/news/posts/?appids=15540%2C15560%2C57300%2C12900%2C63700%2C26500%2C18500%2C1250%2C38720%2C40800%2C35460%2C15500%2C38700&enddate=1614354969&feed=steam_community_announcements)
citeturn17search0 [wordlim: 200] Crawled: last month; Corkscrews and Widescreens! ... This is especially noticeable on ultrawide monitors, but it's an improvement for 16:9 displays too (Audiosurf was originally designed for 4:3). ... Corkscrew twists were completely random, but now they highlight a big moment in the song. ... 快到Steam上获取!
Image
Feb 15, 2020
Corkscrews and Widescreens!
AudioSurf - Dylan
Image
Widescreens
Widescreen scaling is now handled much better. This is especially noticeable on ultrawide monitors, but it's an improvement for 16:9 displays too (Audiosurf was originally designed for 4:3). Most of the menu screens do still fully stretch.
Corkscrews
Corkscrew twists were completely random, but now they highlight a big moment in the song. There's still the same 25% chance of a ride having a corkscrew (except for songs that really want one and therefore always have one).
You can now play in narrowscreen too if that’s your thing.
Image
Have fun!
Dylan
Image
... [837 more lines]
One useful counterexample is Sylvio: its developer explicitly returned after about five years and added running, key rebinding, accessibility changes, and fixes. It received no new Steam-purchase reviews in the following 90 days. That rules out treating a long-awaited update as an automatic revival.
SNKRX’s own recent reviews provide a different kind of evidence: some players still explicitly want more content or fixes, while others regard it as complete. Those are individual requests, not a measure of how the whole audience feels.
exec ({"code": "text(await tools.write_stdin({session_id:88212,chars:\"\",yield_time_ms:1000,max_output_tokens:1200}));\nte...)
Script completed
Wall time 1.8 seconds
Output:
{"chunk_id":"d74507","wall_time_seconds":0.000001691,"exit_code":0,"original_token_count":120,"output":" appid name pre_event_lifetime_reviews\n362860 Sylvio 105\n347160 Steredenn: Binary Stars 536\n241600 Rogue Legacy 10953\n247080 Crypt of the NecroDancer 18168\n 12900 Audiosurf 7397\n 70300 VVVVVV 4743\n242680 Nuclear Throne 13721\n"}
{"chunk_id":"79b965","wall_time_seconds":0.000003429,"exit_code":0,"original_token_count":1205,"output":"from net import *\nimport pandas as pd\nc=Client();events=pd.read_csv(R/'events.csv');total=0\nfor ev in events.itertuples():\n start=int(pd.Timestamp(ev.start,tz='UTC').timestamp());end=int(pd.Timestamp(ev.end,tz='UTC').timestamp());cursor='*';seen=set();rows=[];page=0;summary=None\n while True:\n dest=R/'review_pages'/f'{ev.appid}_{page:03}.json'\n if dest.exists():data=json.loads(dest.read_text());assert data['requested_cursor']==cursor\n else:\n params={'json':1,'filter':'recent','language':'all','purchase_type':'steam','review_type':'all','num_per_page':100,'filter_offtopic_activity':1,'date_range_type':'include','start_date':start,'end_date':end,'cursor':cursor}\n raw=json.loads(c.get(f'https://store.steampowered.com/appreviews/{ev.appid}',params,'event_review_window'));assert raw.get('success')==1\n safe=[{k:r.get(k) for k in ['recommendationid','timestamp_created','timestamp_updated','voted_up','steam_purchase','written_during_early_access','language','review']} for r in raw.get('reviews',[])]\n data={'appid':ev.appid,'retrieved_at':utc(),'params':params,'requested_cursor':cursor,'cursor':raw.get('cursor'),'query_summary':raw.get('query_summary'),'reviews':safe};dump(dest,data)\n if page==0:summary=data['query_summary']\n batch=data['reviews'];new=[r for r in batch if r['recommendationid'] not in seen]\n for r in new:\n assert start<=r['timestamp_created']<=end,(ev.appid,r['timestamp_created'],start,end)\n seen.add(r['recommendationid']);rows.append(dict(appid=ev.appid,**r))\n if not batch:break\n assert new and data['cursor'] and cursor!=data['cursor'];cursor=data['cursor'];page+=1\n if total+len(rows)>80000:raise RuntimeError('Review cap reached')\n out=R/'review_windows';out.mkdir(exist_ok=True);pd.DataFrame(rows).to_parquet(out/f'{ev.appid}.parquet',index=False);total+=len(rows)\n dump(R/'review_status'/f'{ev.appid}.json',{'appid':ev.appid,'collected':len(rows),'summary_total':summary['total_reviews'],'complete':True,'start':ev.start,'end':ev.end,'pages':page+1})\n print(json.dumps({'appid':ev.appid,'name':ev.name,'collected':len(rows),'summary_total':summary['total_reviews'],'total_so_far':total}),flush=True)\nappid,name,group,anchor,event,gap_years,pre30,post30,change30,ratio30,pre90,post90,change90,ratio90,pre180,post180,change180,ratio180,pre365,post365,change365,ratio365,post_current_positive_pct,observed_days_after90,post_after90_count,pre_daily,late_daily,late_to_pre_rate\n362860,Sylvio,about_five_years,first_public_update,2022-07-06,4.84599589322382,1,0,-1,0.0,3,0,-3,0.0,5,1,-4,0.2,10,3.0,-7.0,0.3,66.66666666666666,275,3,0.0273972602739726,0.01090909090909091,0.39818181818181825\n347160,Steredenn: Binary Stars,about_five_years,first_public_update,2023-09-22,4.695414099931554,2,9,7,4.5,8,14,6,1.75,9,18,9,2.0,32,31.0,-1.0,0.96875,90.32258064516128,275,17,0.08767123287671233,0.06181818181818182,0.7051136363636364\n241600,Rogue Legacy,about_five_years,first_public_update,2018-06-21,4.509240246406571,35,116,81,3.3142857142857145,121,237,116,1.9586776859504131,312,411,99,1.3173076923076923,802,623.0,-179.0,0.7768079800498753,90.990990990991,308,762,2.197260273972603,2.4740259740259742,1.1259594520193024\n241600,Rogue Legacy,about_five_years,stable_release,2018-07-24,4.509240246406571,97,88,-9,0.9072164948453608,192,142,-50,0.7395833333333334,345,347,2,1.0057971014492753,781,878.0,97.0,1.1241997439180538,91.57175398633257,275,736,2.1397260273972605,2.6763636363636363,1.2507973460598298\n247080,Crypt of the NecroDancer,about_five_years,first_public_update,2022-06-30,4.714579055441479,100,175,75,1.75,258,587,329,2.2751937984496124,593,1058,465,1.7841483979763912,1301,1558.0,257.0,1.1975403535741738,94.60847240051348,275,971,3.5643835616438357,3.5309090909090908,0.9906086227377541\n12900,Audiosurf,five_years_small_update,first_public_update,2020-02-15,5.059548254620124,25,34,9,1.36,112,107,-5,0.9553571428571429,175,197,22,1.1257142857142857,345,372.0,27.0,1.0782608695652174,93.27956989247312,275,265,0.9452054794520548,0.9636363636363636,1.0194993412384716\n70300,VVVVVV,longer_major_gap,first_public_update,2021-08-31,7.219712525667351,30,70,40,2.3333333333333335,125,140,15,1.12,223,258,35,1.15695067264574,441,416.0,-25.0,0.9433106575963719,96.63461538461539,275,276,1.2082191780821918,1.0036363636363637,0.830674087816945\n242680,Nuclear Throne,longer_major_gap,first_public_update,2025-12-05,8.07939767282683,53,593,540,11.18867924528302,154,875,721,5.681818181818182,390,1077,687,2.7615384615384615,762,,,,93.38461538461539,186,425,2.0876712328767124,2.28494623655914,1.0944952445460447\n{\"appid\": 362860, \"collected\": 13, \"summary_total\": 13, \"complete\": true, \"start\": \"2021-07-06\", \"end\": \"2023-07-06\", \"pages\": 2}"}
Sylvio on Steam (https://store.steampowered.com/app/362860/)
citeturn18view0 [wordlim: 200] Crawled: last week; Content type: text/html; Source: open({"ref_id":"https://store.steampowered.com/app/362860/","lineno":null}); Total lines: 223
L0: cite0†Image†store.fastly.steamstatic.com L1:
L2: cite1†Image†shared.fastly.steamstatic.com cite1†Image†shared.fastly.steamstatic.com L3:
L4: cite2†Community Hub†steamcommunity.com L5:
L6: cite3†Image†shared.akamai.steamstatic.com L7:
L8: Sylvio
L9:
L10: cite4†Image: Sylvio†shared.fastly.steamstatic.com L11:
L12: cite4†Image†shared.fastly.steamstatic.com L13:
L14: Sylvio
L15:
L16: Developer
L17:
L18: cite5†Stroboskop L19:
L20: Publisher
L21:
L22: cite6†Stroboskop L23:
L24: Released
L25:
L26: 5 Jun, 2015
L27: Sylvio is a psychological horror game set in a tranquil, disturbing atmosphere. Help ghost recorder Juliette Waters face an evil curse and a wicked family cult with her microphone and the voices of the dead.
L28:
L29: cite7†All Reviews: Mostly Positive (117) - 76% of the 117 user reviews for this game are positive. L30:
... [253 more lines]
exec ({"code": "text(await tools.apply_patch(\" Begin Patch\n Update File: /home/adn/a327ex/steam-research/late-upda...)
Script completed
Wall time 3.9 seconds
Output:
{}
AudioSurf on Steam (https://store.steampowered.com/app/12900/)
citeturn19view0 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"turn18view2","lineno":5}); Total lines: 145
L0: cite0†Image†store.fastly.steamstatic.com L1:
L2: cite1†Image†shared.fastly.steamstatic.com cite1†Image†shared.fastly.steamstatic.com L3:
L4: cite2†Community Hub†steamcommunity.com L5:
L6: cite3†Image†shared.akamai.steamstatic.com L7:
L8: AudioSurf
L9:
L10: cite4†Image: AudioSurf†shared.fastly.steamstatic.com L11:
L12: cite4†Image†shared.fastly.steamstatic.com L13:
L14: AudioSurf
L15:
L16: Developer
L17:
L18: cite5†Dylan Fitterer L19:
L20: Released
L21:
L22: 15 Feb, 2008
L23: Ride your music. Audiosurf is a music-adapting puzzle racer where you use your own music to create your own experience. The shape, the speed, and the mood of each ride is determined by the song you choose.
L24:
L25: cite6†Recent Reviews: Very Positive (11) - 90% of the 11 user reviews in the last 30 days are positive. cite6†English Reviews: Overwhelmingly Positive (6,165) - 95% of the 6,165 user reviews for this game are positive. L26:
L27: Release Date:
L28:
L29: 15 Feb, 2008
L30:
... [212 more lines]
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python steam-research/late-updates-2026-09-07...)
Script completed
Wall time 4.2 seconds
Output:
{"chunk_id":"5ac7ac","wall_time_seconds":0.526860394,"exit_code":0,"original_token_count":214,"output":" name anchor pre90 post90 pre365 post365 late_to_pre_rate\n Sylvio first_public_update 3 0 10 3.0 0.398182\n Steredenn: Binary Stars first_public_update 8 14 32 31.0 0.705114\n Rogue Legacy first_public_update 121 237 802 623.0 0.638812\n Rogue Legacy stable_release 192 142 781 878.0 1.250797\nCrypt of the NecroDancer first_public_update 258 587 1301 1558.0 0.990609\n Audiosurf first_public_update 112 107 345 372.0 1.019499\n VVVVVV first_public_update 125 140 441 416.0 0.830674\n Nuclear Throne first_public_update 154 875 762 NaN 1.094495\n"}
Internal Error ()
citeturn20view0 [wordlim: 200] Source: open({"ref_id":"https://steamcommunity.com/app/347160/announcements/","lineno":null}); Total lines: 1
L0: URL https://steamcommunity.com/app/347160/announcements/ is not safe to open (non-retryable error)
--------------------------------------------------------------------------------
Nuclear Throne - Update #100 - 10 year anniversary - December 5th, 2025 - Steam News (https://store.steampowered.com/news/app/242680/view/499465877188511075)
citeturn20view1 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"https://store.steampowered.com/news/app/242680/view/499465877188511075","lineno":null}); Total lines: 1
L0: cite0†Image†store.akamai.steamstatic.com --------------------------------------------------------------------------------
Internal Error ()
citeturn20view2 [wordlim: 200] Source: open({"ref_id":"https://braceyourselfgames.com/updates/crypt-of-the-necrodancer/patch-v3-0-0/","lineno":null}); Total lines: 1
L0: Failed to fetch https://braceyourselfgames.com/updates/crypt-of-the-necrodancer/patch-v3-0-0/: (403) Forbidden
--------------------------------------------------------------------------------
Steam Search (https://store.steampowered.com/search/?developer=Dylan+Fitterer&snr=1_5_9__400)
citeturn20view3 [wordlim: 200] Crawled: 2 weeks ago; Content type: text/html; Source: click({"ref_id":"turn19view0","id":5}); Total lines: 1266
L0: cite0†Image†store.fastly.steamstatic.com L1: ##
L2:
L3: All Products
L4:
L5: Sort by
L6:
L7: [Input] [Button: Relevance]
L8:
L9: * Relevance
L10: * Release date
L11: * Name
L12: * Lowest Price
... [159 more lines]
exec ({"code": "text(await tools.exec_command({cmd:\"steam-research/.venv/bin/python - <<'PY'\nimport json,pandas as pd\n...)
Script completed
Wall time 0.4 seconds
Output:
{"chunk_id":"e1067b","wall_time_seconds":0.199521819,"exit_code":0,"original_token_count":3681,"output":"\nAPP 241600\n2019-04-27 Rogue Legacy - The Lament of Zors Mod [img]https://steamcdn-a.akamaihd.net/steamcommunity/public/images/clans/4876004/f551b01803e607e86267a7ccb4670cc67037cceb.png[/img]\r\n\r\nHey all!\r\n\r\nWhen we released the Rogue Legacy 5-year anniversary patch many moons ago, we inadvertently HAMSHANKED peoples' ability to play Cedric \"default0\" Schneider's super awesome mod for the game, Lament of Zors. To fix that, you had to download the v1.2.0b branch and install the mod, and afterward you couldn't play the latest version of the original game.\r\n\r\nWe've made things easier, and added a selector so that you can switch between the original and the mod at any time! And don't worry, you won't lose your save files.\r\n\r\nSo if you've been hankering more Rogue Legacy, this mod is gonna give you hundreds of extra hours!\r\n\r\n\r\nWithout further ado,\r\n\r\n\r\n[h1]Rogue Legacy: TLoZ (The Lament of Zors) Feature List [/h1]\r\n**warning minor spoilers ahead\r\n\r\n[\n\nAPP 347160\n2023-09-30 Steredenn 2.6.4: hotfix - Try to fix audio volume bug on boss\n- Re-fix the coop controller issue\n- Fix softlock in tutorial\n2023-09-26 Steredenn 2.6.3: hotfix (Linux) - Fix the linux version!\n\nMany thanks to SingularityCat for the precious help!!!\n2023-09-26 Steredenn 2.6.2: hotfix - Fix boss music played even with volume at 0\n- Add new controllers support (including PS5 DualSense)\n\n- Linux incompatibility: see related thread for a workaround\nhttps://steamcommunity.com/app/347160/discussions/0/3880470363415612815/?ctp=2#c3880470762772826494\n\n2023-09-23 Steredenn 2.6.1: hotfix - Fix Red Baron not picking medikits\n- Fix Destroyer MK2 having long pauses between lasers\n- Fix boss music played even with volume at 0\n\nStill looking for the Linux incompatibility bug, sorry about that.\n2023-09-22 Steredenn 2.6.0: Incoming Transmission Hello!\n\nYou were probably not expecting an update, but here it is! 🚀\n\n[h1]Features[/h1]\n[list]\n[*] Add Basque translation\n[*] Add a proper ending\n[*] Add an \"easy\" mode: It's not going to be super easy, despite the name \"Space Tour\", but it should allow more people to enjoy the game: more damages, more lives, slower bullets, more invincible time, slower bosses. Leaderboards are now split by difficulty. You can select the difficulty before starting a new solo or coop game. Arena and Daily runs will are locked in Normal. ALl unlocks and achievements are available in the easy mode.\n[*] New keyart/capsules\n[/list]\n\n[h1]Balances[/h1]\n\n[h2]Red Baron[/h2]\n[list]\n[*] add middle shot to spread\n[*] up laser dmg\n[*] +1 HP\n[/list]\n\n[h2]Game[/h2]\n[list]\n[*] Drop medikit before a boss after level 4 (Normal mode)\n[/list]\n\n[h2]Bosses[/h2]\n[list]\n[*] Nerf bomber MK1 very, very slightly\n[*] Nerf Batt\n\nAPP 915310\n2022-07-01 Rewrite Update Cancelled Hello everyone!\n\nUnfortunately, I have decided to cancel SNKRX's rewrite update that was promised [url=https://steamcommunity.com/games/915310/announcements/detail/2983056479590217038]about a year ago[/url]. From now on the game will remain in the state it is now and I'll move on to other projects. I understand that many people have been patiently waiting for the update, and I'm very sorry about this, but it is what it is.\n\nSince before SNKRX I had a problem as a developer, which is that I tended to overscope my projects.\nI would make them bigger than I had the experience to handle, work on them for a few months to a few years, and would eventually give up because they were going nowhere.\n\nSo since the start of 2020 I had been trying to make and finish games that had an appropriate scope for my skills. These were projects that would take me between 2-3 months to make from start to finish\n2021-07-24 Maintenance Update #3 [h2]Changes[/h2]\n[list]\n[*] Increased cryomancer's area of effect by 50%\n[*] Increased bane's void rift's size by 50%\n[*] Beastmaster now has 10% crit chance by default\n[*] Magician's Lv.3 effect is now [i]\"+50% attack speed every 12 seconds for 6 seconds\"[/i]\n[*] The fairy will no longer buff non-attacking units\n[*] Awakening and enchanted items will no longer buff non-attacking units\n[*] Changed freezing field's color to blue for better visual clarity\n[*] Improved text descriptions for engineer and sentry for clarity\n[*] Fixed engineer's and artificer's cooldowns not being displayed properly\n[*] Fixed a bug that would cause incorrect party size after loading a looped run (thanks [url=https://github.com/a327ex/SNKRX/pull/15]ArnaudOechslin[/url])\n[*] Fixed a rare crash due to enemy critters being spawned during a level transition\n[*] Added the following keyboard shortcuts:[list]\n[*] R re\n2021-07-17 Maintenance Update #2 [list]\n[*] Fixed a bug where NG+5 difficulty would go down to NG+4 after looping\n[*] Shop level can now be reduced by 1 for 10 gold with right-click\n[*] Capped enemy movement speed after level 150\n[*] Added a run timer option, note that the timer will be off for saved runs that started before this patch\n[*] Warden's bubble is now affected by magnify\n[*] Changed all text instances of \"active set\" to \"active class\" to avoid confusion\n[/list]\n2021-07-09 Maintenance Update #1 As mentioned in previous updates, from now on until the stat update is ready these weekly patches will be smaller than they have been so far.\n\n[h2]Bug fixes[/h2]\n[list]\n[*] Fixed several blue screen crashes due to broken looping state\n[*] Fixed a bug where double clicking the loop button would lead to broken looping state\n[*] Fixed several blue screen crashes due to broken physics state\n[*] Fixed a bug where sometimes restarting the game from a looped run would let you have more units than normal in the next run\n[*] Fixed sold items not being restored to the passive pool\n[*] Fixed gambler's volume being too loud with high amounts of gold\n[*] Fixed soundtrack button not working on the win screen\n[*] Fixed volume text bug when decreasing it from 1 to 0\n[*] Fixed volume buttons not looping\n[*] Fixed a bug where the first run would not have certain items in the item pool\n[*] Fixed kinetic st\n2021-07-04 Loop Update This update features a looping/endless mode, 20 new items, reworked conjurer class, rebalanced healers & psykers, and lots of QoL features and bug fixes.\n\n[h2]Looping/endless mode[/h2]\n[list]\n[*] Continue the current run upon beating the game\n[*] Play on levels of increasing difficulty above 25 until death\n[*] +1 maximum snake size per loop, up to 12 maximum snake segments\n[*] Items are not offered while looping if you already have 8\n[/list]\n\n[h2]New items[/h2]\n[list]\n[*] [b]Intimidation:[/b] enemies spawn with -10/20/30% max HP\n[*] [b]Vulnerability:[/b] enemies take +10/20/30% damage\n[*] [b]Temporal Chains:[/b] enemies are 10/20/30% slower\n[*] [b]Ceremonial Dagger:[/b] killing an enemy fires a homing dagger\n[*] [b]Homing Barrage:[/b] 8/16/24% chance to release a homing barrage on enemy kill\n[*] [b]Critical Strike:[/b] 5/10/15% chance for attacks to critically strike, dealing 2X damage\n[\n2021-06-25 Orb Update This update features the game's mobile ports, healer and psyker reworks, 9 new items, 1 new class, and lots of balance and QoL changes.\n\n[h2]Mobile Ports[/h2]\n\nThe game has been ported to mobile and it's now available on:\n[b]Google Play:[/b] https://play.google.com/store/apps/details?id=net.davidobot.mazette.snkrx\n[b]App Store:[/b] https://apps.apple.com/app/snkrx/id1572602587\n\nIt has been ported very quickly by [url=https://davidobot.net/]David Khachaturov[/url], so make sure to send him some thanks! Both mobile versions will usually be 1 update behind the Steam version. Right now I think both are on the Mercenary update, with the Item update coming up soon.\n\n[h2]Healer & Psyker rework[/h2]\n\n[b]New healer class effect:[/b][expand type=details]\n[b]Healers (2, 4):[/b] +8/16% chance for enemies to drop healing orbs on death[/expand]\n[b]Healer unit changes:[/b][expand type=details][list]\n[*\n2021-06-18 Item Update This update adds a new item levelling system, reworks all items and adds 27 new ones, as well as some rebalancing and lots of bug fixes.\n\n[h2]Item Levelling[/h2]\n\nMost items can be now levelled up to Lv.3 in increments of 5 gold per XP:\n[b]Lv.1 -> Lv.2[/b] cost: 2 XP = 10 gold\n[b]Lv.2 -> Lv.3[/b] cost: 3 XP = 15 gold\n\nLevelling an item up grants it additional stat bonuses. For instance, [b]Amplify:[/b] +20/35/50% AoE damage. This means that if you pick up Amplify and spend 25 gold to level it up to Lv.3, all your units will deal 50% increased AoE damage.\n\n[h2]Items[/h2]\n\n[b]General:[/b][expand type=details]\n[list]\n[*] [b]Centipede:[/b] +10/20/30% movement speed\n[*] [b]Ouroboros Technique R:[/b] rotating around yourself to the right releases 2/3/4 projectiles per second\n[*] [b]Ouroboros Technique L:[/b] rotating around yourself to the left grants +15/25/35% defense to all units\n[*] [b]Amp\n2021-06-11 Mercenary Update This update adds 1 new class, 5 new units, implements a new shop leveling system, a few QoL features and lots of bug fixes.\n\n[h2]Mercenaries[/h2]\n\n[b]Added the mercenary class:[/b] [expand type=details][b]Mercenaries (2, 4):[/b] +10/20% chance for enemies to drop gold on death[/expand]\n[b]Added 5 new mercenary units:[/b][expand type=details]\n[list]\n[*] [b]Miner (tier 1 mercenary)[/b] - picking up gold releases 4 homing projectiles that deal X damage, [i]Lv.3 effect:[/i] release 8 homing projectiles instead and they pierce twice\n[*] [b]Merchant (tier 2 mercenary)[/b] - gain +1 interest for every 10 gold, [i]Lv.3 effect:[/i] your first item reroll is always free\n[*] [b]Usurer (tier 3 mercenary, curser, voider)[/b] - curses 3 nearby enemies indefinitely with debt, dealing X damage over time, [i]Lv.3 effect:[/i] if the same enemy is cursed 3 times it takes 50X damage\n[*] [b]Gambler (tier 3 m\n2021-06-05 Sorcerer Update This update adds 1 new class, 8 new units, implements several balance changes, a few QoL features and tons of bug fixes.\n\n[h2]Sorcerers[/h2]\n\n[b]Added the sorcerer class:[/b] [expand type=details][b]Sorcerers (2, 4, 6):[/b] sorcerers repeat their attacks once every 4/3/2 attacks[/expand]\n[b]Added 7 new sorcerer units:[/b][expand type=details]\n[list]\n[*] [b]Arcanist (tier 1 sorcerer)[/b] - launches a slow piercing orb that launches other piercing projectiles,\n[i]Lv.3 effect:[/i] +50% attack speed for the orb and 2 projectiles are released per cast\n[*] [b]Illusionist (tier 3 sorcerer, conjurer)[/b] - launches a projectile that deals X damage and creates copies that do the same, [i]Lv.3 effect:[/i] doubles the number of copies created and they release 12 projectiles on death that pierce and ricochet once\n[*] [b]Witch (tier 2 sorcerer, voider)[/b] - creates an area that ricochets around the \n2021-05-29 Quality of Life Update This update implements many often requested QoL features, mostly buffs underused classes/units, and fixes a few bugs and crashes.\n\n[h2]Quality of Life[/h2]\n[list]\n[*] [b]Auto save: [/b] runs are now automatically saved. If you quit the game or it crashes for any reason, when you come back you will be able to continue from where you last left off. This feature was implemented with the help of [url=https://github.com/Davidobot]Davidobot[/url], so thanks!\n[*] [b]Move units:[/b] you can now place units in any position in your party. Simply click and drag each unit to any position you want. This should give the game some more strategizing possibilities.\n[*] [b]Lock shop:[/b] the shop can now be locked. This will save currently presented units, letting you buy them in the next round if you ran out of gold or want to save for more interest.\n[*] [b]More options:[/b] you can now turn off screen s\n2021-05-21 Balance Update This balance update fixes a few bugs, buffs and nerfs a few units and classes, and overall makes the game more consistent difficulty wise.\n\n[h2]Unit, class and passive changes[/h2]\n[list]\n[*] [b]Lich:[/b] doubled projectile speed\n[*] [b]Highlander:[/b] doubled attack area\n[*] [b]Cannoneer:[/b] Lv.3 effect now repeats 7 times (from 5) and the delay between each attack is longer\n[*] [b]Wizard:[/b] Lv.3 effect now chains 3 times (from 5)\n[*] [b]Rogues:[/b] crit chance changed to 15/30% (from 10/20%)\n[*] [b]Psykers:[/b] attack speed and damage bonus changed to 10/20% (from 5/10%)\n[*] [b]Divine Machine Arrow:[/b] now pierces 4 times (from 5)\n[*] \"[b]Concentrated Fire:[/b] -50% area size and +100% area damage\" has been removed\n[*] \"[b]Echo Barrage:[/b] 20% chance to create 3 secondary AoEs on AoE hit\" has been added\n[/list]\n[h2]Difficulty[/h2]\n[list]\n[*] The overall difficulty of the game has \n2021-05-19 Save system update I've pushed an update that changes the game's save system. This is intended to fix any outstanding issues with save files, such as errors like \"engine/external/binser.lua:471: C:/Users/username/AppData/Roaming/SNKRX/state: No such file or directory\" and others.\n\nThis also makes the game's save system modifiable, so, for instance, if you want to go back to a difficulty level before NG+1, you can now go to AppData/Roaming/SNKRX/state.txt and change the \"new_game_plus\" setting to 0. Similarly, you can also change video/screen settings through there in case of problems.\n\nPlease tell me about any issues you have, and have fun!\n2021-05-19 \"No such file or directory\" bug fix I just pushed an update that should fix a problem that said something like \"engine/external/binser.lua:539: C:/Users/UserName/AppData/Roaming/SNKRX/state: No such file or directory\". This affected most players who tried to run the game for the first time. \n\nSorry about this and I hope you can enjoy the game now!\n2021-05-18 Enemy HP fix Fixed a bug where sometimes enemy HP could go above it's maximum allowed value and make an enemy immortal.\n2021-05-17 Achievements Fix Two achievements weren't being unlocked upon completion:\n\n[list]\n[*]\"Level 3 - Win with a full set of level 3 units\"\n[*]\"Level 2 - Win with a full set of level 2 units\"\n[/list]\nI've now pushed a build that fixes this issue.\n2021-05-17 Small patch for DPI scaling issues Hi!\n\nSome users are having problems with the game's window starting way bigger than it should be. This is due to DPI scaling settings, and unfortunately right now I don't have a way of detecting whether a user has DPI scaling enabled or not.\n\nDue to this I've added a hotkey (K) that decreases the window's size, and a message at the start telling the user to press this key if his window is too big. If your window size is normal then you can safely ignore it. Users who find themselves pressing this key can then go to the game's options (once you're in the arena) and click \"fullscreen\", which should scale the game's window to properly fit the screen.\n\nIf anyone has found any other bugs feel free to tell me about it. And I hope you're enjoying the game!\n"}
exec ({"code": "text(await tools.exec_command({cmd:\"cat > steam-research/late-updates-2026-09-07/finish_analysis.py <<'PY'...)
Script completed
Wall time 1.8 seconds
Output:
{"chunk_id":"d2ba9a","wall_time_seconds":1.6228241190000001,"exit_code":0,"original_token_count":160,"output":" name pre90 post90 old_pre90 old_post90 ratio_of_ratios\n Sylvio 3 0 4 2 0.000000\n Steredenn: Binary Stars 8 14 5 6 1.458333\n Rogue Legacy 121 237 148 207 1.400407\nCrypt of the NecroDancer 258 587 409 333 2.794457\n Audiosurf 112 107 95 34 2.669380\n VVVVVV 125 140 119 95 1.402947\n Nuclear Throne 154 875 151 211 4.066135\n"}
exec ({"code": "const a=await tools.view_image({path:\"/home/adn/a327ex/steam-research/late-updates-2026-09-07/review_traje...)
[
{
"type": "text",
"text": "Script completed\nWall time 0.1 seconds\nOutput:\n"
},
{
"type": "image",
"note": "[image: shown below]"
},
{
"type": "text",
"text": "{\"chunk_id\":\"422205\",\"wall_time_seconds\":0.000003843,\"exit_code\":0,\"original_token_count\":616,\"output\":\"game,appid,review_id,created,updated,currently_positive,interpretation,source_file\\nAudiosurf,12900,63667889,2020-02-17,2020-02-17,True,Existing owner remembered game through an article about the update.,review_windows/12900.parquet\\nCrypt of the NecroDancer,247080,118069831,2022-07-02,2022-07-02,True,Longtime owner says new 3.0 quality-of-life update prompted first review.,review_windows/247080.parquet\\nCrypt of the NecroDancer,247080,118081255,2022-07-02,2022-07-02,True,Reviewer welcomes faster loading.,review_windows/247080.parquet\\nCrypt of the NecroDancer,247080,117960481,2022-06-30,2025-10-03,False,Reviewer reports crash on launch after the large update.,review_windows/247080.parquet\\nNuclear Throne,242680,212637322,2025-12-05,2025-12-05,True,Longtime player says content update finally prompted review after a decade.,review_windows/242680.parquet\\nNuclear Throne,242680,212644723,2025-12-05,2025-12-05,True,Reviewer welcomes new custom options.,review_windows/242680.parquet\\nVVVVVV,70300,99778987,2021-09-22,2021-09-22,True,Reviewer thanks 2.3 update and praises 144 Hz presentation.,review_windows/70300.parquet\\nSNKRX,915310,222663377,2026-04-06,2026-04-06,True,Positive review wishes continued support.,snkrx_update_mentions.csv\\nSNKRX,915310,222726597,2026-04-07,2026-04-07,True,Positive review regrets lack of updates.,snkrx_update_mentions.csv\\nSNKRX,915310,214458841,2025-12-28,2025-12-28,True,Positive review asks creator for more updates.,snkrx_update_mentions.csv\\nSNKRX,915310,143744577,2023-08-09,2023-08-09,True,Positive review asks for more characters and larger levels.,snkrx_update_mentions.csv\\nSNKRX,915310,169949608,2024-07-15,2024-07-15,False,Negative review reports pause-menu failure and lost runs. Unverified bug report.,snkrx_update_mentions.csv\\nSNKRX,915310,231814015,2026-08-01,2026-08-01,True,\\\"Positive review criticizes NG+ progression, reroll economics and unclear difficulty explanations.\\\",snkrx_update_mentions.csv\\nSNKRX,915310,179140515,2024-11-16,2024-11-16,True,Positive review calls game complete and rejects expectation of endless updates.,snkrx_update_mentions.csv\\n{\\\"returned\\\": 118, \\\"summary\\\": 118, \\\"pages_after_first\\\": [18, 0], \\\"all_dates_in_range\\\": true, \\\"existing_history_count\\\": 118, \\\"new_ids\\\": [], \\\"missing_old_ids\\\": []}{\\n \\\"network_paused\\\": true,\\n \\\"metadata_min_interval_seconds\\\": 2.0,\\n \\\"stop_on_http_429\\\": true,\\n \\\"reason\\\": \\\"Metadata snapshot finished. Network collection closed; no media downloader exists.\\\"\\n}\"}"
}
]

The seasonal checks support some of the short-term increases, especially Nuclear Throne’s, but they don’t isolate the update from discounts, publicity, or accompanying releases. I’m leaning toward “yes” under your zero-effort assumption: there is evidence that late updates give existing owners something they value. The case for a lasting audience revival is much weaker.
exec ({"code": "text(await tools.exec_command({cmd:\"cat > steam-research/late-updates-2026-09-07/README.md <<'MD'\n# Shou...)
Script completed
Wall time 0.0 seconds
Output:
{"chunk_id":"0c6c9a","wall_time_seconds":0.000003508,"exit_code":0,"original_token_count":0,"output":""}
[Think]
**Revising Rogue gap wording**
exec ({"code": "text(await tools.exec_command({cmd:\"cat > steam-research/late-updates-2026-09-07/validate.py <<'PY'\nfrom...)
Script completed
Wall time 0.6 seconds
Output:
{"chunk_id":"1b63ff","wall_time_seconds":0.457960974,"exit_code":0,"original_token_count":140,"output":"{\n \"review_counts\": {\n \"362860\": 13,\n \"347160\": 63,\n \"241600\": 1801,\n \"247080\": 2859,\n \"12900\": 717,\n \"70300\": 857,\n \"242680\": 2062\n },\n \"total_reviews\": 8372,\n \"all_windows_reconcile\": true,\n \"all_cursor_chains_terminal_and_unique\": true,\n \"date_filter_validation_exact_match\": true,\n \"event_and_late_window_recounts\": true,\n \"requests\": 241,\n \"minimum_request_spacing_seconds\": 2.0000412464141846,\n \"all_http_200\": true,\n \"scoped_collection_closed\": true,\n \"root_network_paused\": true,\n \"figure_visually_checked\": true\n}\n"}
The analysis is complete. All 8,372 collected review records reconcile with Steam’s filtered totals, and collection is now closed. The report includes the quiet cases, the stronger bursts, the seasonal checks, and the limits of comparing them to SNKRX.
exec ({"code": "text(await tools.exec_command({cmd:\"python - <<'PY'\nfrom pathlib import Path\nimport json\nr=Path('ste...)
Script completed
Wall time 0.3 seconds
Output:
{"chunk_id":"d1ab5b","wall_time_seconds":0.000003103,"exit_code":0,"original_token_count":33,"output":"probes sensitive-key occurrences 0\nseasonal_summaries sensitive-key occurrences 0\npre_event_summaries sensitive-key occurrences 0\n"}
{"content":[{"type":"text","text":"{\"status\":\"queued\",\"threadId\":\"01a07962-afe2-7c30-b2b2-b5871cf74714\"}"}],"isError":false}
I would update SNKRX under your zero-effort assumption. The evidence supports a reasonable expectation that some existing players would value it, and that it could generate renewed attention. It does not support confidently predicting a lasting revival.
The five-year gap itself does not appear to make an update pointless. What matters more is what the update gives people—and whether it preserves what they already enjoy.
I collected 8,372 review records around seven documented late updates, checked their announcements, examined subsequent review activity, and compared the same seasonal windows a year earlier. The full report and evidence are saved locally.
SNKRX still has people arriving—and some explicitly asking for updates.
Your last announced patch was July 24, 2021. The July 2022 announcement cancelled the rewrite; it wasn’t another game update. So the roughly five-year condition is accurate.
In the complete review history we previously collected:
| Period | New Steam-purchase reviews | Currently positive |
|---|---|---|
| September 2024–August 2025 | 128 | 83.6% |
| September 2025–August 2026 | 87 | 88.5% |
That is a quiet continuing flow, averaging about seven reviews monthly in the latest year. These counts measure newly written reviews, not newly acquired players.
More directly relevant, recent positive reviewers explicitly ask for further updates or regret their absence: December 28, 2025, and April 6–7, 2026 provide examples. Other reviews request more characters and larger levels, report a pause-menu problem costing runs, or criticize NG+ progression and unclear difficulty explanations.
There is also a counterpoint: a November 2024 positive reviewer regards SNKRX as complete and rejects the expectation of perpetual updates. These individual responses establish that interest exists, alongside satisfaction with the finished game. They cannot tell us what proportion of owners wants changes. Review evidence, dates and IDs.
The comparable updates produced very different outcomes.
These are all-language Steam-purchase reviews created during equal windows before and after each update:
| Game / developer | Gap qualification | 90 days before → after | Year before → after |
|---|---|---|---|
| Sylvio / Stroboskop | About 4.8 years | 3 → 0 | 10 → 3 |
| Steredenn / Pixelnest | About 4.7 years between substantive patches | 8 → 14 | 32 → 31 |
| Rogue Legacy / Cellar Door | Developer describes four years; public beta used as start | 121 → 237 | 802 → 623 |
| Crypt of the NecroDancer / Brace Yourself Games | 1,721 days, about 4.7 years | 258 → 587 | 1,301 → 1,558 |
| Audiosurf / Dylan Fitterer | About 5.1 years between announced fixes | 112 → 107 | 345 → 372 |
| VVVVVV / Terry Cavanagh | Seven years between major releases; community work intervened | 125 → 140 | 441 → 416 |
| Nuclear Throne / Vlambeer | Eight years between numbered stable releases; beta maintenance intervened | 154 → 875 | Full post-year unavailable |
Calculated results and all measurement windows.
The qualifications matter. These are useful neighboring cases, not seven exact replicas of SNKRX’s circumstances. In particular, several “five-year” returns were actually somewhat shorter, and the longest gaps included intervening beta or community activity.
Nuclear Throne shows that a substantial late return can still attract considerable attention.
Its first 30 days increased from 53 to 593 reviews. The update added a character, custom mode, skins, four-player co-op and languages, alongside an anniversary and discount campaign. Official announcement.
The seasonal comparison strengthens the observation: the corresponding previous-year 90-day windows increased from 151 to 211, whereas the update-year windows increased from 154 to 875. That is a much larger change than the previous winter’s pattern.
However, after the first 90 days, review arrivals averaged 2.28 daily, compared with 2.09 daily during the preceding year. The burst is striking; the later baseline is only modestly higher. We cannot separate the update from its promotion, or translate those reviews into sales.
Crypt also had a substantial increase, but it is particularly difficult to attribute. Its paid SYNCHRONY DLC arrived 35 days after the free update, contaminating the longer comparison windows. Even there, activity after day 90 averaged approximately the previous year’s daily rate. Free-update announcement.
Sylvio shows why I would not promise a revival.
Its developer explicitly described returning after five years. The changes were meaningful: running, custom key bindings, more intuitive level design, accessibility changes for deaf players, and fixes. Yet it received zero new Steam-purchase reviews in the following 90 days. Developer’s announcement.
This does not establish that nobody benefited—or that updating hurt the game. It establishes that even a useful, long-delayed update can leave little visible footprint in new reviews.
Steredenn and VVVVVV occupy the middle ground. Their first-month review counts rose from 2 to 9 and 30 to 70, respectively, but their following annual totals were approximately flat or lower. The monthly trajectories make this pattern visible.
The strongest reason for my “yes” is something those totals miss.
Review texts provide direct accounts of people benefiting:
- An Audiosurf reviewer remembered the game through an article about its update.
- A longtime Crypt owner explicitly said the new quality-of-life update prompted their first review. Another welcomed faster loading.
- A longtime Nuclear Throne player said the content update prompted a review after a decade. Another welcomed the custom options.
- A VVVVVV reviewer explicitly thanked the update and praised its high-refresh presentation.
These particular positive examples were written and last edited on the same day near the update, making their connection clearer than retrospective edited reviews. Their provenance is in the selected evidence.
An owner who reviewed SNKRX in 2021 could enjoy another fifty hours after an update without producing another review. Conversely, an update can prompt a longstanding owner to review for the first time. New-review counts therefore miss some benefits while mixing renewed owner engagement with new-player activity.
Under your assumption, that distinction matters considerably: an update need not restart substantial audience growth to have a worthwhile effect.
How much of this transfers to SNKRX?
SNKRX has 4,197 surviving Steam-purchase reviews in our history. Before their updates, Sylvio had 105 and Steredenn 536; Nuclear Throne had 13,721 and Crypt 18,168. VVVVVV was closer at 4,743, but its gameplay and update type differ.
So SNKRX has a considerably larger accumulated review base than the quietest small-game examples, while its recent review flow is much smaller than the major roguelike examples. That makes both “Sylvio got nothing, therefore you will” and “Nuclear Throne exploded, therefore you can expect that” poor conclusions.
I also checked candidate comparison games and seasonality. They help challenge simplistic before/after readings, but unknown discounts, simultaneous updates, sparse announcement histories and different audiences prevent a credible causal estimate. There is no defensible personal revival percentage here.
My recommendation is therefore specific: yes to improving SNKRX for the people who still enjoy it, with renewed attention as a plausible additional benefit. The evidence supports investigating concrete frustrations and offering existing fans more of what they like. It does not determine the exact features or establish that a broad rewrite would be better.
There is one observed downside worth preserving in that judgment: late updates sometimes broke working experiences. Steredenn’s update caused Linux launch problems requiring hotfixes, and Sylvio needed a follow-up correction for ammunition behavior. Keeping the previous version accessible would address a risk demonstrated by these cases. Steredenn’s contemporaneous report and developer-marked answer.
With effort and competing uses of your time removed, I find more evidence for updating than for leaving SNKRX untouched merely because five years have passed. I would expect the clearest benefit to be giving some existing players a better experience or a reason to return. A durable revival remains an uncertain possibility.
<oai-mem-citation> <citation_entries> MEMORY.md:45-56|note=[Prior Steam data limits and bounded collection practices] </citation_entries> <rollout_ids> 01a072d9-1e07-7302-8c70-af9c64456ba9 </rollout_ids> </oai-mem-citation>

I see, thank you. You may end this session, name it Steam Market Research 7. Because you compacted, spawn a subagent to read the generated Markdown log to create the summary instead of you.