Skip to content

Resolve native macOS game launches without AppID rules - #2

Merged
Brekit merged 7 commits into
mainfrom
codex/generic-game-launch
Oct 15, 2026
Merged

Brekit merged 7 commits into
mainfrom
codex/generic-game-launch

Conversation

@Brekit

@Brekit Brekit commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Problem and resulting behavior

Native macOS launches were limited by an AppID-specific save-directory check, a bundle-only platform adapter, and two independent choices of Steam launch option. Games whose Steam entry points to a script or binary could fail before their actual executable started. This change derives one launch plan from Steam metadata and the installed files, preserves the numeric launch-option ID, and handles bundles, Mach-O binaries and supported sh/bash launch scripts without per-game AppID rules.

Steam Auto-Cloud paths and platform overrides are carried through the PICS catalog and resolved to specific game-associated directories. Legacy cached entries refresh their app metadata before native launch. SDK discovery is optional and bounded; a missing or ambiguous diagnostic SDK no longer blocks a valid target. Script launches keep their original arguments, working directory and Steam context; a dedicated process group and private launch markers allow the final game process to be tracked after its script exits.

Dota 2 reached a Source 2 single-instance warning because the worker could not create its normal temporary lock. Native workers now permit only numeric source_engine_*.lock files in the POSIX temporary root. Existing lock files are not removed and kernel lock exclusion remains intact. Dota 2 now reaches its main menu through SkinOS's Play button, using its existing macOS installation and no original Steam GUI.

Validation

  • Full Rust workspace tests and strict workspace Clippy passed. The combined review candidate passed the full Rust workspace, strict Clippy, all 76 Swift tests and the five bootstrap-boundary tests.
  • Parser/selector regressions cover sparse launch IDs, text/binary UFS parity, metadata refresh and legacy caches.
  • Native fixtures cover bundles, binaries, script arguments and cwd, lock-descriptor closure, unsafe targets, SDK scan limits and optional probing.
  • A real macOS fixture verifies the correct background-child PID after the script has exited and been reaped.
  • A real sandbox fixture verifies that Source 2-style lock creation succeeds, a second exclusive lock is rejected, lookalike temporary paths and a private canary remain inaccessible.
  • Development build 0.1.5 (build 6) was installed locally. Dota was launched through the app; the user confirmed the normal main menu. The latest log has no Source 2 lock error and shows Steamworks and the graphics backend initializing. No original Steam GUI process was observed; an already-running background IPC broker was left untouched.

Review fixes

  • Accept Steam Auto-Cloud GameInstall / . for the verified installation while retaining restrictions on whole user-data containers.
  • Refresh native launch and save metadata for every launch, including already-known cached games after an update.
  • Share the protocol launch-entry conversion and document the vendored API changes.
  • Replace the one-second background-process fixture with an owned native helper and explicit readiness/release handshakes. A forced scheduling delay reproduced the former failure; the revised fixture passes it.

Review notes

PR #1 is merged. This PR targets main and contains the native-launch work and its review fixes. Version 0.1.5 / build 6 combines both changes for the signed release.

This does not claim that every Steam game is compatible. Unsupported script interpreters and unverified save-root mappings still produce explicit errors. Cloud metadata is used to determine paths; Cloud synchronization itself is outside this change. Multiplayer and physical-controller behavior were not tested here. SDK diagnostics can be skipped for unsupported architectures; runtime ownership checks remain mandatory.

  • The diff contains no credentials, personal account data, game files or generated app bundles.
  • Third-party source retains its license and upstream attribution.
  • Documentation and regression coverage reflect the behavior changed, where applicable.

@Brekit
Brekit marked this pull request as ready for review October 15, 2026 16:21
Base automatically changed from feat/install-platform-picker to main October 15, 2026 16:25
@Brekit
Brekit merged commit 5469160 into main Oct 15, 2026
2 checks passed
@Brekit
Brekit deleted the codex/generic-game-launch branch October 15, 2026 16:31
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