Skip to content

fix: the remaining findings from the release smoke run - #247

Merged
frankea merged 2 commits into
mainfrom
fix/smoke-round-four
Aug 29, 2026
Merged

fix: the remaining findings from the release smoke run#247
frankea merged 2 commits into
mainfrom
fix/smoke-round-four

Conversation

@frankea

@frankea frankea commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Fourth and last round from the local release smoke run, covering the findings left open after #245 and #246. All pre-existing.

What was broken

  1. GameDB apply never set the backend. applyVariantSettings writes graphicsBackend, then dxvk. BottleSettings.dxvk is a legacy accessor whose setter maps false to .recommended, and real entries pair an explicit backend with dxvk: false (Celeste: d3dMetal + dxvk: false), so the backend was undone one line later while the toast said "Applied Celeste configuration". An explicit backend now wins and the flag is consulted only when there is none; the preview drops the DXVK row in that case and no longer lists Sequoia Compatibility Mode (wire the placebo knobs to something real, or cut them #216 removed the setting). Test added.
  2. Export as Archive used the absolute path. tar -zcf dest /abs/path produced Users/<name>/Library/Containers/.../Bottles/<UUID>/... entries: the export carried the username and extracted into that whole tree. It archives -C parent <folder> now, with COPYFILE_DISABLE=1 so no ._ entries; the diagnostics ZIP passes --norsrc to ditto for the same reason. Test added; the untar path is unchanged (it only ever consumed the Libraries tarball, whose entries were already relative).
  3. Install sheet Cancel orphaned the install. Cancel was a bare dismiss(); the winetricks wrapper and vc_redist.x86.exe kept running in the bottle. The install is held as a task the sheet cancels, installVerb/installVerbs cancel their inner task on stream termination, executeVerbInstall terminates the process under withTaskCancellationHandler, and the sheet kills the bottle's wine processes so the redist child does not survive.
  4. Duplicate Bottle sheet said Rename. RenameView takes a confirm title; the duplicate sheet passes "Duplicate" (new key duplicate.bottle.confirm).
  5. Wizard details. The install step's verb fell back to lastCheckResult, which is not persisted, so a resumed session offered "unknown"; it reads the session's check results now. The game-database check needed programName, which a wizard opened from a program page did not always carry; the executable filename is used when the snapshot has none.
  6. CHANGELOG.md carried a ||||||| parent of a96a2bb8 ... diff3 marker from fix(diagnostics): scrub credential shapes from exported arguments and logs #243; removed.

Verification

  • Kit: full suite green including the two new tests (explicit backend survives dxvk: false; tar entries are <folder>/... with no ._ files).
  • App: Release build; retested on a throwaway bottle after the build.
  • SwiftFormat 0.58.7 lint and SwiftLint strict clean; en-GB check passes.

All pre-existing:

- Applying a game configuration never set its graphics backend. The
  entry's legacy `dxvk` flag is written after the backend, and the
  setter maps `false` to Recommended, so every apply ended on Recommended
  while the toast said it had applied. An explicit backend wins now; the
  flag only speaks when there is none. The preview also drops Sequoia
  Compatibility Mode, a setting #216 removed.
- Export as Archive tarred the bottle by its absolute path, so the
  archive carried the user's home directory name and extracted into that
  full tree. Entries are `<folder>/...` now, and COPYFILE_DISABLE keeps
  bsdtar from adding AppleDouble files. The diagnostics ZIP uses ditto's
  --norsrc for the same reason.
- Cancelling a dependency install only closed the sheet; winetricks and
  the redist installer it spawned kept running in the bottle. The install
  runs as a task the sheet can cancel, the stream's termination cancels
  the winetricks task, cancellation terminates the process, and the
  bottle's wine processes are killed.
- The Duplicate Bottle sheet reused the rename sheet wholesale, so its
  confirm button said Rename.
- The wizard's install step offered to install "unknown" after a resumed
  session: the verb came from lastCheckResult, which is not persisted. It
  falls back to the session's check results now. Its game-database check
  got no program name when the wizard was opened from a program page; the
  executable filename is used when the snapshot carries none.
- Removed a diff3 marker line that #243 left in CHANGELOG.md.
The sidebar context menu presents its own copy of the sheet; it reused
the rename sheet the same way the bottle page did.
@codecov

codecov Bot commented Aug 29, 2026

Copy link
Copy Markdown

@frankea

frankea commented Aug 29, 2026

Copy link
Copy Markdown
Owner Author

Each item reproduced on a Release build before the change and re-checked after a rebuild on a throwaway bottle.

  • GameDB apply: Celeste on a fresh bottle now leaves backend => d3dMetal on disk (it stayed recommended before) and the preview shows only the backend and DXVK Async rows.
  • Export as Archive: 2047 entries, all <UUID>/..., zero absolute or Users/ prefixed, zero ._ files (the previous export had the full home path on every entry).
  • Duplicate sheet: both presentations (bottle page toolbar and sidebar context menu) now say Duplicate.
  • Wizard: verb inheritance reads the persisted check results; the game-database check gets the executable name from the program URL.
  • Install Cancel: the task is cancelled, stream termination cancels the winetricks task, cancellation terminates the process, and the bottle's wine processes are killed.

Full kit suite green (1306 XCTest, 267 Swift Testing) with the two new tests; SwiftFormat 0.58.7 and SwiftLint strict clean; en-GB check passes. Merging.

@frankea
frankea merged commit 4589d21 into main Aug 29, 2026
9 checks passed
@frankea
frankea deleted the fix/smoke-round-four branch August 29, 2026 22:06
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