Commit Graph
554 Commits
Author SHA1 Message Date
lucannez64 dd11b7a91b Merge commit 'refs/review/mint-147' into fix/mint-review-integration 2026-10-26 18:02:11 +01:00
lucannez64 c1f6a3fd12 Merge commit 'refs/review/mint-133' into fix/mint-review-integration 2026-10-26 18:02:10 +01:00
zero 6b8cf67ca4 fix(launcher): escalate after a forwarded signal and keep a failed cleanup failed
- a forwarded SIGINT/SIGTERM/SIGHUP now leaves the polling loop, so the
  five-second TERM grace and the SIGKILL fallback actually run; a loader that
  ignores SIGTERM no longer blocks the supervisor forever
- surviving guest processes now return a non-zero status instead of 0
- an invalid RCLOL_STOP_AFTER_CLIENT_SECONDS warns and disables the idle stop
  instead of aborting the launch with a traceback

Adds a regression test that sends SIGTERM to a loader and a descendant that
both ignore it, and asserts the process group is killed.

Signed-off-by: zero <zero@localhost>
2026-10-25 14:25:29 -06:00
zero b4e4a0c59b test(launcher): follow the supervisor handoff in the offline check
The stub records the final darling launch after exec-guest.py. The launcher
now runs session-supervisor.py first, so the stub hands the supervised command
to exec-guest.py instead of stopping at the supervisor. The guest assertions
are unchanged: they still inspect the launch that exec-guest.py performs.
2026-10-25 13:00:23 -06:00
zero 97ff3df51d fix(launcher): supervise the guest session and clean up after it
The Riot Client does not exit when its window closes, and a loader that dies
first leaves launchd/mldr and the client tree holding memory until the runtime
is restarted by hand. run-riot-client.sh now execs a small supervisor instead
of the guest loader:

- SIGINT/SIGTERM/SIGHUP are forwarded to the guest process group, the loader
  gets a grace period, and darling shutdown runs before any leftover guest
  process is stopped.
- Leftovers are stopped only when they carry this prefix's __mldr_sockpath and
  the same uid, deepest-first, SIGTERM then SIGKILL. The guest PID namespace is
  learned while the session runs; a namespace equal to the host's is refused.
- Cleanup only runs when this launcher started the runtime, so a second launch
  that attaches to an existing server leaves it running.
- RCLOL_STOP_AFTER_CLIENT_SECONDS=N adds an opt-in idle stop: it fires only
  after a managed client window was seen and is gone for N seconds with no game
  process, and never when the window state cannot be read. Off by default.
- RCLOL_CLEAN_ON_EXIT=0 keeps the previous exec-only behaviour.

