Loading…
a327ex.com

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 sibling continuation-2026-09-06, portfolios-2026-09-06, and build-destinations-2026-09-06 directories.
  • 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, and continuation_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 m1 as the first nonempty calendar histogram bucket and m3 as 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.csv under the Fable-verification directory.

Fable verification: revenue conversion, price, market growth, and concentration:

  • Fable’s reviews × 35.9 × current price estimator 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, and README.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, and README.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.md and 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.md and 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/, including findings.md and case_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:

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.md is the report entry point. event_results.csv contains calculated windows/results, selected_review_evidence.csv contains dates/IDs and interpretations, and review_trajectories.png visualizes 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/, and late-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.html collects 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)
citeturn0search0 [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)
citeturn0search1 [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)
citeturn0search2 [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)
citeturn0search3 [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)
citeturn0search4 [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)
citeturn0reddit12 [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)
citeturn0search5 [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)
citeturn0search6 [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)
citeturn1view0 [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)
citeturn1view1 [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)
citeturn1view2 [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)
citeturn1view3 [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)
citeturn1view4 [wordlim: 200] Crawled: today; Content type: text/html; Source: find({"ref_id":"turn0view0","pattern":"purchase_type"}); Total lines: 446
L157:       * cite154†Application Settings for Virtual Reality L158:       * cite155†SteamVR Input L159:       * cite156†OpenVR L160:       * cite157†SteamVR for Enterprise / Government Use L161:   * cite158†Finance L162:     * cite159†Developer Refund Reporting L163:     * cite160†Reporting and Payments L164:       * cite161†Reporting and Payments FAQ L165:     * cite162†Taxes FAQ L166:   * cite163†Sales and Marketing L167:     * cite164†Advertising on Steam L168:     * cite165†Best Practices, Marketing L169:     * cite166†Community Moderation L170:       * cite167†Adding Community Moderators L171:     * cite168†Curators and Curator Connect L172:     * cite169†Discounting L173:       * cite170†Daily Deals L174:       * cite171†Free to Keep (100% Discount) L175:       * cite172†Free Weekends L176:       * cite173†Seasonal Sales L177:     * cite174†Events and Announcements Tools L178:       * cite175†Events and Announcements Examples L179:       * cite176†Embeddable Widgets L180:       * cite177†Events and Announcements Review Step L181:       * cite178†Events and Announcements Visibility L182:       * cite179†Events and Announcements Visibility Stats Reporting L183:       * cite180†Event Type: Major Update L184:       * cite181†Event Type: Small Update / Patch Notes L185:       * cite182†Importing HTML L186:       * cite183†Sale Page Tools L187:         * cite184†Sale Page Tools -- Information for Partners L188:         * cite185†Sale Page Tools - Background Groupings L189:         * cite186†Sale Page Tools - Livestreaming (Broadcasting) L190:         * cite187†Sale Page Tools - Minimum Requirements L191:         * cite188†Sale Page Tools - Section Types L192:           * cite189†Sale Page Section: Apps And Bundles L193:     * cite190†Features And Tools, Marketing L194:     * cite191†Followers L195:     * cite192†Google Analytics L196:     * cite193†Points Shop Items L197:     * cite194†Profile Features L198:     * cite195†Steam Branding Guidelines L199:     * cite196†Steam Community Items L200:     * cite197†Store and Platform Traffic Reporting L201:     * cite198†Store Widget L202:     * cite199†Upcoming Steam Events L203:       * cite200†Steam Next Fest L204:         * cite201†Steam Next Fest - Tips L205:         * cite202†Steam Next Fest: February 2027 L206:         * cite203†Steam Next Fest: June 2027 L207:         * cite204†Steam Next Fest: October 2026 L208:       * cite205†Steam Themed Sale Events L209:         * cite206†Steam Auto Battler RPG Fest 2026 L210:         * cite207†Steam Cooking Fest 2026 L211:         * cite208†Steam Couch Co-Op Fest 2027 L212:         * cite209†Steam Desktop Companion Fest 2027 L213:         * cite210†Steam Dinos vs. Robots Fest 2027 L214:         * cite211†Steam Fighting Fest 2027 L215:         * cite212†Steam Medieval Fest 2026 L216:         * cite213†Steam Mountaineering Fest 2027 L217:         * cite214†Steam Party-Based RPG Fest 2026 L218:         * cite215†Steam Programming Fest 2026 L219:         * cite216†Steam PvE Survival Crafting Fest 2026 L220:         * cite217†Steam Racing Fest 2027 L221:         * cite218†Steam Real-Time Strategy Fest 2027 L222:         * cite219†Steam Rhythm Fest 2027 L223:         * cite220†Steam Scream V Fest L224:         * cite221†Steam Sheep Fest 2027 L225:         * cite222†Steam Shop Keeper Fest 2027 L226:         * cite223†Steam Witch Fest 2027 L227:     * cite224†UTM Analytics L228:     * cite225†Visibility on Steam L229:       * cite226†Update Visibility Rounds L230:     * cite227†Wishlists L231:       * cite228†Wishlist Reporting L232:   * cite229†Steamworks SDK L233:     * cite230†Creating and using InstallScripts L234:     * cite231†Creating a retail and "Gold Master" disk L235:     * cite232†Steamworks API Overview L236:       * cite233†Debugging the Steamworks API L237:       * cite234†Steamworks API Example Application (SpaceWar) L238:     * cite235†Updating Game Build L239:       * cite236†Partial Depot Update Instructions L240:       * cite237†Tip - Renaming a live exe L241:     * cite238†Uploading to Steam L242:       * cite239†Distributing Open Source Applications on Steam L243:       * cite240†Distributing Source Engine Games / Mods L244:       * cite241†Distributing Your Dedicated Game Server L245:       * cite242†SteamPipe Local Content Server L246:   * cite243†Web API Overview L247:     * cite244†Authentication using Web API Keys L248:     * cite245†Error Codes &amp;amp; Responses L249:     * cite246†OAuth L250:   * cite247†Accessibility Features L251:   * cite248†Steam Hardware L252:     * cite249†Getting your game ready for Steam Deck and Steam Machine L253:     * cite250†How to debug Windows games on Steam Deck and Steam Machine L254:     * cite251†How to load and run games on Steam Deck and Steam Machine L255:     * cite252†Steam Deck L256:       * cite253†Social Media Templates L257:       * cite254†Steam Deck Brand Guidelines and Logos L258:       * cite255†Steam Deck Developer Kits L259:       * cite256†Steam Deck FAQ L260:       * cite257†Steam Deck SVG Line Art L261:       * cite258†Steamworks Virtual Conference: Steam Deck - Nov 12th 2021 L262:     * cite259†Steam Deck and Steam Machine Compatibility Review L263:       * cite260†Steam Deck Verified Landing Pages L264:     * cite261†Steam Frame L265:       * cite262†Connecting adb to Lepton L266:       * cite263†How to load and run games on Steam Frame L267:       * cite264†How to upload Android APKs to Steam L268:       * cite265†OpenXR Game Engine Integrations L269:         * cite266†Custom Engines L270:         * cite267†Godot L271:         * cite268†Unity L272:         * cite269†Unreal Engine L273:       * cite270†Setting up your Steam Frame for development L274:       * cite271†Steam Frame Controllers L275:       * cite272†Steam Frame Debugging L276:       * cite273†Steam Frame Standalone Compatibility Review Process L277:         * cite274†Performance Assessment Overlay (VR titles) L278:       * cite275†Suggesting default user settings for your game L279:       * cite276†What games can run standalone on Steam Frame L280:     * cite277†Steam Hardware and Proton L281:     * cite278†Steam Machine L282:   * cite279†Steam PC Café Program L283:     * cite280†Licensees L284:       * cite281†PC Café Requirements and Sign Up Instructions L285:       * cite282†Getting Started L286:         * cite283†Setup instructions for the PC Café model (incl. PC Café Server and Content Cache) L287:         * cite284†Setup instructions for the VR arcade model L288:       * cite285†Frequently Asked Questions L289:     * cite286†Publishers L290:   * cite287†Steamworks API Reference L291:     * cite288†ISteamApps Interface L292:     * cite289†ISteamClient Interface L293:     * cite290†ISteamController Interface (Deprecated) L294:     * cite291†ISteamFriends Interface L295:     * cite292†ISteamGameCoordinator Interface L296:     * cite293†ISteamGameServer Interface L297:     * cite294†ISteamGameServerStats Interface L298:     * cite295†ISteamHTMLSurface Interface L299:     * cite296†ISteamHTTP Interface L300:     * cite297†ISteamInput Interface L301:     * cite298†ISteamInventory Interface L302:     * cite299†ISteamMatchmaking Interface L303:     * cite300†ISteamMatchmakingServers Interface L304:     * cite301†ISteamMusic Interface L305:     * cite302†ISteamNetworking Interface L306:     * cite303†ISteamNetworkingMessages Interface L307:     * cite304†ISteamNetworkingSockets Interface L308:     * cite305†ISteamNetworkingUtils Interface L309:     * cite306†ISteamParties Interface L310:     * cite307†ISteamRemotePlay Interface L311:     * cite308†ISteamRemoteStorage Interface L312:     * cite309†ISteamScreenshots Interface L313:     * cite310†ISteamTimeline L314:     * cite311†ISteamUGC Interface L315:     * cite312†ISteamUser Interface L316:     * cite313†ISteamUserStats Interface L317:     * cite314†ISteamUtils Interface L318:     * cite315†ISteamVideo Interface L319:     * cite316†SteamEncryptedAppTicket L320:     * cite317†steamnetworkingtypes.h L321:     * cite318†steam_api.h L322:     * cite319†steam_gameserver.h L323:   * cite320†Steamworks Web API Reference L324:     * cite321†IBroadcastService Interface L325:     * cite322†ICheatReportingService Interface L326:     * cite323†ICloudService Interface L327:     * cite324†IEconMarketService Interface L328:     * cite325†IEconService Interface L329:     * cite326†IGameInventory Interface L330:     * cite327†IGameNotificationsService Interface L331:     * cite328†IGameServersService Interface L332:     * cite329†IInventoryService Interface L333:     * cite330†ILobbyMatchmakingService Interface L334:     * cite331†IPartnerFinancialsService Interface L335:     * cite332†IPlayerService Interface L336:     * cite333†IPublishedFileService Interface L337:     * cite334†ISiteLicenseService Interface L338:     * cite335†ISteamApps Interface L339:     * cite336†ISteamCommunity Interface L340:     * cite337†ISteamEconomy Interface L341:     * cite338†ISteamGameServerStats Interface L342:     * cite339†ISteamLeaderboards Interface L343:     * cite340†ISteamMicroTxn Interface L344:     * cite341†ISteamMicroTxnSandbox Interface L345:     * cite342†ISteamNews Interface L346:     * cite343†ISteamPublishedItemSearch Interface L347:     * cite344†ISteamPublishedItemVoting Interface L348:     * cite345†ISteamRemoteStorage Interface L349:     * cite346†ISteamUserAuth Interface L350:     * cite347†ISteamUser Interface L351:     * cite348†ISteamUserStats Interface L352:     * cite349†ISteamWebAPIUtil Interface L353:     * cite350†IStoreService Interface L354:     * cite351†IWorkshopService Interface L355: User Reviews - Get List
L356: 
L357: cite352†Steamworks Documentation > cite14†Store Presence > cite353†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&quot;,&quot;commentcount&quot;: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&quot;,&quot;commentcount&quot;:25,&quot;tags&quot;:[&quot;curator&quot;,&quot;curator_public&quot;,&quot;audience_followers&quot;]\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 &quot;ghost_rus&quot;  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, and build-destinations-2026-09-06 directories.

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.

