Skip to content

fix: swap macOS engine to WineCX 23.7.1 - #33

Merged
swstegall merged 1 commit into
developfrom
fix/macos27-sikarugir-engine
Jul 25, 2026
Merged

swstegall merged 1 commit into
developfrom
fix/macos27-sikarugir-engine

Conversation

@swstegall

Copy link
Copy Markdown
Owner

No description provided.

@swstegall
swstegall merged commit b900639 into develop Jul 25, 2026
6 checks passed
@swstegall
swstegall deleted the fix/macos27-sikarugir-engine branch July 25, 2026 08:58
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>
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