Skip to content

InferBridge 0.9.2-beta.1

Pre-release
Pre-release

Choose a tag to compare

@Quazmoz Quazmoz released this 04 Aug 17:02
· 487 commits to main since this release

InferBridge 0.9.2-beta.1

This is a beta pre-release and its artifacts are unsigned. Windows will report an
unknown publisher. Install it only if you accept that. Nothing in this release has been
Authenticode signed, and no signing claim is made anywhere in its metadata.

It fixes two reported installer defects: installing over an existing installation failed,
and uninstalling left files behind while reporting success. Both had the same cause.

Why both failures happened

The tray launcher and the server child it starts are windowed processes with no
top-level window
. Restart Manager closes a running application by sending a close
message to its top-level windows, so it had nothing to send to and reported:

RestartManager found an application using one of our files: InferBridge
Some applications could not be shut down.

Nothing else stopped the application, so:

  • Upgrade failed. The running processes kept every file under the program directory
    open. Setup could not replace them and offered only Retry or Abort. Aborting after Setup
    had begun could also leave the previous installation partly removed, because deleted
    files are not restored by a rollback.
  • Uninstall left files behind. The same open handles blocked removal of the program
    directory, and the user-data removal discarded its result entirely, so the uninstaller
    reported success while the program directory and potentially gigabytes of model data
    remained on disk.

Fixes

  • Setup and the uninstaller now stop a running instance before touching any file.
    PrepareToInstall and InitializeUninstall detect a live instance through its lock
    file, ask it to exit through its own tray command file, and wait up to 15 seconds.
  • An instance that will not exit is terminated. A release older than this one ignores
    the shutdown request and a hung instance cannot honour it. Setup can fall back to a
    forced Restart Manager pass, but the uninstaller performs no Restart Manager pass at
    all, so both paths end the process directly instead of proceeding with the files still
    locked. Termination is reached only while the installed instance still holds its lock,
    so an unrelated portable instance is normally untouched.
  • CloseApplications=force additionally lets Setup release files held by any other
    process, scoped by Restart Manager to processes holding files under the program
    directory.
  • The tray now honours an external quit request. The command-file handler only set the
    stop event, which ends the status poller but leaves the tray message loop running, so
    the process kept holding its installation files. It now performs the same full shutdown
    as the tray menu's Quit: stop the server, stop the icon, exit.
  • Uninstall removes what it previously left behind. Payload not recorded at install
    time — compiled Python caches, and anything left by an interrupted upgrade — is now
    removed explicitly, with attribute clearing and bounded retries for read-only files and
    transient antivirus locks. The emptied program directory is removed too, which the
    uninstaller could not do while it was still removing its own files.
  • Uninstall reports what it could not remove. Every removal result is now checked, and
    any path that survives is named so it can be deleted manually, instead of being silently
    discarded while the uninstaller claims success.
  • Start with Windows is removed on uninstall. The Run entry survived uninstall, so
    Windows kept trying to launch a deleted executable at every logon. Both the current and
    legacy value names are removed.

Upgrading from an earlier release

Because releases before this one ignore the shutdown request, the first upgrade onto this
version relies on the force backstop and closes the running application without a clean
server stop. Later upgrades shut down gracefully first.

If an earlier failed upgrade left a partly removed installation, install this release over
it. Setup replaces the program directory contents; models, settings, logs, and benchmark
data live outside it and are preserved.

A model conversion running at the moment of an upgrade is interrupted. Incomplete
conversion output is detected and offered for recovery on the next start; it is never
presented as a valid model.

Validation performed for this pre-release

Ruff lint and formatting, the full Python test suite, and the composed-page JavaScript
syntax check all pass. The external mock API contract validator passes against a
source-run server. Packaged installed-mode and portable-mode mock smoke tests run as part
of the release build. Release provenance and SHA-256 checksums are verified independently
of the build.

The upgrade and uninstall paths were exercised on Windows 11 build 26200 against a real
installation with the application running, reproducing the reported failures first and
confirming they no longer occur:

  • Installing over a running earlier release completed with no "unable to automatically
    close all applications" prompt, replacing all 6,309 program files.
  • Uninstalling with the application running reported Removed all? Yes, left no program
    files behind, ended both processes, and removed the Start Menu shortcut and the
    uninstall registry entry. The same scenario previously left 54 files, both processes
    running, and reported success.

The "remove user data" branch of the uninstall prompt was not exercised interactively; a
silent uninstall takes the documented default of keeping user data.

Not verified

Authenticode signing (these artifacts are unsigned), real Intel CPU, GPU, or NPU
execution, upgrade behaviour from every historical release, and uninstall behaviour with a
model conversion in progress. Those checks require the documented Windows release and
hardware certification procedures. A signed stable build must advance the version; see
0.9.0 for the planned stable release record.