Adds 23 unit tests for attribution, namespace scoping, shutdown ordering, the
attached-session guard and the idle decision.
2026-10-25 12:57:04 -06:00
MintMachineHQ a07ebb8c5a docs: be precise about what the crash bundle copies 2026-10-25 12:34:25 -06:00
Kalah 3b042182b1 Merge pull request #146 from lucannez64/fix/guest-launchd-reaper-review
fix(launchd): reap orphaned children without consuming tracked job exits
2026-10-25 19:32:44 +01:00
lucannez64 49c262e42d Merge remote-tracking branch 'origin/main' into pr-fix-132
# Conflicts:
#	.github/workflows/source-check.yml
2026-10-25 19:32:06 +01:00
Kalah 38344a9cde Merge pull request #103 from lucannez64/fix/vivox-ifmedia
Handle SIOCGIFMEDIA for Vivox interface discovery
2026-10-25 19:31:38 +01:00
lucannez64 9ce1d0c7f2 Merge remote-tracking branch 'origin/main' into pr-fix-132 2026-10-25 19:30:57 +01:00
lucannez64 6529c5dde9 Merge remote-tracking branch 'origin/main' into pr-fix-103 2026-10-25 19:30:32 +01:00
Kalah 36ca767670 Merge pull request #129 from 3AvisD/docs/vulkan-icd-selection
docs: document Vulkan ICD selection for multiple GPUs
2026-10-25 19:30:29 +01:00
lucannez64 058479a053 fix(recovery): fail closed on inspection errors and report leftovers accurately
Signed-off-by: lucannez64 <[email protected]>
2026-10-25 19:30:16 +01:00
lucannez64 a65613b11e fix(ifmedia): preserve media-list requests and reject loopback
Signed-off-by: lucannez64 <[email protected]>
2026-10-25 19:30:16 +01:00
lucannez64 ef3f41bdb8 Merge remote-tracking branch 'origin/main' into pr-fix-103 2026-10-25 19:29:23 +01:00
lucannez64 30a178b348 docs: scope GPU diagnostics to one logged reproduction
Signed-off-by: lucannez64 <[email protected]>
2026-10-25 19:29:21 +01:00
MintMachineHQ 54f301a0e0 fix(tools): address review feedback on diagnostics
- doctor: resolve the workspace/Nix runtime before the native path, honour
  multi-entry XDG_DATA_DIRS, raise the kernel minimum to 5.14, and redact
  home/prefix/workspace paths by default (--no-redact opts out). Reports are
  written mode 0600.
- crash-report: drop the whole-process table from the default bundle
  (--all-processes opts in), mask credentials in argv, strip window titles,
  validate --label, find the workspace launcher log, bound the log tail,
  describe missing logs, write the archive 0600 without owner metadata, and
  keep --json output pure JSON.
- perf-baseline: reject non-finite times and absurd frame times, count
  --last by usable match, include the last sample interval in duration,
  record only the log basename, and rename p50/p95/p99 to sample_p* to make
  clear they are ten-second samples.
