From c89dbe7f7d04111e0321c8bfde300f58d68f0d27 Mon Sep 17 00:00:00 2001 From: ginnoir Date: Mon, 10 Aug 2026 21:01:51 -0500 Subject: [PATCH] data: sync catalog to 411 hacks + refresh fixture counts Adds Soulgold, Unchosen, Soulstones, and Soulstones 2: Time Wardens, plus the new `RPG Maker MV` base route. Playwright fixtures were two entries stale from the Timeless Diamond / Spaceless Pearl sync, so they are reset to measured counts rather than deltas: 411 total, GBA 205, PC 86, NDS 52, Expansion 169, New Experience 179, QoL 97, Complete 348, and the toHaveCount assertions (411 / GBA 205). Verified: npm run check (0 errors, vitest 9/9), npm run build (486 pages, banners 411/411), CI=1 npm run test:ui (8/8). Co-Authored-By: Claude Opus 5 --- data/catalog.json | 316 ++++++++++++++++++++++++----- src/generated/banner-manifest.json | 6 +- tests/catalog.spec.ts | 24 +-- 3 files changed, 286 insertions(+), 60 deletions(-) diff --git a/data/catalog.json b/data/catalog.json index e78c5ce..e21dd39 100644 --- a/data/catalog.json +++ b/data/catalog.json @@ -1,10 +1,10 @@ { - "generated": "2026-07-19", - "count": 407, + "generated": "2026-08-10", + "count": 411, "facets": { "platform": { - "GBA": 204, - "PC": 83, + "GBA": 205, + "PC": 86, "NDS": 52, "GBC": 37, "3DS": 15, @@ -16,8 +16,8 @@ }, "base": { "FireRed": 101, - "Emerald": 87, - "RPG Maker XP / Pokemon Essentials": 81, + "Emerald": 88, + "RPG Maker XP / Pokemon Essentials": 83, "Crystal": 27, "Ruby": 10, "HeartGold": 9, @@ -56,6 +56,7 @@ "Let's Go Pikachu / Eevee": 1, "Moon": 1, "Pearl": 1, + "RPG Maker MV": 1, "RPG Maker XP / Pokemon Studio / SDK": 1, "Scarlet / Violet": 1, "Stadium": 1, @@ -66,13 +67,13 @@ "Ultra Sun": 1 }, "status": { - "Complete": 344, + "Complete": 348, "Beta": 32, "Ongoing": 30, "Complete (beta)": 1 }, "engine": { - "pokeemerald-expansion": 7, + "pokeemerald-expansion": 8, "pokeemerald-expansion (likely)": 6, "CFRU + DPE": 3, "CFRU + DPE (likely)": 2, @@ -84,18 +85,18 @@ "pokeemerald (decomp, likely)": 1 }, "type": { - "New Experience": 176, - "Expansion": 168, + "New Experience": 179, + "Expansion": 169, "Difficulty": 127, - "QoL": 94, - "Vanilla+": 29, + "QoL": 97, + "Vanilla+": 30, "Cosmetic": 13, "Demake": 11, "Roguelite": 7, "Crossover": 2 }, "play_status": { - "Unplayed": 395, + "Unplayed": 399, "Completed": 7, "Backlog": 3, "Dropped": 1, @@ -1786,7 +1787,7 @@ "fakemon": "Yes", "developer": "MrGrossi", "release_date": "2022", - "banner": "https://www.pokeharbor.com/wp-content/uploads/2021/09/Pokemon_Bizarre_Version_01.png", + "banner": "https://hack-haven.com/wp-content/uploads/2024/02/pokemon-bizarre-cover.webp", "source": "https://www.mediafire.com/file/lox59f4nubxflw6/Pokemon_Bizarre_ENGLISH.zip/file", "library_path": "roms/windows/Pokemon - Bizarre [Hack].zip", "play_status": "Unplayed", @@ -11239,7 +11240,7 @@ "fakemon": "No", "developer": "WackyTurtle", "release_date": "2021", - "banner": "https://i1090.photobucket.com/albums/i371/wackyturtle/Legends%20of%20the%20Arena/Map.png", + "banner": "https://i.imgur.com/UR1moie.png", "homepage": "https://eeveeexpo.com/legends-of-the-arena/", "source": "https://www.pokecommunity.com/threads/pok%C3%A9mon-legends-of-the-arena.298738/", "library_path": "roms/windows/Pokemon - Legends of the Arena [Hack].zip", @@ -15503,24 +15504,16 @@ "title": "Pokémon Prism", "platform": "GBC", "base": "Crystal", - "version": "0.95.0254", + "version": "1.0", "status": "Complete", "generation": "Gen 2+", - "fakemon": "No", "developer": "RainbowDevs", "release_date": "2023", "banner": "https://romhacks-files.ginnoir.com/_meta/Pok_mon_Prism/pokemon-prism-gbc-1-fdef6771d192fc86.png", - "homepage": "https://rainbowdevs.com/title/prism/", - "source": "https://rainbowdevs.com/title/prism/", - "library_path": "roms/gbc/Pokemon - Prism [Hack].gbc", + "source": "https://www.pokecommunity.com/threads/pokemon-prism.379413/", + "library_path": "roms/gbc/Hacks/Pokemon - Prism (Hack).gbc", "play_status": "Unplayed", "scrape_dir": "Pok_mon_Prism", - "generations": [ - "Gen I", - "Gen II", - "Gen III", - "Gen IV" - ], "type": [ "New Experience" ], @@ -15529,34 +15522,20 @@ "platform/gbc", "base/crystal", "status/complete", - "type/newexperience", - "source/discord" + "type/newexperience" ], - "summary": "Pokemon Prism is RainbowDevs' completed continuation of Koolboyman's Crystal-based Naljo-region hack. The modern community release preserves the ambitious Gen II engine project with trainer customization, mining and side systems, a multi-region campaign, new mechanics, a large cross-generation roster, and ongoing RainbowDevs maintenance.", + "summary": "Koolboyman's acclaimed new Naljo region — new types, side games, huge custom dex. Famously C&D'd then completed; a Gen 2 magnum opus.", "notability": "", "story": "", - "features": [ - "Crystal-based GBC adventure set in Naljo, with later releases maintained by RainbowDevs after the original project was cancelled.", - "Adds trainer customization, mining, side-scrolling areas, minigames, new mechanics, new types, and the ability to play as a Pokemon in selected sections.", - "Features a large cross-generation roster documented by RainbowDevs as up to 251 monsters, plus up to six regions and up to twenty badges.", - "Official resources include the RainbowDevs title page, download, changelog, how-to-play instructions, Discord, and PokeCommunity thread." - ], + "features": [], "links": [ { "label": "Source / info", "url": "https://www.pokecommunity.com/threads/pokemon-prism.379413/" }, { - "label": "RainbowDevs official page", - "url": "https://rainbowdevs.com/title/prism/" - }, - { - "label": "PokeCommunity", - "url": "https://www.pokecommunity.com/threads/pok%C3%A9mon-prism.503778/" - }, - { - "label": "Changelog", - "url": "https://rainbowdevs.com/title/prism/changelog/" + "label": "Lookup", + "url": "https://duckduckgo.com/?q=Pok%C3%A9mon%20Prism%20rom%20hack" } ] }, @@ -19309,6 +19288,69 @@ } ] }, + { + "stem": "Soulgold", + "title": "Pokémon Soulgold", + "platform": "GBA", + "base": "Emerald", + "version": "1.0.3", + "status": "Complete", + "generation": "Johto", + "fakemon": "No", + "developer": "rahtak", + "release_date": "2026-08-10", + "banner": "https://images.hackdex.app/soulgold/1785089726703-0.png", + "homepage": "https://www.hackdex.app/hack/soulgold", + "source": "https://www.hackdex.app/hack/soulgold", + "library_path": "roms/gba/Pokemon - Soulgold [Hack].gba", + "play_status": "Unplayed", + "engine": "pokeemerald-expansion", + "generations": [ + "Gen I", + "Gen II", + "Gen III", + "Gen IV", + "Gen V", + "Gen VI", + "Gen VII", + "Gen VIII", + "Gen IX" + ], + "type": [ + "Vanilla+", + "Expansion", + "QoL" + ], + "tags": [ + "hack", + "platform/gba", + "base/emerald", + "status/complete", + "type/vanillaplus", + "type/expansion", + "type/qol", + "source/hackdex" + ], + "summary": "Soulgold is rahtak's expanded, purely Johto-focused Emerald hack — a traditional Pokémon adventure that keeps the classic structure while layering on a large body of quality-of-life and postgame content. It is built on an **unofficial pokeemerald-expansion port of [[Heart and Soul]]** (smithk200 ported most of HnS to the expansion) and is explicitly *not* affiliated with the official Heart and Soul 2.0 release. The main game plays as a conventional Johto journey; the postgame introduces multi-ability learning and a deep set of facilities and challenges.", + "notability": "", + "story": "A traditional Johto adventure with additional story content layered over the familiar Gen 2 route, expanded with new areas to explore.", + "features": [ + "Fresh tileset for the entirety of Johto, plus expanded areas and new experiences beyond the base Johto map.", + "9 starters to choose from, with new Mega Evolutions authored for starters that lacked them (Typhlosion, Meowscarada, Primarina); all Mega Evolutions available via type-generic megastones.", + "Main-game and postgame battle facilities drawing on Pokémon from all generations — the Battle Factory opens after Gym 3 — plus a Rocket Arcade that pays out money instead of BP.", + "Boss Pokémon: some legendary fights have multiple health bars and hit harder, but are guaranteed catchable with any ball once defeated. Multiple legendaries appear in both the main game and postgame.", + "Hidden Grottos with rare items and Pokémon that reset daily; fishing for items including IV-raising feathers.", + "Achievement system with 100+ trophies and milestone rewards; a Title Defense system so the Elite Four champion is no longer a fixed rematch.", + "Many HGSS features return — Cameron the Cameraman, Buena's password, the Pokégear, and Rock Smash fossils.", + "Extensive QoL: optional level caps, multiple pages of difficulty/playstyle options, combined stat-change messages and faster battle tempo, music that resumes after battles instead of restarting, unique battle frame colour for shinies, reusable TMs, revised trade evolutions, HM improvements, visible IVs/EVs, DexNav, and following Pokémon." + ], + "links": [ + { + "label": "browser patcher", + "url": "https://www.hackdex.app/hack/soulgold" + } + ] + }, { "stem": "Soulsilver Fusion", "title": "Pokémon Soulsilver Fusion", @@ -19358,6 +19400,128 @@ } ] }, + { + "stem": "Soulstones 2 - Time Wardens", + "title": "Pokémon Soulstones 2: Time Wardens", + "platform": "PC", + "base": "RPG Maker XP / Pokemon Essentials", + "version": "2.05", + "status": "Complete", + "generation": "Essentials v20.1", + "fakemon": "Yes", + "developer": "Jos_Louis + Time Wardens team", + "release_date": "2026-06-30", + "banner": "https://data.pokecommunity.com/attachments/104/104600-897b1606c194b2e95ff1578d5597e96b.jpg", + "homepage": "https://www.pokecommunity.com/threads/pokemon-soulstones-2-time-wardens-post-game-released.501217/", + "source": "https://www.pokecommunity.com/threads/pokemon-soulstones-2-time-wardens-post-game-released.501217/", + "library_path": "roms/windows/Pokemon - Soulstones 2 - Time Wardens [Hack].zip", + "play_status": "Unplayed", + "generations": [ + "Fakemon" + ], + "type": [ + "New Experience", + "QoL" + ], + "tags": [ + "hack", + "platform/pc", + "base/rpgmakerxp/pokemonessentials", + "status/complete", + "type/newexperience", + "type/qol", + "source/pokecommunity" + ], + "summary": "The sequel to [[Soulstones]], this time built by a team rather than solo, off Essentials v20.1. Its\ndefining feature is a Pokédex of **over 1,100 regional variants and nothing else** — no canon forms\nappear at all, making the roster larger than the official National Dex. Around it sits three new\ntypes, a rune-based ability system, raid content, and roughly 50 hours of story. Like the first game\nit is a narrative RPG rather than a gym/league run, and the developer recommends playing Soulstones 1\nfirst for the plot to land.\n\n> [!warning] Content warning\n> The developer notes the game contains mature themes, including coarse language and violence.", + "notability": "", + "story": "A voice calls out to you in your sleep the night before your 21st birthday — vulnerable, in trouble,\nasking to be found. You are drawn into helping a visitor from an alternate universe unravel the aims\nof the Ethereal Guild, a loose band of mercenaries, pirates, and profiteers with ambitions of\nintertemporal dominance. Their organisation works from the shadows, but its influence runs deeper\nthan anyone expected, and the stability of the Orion region is what's at stake.", + "features": [ + "A Pokédex of 1,100+ regional variants and **only** regional variants — no canon forms at all.", + "Three new types — **Cosmic, Sound, and Light** — with an adjusted type chart and new moves and abilities for both the new types and existing ones.", + "Generation 4-style graphics; Mega Evolution; roughly 50 hours of content.", + "Story-driven RPG progression rather than a gym/league challenge, with returning multi-step side quests that form self-contained \"mini-stories\".", + "New held-item **\"Rune\" system** that swaps a Pokémon's ability to one of several options (not all abilities available).", + "Raid Dens and Raid Adventures; Boss Shields with effects on shield break.", + "210 TMs and 130 tutor moves, surfaced through a custom \"Tutor.net\" UI that shows per-Pokémon compatibility in game.", + "New \"Sword\" held items (Freeze-Dry-like coverage) and \"Shield\" items that halve incoming move effectiveness; Frostbite replaces the Freeze status.", + "Time Warden's Gauntlet — consecutive battles against the dev team — and an Achievement Point shop for in-game prizes.", + "Revised difficulty options (modular damage reduction on Standard, exp-curve changes), community-made custom battlebacks, and scripts including Voltseon's pause menu, Encounters UI, Randomizer X, multiple save files, and a Quest Log UI." + ], + "links": [ + { + "label": "PokéCommunity thread", + "url": "https://www.pokecommunity.com/threads/pokemon-soulstones-2-time-wardens-post-game-released.501217/" + }, + { + "label": "Discord", + "url": "https://discord.gg/UNnkvJb" + } + ] + }, + { + "stem": "Soulstones", + "title": "Pokémon Soulstones", + "platform": "PC", + "base": "RPG Maker XP / Pokemon Essentials", + "version": "2.0.5", + "status": "Complete", + "generation": "Essentials v17.2", + "fakemon": "Yes", + "developer": "Jos_Louis", + "release_date": "2023-10-21", + "banner": "https://i.imgur.com/bXn55C9.png", + "homepage": "https://www.pokecommunity.com/threads/pokemon-soulstones-postgame-released.440329/", + "source": "https://www.pokecommunity.com/threads/pokemon-soulstones-postgame-released.440329/", + "library_path": "roms/windows/Pokemon - Soulstones [Hack].zip", + "play_status": "Unplayed", + "generations": [ + "Gen I", + "Gen II", + "Gen III", + "Gen IV", + "Gen V", + "Gen VI", + "Gen VII", + "Fakemon" + ], + "type": [ + "New Experience", + "QoL" + ], + "tags": [ + "hack", + "platform/pc", + "base/rpgmakerxp/pokemonessentials", + "status/complete", + "type/newexperience", + "type/qol", + "source/pokecommunity" + ], + "summary": "Pokémon Soulstones is Jos_Louis' first solo fan game, begun in February 2020 and released that\nSeptember. It is a heavily narrative-driven RPG rather than a gym-and-league challenge: a\ntime-travel plot across two versions of the same region, wrapped around a Gen-3-styled world running\nGen 7 mechanics. Its headline content is scale — a 1,030-entry National Pokédex including **200+\ncustom-made regional variants** and **65+ custom Mega Evolutions** on top of the canon ones, plus\n125+ side quests. The postgame release closed the project out; development moved to the sequel,\n[[Soulstones 2 - Time Wardens]].\n\n> [!warning] Content warning\n> The developer notes the game contains mature themes, including coarse language and violence.", + "notability": "", + "story": "You are an Agent of the Republican Agency, sent back from the year 3564 CE to the 21st century under\norders to track down powerful trainers known as Soul Keepers and recover their sacred pendants — the\nSoulstones — which hold legendary power and can command the loyalty of certain Mythical Pokémon. What\nyou find instead is that you have been dropped into a much older conflict between two ancient\nfactions: one working to unleash an evil on the world, the other desperately trying to keep it from\nreturning to the Epoch Region.", + "features": [ + "Generations 1–7 included, with the Fairy type, Mega Evolution, and a level cap of 175.", + "Roughly 25 hours of main-game content plus another 10 in the postgame.", + "Gen 3-style game world running mechanics and abilities up to Gen 7; day/night cycle, on-map encounter viewing, and Hidden Grottos.", + "Two regions: \"Epoch — Present Day\" in the main game, and \"Epoch 3564\" unlocked in the postgame.", + "Story-first progression — not a conventional gym/league challenge.", + "Starters selectable from Gen 1–7, each given new abilities; Pokémon with Epoch regional variants also received stat boosts to make them viable picks.", + "Over 200 custom-made regional variants for a 1,030-entry National Pokédex (Legendary, Mythical, and Ultra Beast species are not obtainable in this release).", + "Over 65 custom Mega Evolutions in addition to the canon ones.", + "Over 125 side quests that push exploration and collection beyond the critical path." + ], + "links": [ + { + "label": "PokéCommunity thread", + "url": "https://www.pokecommunity.com/threads/pokemon-soulstones-postgame-released.440329/" + }, + { + "label": "Discord", + "url": "https://discord.gg/UNnkvJb" + } + ] + }, { "stem": "Sour Crystal", "title": "Pokémon Sour Crystal", @@ -22184,6 +22348,64 @@ } ] }, + { + "stem": "Unchosen", + "title": "Pokémon Unchosen", + "platform": "PC", + "base": "RPG Maker MV", + "version": "1.5.8", + "status": "Complete", + "generation": "Tactical RPG", + "fakemon": "No", + "developer": "Aldrine (Aldrine_Art)", + "release_date": "2026-06-05", + "banner": "https://i.imgur.com/ww5a5eL.png", + "homepage": "https://aldrine.itch.io/pokemon-unchosen", + "source": "https://www.pokecommunity.com/threads/pokemon-unchosen-tactical-rpg-eng-fra.542522/", + "library_path": "roms/windows/Pokemon - Unchosen [Hack].zip", + "play_status": "Unplayed", + "generations": [ + "Gen I", + "Gen II", + "Gen IV" + ], + "type": [ + "New Experience" + ], + "tags": [ + "hack", + "platform/pc", + "base/rpgmakermv", + "status/complete", + "type/newexperience", + "source/pokecommunity" + ], + "summary": "Pokémon Unchosen is a French/English fan game that rebuilds Pokémon as a **grid-based tactical RPG**, drawing on Dofus and Final Fantasy Tactics rather than the mainline formula. Built in RPG Maker MV with the LeTBS plugin, it moves your whole team around a battlefield using movement points in turn-based combat, spending action points to use abilities. Damage calculation, EVs, and the surrounding systems were all reworked to fit the new style. Development began in January 2025; the English release landed alongside a new launcher in mid-2026.", + "notability": "", + "story": "In a reimagined Kanto, you play *as the Pokémon* that neither Red nor Blue chose. Sent out on a journey by Professor Oak, you set out to prove you can surpass any Pokémon under a Trainer's control — while a larger threat gathers over Kanto and its mystery falls to you to unravel.", + "features": [ + "Full tactical-RPG combat via the LeTBS plugin: position your team with movement points, spend action points on abilities, in turn-based grid battles. Damage, EVs, and related mechanics were rebuilt around it.", + "**Local co-op** — a second player can join on the same screen and control one of the team's Pokémon, both while exploring and mid-battle.", + "Roster of all Generation 1 Pokémon and their evolutions, plus a hand-picked selection added during development (Lucario, the Gen 2 starters, and others).", + "\"Chroma Charms\" — lootable items that turn a Pokémon Shiny; the game also has its own alternate Shiny forms. Mega Evolution is included.", + "Side systems: crafting, crop cultivation, mini-games, and card-pack openings.", + "Ships in English and French. Playable on Windows, and on Android through JoiPlay with the RPG Maker plugin." + ], + "links": [ + { + "label": "PokéCommunity thread", + "url": "https://www.pokecommunity.com/threads/pokemon-unchosen-tactical-rpg-eng-fra.542522/" + }, + { + "label": "", + "url": "https://aldrine.itch.io/pokemon-unchosen" + }, + { + "label": "Discord", + "url": "https://discord.gg/mGbscsSfXv" + } + ] + }, { "stem": "Unova Emerald", "title": "Pokémon Unova Emerald", @@ -22234,14 +22456,14 @@ "title": "Pokémon Uranium", "platform": "PC", "base": "RPG Maker XP / Pokemon Essentials", - "version": null, + "version": "1.2.5", "status": "Complete", "generation": null, "fakemon": "Yes", "banner": "https://romhacks-files.ginnoir.com/_meta/Pokemon_Uranium/pokemon_uranium_fi-dea83ecc017e53e8.png", "homepage": "https://pokemonuranium.co/", "source": "https://pokemon-uranium.fandom.com/wiki/Main_Page", - "library_path": "roms/windows/Pokemon - Uranium [Hack][Installer].zip", + "library_path": "roms/windows/Pokemon - Uranium [Hack][1.2.5].zip", "play_status": "Unplayed", "scrape_dir": "Pokemon_Uranium", "generations": [ diff --git a/src/generated/banner-manifest.json b/src/generated/banner-manifest.json index dbaaaeb..ef1c54c 100644 --- a/src/generated/banner-manifest.json +++ b/src/generated/banner-manifest.json @@ -27,7 +27,7 @@ "big-blue": "/assets/banners/big-blue.png", "binary-sun": "/assets/banners/binary-sun.png", "birch-s-folly": "/assets/banners/birch-s-folly.jpg", - "bizarre": "/assets/banners/bizarre.png", + "bizarre": "/assets/banners/bizarre.webp", "black-2-silly-edition": "/assets/banners/black-2-silly-edition.png", "black-boost": "/assets/banners/black-boost.png", "black-pearl-emerald": "/assets/banners/black-pearl-emerald.png", @@ -321,7 +321,10 @@ "soothing-silver": "/assets/banners/soothing-silver.png", "sors-2": "/assets/banners/sors-2.webp", "sors": "/assets/banners/sors.webp", + "soulgold": "/assets/banners/soulgold.png", "soulsilver-fusion": "/assets/banners/soulsilver-fusion.jpg", + "soulstones-2-time-wardens": "/assets/banners/soulstones-2-time-wardens.jpg", + "soulstones": "/assets/banners/soulstones.png", "sour-crystal": "/assets/banners/sour-crystal.jpg", "sovereign-of-the-skies": "/assets/banners/sovereign-of-the-skies.webp", "space-world-crystal": "/assets/banners/space-world-crystal.jpg", @@ -372,6 +375,7 @@ "ultra-something": "/assets/banners/ultra-something.webp", "unbound": "/assets/banners/unbound.jpg", "unbreakable-ties": "/assets/banners/unbreakable-ties.jpg", + "unchosen": "/assets/banners/unchosen.png", "unova-emerald": "/assets/banners/unova-emerald.webp", "uranium": "/assets/banners/uranium.png", "utopia": "/assets/banners/utopia.png", diff --git a/tests/catalog.spec.ts b/tests/catalog.spec.ts index 2a22feb..f7b91ec 100644 --- a/tests/catalog.spec.ts +++ b/tests/catalog.spec.ts @@ -11,20 +11,20 @@ test('homepage presents balanced navigation and facet summaries', async ({ page await expect(primaryNav.getByRole('link', { name: 'Difficulty' })).toHaveCount(0); const heroStats = page.locator('.hero-stats'); - await expect(heroStats).toContainText('405'); + await expect(heroStats).toContainText('411'); await expect(heroStats).toContainText('hacks'); await expect(heroStats).toContainText('Platforms'); - await expect(heroStats).toContainText('GBA 204'); - await expect(heroStats).toContainText('PC 83'); - await expect(heroStats).toContainText('NDS 50'); + await expect(heroStats).toContainText('GBA 205'); + await expect(heroStats).toContainText('PC 86'); + await expect(heroStats).toContainText('NDS 52'); await expect(heroStats).toContainText('GBC 37'); await expect(heroStats).toContainText('Types'); - await expect(heroStats).toContainText('Expansion 166'); - await expect(heroStats).toContainText('New Experience 174'); + await expect(heroStats).toContainText('Expansion 169'); + await expect(heroStats).toContainText('New Experience 179'); await expect(heroStats).toContainText('Difficulty 127'); - await expect(heroStats).toContainText('QoL 94'); + await expect(heroStats).toContainText('QoL 97'); await expect(heroStats).toContainText('Status'); - await expect(heroStats).toContainText('Complete 342'); + await expect(heroStats).toContainText('Complete 348'); await expect(heroStats).toContainText('Ongoing 30'); await expect(heroStats).toContainText('Beta 32'); }); @@ -71,12 +71,12 @@ test('homepage browse summary links to grouped facet pages', async ({ page }) => const browse = page.getByRole('region', { name: 'Browse by catalog facets' }); await expect(browse.getByRole('heading', { name: 'Browse the archive' })).toBeVisible(); - await expect(browse.getByRole('link', { name: /GBA\s+204/ })).toHaveAttribute('href', '/browse/platform/gba/'); + await expect(browse.getByRole('link', { name: /GBA\s+205/ })).toHaveAttribute('href', '/browse/platform/gba/'); await expect(browse.getByRole('link', { name: /Difficulty\s+127/ })).toHaveAttribute( 'href', '/browse/type/difficulty/', ); - await expect(browse.getByRole('link', { name: /Complete\s+342/ })).toHaveAttribute( + await expect(browse.getByRole('link', { name: /Complete\s+348/ })).toHaveAttribute( 'href', '/browse/status/complete/', ); @@ -88,7 +88,7 @@ test('catalog search and filters update visible card count', async ({ page }) => await expect(page).toHaveTitle(/ROM Hack Archive/); await expect(page.getByRole('heading', { name: 'ROM Hack Archive' })).toBeVisible(); const catalogCards = page.locator('[data-card-grid] [data-card]:visible'); - await expect(catalogCards).toHaveCount(405); + await expect(catalogCards).toHaveCount(411); await page.getByPlaceholder('Search hacks').fill('Radical Red'); await expect(catalogCards).toHaveCount(5); @@ -96,7 +96,7 @@ test('catalog search and filters update visible card count', async ({ page }) => await page.getByPlaceholder('Search hacks').fill(''); await page.getByLabel('GBA').check(); - await expect(catalogCards).toHaveCount(204); + await expect(catalogCards).toHaveCount(205); await page.getByLabel('Difficulty').check(); await expect(catalogCards.first()).toBeVisible();