Skip to content

release: 0.2.1#48

Merged
Gumbees merged 1 commit into
releasefrom
development
May 26, 2026
Merged

release: 0.2.1#48
Gumbees merged 1 commit into
releasefrom
development

Conversation

@Gumbees

@Gumbees Gumbees commented May 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Promotes v0.2.1 from development to release. Single bug-fix commit (#47).

Contents

  • Upgrade cleanup: detect + remove leftover 0.1.x binary, autostart entry, and Apps & Features key before migrations run, so a manual upgrade across the 0.2.0 install-layout change doesn't deadlock on a locked state.db or leave orphaned registry entries.
  • Online-file races: re-check cloud-placeholder attributes in queue.process_file and worker.process_item, closing the watcher → queue and queue → worker race windows where a file evicted to the cloud would hydrate gigabytes for a hash/upload that gets discarded anyway.
  • Instant exit: tray Quit and WM_QUIT now process::exit(0) after signaling the workers, instead of waiting up to 3s on graceful pipeline shutdown.

Test plan

  • CI green on this PR (build + artifact regen)
  • Merge with merge commit (ruleset enforces — squash is not on the menu)
  • Release workflow publishes v0.2.1 binary to GitHub Releases
  • Manual install over a v0.1.8 / v0.2.0 install ... verify the legacy binary and stale Run entry are gone after first launch

Three bugs fixed in one patch:

1. Manual upgrade from 0.1.x left the old binary, autostart entry, and
   Apps & Features Uninstall key in place, and could deadlock the
   state.db migration when a v0.1.x process was still running. Adds
   cleanup_legacy_install() that runs before migrations: kills other
   immichsync.exe instances, removes legacy binaries at
   %APPDATA%\ImmichSync and %APPDATA%\bees-roadhouse\immichsync, and
   clears stale Run / Uninstall registry entries when they point at
   a legacy path.

2. SHA-1 hash and upload-stream code paths trusted the watcher's
   placeholder filter, but a file can be evicted to the cloud after
   the watcher sees it and before queue/worker reads it. Reading the
   placeholder hydrates the whole file from the cloud — pages of
   bandwidth and CPU for a file the watcher would skip on its next
   pass. Adds is_online_file re-checks at queue-time (in process_file
   between metadata fetch and hash) and worker-time (in process_item
   before opening the file). Worker marks the entry "failed" with a
   descriptive message; the watcher's reconciliation re-enqueues when
   the file becomes local again.

3. Tray Quit and WM_QUIT waited up to 3s on pipeline.stop()'s graceful
   shutdown of in-flight uploads, making the tray feel laggy on exit.
   Adds shutdown_and_exit() — signals the watch engine + upload worker
   to stop, then process::exit(0). In-flight "uploading" rows are
   already reset to "pending" by reset_stale_uploading on next launch,
   so nothing is lost.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Gumbees Gumbees merged commit b553542 into release May 26, 2026
2 of 3 checks passed
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