Module 4: Game Library & Discovery frontend - #11
Merged
Conversation
Module 4 is the first module whose E2E manifest requires accessibility checks. Adds the axe-core devDependency and shared fixture, and ignores generated test-results output.
Wires /games (browse, filter, tag/mode/sort, search, load-more) and /games/[gameId] (detail, ComingSoon/tombstone handling, favorite toggle, honestly-disabled entry actions) to the real backend catalog API via a new gamesApi client, and tightens GameArt's prop contract to the real DTO shape.
… profile Connects the dashboard featured card, the composed /search Games tab, and the profile Favorite games tab to the live gamesApi client; updates the legacy mock Game/GameArt call sites in CreateLobbyModal and LandingPage to the tightened prop shape.
First module to enforce the required axe-core accessibility policy surfaced 6 pre-existing violations in the shared shell: icon-only sidebar nav links losing their accessible name in rail mode, a duplicate nested banner landmark, a missing page <h1>, and a muted-text color-contrast failure below AA. Also fixes a Module 1 AuthPage label-association bug and an accessibility-fixture bug that skipped the axe scan on API-only test pages.
Component/unit coverage for gamesApi, LibraryPage, GameDetailPage, and the profile Favorite games tab; a composed end-to-end spec covering browse, favorite, and honestly-disabled entry actions with the required accessibility scan. Fixes a useRouter mock gap in ProfileFriendCount.test.tsx and tightens locator specificity in smoke.spec.ts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
What changed
gamesApiclient +LibraryPage/GameDetailPage(browse, filter, tag/mode/sort, search, load-more, ComingSoon/tombstone handling, favorite toggle, honestly-disabled entry actions naming their real owning module).<h1>, color-contrast) plus a Module 1 AuthPage label-association bug, surfaced because this is the first module to enforce the required accessibility policy.Tests
npx tsc --noEmit: clean.npm run lint: clean.npm run test(vitest): 223/223 passing.module-04-game-library.spec.ts2/2 passed (9.1s),smoke.spec.ts2/2 passed (4.0s) against a live local stack; accessibility scan clean across all pages visited.Security/docs
--security=lightpost-frontend review: zero Critical/High/Medium/Low. 3 Info findings (color-token interpolation, raw-fetch usage for tombstone body, missing client-side search min-length), all confirmed non-exploitable or UX-only.subclaim.Risks/deferred
mock/games.tsnot deleted: 5 out-of-scope consumers (owned by Modules 6/7/9) still depend on it;GameArtwas tightened instead with minimal inline adapters at in-scope call sites.GameDetailPageuses localnotFoundMessagestate instead of Next.jsnotFound(); the mandatory fallback-removal part of the underlying risk is satisfied..page-titlediv instead of<h1>; only Profile (the page this run's a11y scan exercised) was converted — flagged as a separate follow-up.docs/ai-workflow/evidence/module-04-game-library-discovery-run-2026-07-10T18-17-48-742Z-304902dc-abd4-4cd5-a4a2-77ea3e9d2233.json(workflow repo, not part of this PR).