Skip to content

fix(version-picker): disable versions missing from RomM#1575

Merged
danielcopper merged 3 commits into
mainfrom
fix/1570-version-picker
Jul 24, 2026
Merged

fix(version-picker): disable versions missing from RomM#1575
danielcopper merged 3 commits into
mainfrom
fix/1570-version-picker

Conversation

@danielcopper

Copy link
Copy Markdown
Owner

What this is

PR 3 of #1570. Retained local ROM rows no longer masquerade as live, selectable versions after RomM drops their ids. Availability is recomputed whenever the Game Page lazily loads the version list; it is never persisted.

What changed

  • The bound ROM detail request establishes whether the active id is still available and supplies RomM's direct sibling view.
  • Local members absent from that direct view are confirmed concurrently through exact-id, single-attempt get_rom probes. If the bound id itself returns 404, every other local member is probed individually.
  • Only RommNotFoundError marks a version vanished; every non-404 failure fails open.
  • Vanished rows remain visible with their local state, but are dimmed, labelled No longer available on RomM, disabled, and excluded from Default ranking.
  • vanished remains separate from switchable, preserving sibling-group membership semantics.
  • A bound 404 returns bound_vanished: true without reporting RomM offline or updating the global connection state.
  • SavesTab excludes vanished versions from its stranded-save advice while continuing to inspect live inactive installs.
  • The deferred artwork cleanup now reports a missing/falsy ROM as not_found instead of server_unreachable; artwork remains data-only and is not used as liveness evidence.

The version-switch commit guard and deletion/purge behavior remain in PRs 4 and 5.

Safety

Liveness probes use the existing three-second request_once path on the executor fan-out, so they neither retry nor block the event loop. Direct sibling presence is a positive server statement; absence alone never proves disappearance because sibling groups can be transitive.

A restored database or visibility change can make the same id available again. The next list load recomputes the result and removes vanished automatically.

Docs

Updated the backend and Steam-shortcut architecture pages plus the managing-games and save-sync user guides. Frozen ADR history remains unchanged.

Verification

mise run gate passed on the final code state:

  • 6334 backend tests
  • 2244 frontend tests
  • Ruff and basedpyright clean
  • TypeScript, ESLint, Prettier, Deno, build, size limit, import contracts, and repository invariant checks passed

The subsequent documentation wording correction passed focused Markdown formatting, link, whitespace, backend, frontend, and 404-classification checks. Final review found no remaining issues.

On-device verification

Open a Game Page whose shortcut is bound to a RomM id that was removed while a replacement version remains in the local sibling group. The page should render without waiting for liveness probes; the removed version should remain visible but disabled, the live replacement should remain selectable, and RomM must not be reported offline.

Closes part of #1570.

@github-actions github-actions Bot added area:artwork SteamGridDB artwork area:ui Frontend UI, game detail page area:architecture Code structure, refactoring labels Jul 24, 2026
@sonarqubecloud

Copy link
Copy Markdown

@danielcopper
danielcopper merged commit a10e2ab into main Jul 24, 2026
18 checks passed
@danielcopper
danielcopper deleted the fix/1570-version-picker branch July 24, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:architecture Code structure, refactoring area:artwork SteamGridDB artwork area:ui Frontend UI, game detail page

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant