Skip to content

v0.18.0 — uaro-cli, third launcher, cold-read hardening, F1–F12 guidance (catch-up since v0.2.0)

Latest

Choose a tag to compare

@jirukouya jirukouya released this 02 Aug 02:37
· 10 commits to main since this release

Catch-up release: everything shipped since v0.2.0 that only ever landed in CHANGELOG.md, never got its own GitHub Release. This tag brings Releases back in sync with CHANGELOG.md/SKILL.md's version number (0.18.0); going forward each CHANGELOG.md version bump gets a matching Release.

Upgrading an existing install: re-run SKILL.md on a session pointed at your existing bottle — Step 2a will detect what's missing and offer to apply just the new fixes, no reinstall needed.

[0.18.0] - 2026-08-01

Fixed

  • Found during the first full live run of this skill by an external user (fresh Apple Silicon Mac, macOS 26.5.2), at Step 12's first-run verification — not by a cold-read:
    • uaro-settings (Step 11) silently did nothing when double-clicked whenever setup.exe was already FCOM-patched — which is the normal healthy state after Step 8. Under set -e, _patch_setup_exe's final [[ "$b_cur" == "dcd8dfe0" ]] && ... Site-B check returns 1 when the file is already patched; that becomes the function's exit status, and errexit kills the script before the exec wine64 "setup.exe" line ever runs. This is the same set -e failure class as uaro-patcher's wait bug fixed in 0.16.0 — that sweep verified the patcher script end to end but didn't re-audit the settings script for siblings. The bug never fires while setup.exe still needs patching (the dd runs and returns 0), which is why the original field test — run right after a fresh unpatched state — missed it. Reproduced in isolation (zsh -c 'set -e; f() { [[ a == b ]] && echo x; }; f; echo reached' never prints "reached"), then confirmed live: adding return 0 as _patch_setup_exe's last line fixed the launcher immediately on the affected machine. uaro-patcher and uaro-game are confirmed unaffected (they define no shell functions at all).
    • Step 2a gained a healing check for it (grep -q 'return 0' against the installed uaro-settings), and the Common Gotchas table a Launcher/Signing row, so pre-0.18.0 installs get offered the fix without waiting for the symptom to be reported.
    • uaro-patcher's crash-retry loop misread the patcher's own Launch Game handoff as the known early crash, spawning a ghost second patcher window alongside the launching game. Probed live with an instrumented run: clicking Launch Game kills the patcher with exit 137 (SIGKILL) 44s after launch — a non-zero exit inside the sub-60s window, matching the retry heuristic's crash signature exactly (0.16.0's fix made the retry actually fire; this run was the first to see it fire on a successful handoff). The loop now checks whether uaRO.exe is running after the patcher exits — the script's own startup cleanup pkills any stale uaRO.exe, so a running one here was necessarily started by this session — and treats that as a successful handoff (exit 0, no retry). Step 2a gained a matching healing check and the gotchas table a row.

Added

  • Fullscreen Cmd+Tab focus-bounce gotcha (new Config/Graphics row), also from the same live run: with ISFULLSCREENMODE=1, tabbing away from the game then back in bounces focus straight back out every time — the game becomes unplayable until quit and relaunched. Second confirmed symptom of the fullscreen setting this skill already configures away (the black-screen row); the new row also warns that the client rewrites OptionInfo.lua on exit, so the flip back to 0 must happen with the game fully closed or it gets clobbered.
  • F1-F12 skill-key guidance (new walkthrough item 9 in Installation complete, plus an Input/Keyboard gotcha row), from the same live run: RO leans on the F-row, but Mac keyboards default it to brightness/volume/media. Apple keyboards: the System Settings "Use F1, F2, etc. keys as standard function keys" toggle, or per-app via the optional Fluor menu-bar app (brew install --cask fluor) — with two live-verified wrinkles: Fluor rules must be created while the game is running and frontmost (the frontmost app presents as the launcher's own bundle name, UaRO Game/UaRO Patcher, not a Wine process name), and one live test on macOS 26.5.2 saw a Fluor rule never engage (fnState never flipped), so the gotcha row includes a defaults read -g com.apple.keyboard.fnState verification probe. Third-party keyboards (Keychron etc.) decide F-row behavior in their own firmware — neither the macOS toggle nor Fluor can affect them; documented the keyboard-side fixes instead (Keychron fn+X+L held ~4s in Mac mode, or the Mac/Windows hardware switch — the latter verified live as working, with the Cmd/Option swap trade-off noted).

[0.17.0] - 2026-07-30

Fixed

  • Prompted by Discord feedback ("Rhya"): Steps 3, 4, and 9 ran their install/download commands unconditionally instead of checking first whether the target already existed, causing noisy errors (Step 3), a hanging fallback mirror (Step 4), and a false "failure" read on an already-installed Gecko (Step 9).
    • Added check-first guards to all three steps, plus a general "check real end-state before installing" principle to Section 0.
    • Step 4: the archive.org fallback mirror is confirmed unreliable now (hangs on live test) — this repo's own mirror is tried first instead.

[0.16.1] - 2026-07-29

Changed

  • README.md: Option A now lists per-app choices (Claude, ChatGPT, GitHub Copilot) in the same layout as Option B, adding GitHub Copilot (macOS desktop app, free tier included) as a third choice, plus a long chain of cold-read-driven wording/UX fixes across README.md's AI-picker section (free-tier figures corrected against GitHub's own docs, Option A/B reformatted for scannability, "Terminal" and "pick any folder" explained for non-technical readers, a no-preference tiebreaker added). Full detail in CHANGELOG.md.
  • README.md: "The problem this solves" now links uaRO to uaro.net instead of Wikipedia's Ragnarok Online article.
  • Prompted by Discord feedback (uaRO player "Defectivve") on unclear prerequisites, Git/Xcode confusion, and a request for a gentler pace: README.md now offers desktop-app and Terminal/CLI paths side by side, SKILL.md Step 1 explains the Command Line Developer Tools popup before it appears, and per-step approval prompts were softened.
  • Prompted by Discord feedback ("Rhya"): README.md Option B now also lists GitHub Copilot CLI (free tier, no paid plan required), installed via GitHub's own dependency-free curl script.