- docs: correct the metric descriptions, flag names and shader-cache sign.
2026-10-25 12:28:48 -06:00
lucannez64 82bc150d30 Merge remote-tracking branch 'origin/main' into pr-fix-129 2026-10-25 19:28:43 +01:00
Kalah ea74dfff65 Merge pull request #60 from lucannez64/fix/proc-fdinfo-permissions
fix(launcher): prevent inherited MangoHud fdinfo aborts
2026-10-25 19:28:41 +01:00
lucannez64 9d247575f2 Merge remote-tracking branch 'origin/main' into pr-fix-60 2026-10-25 19:27:59 +01:00
Kalah 51ded1c6a6 Merge pull request #121 from Lowell137/fix/consistent-mac-gpu-report
Report the profile GPU consistently in system_profiler
2026-10-25 19:27:01 +01:00
lucannez64 2cc0c68149 Merge remote-tracking branch 'origin/main' into pr-fix-132 2026-10-25 19:14:54 +01:00
lucannez64 d0c4afbab5 Merge remote-tracking branch 'origin/main' into pr-fix-103 2026-10-25 19:14:54 +01:00
lucannez64 dec3699332 Merge remote-tracking branch 'origin/main' into pr-fix-129 2026-10-25 19:14:54 +01:00
lucannez64 860718cb28 Merge remote-tracking branch 'origin/main' into pr-fix-60 2026-10-25 19:14:54 +01:00
lucannez64 75fd6830b9 Merge remote-tracking branch 'origin/main' into pr-fix-121 2026-10-25 19:14:54 +01:00
Kalah 33c5a66f70 Merge pull request #136 from Lowell137/fix/appkit-unimplemented-methods
Implement AppKit methods the League client calls as unimplemented
2026-10-25 19:14:46 +01:00
lucannez64 c38f5c29e0 fix(launchd): preserve tracked children in nested job managers
Signed-off-by: lucannez64 <[email protected]>
2026-10-25 19:13:45 +01:00
lucannez64 4c6e233928 Merge remote-tracking branch 'origin/main' into pr-fix-136 2026-10-25 19:13:12 +01:00
lucannez64 68dcdcb093 fix(probe): use a portable guest-home example
Signed-off-by: lucannez64 <[email protected]>
2026-10-25 19:12:36 +01:00
Kalah 00786aa404 Merge pull request #90 from lucannez64/fix/post-match-cpu
Extend idle select() backoff to LeagueClientUx (refs #82, #84)
2026-10-25 19:12:30 +01:00
lucannez64 65d4354667 Merge remote-tracking branch 'origin/main' into pr-fix-121
# Conflicts:
#	.github/workflows/source-check.yml
#	NOTICE.md
#	README.md
#	docs/COMPLIANCE.md
#	docs/PLATFORM_IDENTITY.md
#	docs/SETUP.md
#	docs/TROUBLESHOOTING.md
#	patches/cocotron.patch
#	patches/metal--deps--indium.patch
#	tools/exec-guest.py
#	tools/run-riot-client.sh
2026-10-25 19:11:54 +01:00
lucannez64 587d98a63a Merge remote-tracking branch 'origin/main' into pr-fix-103 2026-10-25 19:11:12 +01:00
lucannez64 097604533f Merge remote-tracking branch 'origin/main' into pr-fix-129
# Conflicts:
#	NOTICE.md
#	README.md
#	docs/COMPLIANCE.md
#	docs/PLATFORM_IDENTITY.md
#	docs/TROUBLESHOOTING.md
2026-10-25 19:11:02 +01:00
lucannez64 a31753c548 Merge remote-tracking branch 'origin/main' into pr-fix-60
# Conflicts:
#	docs/TROUBLESHOOTING.md
#	tools/riot-launcher-offline-check.py
2026-10-25 19:11:01 +01:00
lucannez64 4476761f02 Merge remote-tracking branch 'origin/main' into pr-fix-132 2026-10-25 19:10:40 +01:00
lucannez64 ae97f5f83b Merge remote-tracking branch 'origin/main' into pr-fix-136 2026-10-25 19:10:17 +01:00
lucannez64 76073e6a45 Merge remote-tracking branch 'origin/main' into pr-fix-90 2026-10-25 19:09:59 +01:00
Kalah 501fae30b0 Merge pull request #130 from 3AvisD/docs/interoperability-wording
docs: clarify interoperability and compliance wording
2026-10-25 19:09:37 +01:00
MintMachineHQ 631a8afe37 recover-stale-client: do not report a reused PID as a leftover
wait_for_exit counted any live PID with the same number as a leftover, so a
reused PID produced a misleading "still present after SIGKILL" message. Compare
the original start time and use the process state only to include the original
process while it is an unreaped zombie.
2026-10-25 11:06:55 -06:00
lowellandClaude Opus 5.5 bddd12dc7d Implement AppKit methods the League client calls as unimplemented
Each of these hit NSUnimplementedMethod and either dropped the value
or returned zero.

- NSWindow: store and return collectionBehavior; setContentMinSize and
  setShowsResizeIndicator keep their value without the warning;
  isOnActiveSpace and keyViewSelectionDirection answer.
- NSApplication activateIgnoringOtherApps: activates through the
  display backend, as NSRunningApplication activateWithOptions: does.
  With NO it does nothing, since the window server cannot tell whether
  another app is active and NO must not take focus from one.
- NSSpellChecker dismissCorrectionIndicatorForView is a no-op, as there
  is no correction indicator to dismiss.

The X11 backend's activateProcessIdentifier: now looks the process up
in the root's _NET_CLIENT_LIST before falling back to the root's
children: under a reparenting window manager those children are frames
without _NET_WM_PID, so activation found no window.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 12:28:35 +03:00
MintMachineHQ 11f7252004 feat(tools): add host doctor, crash report and frame-pacing baseline
Turns "it does not work" into an attachable report instead of a log-less
issue. Three read-only host tools, reachable from the launcher:

- doctor.py checks GPU/driver, Vulkan ICDs, display session, memory, disk,
  overlay layer, core-dump limit, i915 panel self-refresh and prefix/runtime
  state. --json and --report produce an issue attachment; warnings do not fail.
- crash-report.py bundles the doctor checks, process table, dserver and
  launcher log tails, graphics kernel messages, display state and recent core
  dumps. Environment is never collected and home/user/host are redacted.
- perf-baseline.py parses the game's own netstats.csv into average FPS,
  p50/p95/p99 frame time, slowest-quarter FPS and hitch count, with --json and
  --append for before/after comparisons.

COMPATIBILITY.md records the verified UHD 620 row with measured numbers
(24-32 avg FPS, p99 44-98 ms) and explains how to submit another one.
2026-10-23 23:56:30 -06:00
MintMachineHQ 9291d6accd fix(launchd): reap orphaned guest zombies and harden stale-client recovery
Children whose parent dies are reparented to the guest launchd, and its job
manager only reaps PIDs it has a job record for, so every leftover mldr/CEF
process from a killed client tree stayed a zombie until shutdown. Reap zombies
that launchd owns but does not track on a 5 second timer; tracked jobs keep
their exit status for job_reap(). proc_listpids() is not implemented in Darling
yet, so the scan enumerates the guest PID namespace through /proc.

recover-stale-client now signals the stale tree deepest-first so a live parent
can still reap its own children, and prepare.py repairs interrupted checkouts
and missing Git LFS objects instead of publishing pointer text as a library.
2026-10-23 23:36:20 -06:00
3AvisD adae1b8bed docs: clarify the source-audit scope
State that scripts/validate.py checks revision format, patch existence and
patch parsing but does not verify applicability to pinned revisions. Point
patch changes at the separate prepare.py --check-only workflow.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:13:18 -06:00
3AvisD 2fcf44eaaf docs: apply review wording corrections
Distinguish the opt-in hide helper (local window management) from the
opt-in close helper (terminates eligible League client UI processes), and
list the tracked project artwork in the distribution scope.

Scope the platform-identity statement to repository-owned code: the
repository does not pass the identifiers as Riot authentication data, but
the values are guest-visible through IOKit and the official client's later
handling is outside the repository's scope. Use US spelling for licence
consistently.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:03:59 -06:00
3AvisD 56285686e8 docs: add the project repository URL
Link the project repository in the interoperability scope so readers can
distinguish it from the upstream Darling repository.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:03:59 -06:00
3AvisD c48272aa8f docs: clarify interoperability and compliance wording
Add docs/INTEROPERABILITY.md, an English scope document that describes
the project's interoperability and responsible-use practices: what it
distributes, how it handles local platform metadata and the MAC/AMFI
probe, how it keeps copyright and licence notices, how it avoids
access/authentication/integrity shortcuts, how it presents trademarks
and handles notices, and the user's responsibility for Riot's terms.

Update README, NOTICE, COMPLIANCE and PLATFORM_IDENTITY to link the
document and to state the opt-in window-helper and synthetic-identity
behaviour accurately. Add CONTRIBUTING with DCO sign-off and a scope
checklist.

Documentation-only change: no launcher, patch, build or test behaviour
changes.

Signed-off-by: 3AvisD <[email protected]>
2026-10-23 14:03:59 -06:00
3AvisD a53dd00ff9 docs: document Vulkan ICD selection for multiple GPUs 2026-10-23 11:24:24 -06:00
Kalah 24276b91c6 Merge pull request #123 from 3AvisD/fix/recover-stale-client
fix(launcher): recover a stale client tree without restarting Darling
2026-10-23 14:19:34 +02:00
Kalah 92484938b8 Merge pull request #123 from 3AvisD/fix/recover-stale-client
fix(launcher): recover a stale client tree without restarting Darling
2026-10-23 14:19:34 +02:00