Skip to content

Fix Steam installed-game path resolution for placeholder manifests#41

Open
weter11 wants to merge 5 commits into
mainfrom
fix-steam-installdir-resolution-v2-3770141383720990255
Open

Fix Steam installed-game path resolution for placeholder manifests#41
weter11 wants to merge 5 commits into
mainfrom
fix-steam-installdir-resolution-v2-3770141383720990255

Conversation

@weter11
Copy link
Copy Markdown
Owner

@weter11 weter11 commented Apr 19, 2026

The launcher was failing to find the executable for some games (e.g., Portal: Prelude RTX) because the Steam manifest's installdir field contained a placeholder like App 2410180 instead of the actual directory name.

I've implemented a more robust resolution strategy:

  1. Identify if the manifest-provided installdir is a placeholder.
  2. If it's a placeholder or the directory doesn't exist, scan the common folder for a directory containing steam_appid.txt with the correct ID or a directory name containing the ID.
  3. Track the resolution method and manifest validity in the game models for better diagnostics.

This fix ensures games with broken manifests can still be launched correctly.


PR created automatically by Jules for task 3770141383720990255 started by @weter11

This change improves how the launcher resolves game installation directories
from Steam manifests. It no longer blindly trusts the `installdir` field,
which can sometimes contain placeholder values like "App <appid>".

Key changes:
- Added `is_suspicious_installdir` to identify placeholder directory names.
- Generalized `probe_install_dir_by_appid` in `src/utils.rs` to find
  installation directories using `steam_appid.txt` or partial name matches.
- Updated library scanning in `src/library.rs` to validate manifest paths
  and fall back to probing if they are suspicious or missing.
- Enhanced `InstalledAppInfo` and `LocalGame` models with diagnostic fields
  to track how the installation directory was resolved.
- Refactored `src/steam_client.rs` to use the unified probing logic.
- Added regression tests in `tests/repro_issue.rs`.
- Replaced `println!` with `tracing::info!` and optimized string handling.

Co-authored-by: weter11 <14630689+weter11@users.noreply.github.com>
@google-labs-jules
Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

google-labs-jules Bot and others added 4 commits April 19, 2026 18:22
- Fix installed-game path resolution for placeholder manifests (e.g. Portal: Prelude RTX)
- Include demos and free games in library refresh by enabling additional request flags
- Add detailed diagnostics for refresh operations and path resolution
- Refactor install directory probing to a shared utility
- Add regression tests for suspicious directory detection and probing

Co-authored-by: weter11 <14630689+weter11@users.noreply.github.com>
- Modified `refresh_library` to always merge local discovery results even if Steam network call fails.
- Improved `build_game_library` to intelligently merge local and remote data.
- Added detailed diagnostics for library reconciliation (local-only vs remote-only counts).
- Ensured installed demo titles are correctly discovered from local manifests.
- Added fallback to library cache when Steam network is unreachable.
- Added tracing logs for discovery of local-only Steam apps.

Co-authored-by: weter11 <14630689+weter11@users.noreply.github.com>
- Implemented orphaned directory recovery: the launcher now scans `steamapps/common` for untracked installations and identifies them via `steam_appid.txt` if the `.acf` manifest is missing.
- Enhanced library reconciliation to intelligently merge local discovery and network owned-games data.
- Added tracing logs to report diagnostics for library refresh (ACF vs recovered vs remote counts).
- Track `manifest_missing` status in game models for better visibility into local library health.
- Improved `refresh_library` in UI to fall back to cache and local scan even if Steam network calls fail.
- Added regression tests for orphaned directory discovery.

Co-authored-by: weter11 <14630689+weter11@users.noreply.github.com>
- Implemented orphaned directory discovery: surfaces games in `steamapps/common` that lack an `.acf` manifest.
- Added `repair_manifest` functionality to `SteamClient` to regenerate minimal valid ACF files from known metadata.
- Added a "Repair Steam Manifest" action in the game repair UI.
- Enhanced `write_appmanifest` with standard fields like `Universe` and added automatic backups before overwriting.
- Track `manifest_missing` status to highlight games that need repair.
- Updated all test suites to support the new `manifest_missing` field.
- Added unit tests for manifest generation and orphaned directory recovery.

Co-authored-by: weter11 <14630689+weter11@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant