Update Fleet-maintained apps - #50867
Conversation
Generated automatically with cmd/maintained-apps.
Script Diff Resultsee/maintained-apps/outputs/cherry-studio/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cisco-jabber/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/codexbar/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/docker-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/dockside/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/duckduckgo/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/emclient/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/emclient/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@nightly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@nightly/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/gitify/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/glyphs/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/hive-app/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/melodics/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/nordpass/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/ok-json/darwin.json=== Install Script (no changes) ===
=== Uninstall // d7538dde -> dbbae48b ===
--- /tmp/old.FQILeV 2026-08-10 12:23:04.509752266 +0000
+++ /tmp/new.zDpjBD 2026-08-10 12:23:04.509752266 +0000
@@ -55,3 +55,4 @@
sudo rm -rf "$APPDIR/OK JSON.app"
trash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'
trash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'
+trash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'ee/maintained-apps/outputs/openaudible/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/opencode-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/readest/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/rize/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/termius/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/whatsapp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/zoom-rooms/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
WalkthroughMaintained app output manifests update release versions or installer builds, patch-version queries, installer URLs, and SHA-256 checksums for Darwin and Windows packages. The OK JSON manifest now references a different uninstall script. That script also moves the Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@ee/maintained-apps/outputs/glyphs/darwin.json`:
- Around line 10-13: Update the Glyphs 3.5 entry’s patched predicate to compare
the installed bundle_version against build 3531 instead of using
bundle_short_version, while keeping the public Fleet version as 3.5.
In `@ee/maintained-apps/outputs/ok-json/darwin.json`:
- Line 21: Update the embedded uninstall script by enabling failure propagation
and explicitly checking the destructive operations: ensure sudo rm -rf and every
mv in trash return non-zero on failure, including failures while processing glob
matches. Preserve the existing missing-path behavior, but make any failed
removal cause the script to fail; then regenerate the manifest reference.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 34fb5d51-3c74-49d2-86b0-6cf8d9e70e69
📒 Files selected for processing (25)
ee/maintained-apps/outputs/cherry-studio/darwin.jsonee/maintained-apps/outputs/cisco-jabber/darwin.jsonee/maintained-apps/outputs/codexbar/darwin.jsonee/maintained-apps/outputs/docker-desktop/darwin.jsonee/maintained-apps/outputs/dockside/darwin.jsonee/maintained-apps/outputs/duckduckgo/darwin.jsonee/maintained-apps/outputs/emclient/darwin.jsonee/maintained-apps/outputs/emclient/windows.jsonee/maintained-apps/outputs/firefox@nightly/darwin.jsonee/maintained-apps/outputs/firefox@nightly/windows.jsonee/maintained-apps/outputs/gitify/darwin.jsonee/maintained-apps/outputs/glyphs/darwin.jsonee/maintained-apps/outputs/hive-app/darwin.jsonee/maintained-apps/outputs/melodics/darwin.jsonee/maintained-apps/outputs/nordpass/darwin.jsonee/maintained-apps/outputs/ok-json/darwin.jsonee/maintained-apps/outputs/openaudible/darwin.jsonee/maintained-apps/outputs/opencode-desktop/darwin.jsonee/maintained-apps/outputs/readest/windows.jsonee/maintained-apps/outputs/reqable/darwin.jsonee/maintained-apps/outputs/reqable/windows.jsonee/maintained-apps/outputs/rize/darwin.jsonee/maintained-apps/outputs/termius/darwin.jsonee/maintained-apps/outputs/whatsapp/darwin.jsonee/maintained-apps/outputs/zoom-rooms/windows.json
| "installer_url": "https://updates.glyphsapp.com/Glyphs3.5-3531.zip", | ||
| "install_script_ref": "82042f03", | ||
| "uninstall_script_ref": "b1245f10", | ||
| "sha256": "1f74005b720fbf0b0aa9b0546c0fe1381cbab5f1ad3ef5f48ddeed140872b999", | ||
| "sha256": "1f8b0de72f1d6c10c5ab93994fcf01db148b2c896fff11e80b379abb77b42c66", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
fd -i glyphs ee/maintained-apps
rg -n -C 8 'Glyphs3|3530|3531|bundle_short_version|bundle_version|version_compare' ee/maintained-appsRepository: fleetdm/fleet
Length of output: 50370
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Glyphs output =="
cat -n ee/maintained-apps/outputs/glyphs/darwin.json
echo
echo "== Glyphs source input candidates =="
fd -i 'glyphs|glyphsapp|glyphs3' ee/maintained-apps -t f
for f in $(fd -i 'glyphs|glyphsapp|glyphs3' ee/maintained-apps -t f); do
echo "--- $f"
sed -n '1,220p' "$f"
done
echo
echo "== focused searches =="
rg -n -C 5 'bundle_short_version|bundle_version|glyphs.*3\.5|3530|3531|version_compare|default.*query|patched' ee/maintained-apps/glyphs ee/maintained-apps/outputs/glyphs 2>/dev/null || trueRepository: fleetdm/fleet
Length of output: 9283
🌐 Web query:
Glyphs 3 3530 build bundle_short_version bundle_version CFBundleShortVersionString
💡 Result:
In the context of the Glyphs font editor, Glyphs 3 version 3530 refers to a specific build of the application, officially identified as Glyphs 3.5 (3530) [1]. Technical definitions for the terms mentioned are as follows: 1. Build Number: Glyphs uses a unique build number to identify specific releases [2]. This number is displayed in the About Glyphs window (e.g., 3530) and is often used to differentiate versions, especially when multiple versions are installed simultaneously [2][3]. 2. CFBundleShortVersionString: This corresponds to the user-facing version number of a macOS application (the bundle_short_version) [4][5]. It typically represents the release version, such as 3.5 [6][7]. 3. CFBundleVersion: This corresponds to the internal build version of the application (the bundle_version) [4][5]. In the context of Glyphs, this is often the specific build number (e.g., 3530) used by the system and update mechanisms [2]. In software management tools like osquery or Fleet, these fields are often used in conjunction to track software inventory. A common practice for determining the version of an application is to use a SQL query similar to COALESCE(NULLIF(bundle_short_version, ''), bundle_version), which prioritizes the user-facing version string and falls back to the internal build version if the former is empty [8][9].
Citations:
- 1: https://forum.glyphsapp.com/t/glyphs-3-5-3530-crashes-on-launch-because-of-info-groups-plist/36783
- 2: https://glyphsapp.com/learn/older-versions-of-glyphs
- 3: https://forum.glyphsapp.com/t/inconsistant-revision-number/17938
- 4: https://github.com/osquery/osquery/blob/master/specs/darwin/apps.table
- 5: https://fleetdm.com/tables/apps
- 6: https://formulae.brew.sh/cask/glyphs
- 7: https://florianpircher.com/glyphs/versions/
- 8: Fleet maintained apps (FMA): Microsoft Office apps (Outlook, PowerPoint, OneNote) show constant update available due to version mismatch #40647
- 9: https://fleetdm.com/vitals/software-mac-os
🌐 Web query:
Fleet dm apps table bundle_short_version bundle_version schema
💡 Result:
In Fleet DM, the apps table is an osquery-based table that gathers information about installed applications, primarily on macOS [1]. The table schema includes specific columns derived from the application's Info.plist properties [1]. The two relevant version-related columns are: 1. bundle_short_version: Corresponds to the CFBundleShortVersionString label, typically representing the public-facing "short" version number (e.g., 16.1.0) [1][2]. 2. bundle_version: Corresponds to the CFBundleVersion label, representing the raw build number of the application (e.g., 16.1.26021521) [1][2]. Fleet often uses a COALESCE function when querying these fields to prioritize the short version while falling back to the raw build number if the short version is missing [3][2]: COALESCE(NULLIF(bundle_short_version, ''), bundle_version) AS version This approach ensures that the application version reported in Fleet's UI or inventory is the most human-readable version available [3][2]. In some cases, mismatches between these versions (or between reported versions and package manager metadata) can occur, which may impact update detection logic [4][2].
Citations:
- 1: https://fleetdm.com/tables/apps
- 2: Fleet maintained apps (FMA): Microsoft Office apps (Outlook, PowerPoint, OneNote) show constant update available due to version mismatch #40647
- 3: https://fleetdm.com/vitals/software-mac-os
- 4: Fleet detail queries not returning currently installed app version #37518
🌐 Web query:
github fleetdm fleet apps table bundle_short_version CFBundleShortVersionString
💡 Result:
In Fleet, the apps table—which originates from the osquery project—contains a bundle_short_version column that maps directly to the CFBundleShortVersionString key found in a macOS application's Info.plist file [1][2][3]. Key Technical Details: - Purpose: CFBundleShortVersionString is the user-visible version number of the application [4]. The bundle_short_version column in the apps table provides this value for reporting and inventory purposes [1][2]. - Osquery Implementation: The apps table is populated by scanning macOS applications in known search paths (e.g., /Applications). The data mapping is explicitly defined in osquery's source code, where CFBundleShortVersionString is assigned to bundle_short_version [2][3]. - Data Collation: As of recent versions, the bundle_short_version column uses COLLATE VERSION [5]. This ensures that when querying the database (e.g., in Fleet), version strings are compared numerically (e.g., "1.10" > "1.9") rather than alphabetically [5]. - Common Usage in Fleet: Fleet frequently uses this column to determine software versions for compliance and inventory [6][7]. Because some applications (notably Microsoft products) may use non-standard versioning schemes or maintain internal build numbers that differ from the CFBundleShortVersionString, developers often use COALESCE(NULLIF(bundle_short_version, ''), bundle_version) in SQL queries to fall back to the raw CFBundleVersion (build number) if the short version is missing or insufficient [6][4][7]. Reported Issues: Users have encountered scenarios where the reported bundle_short_version does not match the version expected by management tools or update policies [8][9]. This often happens when developers pack complex or multi-component version numbers into the CFBundleShortVersionString field, or when applications are managed via alternative package managers like Homebrew, which may track a different build-specific version [6][4][9].
Citations:
- 1: https://fleetdm.com/tables/apps
- 2: https://github.com/osquery/osquery/blob/master/specs/darwin/apps.table
- 3: https://github.com/osquery/osquery/blob/master/osquery/tables/system/darwin/apps.mm
- 4: Microsoft Teams classic Version Wrong #15538
- 5: Add version collations to column definitions osquery/osquery#8222
- 6: Fleet maintained apps (FMA): Microsoft Office apps (Outlook, PowerPoint, OneNote) show constant update available due to version mismatch #40647
- 7: Software missing from inventory after removing detail query override #33140
- 8: Fleet detail queries not returning currently installed app version #37518
- 9: [MacOS][Homebrew] Homebrew casks incorrect version reported osquery/osquery#8468
🌐 Web query:
site:updates.glyphsapp.com Glyphs3.5-3530 zip CFBundleShortVersionString
💡 Result:
In the context of the Glyphs application, the identifier CFBundleShortVersionString within the application's Info.plist file corresponds to the public release version number of the software. For Glyphs 3.5, build 3530, the CFBundleShortVersionString is typically set to "3.5". While the build number (in this case, 3530) differentiates specific development or maintenance releases, the CFBundleShortVersionString remains consistent across the 3.5 release cycle to denote the major/minor version [1][2]. These version details are standard for macOS applications, allowing the system to identify the application version [1][3].
Citations:
- 1: https://updates.glyphsapp.com/Glyphs3.5-3525.html
- 2: https://updates.glyphsapp.com/Glyphs3.5-3508.html
- 3: https://updates.glyphsapp.com/Glyphs3.5-3500.html
Use a build-aware installed version for Glyphs patch detection.
bundle_short_version maps to CFBundleShortVersionString, which stays 3.5 across Glyphs 3.5 build releases. A host with build 3530 satisfies the patched query and will not install Glyphs3.5-3531; build 3531 is also 3.5. Keep the public version shown to Fleet as 3.5, but compare the installed bundle_version against the build in the patched predicate.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@ee/maintained-apps/outputs/glyphs/darwin.json` around lines 10 - 13, Update
the Glyphs 3.5 entry’s patched predicate to compare the installed bundle_version
against build 3531 instead of using bundle_short_version, while keeping the
public Fleet version as 3.5.
| "refs": { | ||
| "239cd7a4": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'net.shinystone.OKJSON'\nif [ -d \"$APPDIR/OK JSON.app\" ]; then\n\tsudo mv \"$APPDIR/OK JSON.app\" \"$TMPDIR/OK JSON.app.bkp\" || exit $?\nfi\nif ! sudo cp -R \"$TMPDIR/OK JSON.app\" \"$APPDIR\"; then\n\t# remove the partial copy so a failed install isn't inventoried as the new\n\t# version, then restore the previous version if there was one\n\tsudo rm -rf \"$APPDIR/OK JSON.app\"\n\tif [ -d \"$TMPDIR/OK JSON.app.bkp\" ]; then\n\t\tsudo mv \"$TMPDIR/OK JSON.app.bkp\" \"$APPDIR/OK JSON.app\"\n\tfi\n\texit 1\nfi\nrelaunch_application 'net.shinystone.OKJSON'\n", | ||
| "d7538dde": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/OK JSON.app\"\ntrash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'\n" | ||
| "dbbae48b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/OK JSON.app\"\ntrash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'\n" |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Propagate uninstall failures.
The script does not enable set -e and does not check sudo rm -rf or mv. If removal fails, later missing-path branches return success, so the uninstaller can report success while the application or containers remain. Check each destructive operation and return a non-zero status on failure, then regenerate the manifest reference.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@ee/maintained-apps/outputs/ok-json/darwin.json` at line 21, Update the
embedded uninstall script by enabling failure propagation and explicitly
checking the destructive operations: ensure sudo rm -rf and every mv in trash
return non-zero on failure, including failures while processing glob matches.
Preserve the existing missing-path behavior, but make any failed removal cause
the script to fail; then regenerate the manifest reference.
Script Diff Resultsee/maintained-apps/outputs/cherry-studio/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cisco-jabber/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/codexbar/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/docker-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/dockside/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/duckduckgo/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/emclient/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/emclient/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@nightly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@nightly/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/gitify/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/glyphs/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/hive-app/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/melodics/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/ok-json/darwin.json=== Install Script (no changes) ===
=== Uninstall // d7538dde -> dbbae48b ===
--- /tmp/old.8Xk3rr 2026-08-10 12:57:32.457239777 +0000
+++ /tmp/new.h2gJN5 2026-08-10 12:57:32.458239787 +0000
@@ -55,3 +55,4 @@
sudo rm -rf "$APPDIR/OK JSON.app"
trash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'
trash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'
+trash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'ee/maintained-apps/outputs/openaudible/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/opencode-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/readest/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/rize/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/termius/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/whatsapp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/zoom-rooms/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
Script Diff Resultsee/maintained-apps/outputs/cherry-studio/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/codexbar/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/docker-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/dockside/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/duckduckgo/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/emclient/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/emclient/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@nightly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@nightly/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/gitify/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/glyphs/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/hive-app/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/melodics/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/ok-json/darwin.json=== Install Script (no changes) ===
=== Uninstall // d7538dde -> dbbae48b ===
--- /tmp/old.aN9v4X 2026-08-10 12:58:05.922861196 +0000
+++ /tmp/new.iUZsCK 2026-08-10 12:58:05.922861196 +0000
@@ -55,3 +55,4 @@
sudo rm -rf "$APPDIR/OK JSON.app"
trash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'
trash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'
+trash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'ee/maintained-apps/outputs/openaudible/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/opencode-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/readest/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/rize/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/termius/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/whatsapp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/zoom-rooms/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
Automated ingestion of latest Fleet-maintained app data.
Summary by CodeRabbit
New Features
Bug Fixes