[0.16.0] - 2026-07-28

Fixed

  • Prompted by an eighth fresh, zero-context cold-read of the public repo:
    • uaro-patcher's crash-retry loop (Step 11) never actually retried, because set -e + a bare wait $pid interact badly — errexit killed the script inside the retry loop before the second launch attempt ever ran, silently indistinguishable from a successful retry. Fixed by bracketing the wait/code=$? pair in set +e/set -e.
    • Step 6's URL-download branch (curl -fL ... "$INSTALLER_SOURCE") had no caffeinate -i, unlike every other unattended multi-minute operation in this file. Wrapped it the same way.

[0.15.0] - 2026-07-28

Fixed

  • Prompted by a seventh cold-read: the Common Gotchas table's "Inno Setup installs into the bottle" row had the one surviving bare, unquoted whisky call in the whole file; Step 9's primary Gecko install wasn't wrapped in caffeinate -i; $SETUP was reused bare across two later fenced code blocks with no re-derivation. All three fixed to match this file's established patterns.

[0.14.0] - 2026-07-28

Fixed

  • Prompted by a sixth cold-read: four more bare whisky calls survived 0.13.0's sweep — Section 2a's existing-bottle detection, the Uninstall section's own re-derivation TIP (added in 0.13.0, and reintroduced the bug it was fixing), and Uninstall Level 2's bottle deletion + verification line. All resolved via the standard command -v whisky || echo .../WhiskyCmd fallback, verified with whisky removed from PATH.

[0.13.0] - 2026-07-28

Fixed

  • Prompted by a fifth cold-read run against actual pushed main: seven eval "$(whisky shellenv ...)" calls across Section 2a and Steps 5/7/9/9b called bare whisky instead of the documented fallback pattern — same bug class 0.4.0 fixed only in the launcher scripts. Also: Uninstall never re-derived $GAME_DIR/$BOTTLE_NAME despite being documented as a standalone entry point; a Parameters-table TIP pointed at the wrong numbered section; a placeholder comment was under-explained relative to this file's other placeholders.

[0.12.0] - 2026-07-28

Fixed

  • Remaining findings from the same fourth cold-read as 0.11.0: Step 8's Python fallback had no write-to-disk wrapper (unlike Step 10's identical pattern); reused variables ($BOTTLE_NAME/$GAME_DIR/$WHISKY) needed a standing "always re-derive" instruction instead of a judgment call; the Parameters-table TIP could silently point back at the wrong $GAME_DIR after Step 7's redirect; Info.plist generation for two of three launcher bundles required manual mirroring instead of a shared loop.

[0.11.0] - 2026-07-28

Fixed

  • Prompted by a fourth cold-read run after pushing, against real main — two genuinely new regressions from 0.10.0's own $APPS refactor: an unset $APPS silently iterates zero times in bash (success by omission, launchers never actually built); typeset -A EXE=(...) is zsh/bash-4+ syntax that macOS's real /bin/bash 3.2 rejects outright, replaced with a portable case statement. Also: $GUID required an error-prone manual retype into a quoted heredoc, fixed by passing it through the environment instead.

[0.10.0] - 2026-07-28

Fixed

  • Prompted by a third cold-read: declining UaRO Game.app in Step 11 required manually omitting it from ~8 separate hardcoded three-item lists — replaced with a single $APPS array read everywhere. <CHOSEN_WIDTH>/<CHOSEN_HEIGHT> had no shown derivation from system_profiler's output; added the real output format and a worked example.

