Repository navigation
fix: swap macOS engine to WineCX 23.7.1 - #33
Merged
Merged
Conversation
swstegall
added a commit
that referenced
this pull request
Aug 9, 2026
* Moved project dir to me.stegall.garlemald-client.
* ci: build Discord notify payload with jq (fix invalid-JSON on quoted titles)
The "Notify Discord" step in the issue-opened workflow hand-built its JSON
by interpolating ${{ github.event.issue.title }} straight into the curl
-d string. Any title containing a double quote (or backslash/control char)
produced invalid JSON and Discord rejected it (code 50109), so the step
failed and no notification was sent. Issues #25 and #26 (quoted titles)
hit exactly this.
Encode the payload with `jq -n --arg`, and pass the title/URL via env vars
(which also closes a shell-injection vector from `${{ }}` in `run:`).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: drop literal ${{ }} from Discord-step comment (fixes invalid workflow file)
GitHub Actions parses ${{ }} expressions inside the entire run: block,
including shell # comments. The comment added in the previous Discord-payload
fix referenced ${{ }} literally, which produced "An expression was expected"
(Line 36) and invalidated the whole workflow. Reworded the comment so no
template-expression token appears anywhere in the run: block.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: announce raised + merged pull requests to Discord
Add .github/workflows/announce-pull-request.yml: posts to the PR-
announcements Discord channel when a PR is raised (opened/reopened) and
when a PR is merged, pinging the maintainer role with the title, source/
destination branch labels, and the PR link. Port of the garlemald-server
workflow; only the project name differs ("Garlemald Client").
Design notes:
- pull_request_target (not pull_request) so the webhook secret is
available for fork PRs and no first-time-contributor approval gate
blocks the announcement. The workflow never checks out or runs PR code
— it only reads event metadata and POSTs to Discord — so the usual
pull_request_target code-execution risk does not apply.
- Webhook from the DISCORD_PR_WEBHOOK_URL repo secret (never hardcoded:
a public webhook URL gets auto-revoked by Discord's scanner).
- Payload built with jq --arg (no raw interpolation -> no invalid-JSON on
quoted titles), and no literal ${{ }} appears inside the run block.
- allowed_mentions {parse: [], roles: [<maintainer>]} so an attacker-
controlled PR title can only ever ping the one maintainer role.
- permissions: {} (GITHUB_TOKEN unused); Discord failure is non-fatal.
Validated: yaml parse, no ${{ in run block, hostile-title payload is
valid JSON with inert mentions, and actionlint clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: beginning-contributor documentation set (architecture, dev env, agents, contributing)
Adds onboarding docs (issue #24) so a newcomer can go zero -> building the launcher
-> assigned issue -> PR using only the docs. All anchors were verified against the
code (module/function names, version constants, env vars, paths, CI gates). The
launcher has no Lua runtime, so there is no scripting-runtime doc (unlike the server).
- docs/architecture.md — the launcher pipeline (detect -> check version -> patch ->
WebView login -> launch), the module map (app/servers/patcher/patch_format/login/
crypto/launcher/platform/config), the ffxiv://login_success?sessionId WebView
handshake (run as a --login-webview subprocess), the Blowfish launch-arg encryption,
the PE lobby-hostname patch, and the per-OS launch backends — with a flow diagram
and the client<->server handoff (game connects to lobby 54994 / world 54992 / map 1989).
- docs/dev-environment.md — per-OS build/run (incl. the Windows i686 target + Linux
GUI/WebView deps), the env_logger "info" default + RUST_LOG examples, the Wine log
(<data_dir>/logs/wine.log) + WINEDEBUG/winsock-trace toggles, where launcher state
lives (directories ProjectDirs) + how to reset it, and the end-to-end loop against a
local Garlemald-Server.
- docs/agents.md + root CLAUDE.md + AGENTS.md — running a Claude / OpenAI coding agent
against an issue. The two agent files are twins capturing build/run, the module map,
the AGPL header (verbatim), the develop -> PR flow, the fmt/clippy/build/test gates,
and the cross-platform (Wine/WebView) caveat.
- CONTRIBUTING.md — request collaborator + board access, pick a Ready issue, fork and
branch off develop, keep CI green, PR into develop.
- README.md — new Documentation + Contributing sections linking all of the above.
Closes #24.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: wrap long game location paths (#28)
* fix: build Wayland-compatible login webview on Linux
The login WebView subprocess built its wry WebView via WebViewBuilder::new(window), which uses the raw window handle. wry's WebKitGTK backend only supports that under X11, so under a Wayland session it failed with "the window handle kind is not supported" and Launch reported "Login failed: building wry webview: ...".
Build from the tao window's GTK vbox via WebViewBuilderExtUnix::new_gtk on Linux instead; it embeds WebKitGTK at the widget level and works under both X11 and Wayland (as wry's own docs recommend). Windows keeps the raw-handle path; macOS is unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Added configure ubuntu script.
* perf: drop +seh from default WINEDEBUG to stop in-world log flood
FFXIV 1.0 fires a storm of longjmp unwinds (RtlUnwindEx code=STATUS_LONGJUMP) once in-world. The +seh channel in the default WINEDEBUG traced a full CPU register dump per unwind into wine.log, pinning the CPU on trace I/O and dropping the game to a slideshow (GPU near-idle).
err+all still surfaces genuine crashes as err:seh; full seh tracing stays available via the verbose developer toggle (VERBOSE_WINE_DEBUG).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat: auto-provision DXVK on Linux for accelerated Direct3D 9
Wine's builtin wined3d translates the 32-bit FFXIV 1.0 client's D3D9 on a single CPU thread, starving the GPU (slideshow in-world, GPU near-idle). Add a Linux-only DXVK provisioner (src/platform/dxvk.rs): after prefix init, detect Vulkan, download a pinned DXVK release into the runtime cache, install its 32-bit d3d9/dxgi into syswow64, and merge d3d9=n,b;dxgi=n,b into WINEDLLOVERRIDES at launch.
Best-effort: no Vulkan / offline / GARLEMALD_DISABLE_DXVK=1 falls back to wined3d, so the launch never breaks. Also logs the resolved wine binary + version. macOS is untouched — its CrossOver engine already provides the accelerated D3D path.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat: GARLEMALD_WINE env override for the system wine lookup on Linux
Lets Ubuntu testing point the launcher at a specific Wine build (an
older/patched engine or a self-managed one) without touching PATH. A
set-but-invalid path fails loudly instead of falling through to the
PATH lookup, and the no-wine error now mentions the override.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EchKYpba7cMDD5B6g86Z2Q
* docs: expand Sister projects with decomp tooling and Linux Installer
* docs: expand Sister projects with decomp tooling and Linux Installer (#30)
* Added AetherXIV 1.3 Docker server. (#31)
* Feature/patch streaming (#32)
* feat: torrent patch download and login gating
* refactor: torrent-only patching, readable colors
* Removed notice attribution in Bahamut Launcher (since I wrote it there).
* fix: swap macOS engine to WineCX 23.7.1 (#33)
* Added reference to bahamut server and added native login fallback. (#34)
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Tran Chi Tho <121344331+trchitho@users.noreply.github.com>
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.
No description provided.