Independent verification overview

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:

  • m1 is the first nonempty calendar bucket, not the first thirty days.
  • m3 sums 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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)
citeturn2view0 [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:     * cite308†ISteamRemoteStorage Interface L312:     * cite309†ISteamScreenshots Interface L313:     * cite310†ISteamTimeline L314:     * cite311†ISteamUGC Interface L315:     * cite312†ISteamUser Interface L316:     * cite313†ISteamUserStats Interface L317:     * cite314†ISteamUtils Interface L318:     * cite315†ISteamVideo Interface L319:     * cite316†SteamEncryptedAppTicket L320:     * cite317†steamnetworkingtypes.h L321:     * cite318†steam_api.h L322:     * cite319†steam_gameserver.h L323:   * cite320†Steamworks Web API Reference L324:     * cite321†IBroadcastService Interface L325:     * cite322†ICheatReportingService Interface L326:     * cite323†ICloudService Interface L327:     * cite324†IEconMarketService Interface L328:     * cite325†IEconService Interface L329:     * cite326†IGameInventory Interface L330:     * cite327†IGameNotificationsService Interface L331:     * cite328†IGameServersService Interface L332:     * cite329†IInventoryService Interface L333:     * cite330†ILobbyMatchmakingService Interface L334:     * cite331†IPartnerFinancialsService Interface L335:     * cite332†IPlayerService Interface L336:     * cite333†IPublishedFileService Interface L337:     * cite334†ISiteLicenseService Interface L338:     * cite335†ISteamApps Interface L339:     * cite336†ISteamCommunity Interface L340:     * cite337†ISteamEconomy Interface L341:     * cite338†ISteamGameServerStats Interface L342:     * cite339†ISteamLeaderboards Interface L343:     * cite340†ISteamMicroTxn Interface L344:     * cite341†ISteamMicroTxnSandbox Interface L345:     * cite342†ISteamNews Interface L346:     * cite343†ISteamPublishedItemSearch Interface L347:     * cite344†ISteamPublishedItemVoting Interface L348:     * cite345†ISteamRemoteStorage Interface L349:     * cite346†ISteamUserAuth Interface L350:     * cite347†ISteamUser Interface L351:     * cite348†ISteamUserStats Interface L352:     * cite349†ISteamWebAPIUtil Interface L353:     * cite350†IStoreService Interface L354:     * cite351†IWorkshopService Interface L355: User Reviews - Get List
L356: 
L357: cite352†Steamworks Documentation > cite14†Store Presence > cite353†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 cite51†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 cite354†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=\"{&quot;maintainX&quot;:true,&quot;navKey&quot;:&quot;leftcol&quot;,&quot;flow-children&quot;:&quot;column&quot;}\" 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=\"{&quot;maintainX&quot;:true,&quot;navKey&quot;:&quot;leftcol&quot;,&quot;flow-children&quot;:&quot;column&quot;}\" 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=\"{&quot;EUNIVERSE&quot;:1,&quot;WEB_UNIVERSE&quot;:&quot;public&quot;,&quot;LANGUAGE&quot;:&quot;english&quot;,&quot;COUNTRY&quot;:&quot;BR&quot;,&quot;MEDIA_CDN_COMMUNITY_URL&quot;:&quot;https:\\/\\/shared.fastly.steamstatic.com\\/community_assets\\/&quot;,&quot;MEDIA_CDN_URL&quot;:&quot;https:\\/\\/cdn.fastly.steamstatic.com\\/&quot;,&quot;VIDEO_CDN_URL&quot;:&quot;https:\\/\\/video.fastly.steamstatic.com\\/&quot;,&quot;COMMUNITY_CDN_URL&quot;:&quot;https:\\/\\/community.fastly.steamstatic.com\\/&quot;,&quot;COMMUNITY_CDN_ASSET_URL&quot;:&quot;https:\\/\\/cdn.fastly.steamstatic.com\\/steamcommunity\\/public\\/assets\\/&quot;,&quot;STORE_CDN_URL&quot;:&quot;https:\\/\\/store.fastly.steamstatic.com\\/&quot;,&quot;PUBLIC_SHARED_URL&quot;:&quot;https:\\/\\/store.fastly.steamstatic.com\\/public\\/shared\\/&quot;,&quot;COMMUNITY_BASE_URL&quot;:&quot;https:\\/\\/steamcommunity.com\\/&quot;,&quot;CHAT_BASE_URL&quot;:&quot;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=\"{&quot;focusable&quot;:true,&quot;clickOnActivate&quot;:true}\" role=\"button\" id=\"userReviews_responsive\" style=\"display: none;\" class=\"user_reviews\" onclick=\"window.location='#app_reviews_hash'\">\n<div id=\"bannerLanguages\" data-panel=\"{&quot;focusable&quot;:true,&quot;clickOnActivate&quot;: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=\"{&quot;appid&quot;:915310,&quot;app_release_date&quot;:&quot;1621243691&quot;,&quot;appname&quot;:&quot;SNKRX&quot;,&quot;steamworks_appid&quot;:915310,&quot;app_type&quot;:0,&quot;summary_num_positive_reviews&quot;:3419,&quot;summary_num_reviews&quot;:3621,&quot;summary_options&quot;:{&quot;bHasAnyReviews&quot;:true,&quot;eUserReviewScorePreference&quot;:0,&quot;bCanManageReviewBombs&quot;:false,&quot;bCanEditApp&quot;:false,&quot;summaryDisplayed&quot;:{&quot;nReviews&quot;:3621,&quot;nReviewsPositive&quot;:3419,&quot;eReviewScore&quot;:8,&quot;bFilteredReviews&quot;:true,&quot;nAgeInDays&quot;:0},&quot;bHasLanguageOutliers&quot;:true,&quot;bIsReviewLanguageOutlier&quot;:true,&quot;summaryGlobalNoOutliers&quot;:{&quot;nReviews&quot;:4198,&quot;nReviewsPositive&quot;:3970,&quot;eReviewScore&quot;:8,&quot;bFilteredReviews&quot;:true,&quot;nAgeInDays&quot;:0},&quot;summaryYourLanguage&quot;:{&quot;nReviews&quot;: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)
citeturn3search0 [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)
citeturn3search1 [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)
citeturn3search2 [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)
citeturn3search3 [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)
citeturn3search4 [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)
citeturn3search5 [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)
citeturn3search6 [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/)
citeturn3search7 [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 ()
citeturn4view0 [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.

Selected language distributions

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)
citeturn5view0 [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:       * cite180†Event Type: Major Update L193:     * cite190†Features And Tools, Marketing L194:     * cite191†Followers L195:     * cite192†Google Analytics L196:     * cite193†Points Shop Items L197:     * cite194†Profile Features L198:     * cite195†Steam Branding Guidelines L199:     * cite196†Steam Community Items L200:     * cite197†Store and Platform Traffic Reporting L201:     * cite198†Store Widget L202:     * cite199†Upcoming Steam Events L203:       * cite200†Steam Next Fest L204:         * cite201†Steam Next Fest - Tips L205:         * cite202†Steam Next Fest: February 2027 L206:         * cite203†Steam Next Fest: June 2027 L207:         * cite204†Steam Next Fest: October 2026 L208:       * cite205†Steam Themed Sale Events L209:         * cite206†Steam Auto Battler RPG Fest 2026 L210:         * cite207†Steam Cooking Fest 2026 L211:         * cite208†Steam Couch Co-Op Fest 2027 L212:         * cite209†Steam Desktop Companion Fest 2027 L213:         * cite210†Steam Dinos vs. Robots Fest 2027 L214:         * cite211†Steam Fighting Fest 2027 L215:         * cite212†Steam Medieval Fest 2026 L216:         * cite213†Steam Mountaineering Fest 2027 L217:         * cite214†Steam Party-Based RPG Fest 2026 L218:         * cite215†Steam Programming Fest 2026 L219:         * cite216†Steam PvE Survival Crafting Fest 2026 L220:         * cite217†Steam Racing Fest 2027 L221:         * cite218†Steam Real-Time Strategy Fest 2027 L222:         * cite219†Steam Rhythm Fest 2027 L223:         * cite220†Steam Scream V Fest L224:         * cite221†Steam Sheep Fest 2027 L225:         * cite222†Steam Shop Keeper Fest 2027 L226:         * cite223†Steam Witch Fest 2027 L227:     * cite224†UTM Analytics L228:     * cite225†Visibility on Steam L229:       * cite226†Update Visibility Rounds L230:     * cite227†Wishlists L231:       * cite228†Wishlist Reporting L232:   * cite229†Steamworks SDK L233:     * cite230†Creating and using InstallScripts L234:     * cite231†Creating a retail and "Gold Master" disk L235:     * cite232†Steamworks API Overview L236:       * cite233†Debugging the Steamworks API L237:       * cite234†Steamworks API Example Application (SpaceWar) L238:     * cite235†Updating Game Build L239:       * cite236†Partial Depot Update Instructions L240:       * cite237†Tip - Renaming a live exe L241:     * cite238†Uploading to Steam L242:       * cite239†Distributing Open Source Applications on Steam L243:       * cite240†Distributing Source Engine Games / Mods L244:       * cite241†Distributing Your Dedicated Game Server L245:       * cite242†SteamPipe Local Content Server L246:   * cite243†Web API Overview L247:     * cite244†Authentication using Web API Keys L248:     * cite245†Error Codes &amp;amp; Responses L249:     * cite246†OAuth L250:   * cite247†Accessibility Features L251:   * cite248†Steam Hardware L252:     * cite249†Getting your game ready for Steam Deck and Steam Machine L253:     * cite250†How to debug Windows games on Steam Deck and Steam Machine L254:     * cite251†How to load and run games on Steam Deck and Steam Machine L255:     * cite252†Steam Deck L256:       * cite253†Social Media Templates L257:       * cite254†Steam Deck Brand Guidelines and Logos L258:       * cite255†Steam Deck Developer Kits L259:       * cite256†Steam Deck FAQ L260:       * cite257†Steam Deck SVG Line Art L261:       * cite258†Steamworks Virtual Conference: Steam Deck - Nov 12th 2021 L262:     * cite259†Steam Deck and Steam Machine Compatibility Review L263:       * cite260†Steam Deck Verified Landing Pages L264:     * cite261†Steam Frame L265:       * cite262†Connecting adb to Lepton L266:       * cite263†How to load and run games on Steam Frame L267:       * cite264†How to upload Android APKs to Steam L268:       * cite265†OpenXR Game Engine Integrations L269:         * cite266†Custom Engines L270:         * cite267†Godot L271:         * cite268†Unity L272:         * cite269†Unreal Engine L273:       * cite270†Setting up your Steam Frame for development L274:       * cite271†Steam Frame Controllers L275:       * cite272†Steam Frame Debugging L276:       * cite273†Steam Frame Standalone Compatibility Review Process L277:         * cite274†Performance Assessment Overlay (VR titles) L278:       * cite275†Suggesting default user settings for your game L279:       * cite276†What games can run standalone on Steam Frame L280:     * cite277†Steam Hardware and Proton L281:     * cite278†Steam Machine L282:   * cite279†Steam PC Café Program L283:     * cite280†Licensees L284:       * cite281†PC Café Requirements and Sign Up Instructions L285:       * cite282†Getting Started L286:         * cite283†Setup instructions for the PC Café model (incl. PC Café Server and Content Cache) L287:         * cite284†Setup instructions for the VR arcade model L288:       * cite285†Frequently Asked Questions L289:     * cite286†Publishers L290:   * cite287†Steamworks API Reference L291:     * cite288†ISteamApps Interface L292:     * cite289†ISteamClient Interface L293:     * cite290†ISteamController Interface (Deprecated) L294:     * cite291†ISteamFriends Interface L295:     * cite292†ISteamGameCoordinator Interface L296:     * cite293†ISteamGameServer Interface L297:     * cite294†ISteamGameServerStats Interface L298:     * cite295†ISteamHTMLSurface Interface L299:     * cite296†ISteamHTTP Interface L300:     * cite297†ISteamInput Interface L301:     * cite298†ISteamInventory Interface L302:     * cite299†ISteamMatchmaking Interface L303:     * cite300†ISteamMatchmakingServers Interface L304:     * cite301†ISteamMusic Interface L305:     * cite302†ISteamNetworking Interface L306:     * cite303†ISteamNetworkingMessages Interface L307:     * cite304†ISteamNetworkingSockets Interface L308:     * cite305†ISteamNetworkingUtils Interface L309:     * cite306†ISteamParties Interface L310:     * cite307†ISteamRemotePlay Interface L311:     * cite308†ISteamRemoteStorage Interface L312:     * cite309†ISteamScreenshots Interface L313:     * cite310†ISteamTimeline L314:     * cite311†ISteamUGC Interface L315:     * cite312†ISteamUser Interface L316:     * cite313†ISteamUserStats Interface L317:     * cite314†ISteamUtils Interface L318:     * cite315†ISteamVideo Interface L319:     * cite316†SteamEncryptedAppTicket L320:     * cite317†steamnetworkingtypes.h L321:     * cite318†steam_api.h L322:     * cite319†steam_gameserver.h L323:   * cite320†Steamworks Web API Reference L324:     * cite321†IBroadcastService Interface L325:     * cite322†ICheatReportingService Interface L326:     * cite323†ICloudService Interface L327:     * cite324†IEconMarketService Interface L328:     * cite325†IEconService Interface L329:     * cite326†IGameInventory Interface L330:     * cite327†IGameNotificationsService Interface L331:     * cite328†IGameServersService Interface L332:     * cite329†IInventoryService Interface L333:     * cite330†ILobbyMatchmakingService Interface L334:     * cite331†IPartnerFinancialsService Interface L335:     * cite332†IPlayerService Interface L336:     * cite333†IPublishedFileService Interface L337:     * cite334†ISiteLicenseService Interface L338:     * cite335†ISteamApps Interface L339:     * cite336†ISteamCommunity Interface L340:     * cite337†ISteamEconomy Interface L341:     * cite338†ISteamGameServerStats Interface L342:     * cite339†ISteamLeaderboards Interface L343:     * cite340†ISteamMicroTxn Interface L344:     * cite341†ISteamMicroTxnSandbox Interface L345:     * cite342†ISteamNews Interface L346:     * cite343†ISteamPublishedItemSearch Interface L347:     * cite344†ISteamPublishedItemVoting Interface L348:     * cite345†ISteamRemoteStorage Interface L349:     * cite346†ISteamUserAuth Interface L350:     * cite347†ISteamUser Interface L351:     * cite348†ISteamUserStats Interface L352:     * cite349†ISteamWebAPIUtil Interface L353:     * cite350†IStoreService Interface L354:     * cite351†IWorkshopService Interface L355: User Reviews - Get List
L356: 
L357: cite352†Steamworks Documentation > cite14†Store Presence > cite353†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 cite51†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)
citeturn6search0 [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 ()
citeturn7view0 [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)
citeturn7view1 [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:   * cite0†Documentation Home Page L4:   * cite1†Getting Started L5:     * cite2†Onboarding L6:     * cite3†Steam Direct Fee L7:     * cite4†Managing Your Steamworks Account L8:       * cite5†User Permission: Receive Steamworks Communication L9:     * cite6†Managing Applications L10:       * cite7†Application Management Sharing L11:       * cite8†Transferring Applications L12:     * cite9†Bringing Mobile Games to Steam L13:     * cite10†Content Survey L14:       * cite11†Age Ratings in Indonesia L15:       * cite12†Age Ratings Mandatory in Germany L16:     * cite13†Frequently Asked Questions L17:   * cite14†Store Presence L18:     * cite15†Applications L19:       * cite16†Branches (Betas) L20:       * cite17†Builds L21:       * cite18†Bundles L22:         * cite19†Creating Bundles Across Multiple Developers/Publishers L23:       * cite20†Demos L24:       * cite21†Depots L25:       * cite22†Downloadable Content (DLC) L26:         * cite23†DLC Visibility L27:       * cite24†Game Soundtracks on Steam L28:       * cite25†Packages L29:         * cite26†Autogrant Packages L30:         * cite27†Creating and Configuring Deluxe Packs L31:       * cite28†Platforms L32:         * cite29†Developing for SteamOS and Linux L33:     * cite30†Coming Soon L34:     * cite31†Developer And Publisher Homepages L35:       * cite32†Homepage Example L36:     * cite33†Early Access L37:     * cite34†Explain Your Editions L38:     * cite35†Franchise Pages L39:     * cite36†Free To Play Games L40:     * cite37†Graphical Assets - Overview L41:       * cite38†Artwork Overrides L42:       * cite39†Community and Client Icons L43:       * cite40†Event Graphical Assets L44:       * cite41†Graphical Asset Rules L45:       * cite42†Library Assets L46:       * cite43†Store Graphical Assets L47:     * cite44†Livestreaming L48:       * cite45†Setting Up A Stream L49:       * cite46†Frequently Asked Questions L50:       * cite47†Broadcast Moderation and Adding Moderators L51:       * cite48†Broadcast Viewership Statistics L52:       * cite49†Livestreaming a Game Demo to the Steam Store L53:     * cite50†Localization and Languages L54:       * cite51†Languages Supported on Steam L55:     * cite52†Pre-Purchasing on Steam L56:     * cite53†Pricing L57:       * cite54†Adding A New Currency L58:       * cite55†Package Pricing CSV Import/Export L59:       * cite56†Recurring Subscriptions L60:       * cite57†Supported Currencies L61:     * cite58†Promo Event Tools, Rules, and Guidelines L62:       * cite59†Participating in Third-Party Sales Events L63:       * cite60†Developer, Publisher, and Franchise Sale Pages L64:       * cite61†Hosting Third-Party Sales Events L65:     * cite62†Release Dates L66:     * cite63†Release Options L67:     * cite64†Release Process L68:     * cite65†Removing a product from Steam L69:     * cite66†Review Process L70:     * cite67†Roadmaps L71:     * cite68†Season Passes L72:     * cite69†Steam China L73:     * cite70†Steam Tags L74:     * cite71†Store Page, Building and Editing L75:       * cite72†Store Page Accolades L76:       * cite73†Store Page Extra Asset Management L77:       * cite74†Store Page Written Description L78:     * cite75†Testing On Steam L79:     * cite76†Top Sellers Lists L80:     * cite77†Trailers L81:     * cite78†Updating Your Game - Best Practices L82:     * cite79†User Reviews L83:   * cite80†Features L84:     * cite81†Anti-cheat and Game Bans L85:       * cite82†Anti-Cheat Integration L86:     * cite83†Common Redistributables L87:     * cite84†Enhanced Rich Presence L88:     * cite85†Game Notifications L89:     * cite86†Microtransactions (In-Game Purchases) L90:       * cite87†Microtransactions Implementation Guide L91:       * cite88†Recurring In-Game Billing L92:     * cite89†Multiplayer L93:       * cite90†Game Servers L94:       * cite91†Steam Datagram Relay L95:       * cite92†Steam Matchmaking & Lobbies L96:         * cite93†Matchmaking based on skill L97:       * cite94†Steam Networking L98:     * cite95†Stats and Achievements L99:       * cite96†Step by Step: Achievements L100:       * cite97†Step by Step: Stats L101:     * cite98†Steam Audio L102:     * cite99†Steam Cloud L103:     * cite100†Steam Cloud Play (Beta) L104:     * cite101†Steam Community L105:     * cite102†Steam DRM L106:     * cite103†Steam Error Reporting L107:     * cite104†Steam Families L108:     * cite105†Steam HTML Surface L109:     * cite106†Steam Input L110:       * cite107†Action Manifest Files L111:       * cite108†Action Set Layers L112:       * cite109†Activators L113:       * cite110†Browsing Configurations L114:       * cite111†General Concepts L115:       * cite112†Getting Started for Developers L116:       * cite113†Getting Started for Players L117:       * cite114†In-Game Actions File L118:       * cite115†Input Source Modes L119:       * cite116†Input Sources L120:       * cite117†Legacy Mode Bindings L121:       * cite118†Mode Shifting L122:       * cite119†Mouse Regions L123:       * cite120†Radial Menus L124:       * cite121†Steam Input Devices L125:         * cite122†Microsoft Xbox 360 Controller L126:         * cite123†Microsoft Xbox One Controller L127:         * cite124†Sony PlayStation 4 Controller L128:         * cite125†Steam Controller (2015) L129:       * cite126†Steam Input Gamepad Emulation - Best Practices L130:       * cite127†Templates for In-Game Actions Files L131:       * cite128†Touch Menus L132:       * cite129†Uploading Steam Input Configs to Steam Workshop L133:     * cite130†Steam Inventory Service L134:       * cite131†Steam Inventory Item Accessories L135:       * cite132†Steam Inventory Item Dynamic Properties L136:       * cite133†Steam Inventory Item Store L137:       * cite134†Steam Inventory Item Tags L138:       * cite135†Steam Inventory Item Tools L139:       * cite136†Steam Inventory Schema L140:       * cite137†Steam Inventory Web Functions L141:     * cite138†Steam Keys L142:     * cite139†Steam Leaderboards L143:       * cite140†Step by Step: Leaderboards L144:     * cite141†Steam Overlay L145:     * cite142†Steam Playtest L146:     * cite143†Steam Remote Play L147:     * cite144†Steam Screenshots L148:     * cite145†Steam Timelines L149:     * cite146†Steam Voice L150:     * cite147†Steam Workshop L151:       * cite148†Steam Workshop Implementation Guide L152:       * cite149†Steam Workshop Item Tags L153:       * cite150†Steam Workshop Item Versioning L154:     * cite151†User Authentication and Ownership L155:     * cite152†Virtual Reality L156:       * cite153†SteamVR L157:       * cite154†Application Settings for Virtual Reality L158:       * cite155†SteamVR Input L159:       * cite156†OpenVR L160:       * cite157†SteamVR for Enterprise / Government Use L161:   * cite158†Finance L162:     * cite159†Developer Refund Reporting L163:     * cite160†Reporting and Payments L164:       * cite161†Reporting and Payments FAQ L165:     * cite162†Taxes FAQ L166:   * cite163†Sales and Marketing L167:     * cite164†Advertising on Steam L168:     * cite165†Best Practices, Marketing L169:     * cite166†Community Moderation L170:       * cite167†Adding Community Moderators L171:     * cite168†Curators and Curator Connect L172:     * cite169†Discounting L173:       * cite170†Daily Deals L174:       * cite171†Free to Keep (100% Discount) L175:       * cite172†Free Weekends L176:       * cite173†Seasonal Sales L177:     * cite174†Events and Announcements Tools L178:       * cite175†Events and Announcements Examples L179:       * cite176†Embeddable Widgets L180:       * cite177†Events and Announcements Review Step L181:       * cite178†Events and Announcements Visibility L182:       * cite179†Events and Announcements Visibility Stats Reporting L183:       * cite180†Event Type: Major Update L184:       * cite181†Event Type: Small Update / Patch Notes L185:       * cite182†Importing HTML L186:       * cite183†Sale Page Tools L187:         * cite184†Sale Page Tools -- Information for Partners L188:         * cite185†Sale Page Tools - Background Groupings L189:         * cite186†Sale Page Tools - Livestreaming (Broadcasting) L190:         * cite187†Sale Page Tools - Minimum Requirements L191:         * cite188†Sale Page Tools - Section Types L192:           * cite189†Sale Page Section: Apps And Bundles L193:     * cite190†Features And Tools, Marketing L194:     * cite191†Followers L195:     * cite192†Google Analytics L196:     * cite193†Points Shop Items L197:     * cite194†Profile Features L198:     * cite195†Steam Branding Guidelines L199:     * cite196†Steam Community Items L200:     * cite197†Store and Platform Traffic Reporting L201:     * cite198†Store Widget L202:     * cite199†Upcoming Steam Events L203:       * cite200†Steam Next Fest L204:         * cite201†Steam Next Fest - Tips L205:         * cite202†Steam Next Fest: February 2027 L206:         * cite203†Steam Next Fest: June 2027 L207:         * cite204†Steam Next Fest: October 2026 L208:       * cite205†Steam Themed Sale Events L209:         * cite206†Steam Auto Battler RPG Fest 2026 L210:         * cite207†Steam Cooking Fest 2026 L211:         * cite208†Steam Couch Co-Op Fest 2027 L212:         * cite209†Steam Desktop Companion Fest 2027 L213:         * cite210†Steam Dinos vs. Robots Fest 2027 L214:         * cite211†Steam Fighting Fest 2027 L215:         * cite212†Steam Medieval Fest 2026 L216:         * cite213†Steam Mountaineering Fest 2027 L217:         * cite214†Steam Party-Based RPG Fest 2026 L218:         * cite215†Steam Programming Fest 2026 L219:         * cite216†Steam PvE Survival Crafting Fest 2026 L220:         * cite217†Steam Racing Fest 2027 L221:         * cite218†Steam Real-Time Strategy Fest 2027 L222:         * cite219†Steam Rhythm Fest 2027 L223:         * cite220†Steam Scream V Fest L224:         * cite221†Steam Sheep Fest 2027 L225:         * cite222†Steam Shop Keeper Fest 2027 L226:         * cite223†Steam Witch Fest 2027 L227:     * cite224†UTM Analytics L228:     * cite225†Visibility on Steam L229:       * cite226†Update Visibility Rounds L230:     * cite227†Wishlists L231:       * cite228†Wishlist Reporting L232:   * cite229†Steamworks SDK L233:     * cite230†Creating and using InstallScripts L234:     * cite231†Creating a retail and "Gold Master" disk L235:     * cite232†Steamworks API Overview L236:       * cite233†Debugging the Steamworks API L237:       * cite234†Steamworks API Example Application (SpaceWar) L238:     * cite235†Updating Game Build L239:       * cite236†Partial Depot Update Instructions L240:       * cite237†Tip - Renaming a live exe L241:     * cite238†Uploading to Steam L242:       * cite239†Distributing Open Source Applications on Steam L243:       * cite240†Distributing Source Engine Games / Mods L244:       * cite241†Distributing Your Dedicated Game Server L245:       * cite242†SteamPipe Local Content Server L246:   * cite243†Web API Overview L247:     * cite244†Authentication using Web API Keys L248:     * cite245†Error Codes &amp;amp; Responses L249:     * cite246†OAuth L250:   * cite247†Accessibility Features L251:   * cite248†Steam Hardware L252:     * cite249†Getting your game ready for Steam Deck and Steam Machine L253:     * cite250†How to debug Windows games on Steam Deck and Steam Machine L254:     * cite251†How to load and run games on Steam Deck and Steam Machine L255:     * cite252†Steam Deck L256:       * cite253†Social Media Templates L257:       * cite254†Steam Deck Brand Guidelines and Logos L258:       * cite255†Steam Deck Developer Kits L259:       * cite256†Steam Deck FAQ L260:       * cite257†Steam Deck SVG Line Art L261:       * cite258†Steamworks Virtual Conference: Steam Deck - Nov 12th 2021 L262:     * cite259†Steam Deck and Steam Machine Compatibility Review L263:       * cite260†Steam Deck Verified Landing Pages L264:     * cite261†Steam Frame L265:       * cite262†Connecting adb to Lepton L266:       * cite263†How to load and run games on Steam Frame L267:       * cite264†How to upload Android APKs to Steam L268:       * cite265†OpenXR Game Engine Integrations L269:         * cite266†Custom Engines L270:         * cite267†Godot L271:         * cite268†Unity L272:         * cite269†Unreal Engine L273:       * cite270†Setting up your Steam Frame for development L274:       * cite271†Steam Frame Controllers L275:       * cite272†Steam Frame Debugging L276:       * cite273†Steam Frame Standalone Compatibility Review Process L277:         * cite274†Performance Assessment Overlay (VR titles) L278:       * cite275†Suggesting default user settings for your game L279:       * cite276†What games can run standalone on Steam Frame L280:     * cite277†Steam Hardware and Proton L281:     * cite278†Steam Machine L282:   * cite279†Steam PC Café Program L283:     * cite280†Licensees L284:       * cite281†PC Café Requirements and Sign Up Instructions L285:       * cite282†Getting Started L286:         * cite283†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%.

Catalog expansion and advertised variety

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

Review activity over game lifetimes

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 &amp; 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                    &amp;y                     &amp;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.

Selected developer sequences

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 30Sir, You Are Being Hunted 2,875The Signal From Tölva 791The Light Keeps Us Safe 128.

Compare BeautiFun Games:

Nihilumbra 2,296Megamagic 23Professor Lupo and his Horrible Pets 35Professor 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,761The Hex 4,480Inscryption 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 202Air Forte 8Atom Zombie Smasher 1,108Thirty Flights of Loving 1,282Quadrilateral Cowboy 896Flotilla 2 29Skin 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,274Morphblade 264Heat Signature 6,851Tactical 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 105Valdis Story: Abyssal City 2,275Fae 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,792Downfall 1,455Lorelai 1,440Burnhouse Lane 1,029.

That is a substantial floor with unequal current totals.

Freebird Games has:

To the Moon 69,477A Bird Story 8,206Finding Paradise 18,101Impostor Factory 11,953Just 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:

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/)
citeturn10search0 [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)
citeturn11search0 [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/)
citeturn12search0 [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/)
citeturn13search0 [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/)
citeturn14search0 [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/)
citeturn15search0 [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 ()
citeturn16view0 [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 ()
citeturn16view1 [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 ()
citeturn16view2 [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 ()
citeturn16view3 [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)
citeturn17search0 [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/)
citeturn18view0 [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: cite0†Image†store.fastly.steamstatic.com L1: 
L2: cite1†Image†shared.fastly.steamstatic.com cite1†Image†shared.fastly.steamstatic.com L3: 
L4: cite2†Community Hub†steamcommunity.com L5: 
L6: cite3†Image†shared.akamai.steamstatic.com L7: 
L8: Sylvio
L9: 
L10: cite4†Image: Sylvio†shared.fastly.steamstatic.com L11: 
L12: cite4†Image†shared.fastly.steamstatic.com L13: 
L14: Sylvio
L15: 
L16: Developer
L17: 
L18: cite5†Stroboskop L19: 
L20: Publisher
L21: 
L22: cite6†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: cite7†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/)
citeturn19view0 [wordlim: 200] Crawled: today; Content type: text/html; Source: open({"ref_id":"turn18view2","lineno":5}); Total lines: 145
L0: cite0†Image†store.fastly.steamstatic.com L1: 
L2: cite1†Image†shared.fastly.steamstatic.com cite1†Image†shared.fastly.steamstatic.com L3: 
L4: cite2†Community Hub†steamcommunity.com L5: 
L6: cite3†Image†shared.akamai.steamstatic.com L7: 
L8: AudioSurf
L9: 
L10: cite4†Image: AudioSurf†shared.fastly.steamstatic.com L11: 
L12: cite4†Image†shared.fastly.steamstatic.com L13: 
L14: AudioSurf
L15: 
L16: Developer
L17: 
L18: cite5†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: cite6†Recent Reviews: Very Positive (11) - 90% of the 11 user reviews in the last 30 days are positive. cite6†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 ()
citeturn20view0 [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)
citeturn20view1 [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: cite0†Image†store.akamai.steamstatic.com --------------------------------------------------------------------------------
Internal Error ()
citeturn20view2 [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)
citeturn20view3 [wordlim: 200] Crawled: 2 weeks ago; Content type: text/html; Source: click({"ref_id":"turn19view0","id":5}); Total lines: 1266
L0: cite0†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>

Open artifact

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.