[0.9.1] - 2026-07-27

Fixed

  • Doc-clarity-only findings from the same cold-read as 0.9.0: UaRO_Setup.exe vs setup.exe were never explicitly distinguished; UaRo Patcher.exe (lowercase "o") reads like a typo next to UaRO Patcher.app; placeholder substitution (<UUID> etc.) had no worked example before the first place a reader has to do it.

[0.9.0] - 2026-07-27

Fixed

  • Prompted by a second cold-read: several file-writing scripts (Step 10's Python patcher, Step 11's Info.plist and all three launcher scripts, uaro-cli) were shown as illustrative code fences with no actual cat > path <<'EOF' wrapper — one place a heredoc was shown had a literal never-resolved placeholder as its payload, which a literal run would have written verbatim to disk. All converted to real write-to-disk blocks. Also: INSTALLER_SOURCE was never assigned as a shell variable, and Step 10 referenced an ambiguous "Step 1" pointer (fixed by 0.8.0's numbering-scheme note, but reintroduced here).

[0.8.1] - 2026-07-27

Fixed

  • Cosmetic findings from the same cold-read as 0.8.0: README.md's hardcoded "Latest: v0.2.0" line was stale, replaced with a pointer to CHANGELOG.md/SKILL.md's own version instead of a second number to keep in sync; the Disclaimer undercounted installed apps; the completion banner hardcoded a step count that had already drifted.

[0.8.0] - 2026-07-27

Fixed

  • Prompted by a fresh, zero-context cold-read of a clean git clone: inline shell variables ($BOTTLE_NAME, $GAME_DIR, etc.) aren't guaranteed to persist across separate tool calls in many agent execution harnesses — added re-derivation guidance; UaRO Game.app's consent gate covered retrofitting an existing install but not a fresh Step 11 build; the 1/2/2a/2b Parameters/Pre-flight numbering collided with Step 112's numbering in the progress table, now disambiguated.

[0.7.0] - 2026-07-27

Added

  • uaro-cli repair now collects unfixable issues into a numbered list with a ready-to-paste "next step" message pointing at Step 11, and exits 1 when anything couldn't be auto-fixed (0 otherwise) so the outcome is scriptable, not just human-readable.

[0.6.0] - 2026-07-27

Changed

  • uaro-cli repair now actually diagnoses before fixing (executable bit, script syntax, whether a launcher predates the command -v whisky fallback, Info.plist validity, real post-fix signature/registration state) instead of blindly re-running codesign/lsregister regardless of whether anything was wrong.

Fixed

  • A stray exe_name=uaro-patcher-style line was leaking into repair's output on the second/third launcher each run — zsh's local/typeset prints name=value as a query when a bare variable name already holds a value from a prior declaration in the same scope. Fixed by declaring local exe_name once, before the loop, instead of redeclaring it every iteration.

[0.5.0] - 2026-07-27

Added

  • New optional uaro-cli command-line helper (kill/launch/repair), installed to /opt/homebrew/bin/uaro-cli. Step 2a offers to add it to installs that predate this version.

Fixed

  • Uninstall Level 1 was silently leaking the downloaded/extracted uaRO installer (~4.7GB+) on every uninstall — those paths sit as siblings of $GAME_DIR, not inside it, so rm -rf "$GAME_DIR" never touched them.

[0.4.0] - 2026-07-27

Added

  • New third launcher, UaRO Game.app — skips UaRo Patcher.exe entirely for a faster relaunch. Step 2a offers to add it to existing installs, but only with explicit user consent (it can't detect a stale client relative to the server).

Fixed

  • Cold-read-caught gaps from this session's renaming/three-launcher work: stale "two launcher(s)" wording, an Info.plist mirroring instruction that dropped CFBundleDisplayName, and all three launcher scripts hardcoding /opt/homebrew/bin/whisky with no fallback for a sideloaded (non-Homebrew) Whisky install.

[0.3.0] - 2026-07-27

Changed

  • Renamed the patcher launcher from UaRO.app to UaRO Patcher.app (bundle, Info.plist, internal script uaro-launchuaro-patcher), matching UaRO Settings.app's naming pattern. Step 2a migrates existing installs still carrying the old name instead of leaving them half-migrated.

[0.2.1] - 2026-07-27

Changed

  • Added an anchor-linked Table of contents to SKILL.md, splitting it into "Setup" (linear install steps) and "Reference" (Known open issues, Common Gotchas, Uninstall, Credits). Moved Step 9b back to its correct numerical position. Tagged every Known-open-issue and Common-Gotchas row with a Category for keyword search/skim navigation. Pure findability pass, no functional change.

Full diff: v0.2.0...v0.18.0