Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 15 May 22:06
· 120 commits to main since this release

Added

  • New package: Surge XT, the free open-source hybrid synthesizer from
    the Surge Synth Team. Opt-in,
    Windows + macOS, standard REAPER installations only. RABBIT runs the
    vendor installer (Inno Setup on Windows, productbuild-wrapped .pkg
    on macOS) under elevation so the VST3, CLAP, AU (macOS) and standalone
    formats land system-wide for REAPER and other DAWs to pick up. Tracks
    the rolling nightly channel at
    surge-synthesizer/surge releases tag Nightly rather than the
    stable 1.3.4 release (2024-08-11) — the project effectively ships
    through nightlies now. Version detection layers a NIGHTLY-<date>-<sha>
    token from the receipt over a Medium-confidence semver fallback read
    from the vendor-installed VST3 bundle's file metadata.

  • macOS elevation primitive in rabbit-platform::elevation: wraps the
    elevated command in osascript -e 'do shell script "…" with administrator privileges' so the system raises its native
    AuthorizationServices dialog. First (and currently only) consumer is
    the Surge XT MountDiskImageAndRunPkgInstaller runner.

  • New PlannedExecutionKind::MountDiskImageAndRunPkgInstaller runner:
    mounts a .dmg, locates the inner .pkg via a filename-suffix glob
    matched against the mounted volume root, invokes /usr/sbin/installer -pkg <path> -target / under admin authorization, and detaches the
    image whether the install succeeded or failed.

  • Automatic ReaPack script-action preservation across OSARA key-map
    replacement. Replacing reaper-kb.ini with OSARA.ReaperKeyMap
    the default OSARA-recommended flow — drops every SCR line ReaPack
    had registered through REAPER's AddRemoveReaScript API, so installed
    ReaScripts disappear from REAPER's actions list until the user runs
    "ReaPack: Synchronize packages" inside REAPER (or re-installs every
    package). The unattended replacement path now reads the existing
    reaper-kb.ini first, captures all of its SCR records, lets the
    OSARA key map overwrite the file as before, then re-appends the
    preserved lines using the written file's newline convention. Any
    user KEY binding that targeted one of those scripts keeps working —
    REAPER derives the _RS<hex> action command ID deterministically
    from the script path, so the re-appended SCR lines bind to the same
    IDs the user already has in their key map. No opt-out: the
    preservation always runs when the OSARA key map is replaced.

  • Live per-package progress reporting on the wizard's Installation
    progress page. The previous progress page set the gauge to 10 % when
    install kicked off, then jumped straight to 100 % at the end —
    everything in between was a black box even though packages like
    REAPER's macOS dmg take ~30 MB of network transfer per install.
    The setup pipeline now emits structured ProgressEvents
    (DownloadStarted / DownloadProgress / DownloadCompleted /
    InstallStarted / InstallCompleted / ConfigurationStarted /
    ConfigurationCompleted) through an optional ProgressReporter
    threaded down from execute_setup_operation_with_progress into
    download_artifacts_with_progress and
    install_cached_artifacts_with_progress. The artifact downloader
    swapped std::io::copy for a chunked read/write loop that emits a
    byte-progress event every ~256 KiB or ~200 ms (whichever is rarer),
    so the gauge moves smoothly during the REAPER dmg pull instead of
    stalling. The wxdragon wizard forwards each event to the UI thread
    via wxdragon::call_after: the gauge advances by a per-phase
    fraction (weighted by completed downloads/installs plus the
    in-flight byte fraction), the status label updates to "Downloading
    REAPER… 12.4 MB / 30.0 MB", and a running log of completed
    transitions appends to the progress details TextCtrl (screen
    readers announce each new line as it lands). The no-progress
    entry points (execute_setup_operation,
    execute_resolved_setup_operation, download_artifacts,
    install_cached_artifacts, execute_wizard_install) stay on
    their existing signatures and delegate via ProgressReporter::noop,
    so the CLI and existing tests are unaffected.

Fixed

  • Wizard startup detection no longer SHA-256-hashes every receipted
    install file. verify_package_receipt used to verify each entry in
    a package's receipt by hashing the on-disk file, which on Windows
    meant 14 seconds of stalled UI just for FFmpeg (~200 MB of DLLs)
    and ~1 second for REAPER on every wizard launch — plus another
    round of the same after every install via the post-install rescan
    hook. The receipt verifier now checks file existence and size only;
    size mismatch alone catches every realistic regression the detection
    layer cares about (partial overwrites, truncated files), and the
    receipt's own stamped version is what gets shown either way.
    Recording hashes during install is unchanged.

  • FFmpeg version detection no longer freezes the wizard for tens of
    seconds on Windows when an FFmpeg install is present. Probe 2
    previously called ffmpeg.exe -version via std::process::Command
    on the UI thread, which on Windows blocks for the entire AV scan of
    FFmpeg's dozens of DLL dependencies — easily 20-30 s per launch on
    a default-configured machine, and the same stall ran on the
    post-install rescan after installing FFmpeg too. Probe 2 now scans
    the ffmpeg.exe binary for the contiguous show_banner format
    string anchored on the unique the FFmpeg developers literal, and
    pulls <VERSION> out between the trailing version token and the
    next Copyright marker. That matches both the upstream FFmpeg
    banner (%s version <VERSION>, Copyright (c) …) and the Gyan.dev
    full-builds variant that drops the comma and pads with spaces
    (%s version 8.1.1-full_build-www.gyan.dev Copyright (c) …),
    so externally-installed Gyan FFmpegs now report 8.1.1 instead of
    the libavformat-major fallback's 8.0.0. Same High confidence as
    before; the matching detector id changed from ffmpeg-cli-version
    to ffmpeg-binary-version-string.