Skip to content

Added REAPER to FMA - #46428

Closed
desmonet wants to merge 2 commits into
fleetdm:mainfrom
desmonet:fma/reaper
Closed

Added REAPER to FMA#46428
desmonet wants to merge 2 commits into
fleetdm:mainfrom
desmonet:fma/reaper

Conversation

@desmonet

@desmonet desmonet commented May 29, 2026

Copy link
Copy Markdown
Contributor

Addition of REAPER to the Fleet-Maintained apps list.

Product information: https://www.reaper.fm/
Homebrew formula: https://formulae.brew.sh/cask/reaper#default

Thanks!

@allenhouchins

Summary by CodeRabbit

  • New Features
    • Added REAPER audio production software support for macOS, including installation, uninstallation, and management capabilities through the platform.

Review Change Stack

@desmonet
desmonet requested a review from a team as a code owner May 29, 2026 08:38

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@codecov

codecov Bot commented May 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 66.91%. Comparing base (b9e58d5) to head (b399618).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
...end/pages/SoftwarePage/components/icons/Reaper.tsx 50.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #46428      +/-   ##
==========================================
+ Coverage   66.90%   66.91%   +0.01%     
==========================================
  Files        2834     2837       +3     
  Lines      224862   225011     +149     
  Branches    11512    11614     +102     
==========================================
+ Hits       150435   150562     +127     
- Misses      60772    60785      +13     
- Partials    13655    13664       +9     
Flag Coverage Δ
frontend 56.69% <50.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai

coderabbitai Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

This PR integrates REAPER, a macOS application, into Fleet's maintained apps system. It defines Homebrew input metadata, registers REAPER in the app registry, creates a Darwin-specific installation manifest with embedded bash scripts for DMG-based installation and uninstall with GUI session awareness, and adds a corresponding frontend SVG icon component registered in the software icon map.

Possibly related PRs

  • fleetdm/fleet#46264: Follows the same maintained-app pattern (registry entry and icon map registration) for a different app (GoToMeeting).
  • fleetdm/fleet#45858: Similar macOS maintained-apps pipeline extension with install/uninstall scripts and icon registration (Secretive).
  • fleetdm/fleet#45174: Parallel maintained app addition pattern updating the same icon map in SOFTWARE_NAME_TO_ICON_MAP.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is minimal and lacks completion of the required template checklist. No sections are checked, testing details are absent, and migration/configuration validation is missing. Complete the PR template by checking applicable boxes in the checklist (e.g., changes files, testing, validation) and provide necessary details for review.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Added REAPER to FMA' is clear, concise, and accurately describes the main change: adding REAPER app to the Fleet-Maintained apps list.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/reaper/darwin.json`:
- Line 19: The install script currently moves existing REAPER.app to a backup
(TMPDIR/REAPER.app.bkp) then blindly copies the new bundle and leaves the app
missing on copy failure; update the replacement logic around the sudo mv and
sudo cp -R calls to (1) introduce a backup_path variable (e.g.,
backup_path="$TMPDIR/REAPER.app.bkp"), (2) move APPDIR/REAPER.app to that
backup_path if present, (3) attempt sudo cp -R "$TMPDIR/REAPER.app" "$APPDIR"
and if that cp fails immediately restore the backup by moving backup_path back
to "$APPDIR/REAPER.app" and exit non-zero, and (4) on successful copy remove the
backup; also consider enabling strict failure handling (set -euo pipefail) at
the top of the script to fail fast.

In `@frontend/pages/SoftwarePage/components/icons/Reaper.tsx`:
- Around line 5-12: The SVG lacks a viewBox so changing the root size via props
can crop the inner 32×32 <image>; update the Reaper component's root <svg>
element to include viewBox="0 0 32 32" before spreading {...props} (i.e. set
viewBox on the <svg> in the Reaper function so scaling works while still
allowing width/height to be overridden by props).
🪄 Autofix (Beta)

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

Run ID: b6e24a81-3b7c-4152-8147-a8e6fd5b0566

📥 Commits

Reviewing files that changed from the base of the PR and between b42a154 and fb02faf.

⛔ Files ignored due to path filters (1)
  • website/assets/images/app-icon-reaper-60x60@2x.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • ee/maintained-apps/inputs/homebrew/reaper.json
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/reaper/darwin.json
  • frontend/pages/SoftwarePage/components/icons/Reaper.tsx
  • frontend/pages/SoftwarePage/components/icons/index.ts

}
],
"refs": {
"4c045ce8": "#!/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)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_and_track_application 'com.cockos.reaper'\nif [ -d \"$APPDIR/REAPER.app\" ]; then\n\tsudo mv \"$APPDIR/REAPER.app\" \"$TMPDIR/REAPER.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/REAPER.app\" \"$APPDIR\"\nrelaunch_application 'com.cockos.reaper'\n",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Restore the existing app if the replacement copy fails.

The install script moves /Applications/REAPER.app to a backup and then copies the new bundle into place without any rollback. If that copy fails, the machine is left with no app in /Applications, which turns a transient install error into a broken state. Guard the replace step with fail-fast error handling and restore the backup on failure.

Suggested hardening
set -euo pipefail

backup_path="$TMPDIR/REAPER.app.bkp"

if [ -d "$APPDIR/REAPER.app" ]; then
  sudo mv "$APPDIR/REAPER.app" "$backup_path"
fi

if ! sudo cp -R "$TMPDIR/REAPER.app" "$APPDIR"; then
  if [ -d "$backup_path" ]; then
    sudo mv "$backup_path" "$APPDIR/REAPER.app"
  fi
  exit 1
fi

if [ -d "$backup_path" ]; then
  sudo rm -rf "$backup_path"
fi
🤖 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/reaper/darwin.json` at line 19, The install script
currently moves existing REAPER.app to a backup (TMPDIR/REAPER.app.bkp) then
blindly copies the new bundle and leaves the app missing on copy failure; update
the replacement logic around the sudo mv and sudo cp -R calls to (1) introduce a
backup_path variable (e.g., backup_path="$TMPDIR/REAPER.app.bkp"), (2) move
APPDIR/REAPER.app to that backup_path if present, (3) attempt sudo cp -R
"$TMPDIR/REAPER.app" "$APPDIR" and if that cp fails immediately restore the
backup by moving backup_path back to "$APPDIR/REAPER.app" and exit non-zero, and
(4) on successful copy remove the backup; also consider enabling strict failure
handling (set -euo pipefail) at the top of the script to fail fast.

Comment on lines +5 to +12
const Reaper = (props: SVGProps<SVGSVGElement>) => (
<svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}>
<image
width={32}
height={32}
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAARGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAACAoAMABAAAAAEAAACAAAAAAEiOBHcAAAHLaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj41MTI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NTEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CgCF4JgAACnTSURBVHgB7X0JgBxlte7p6up9Znq2ZCbLZE8gCYJhkV0Dgiz6rqgvKl7kKqIYoygKXNTnBXn3eS8g4lPBBY0giIAgkCAkEZKQBLKHkGSWzJLZ95ne966uut+pnko6s3T3zPTMdI+cpKaqa/nr///zneU//1JE79P7NfB+DbxfA+/XwD9pDej+Scqtm7vmZ2Zp1Zl5ppg+TzEYrIKgMySWXZaVqC4aDYT1MZ/4bo2v7a/fDeG6knjPdDyeVgBY8q1vmWLzbyiXRPN8QRGW6UTDIpLlxaQTZoF5M7EVkE5nxd6M7TQA4HcUW4gUJYC9B1sPKXInCUKDIkVPyDq5VpRCzfrml7vqf/nLMK5PC8ppAJQ9tHmmRSxYoej05+n0+vMhsCuJhArSUaFONBGYDSZBiGUZOxm8xTFvIwo27sczOn5OJyApbEiMn1Ek8FwhFxJrxblKRY4dJClyMCT7K7vvuqYnV9HANZQzVHbnZpt5TuHZOkG3Gsz5CDJ+Dun05TqDMV6GWAx8jqVg8liLOwAOQU+kxwZgKFEGRawLP94DyN5SZGV7qN11pPun1/jH+pbJfi7rAbDgvpcKFXv5xaQ3fhyC+VFU/DKd0SyoEh2T4tI9okRPdHWi+qAldHoR2UKWIiFWNbU4u1WWIq/q3F27m+77FLRG9lJ2AuC8rxnm3XzLhYJOWKMTxOtRyUsAAKJYNEHCs7BS2XyoGgLuhRSB5ZAboBn+LivSX1v+tH4vHfwd+xlZRVkFgAVferRcMeR9WmcvuIkWzL9QZ4CkM9NZ0nOQVM2gN7CpgAMi74cn8Sddf/ffmu77OJuNrKCsAMDCWx47QzEW3KIThC9An84lm5WUeXMGbHlW1NP4MsGaAUBQHUsp0ibL8l90Ec/6pjuvqBlImPnA3umk05QCYN6X168QTIbbUTGf0+mNhYoMDQlHjvJsBA0w6ZUxKS+EidCJRtYKbjgwz8qR4C9bvntZ5cC7Jx0IUwKA2V9eX2E0GO6AN30LJMOuQM2zU6cSN9OsaKovWjBQJ9N0B6dRZ0BTVYq40XJZH/E7ft5xz9Utk13ayQKAiuy5a+6wiIUf/BqJ4t2Q+NmnMV4rOQPAbCFavAAqc7Kyp718CvYDQIBG6KBo+CGppeW3bY98NoicqHU20TmatBqe95XfX6o3mB8g0Xip2lbn9vpwxAAwweNfvGggEDPcTdPwHJsGdhil8Dty1Hd3yx0ffnsySjmRAIgjeM3zlgXFoXtIMNwJJ8+qSn2ykjEADGhXL15MJHLA5Z+L2Cyg1ROgaOSnkap3H+j43W0cmp4wbTBRAFAz/MVbb13ebVn4aK2y7AqKRdL36ln1L4EGMMFGMiD+2UgzC5HAdiXg/Ebzv19dPVEgECaobpWb1q69wZhne7PYELxCJ6FjbTSM5Hul3Gz7Z6Q+ud8iEoSTaFmtyyt9s+KnO25AuiwJGRfYCQHAzevWfddgNj+noBfOEPOTSYeo2GjyzgCIoGXwz+AEJkGMEg2hCoRZotX+3Pyfvf29ARAkeWL0lzJlZOPIXLNGf/OVVz4omkw/hsTrufdNpBg5ZTv5FSsgkKY6ZwBY0GOblzc6zTH68mf/E9w81pFeMJo/Zr/q3/LcBe6tVFWVMW2QCQCo9p6Y+WVljxhMpjsQ6TrJOHSRoJPdRP1yIfFxWsQAYEfQXpDW7dP+Jq4PbILJcol9znkz3PmefwAE3Iwat0nICABWr14tfnjRImb+t2KDbDfnkDV5V6x0dHziB4sKx2wGhoPauGtrdCXI/N0QLMFku8BevqrYHW7YQk1NwxVzVO+FmI2LuE6VipUr7zeC+dIg5nPKMkBq0wXJogtRQLGkZwYYMewDRLENagmwMMj4E4spJMdkisnoYsExP6LDsY4lBT8M+kHsxnMRXMd/UnBJEWCQcCzgPt70egGdjjjGNujJcVVQZh9GWSNhEqz2dfP+5Sfelu2XfB/pc3ZRkrHReMqqvvimr399rdFieYztvTriZph86AGDamkRtcbKiI/TIk5v7hyKFdgRLZXQKAD6wT0zGFRo1FOZzUBleUaaU2BU9yX4XWQVqcCkJxPiB2bDUP82GI1RKCqTJySRMyhRnz9KnZ4IdXoj1OWLUG9AIjfeFeLqRD+/HmkYROwHgymtAkzgTYx2BI7QRFzXfOfqx/CmMYNgrABQX3jjrbdeac7P3wDO20ZiPleDAKb3ysV0JLospQaIQaoj4SjFwhEylZZQ+bJFtLTIRGeX22h5mY0Wl1hott1EdosBcaKxZn8ocyIAmAsAaHeHqK43SJXdfjqG7YQzRD0ATAQ5F40CGQ16VUsMTWGSzwAA4LtfdnV/suWHH3uTf2AbtSYYSw2qL/rEmjVzSmbP3i7q9Uti3IOXhPiBKGT/QOQsCiqmISCQIJnhUAQSHlOl+ewFpXTJitl0/vLZtGzeDDB7vJYqSeZSXOqDZqjtCdDeZg+90+ymyr4A9aF7XwftYDKJU6odBnoVG6JtNavbH7ypDUUZNQjGWrP6ovLyBwwGwxKJ7XQKYlgaAYFiwQUzUA4oxO13CEzXSVGqKLTQ5R9cQFefv4DOO2MWzSxCd3CWUCnMDG+XLCqkO5CnNmiEfQDCpuMO2tPmpS5vDI4ZzA429h8mkxSMOtKZrIvF8sUP4L03Y+OqHpUWGG2OVYR9/rbbPme1Wv+C5l7az3MT0CEX0H7/EgoHw1Rq0dOHIeU3XLqULl45hwrz0QOYY9TtCdOOehe9XNlLe9p95IGPYoJpMgzjf0xY0dgf0ItKzN3zhdZ7rnoW72HnJ01HK64y0s2byuzLr7uudNHSpbv0orhMTqH6ExPG0G0Kw667LefQdZd+UGV8RZk98ZacPq7p8tNLR3ro5ep+avRFSYTZMsFZnQyK9yJG6oJV2y7r/s1dvQPvTEsTjMYEMADk+QsXrjMYjcvSUf2cEWY8A9Ia6Kb8tsN082cX03WfxhD+KSQF7elIMEBSMESRgJ+ioSD6qiIYfhglmZuykCpEM0kQRTKYzGSw2QgtHTJg02tD0Afl/0w4qd8vX0hrL5tLG4/10VOHuuhIf5AEM4AAX2EiiXtYYQqWmpZcvA7vuRcba4G0AJCuClfvu/aGG+aXzZ+/Vy8IM9VoX5JSoR9AzYPN30VFzlqyAQCRcIgMM5bQd//wBpmtCPNOAoW8HvJ0dpKrvZXc2LxdXRR0Oiji96kgUNTYBZqcAIW2sSsl8Nh/LgPAgHg8oW+DDFYbme2FlDdjJhXMmk2FFfPJPnsO2YpLVLAkFieM5uZrVX30u70ddAhOpAjTYISfMGHErQI51hNq2Hdh18/XNg+8JyUI0oUmA0CG138rHL+ZyaQ/zniE8oN9VOyoJpu/A8EZVC40AUuTs62WDr/1Gl103WcnpC7CPi/1n2igrupK6quvBcM7iM8pMFcCt+0RI2DJFlBh3KQjowgGq/geNj9q81aNccQo4nFS2NVPjobjqGtMQkFESQQwrCUzqHj+QipbvoJmLjtTBYcJfsCnzplJH185g1452kOPvtNOla4wmRGvEBFbyDihBaUzWmaaKs66FWn/H2xpaYGRS34qh+o9F6y+vmz5B5buhWTMS5R+LQHu7WPmmyIeKu6vogJvMwmKFDcB2k1IMxQKk33hKrr9sVcJpuTUW8ZxFHS7qPPoe9R26AD11h2nkMelNjVFpM8bBqIkZfI4Xq1qDQ5/S2xCpBhMh5kK5lTQ7LNX0dxzz6eSBQvV5P1RhZ7c006/hkboQszBZkO+EuplPHk4+SxPUJEirb59Wy7se/qH2tDzpFognSzwPcrXvnPTrbaC/MdJjqBrSlY3VVXq4tKtIICT52mjAkc9CeEgSTE9wrUCoZUHadGp0/M0q+TwBujG+/5I51/1yZN5H+0B2+quqmN04u0d1FV5hMIeN4noQGLbDQd1tMll7H42I9FwGH5FGKN/DVS8cBEtuPhyWnDBhWQuLKI2T5Qe/McJerGmnxSzQW0+ZuzlSIhHFMWcXbe1fP+q3+Ena4GkLYJ0AMCJiP/54Kdet1rFKzloc5LwNCLvZAy7qNDVQKaQU5V4re+fY+2oDzhWOgBBBx8AW0ggtzNCtopz6fZHN8IuYtTPKCjk8VDTnneo/q03yN3aogZi2EFjtZ5tlAgGI0LaFed9iJZf9TGyz1tIb9S56f7N9VTljlBePmupdFiRuoQMADno29r8+69cR5WVPKqGNcCIWiCVV6JK/9pvf3RlUbHlPphyAzOVGSyzd492b76nmQodtSRGg+o5jflaVlnNsWYyGBHHtylky5fJXqKjkLOJCuAQli38gHZryn3Y56PXf/wDatq5TZ16ZcIEEvRAqio+5cNTcAP7FnoDnD8e2wAb3QfzVLdjOzmaGuncZXPoxtUrYBJjdLDJhc6pDPU5gEkweWW2koUbvLs3dKcqdjoAoGs/sfLzeTbT/+I4PZPq0EV8VAJbb/N1xN+hev3xwxH/DuCQQWEyydTTWENnXPJ52GlUUBokojI9nR3kam4k9EGwBcoZYgeUWxIinFBXazPV7thG4c5W+sxHVgAM82hPvYP6g1EyZiB2gMmzBgCq1vPmU7tRQUmdwVQA4Ov6j1234gcGg34Zq3N29Kxo2pX0V5Ih6o87eWNgBTez/I4OGCgLVay8PD1GAjklCxZR4zu74IqgW1Sdpp3eo9lyF2sFEcPeRcQTHC2NVPfWNlpsjtKNHzuXmj06qunyQVtiiDhLyRhJnaCKAebuzX94PlUSyQCg5uDqfzmjbNGCsv+AjSrAbFfY+hNkd9WrTTvomlTpJ72uRxOss/YwzTv7WrIVzkh6r3ZRlSKo/eb9u9XgjHY+1/bMYDZfPA6hvfIYeY/tp8+cP4+sZRW0r8WHOQIQ3fH4BeihFcW8vwRr93iT1U0qACifvP7sc+2Feev00YhQ0ltN+arKR7OKR1WA1L9jBCsXUIIp6e9ooaUXf0ZtpyfLrHataP4C6j5eo7bxuZmXy8RNVPYRIsEgte17m84zuWn5yjNpXw+G0sFvYICMmmBqEbzKU6ymjb5dLzYnez5Z6ipboxXWlQF7QC/Jh8lj66HOGTrqL8JaKQUK+TGFLwQnXkYqOrxUjwaCusFU8O90yJJnoY7q16l661Pp3K7ew6r/gi/eojazBg9BSzuRLLuRtYGlsJCaEcuYu/lX9KOyTpqBZmQYXc+jJ7jiBqNgyCs9C88yJ0YU0ZQawP5t483u8oYPtZZ4qWmujprnKNSErXEu9nNl9Tefay9TqLeEyJunUIRnQuOfCEDwJmhZGCYbCMKiu7WIdC0NVLr8I2TML06rvBa7HWtGmKnlwB4ywrnKfFQlrWxk9CbNLHDI3NTwLq2yK3RcmI1R1cKoB7/wWAE5Fm30bPnja8jkiII+EgCYVfyQeNZnI+tEMbZEQTCHT57kIQ4Q6yEJTbwQtLAfXfiOQoW6ZijUMlsBMGQVFE50+EUBCBHPGxEU0jOg8SwzngtclldG5fZZuClAnuY6mrnqWti/9Nr0pYsWI8bfhmbVCdXDRsrTggQuP+Iaxs46WhHtpHrDbHKZ8kifrlpFLaiOoBR1DDiCLILD6uRkANBREdmWf9qyTifSLPh/Q0gDhLpH8izpvHE+GRxBCCaDoq1codbZaPaVxLWDEbPEbDGRKvIwDsBapI4lFIwGCnSfICkco+IzLxryruFOqAA6cyW1HNxPYS9HAoG0aUJcNgFhZVugn84INtOJgvnkMuSnPaaSfQtMwvW59279M4IuPGoHXBlKSQEw/3pr4azz9LfD2bcP//jQBLUzg0HBgPBCS3SUydQ2B4GkWTOoAAWyYdaYESFjzp3ebCRn3UGyFM8n2+wlWlJJ99wqKF2ylBp37UQR0eGTg03DpAWEH2DHiMTlgVaqs84llwhNkAYzVH0ty9FIf/2T0ZZqnmA6egAsvlaYaV8krkUTEGu2JM1myosMCAFhRD3+2awzyFtoorrSCDWXxCgGtWFHiNgClEDbUF/lbipcehGZ7Ok1Da1FxZRfXo74wNvx3j6gfzqRDAksiAXpzEALVdvmkVe0wT6nYAieQbM9qvP3/ClwZJcT9THsA0lrSrAYzFBFGdKrPF4fw7bNM8komNFawG9kqc8Wo7eWhOiFVX46UIFOFCtCpxSgmqe+D82VMpJ5ks/zP3QxnfuFf6OA2xsf1HHyyvQ4iCIwUBZx0lc6XqciyUsxMDgpQdgguAbBlK+FWVkGh1BSE7DwGrHCNkv4KkCQnlc2JPlTJ3QoQIF5BhnAfHYANYprBjiSBjiOJRI1lkQxFt9ABV39FKivpuJzrsTSAum19WfAFCCYQK3wCQzm7O0j0Mo+2j1rghIwf06oj97LW0wS6nRYrnLCfAGOm9zf+5Tv4OtdA+86VfEDJ0aCkZouZt3o8cSI7xhII+WOHZp8U+kQ5ic+yNqAm4xui0xblwVp02UCHffvobonf0QKulfTpXM+tYbOumEN+Z0u9EQO47mmm1CW3heBLC73t9DnurfHeZyUPTqdok8eThwJAFx8ndrVP4LtGE395BlLyKi3nCb5Iz3PQOCmYrtdok2X62mj8hodef5eNBPTXy/g3M/9K0Dwv2EOPOqAjZHelavnI4JIF7mr6Jr+/aoWGLkcGLOkYPRJEkoKgLBPCCEJnhQzJmJVbzUWYqqWLS3mJ76EQcDR5qpzTPS4+QXavuXHRJgxlC6t+uy/0tIrryG/C6uxJZicdJ/P9vskDGm7vn8frfLWEQNiKKlMi8gRH6vPETmYDAAk+dUlstFqHz0x881oslgM3IKEWI+BONcGBJD8s630OP2Znn7n3zF6F+3GNOmCL36Z5q66gAIqCNJ8KEdu43EXAmw8m4JZYQc0wSBWwuzCD0QXAwYijgEAzDFdf7Xgxw5rlYyuVpjhcD/JZuSw7tiYn/hGEfNPzAV59Er0ZXrk4O3ki6S3/jKPErrktnUYuVuBgaE+FGWUBUnMRBYec0ugGE4hg8CAGAiDQiM+wkzpYLRRjQGcuqDdMLAfBJvTriqe2mAI6TpHW29Y5JlspmLUd7LkT3tXyh/of8QcwXza53+T/vPAV6kr0JbyGb7BmJdPl37zDjRB9SQFsPzeaAuT1lum7iZ2Clf6mujq/oMUTTQFXPeK7AgeezepykzGIZ23A3M5Y9QzmvFqqt03FKoaIBPSn1i1DGM7YuJNwXfp/gNfohOeqsTLIx4Xzp1H53/5NgqzUziKFsWICWbZhSj8gasdB2kJhIKbhiqhOSzHpB7ytmsAGFYVJwMAPxCNSUrLyH1Jp9cEM5+9fTNCvGO1+6enOPyvfKON3FIL/eTgV6kKBU+HFl72YVp81TUUdDhIhyHc8WHK6TyZ/few6rdgtPane3aRCestq6YAoMBUp2bkfsR+AC5ZKgDIiEDWI8W0SFX9xiLcO6LJSSuddG6yGixYe6iPHjy8Nm0QcKTQNmsuRf0Bwgei1I09pelAHClcGmin1a7DcS0AoMsN9Q0o25ibgVwvurA7VitLqSuJJZ49flHgqF3q+znx8ZJFNCMk6qGfHl5H9e5jKZMzYtWx87/0Vaw+w98gQNQJm6oN+HgaEDcNr+w7RKUnqijW3EKxno46FIulcUSGjKQB+AHeBEetfEKJkC+ZP8fMZ8abxYlV/cjPEDLj41ARctJDh79J7b7GIdcHn5iz6jyaf+lHKMStAiaOmbM2YLOQy0BAORQEy4qCTrrSd4wkWfYGHS0nUELm8agBoFYN/ujqNwY6EVFtTgYAvtkK6WcTMBWEPivySO308HvfIQ86TFLROYgU6jE59bThZCikCgR2EhkIuWIaBuU7Cn5fJnTQGbHuFlcN5qHFSRPoIVWTimOKv4k8sbByVDfCejws/Ua9GXMsucd4RKANeXGmT+QZrdQWOEq/OvoDoD95xDBvZhktu/YTFPIOaIHEzCRqBJ45nI39CQzOAfM1WHOxA2jTxWhN9NBR6jmWdEQwFzsZAJib7EBIIY+ydyTe8sADtv3xAWOc5NSR3ZxPB/s30XP1j6bMxJnXfYIsmObNkzqHJQYCAMAVrFYyg2EqtYLG9AFzxdpqJHBCl5E+5NyLcqWcGpYMAFwvDALBU68cjEUUzHbkU6eIJd4A6edtKqX/VI6ICs2IGDb9hvb3bE88PeTYlF9Ay675OIUDPFgmBbGaZTDAPPCmrl840WaCGc7aJwGEKtNTvJfHDcoxf/hEd98BlIr5O+ZWADOfN92xZ7z10Kp1iYEmnFfxwPH+bJB+zg8T+yFmg47+UH0f9YeSf9Bz8eqryFRYoq4MEn86jb+sGVj9siQOAEJlDGsIZg4zjZmnbcmS1O7hZ/hZ3jQJH9A8DLyTaSZJi5fiM6DfzqLHwtxStPa5/cfqcXvSFgAnl44GkAPN5Ir4lZ2n+wFxz98gptfNmyTvGb9kwpBoZ7SFnqx5QEXwSC8wY2j5wstXD2iBQeptpIcGn2cmMiBYUjXmMTA0BiYeJ57Tzmt7fpa3RBANfteg37z4tl4nkVEXVjdMyCcRoW5/JLqzye/nblCWfhZi3oaltACAJxVfS2yrHOXSxokPjJB+LLCqncqqfb4xj3b3bKB3OjclzdfSK68iC5Zu0ctYmn3kekqaxrAXNenmPUt44pZ4bdiHk5/ExxRVaWfGGxDoY+nXKIpRPC1u71b8ZhZpANAuD9mnwz1ORKh7SToQCynNmhngzhVTFkq/VkIehWTBJMtn6h4mb5Lew3ys5jFjxQdICXnxXYOQKkkipCqxUrU0p2rPwNSYHs8jFukACAYDVkT8PyzFml84UnuIeYbtpMCOlPdUAOAEVCR17Qn1YjLwmzqRXxtv+ukzNV50pNyN87xJb8Iyr/X0SuMfk6Y07/KPwg+A/QUx40VIFUsXVzbbVVazfH5whSdNdBwXNYaLung+4ip+eKYnvkbE6C9fNPLGvuZudn5YcDOiARgAXDuyq0HeKIcV9M5D/esxMTAHKM9kpS1tT1MHAhoj0cyzzyVjUemQ0cTMCJY0VrOanVXVLhjDWoKvacAYLTj4/jijsdwO0mFmM9hMA8Az4lhEK05Lf6S8J56PxORYfbfrVZzTmJ94edjjVBpAe4gT1NX+1rsfZqBKxLTubGr6aZkcbi/CZoUVF7104vfDXVbPcZOwdPnZ6ro+I96EC6cYJqlaghmmaYrE/Smw8HVtiztqpxgc1zBxQMWZzUDAlJlkWRjxmohZxCEpVv2nA8e5+ccymlL6ObF0AHDSDPS1YkFtZ+wlI0Kv7APkCnGUcHfPq9Ti5ZbR8DTr/IvUVb6Gv5r6bKJEs9TGN9YQ2hY/xwzW7k2davp36OHzOPyhl2v7+zkWrmkA5l1SSgcAnIBmBnSdO8MbhIjFM0Vh/6SFGekixwaiipdea3lqpFuo5IyVWBEUnVncDMsx4g9kBKOSZ3tD6wZknaWfC5GS+VzMdAHA96qoOrY+WqcETVsE4xjbzZzSFJAN4wf2dL9OvcHOYd9uwWKP+XPnYzWz5P0Iwz48xScNUP/+iLT5if2VtcgKMz5tO5IuALREGVnR3hr/0wgNs8HKGdKjr9wf66PtHa8Mm2duNhYtWa6uGTzsDVl6klnAzl9VV/+fcYiw4Unpz7gG4CpgZOne/nHT7og/tkePL2jkElmxht6uzo2oMG2Y3Om5L1565pT295yem/R+GTAb2h+O7nno7SO8IhhT2uqfbx4NBzUtIGEshd95IrSeP9aUS2TUG6kzUEeVDnaUh1JBxQLC9/lyajYRf0Cr2e1a7/P5MIRfZT4LadqMGQ0AuMY4YUaYbtfD7VugBY7o0fGSSyRgEaO3u3jVlKFkLSklY0FhzjiCcdsfPfKrt479A6VhRoxK+rkGxgIARpjkqA86Xc2RxzmRXCILhpAdc+wmf3ToWAnRYiV2BkfzIYypLnuzw/t4g8PBTT9mftrOn5bv0QKAn9O0gPDWI60bQt7YsVzSAqJgIEeknY5j9OxwZC0tH1c8YLg0J+IcS78vHD366+2HNiJ9ln52AJk3aat/3DtqDcDPMKlawFkZdLgaw7/izq1cIh2GTB3u2zVsli2lM3LCB+A6b+x3P1rtcjlQEGb+qGy/VvixagBmOb9Ut+v/tr0a9sb26XMoLmDEAhTVzv0Uw/cMBpO5sBgtgexGtBGevzcU3vfTXXs57s80JunnB8cCAH6Oa0jVAv1tQXf3Ud/PERXImbgAllCkrmDTsEEhE5Z1z2YAqJ6eLMdqepw/b+sPesCHMUs/M3LcAOBENt3Z9EbQHdssmsaaHKcyecSh4bCM7w54jw95qYG/ZZTFcW4jVht3B8Obv//arjcGMj9m6efnx8Mx1gLseXIGQk3bnT+TgrI/i+sO2TxFvPxJwzCzifRYezhbl5rjmH9Eivl2NLb/DCXhef8ctx6T7ddqYjwA4DQ0X0DZ+WD7AV9P9IlciQ5yN3GLr0arh5zYG+H5d/mCT/xi57s8I5YZr7X7x+y0ZAIAnBFGonJgffdjEV/shJADwSERfQM9wTaKDp5EkqVxLR7u5Y1EGp/dV/lrruuBOh+X9CONcZkAfp5J0wJS/euOtt7qwIM4w8Ndspq4c8gd6cMQKh48m0BjlqWENDJ8GK9KRantdj7wen0Lr4zBZlcL/Iwrx+PVAFxUzoAGAmXjuoaXg07p79nuELIjGJH95Ar3cRlOETcBs6wZyI6fIxB67Xsbd7w8kNFx236twJkAAKfFANAcwuDxDb0/iQbkPgEDSLOVeDJLBEPBXeH+07Io4TOy2RQKxldaebBH36s1Df8PGeVuTGa+ZvtPy/tYfmQSAGyPWDXJ+37bU+U8EXyI+9iz2xQo5ImeDgD+pCxnOxuIs8HLPDb2ex76076aavzUhEzTuuPOZqYAwBnRtIDqEG76Zt1Tgf5oVscGsI7mkE6hMD4PqwJ33FU7/gRMUP3OYGjzXZt2Pz1QvxmVfs5hJgHA6TEIWAtEMecyULWh7150GXdnqylgX9WPZdYSKdgPnyALNAB7/YGI1PXqkYb7AiCuU2ya6ud6zghNBAA0UxA7+Lvumr4a/4+BCzlb1OrgWosNagYG+3unPBDEdQUOy8d7HPc/caiagxXMeAbAuJt9g8ufaQBw+ommgDasPfGCryv6tD5rw8SnxJ0/9Rro655yAJjQ2dPj8T99x4a3XhioT17EIOPMZ2ZNBAA4Xc0UcMajux9u+0nILR3J9ihhBJ+ZDzn6pvQ7xNzT5w5Fjvzqnff+C3XH5pTrUHWusc+Y6kdaKk0kABixrLaijW97uxvecN8thWWXMMJSM/HsTO1fX3cnMQj4eztTQbyyO0b4OnfUtd69u6mD1/jn+mPmM+MzznykOWEagNPmDGsgkHc+0Lqvtzp4H1YAz5ooIccCeH0jjdxNDbC2mKM/BQ4LGyI0SpTqnv77H955aN9A3bH0s/3nepwQmmioc8a5AFwQZcPX657xtoUfz6YooRVL2WvkqK2C/Z/oKtHedvqem3wdXv/jd7y8/RlcYeHRmD8hkq+9fTJKyyBgNcbdl9Kmu5v+y98b3SaaJ+PVWjGH3+NbCJSPdY2ZZMwIcjbU4kvm6X2eZvgUx3bWDOb3+UPbfvT33f+NFE7WFY6Z+TkPAC4AawEuWMTVFHIfXN/zPQwjOz7VLQMBE7Pt+JoJk7ejlYK9nfg+UYa+kaWmmvoPd/F6wtHjT+6rvrPZ7eaeKVVQsGfBmTDVr+VsssRQA4Hq1FS92NtUv8X17Vho6voLOAjEH7Cym+IA6D76LrQA1vaZRPuvrugRi/W9cbzlOxur65vAFNVpxp4FZkIlH+mrNFkA4JdppkC1bewUtu/1fg8fvQievvhUPGMT/VfGiy1Y2rYQH7Ni6j60F+p/8qSfp3Nj7GHwUFv3Xb/YpTp9mq+kMX/aAYDrmQulmgI+fv3uxr93VwbuhQec8jN4/HAmScKn2YuMZWQzFJCvswP2v4ZEfMF7MoiHdikYk1bd47j3h6+9o63okaj6J4X5XNbJ1AD8Pi6Ypgm4wPKG2+qe6G8IP8RaYBK1L5aTlajcugAVoKP2vTspFsIS8pPQ/mcTw9Lf5HA/dPtL255EHbDETwnz8d5JBwC/k0HAhWZ7xwWPvXhzzS/czZFfCzzb+FRkFpcmjjCjmhYWrFDh2Lb7LTJaTsUDJuqtXDSe0dPq8v76a8//4//jZ6LHz4IxaZKvlXGyNYD2Xk0TsD/AgxzCz325+ifu1sgT4mSBQDHQkpIPkrOqkrwtDRPe/GPm88iedrfvybXPbuYwL5edBYAFgQViwj1+vGMITRUAOCNcYN7imiBIwVe+2nivpyP8nAoCvmOCKIZZLPmGEppnW0K1m/+Gr82CPRNsf5j5CPQ8960Xt92LT1dx9y4DXwv2TAnzuXqnEgD8fi44o1/VBEFn0P+3tY33qCDgQNEEmYMIwr3z7FD/bU7qPryPjFYL52VCiIvAUb5OT+DZdX/deo8rFPLhVKLkT7raTyxotiz1xZWgVoTkk+S6Tb6di67ILzYXGc4hOfP1E4gE6YqKL5D+75XkbK7Ch6Ynxv6zUuEVPDrQtbvuxa0/TGC+Jvkny53IlMk8zhYAcJlPVoaE9U6PPt+3Y+nVhXmWIvE8tUIyhAOe9yfjo5bXKNdT1wuvkMFimJDgDzf1ONDT5vL+/uZnNv1HSJKGU/sZKtXYIZNNAEgEgVoxx17o27nwCjtZigwX49uF3I84buKJIDMty2jpNokCHc0T0vbnrEL4lRP9nke+8twWdvjY3g+2+RkozbirA8Hw7COumJNOUdXf+vfMu8jutM0QL8VYAhEBvHFREC7HsvYKsu9ox3eDMi/9LPUoQKim13HfN1588zFkVvVvBvaat58VzOeKzEYAcL40EPBeqNnY/27ZSlt9frnxUr1JZ4UTP3aSBTpjq0CFYTDfkNni82ieiBzr29/e/d27N+x4FpnknMLpV0HA0OUta5iPvGQtADhviSDQ129x1llKDHsL55tWGW36Gel8y5ATSSRZr1BhdwF9sKaI9GJmG0DcpYu5e9Vbqpu+8d9v7t+G9zKzE9U+lyermM91k1kR4BQzT5rkCK27PV0+Z/jNmcvz5pryxWVqdaZbpRhuE5UMdObREprdZ4QjmJmMsr1nT7/XH3ztN3veu/2Zd4/zBA6O8DHztSBPVjKfayDbAaBVHO8ZCDpHbdhf+7feNyoutYe5hYAFqvjL6SmJl2oW+/LpQ0cLSOT7MxBj4LAuBhKHGp3un33tmU33H+9z9yJlZrrGfE3lpwvTlOXI9A3ZDgCtvBoQ1ArF53mUqpf69xbNN76XN8t0FkxCaapFK4MhKy2rL6BF7aZxSz936LDK90ejNbubO+64C/YeIs/BHWY871kDaMzHYfZSrgBAq0GuVG0TGrd7mlwtkS0zllssxjzxLGgDYYg2YNUfNpPosdIlR2xklLgrVktu9Ht29BBLkDq9/qceeevdu/58sPo9pJLo7PFxTjCfS59rAOA8a9pAVeQYYhY49lzftpLFpiO2mcbFRqu+XG2EMwvA/FjESMGQhZY3WWhJGz42PUbbz7N0efiWLxx+b39rzz3oyv09evVceEuiyuc8afnDYfbTOGRhSgvH+WZWith4FCeP5BCKlxhLV/9g/o1Fiyy3GGzCbCmI+XVuG5lDevrEzkKy4fdopZ/H6hvA/EBU6gTD1z/05qFn6h2YPRKXcs3WJ0p91tp75HkI5SoAuCCcd95YizEQGAQMBt3y64oXfuCmmTcaC0rWkNEw60Ko/hU1ZoqiGZgOcaL8CRb28HmCZo8/8Nzzh48/+3p1UyMucSIc3NFsfc5JPfJ+knIZAFwILf+aNtCAwIP7hAVXlM274Jp51685UX6DXTGsNBlEPa+uHUM4Ue1j0lYCAaO5R1iPVUOY6WFJigWlWFW3J/DyXw/XvfZGfVMT0mPGx7uu405ezko9ynGStAo8eSJHD7gcvGlAYACwNmBAUD4+EPv1K886e/nMksvsFtMFJkFcCAEvQsRenQSAEcIRSVZckVis0R0MHajudez4za6jRxHYYRuvMZ6lnr37RA+fr+U0TRcAaEzQgMBmgTcGAoNAG+7LALF8qGJWyYry4lKLiK9fgfzRSLi629G3v7WLlwvhXjtmrMZ4lnpmuibx7F4y5TzzuRDTDQCJZdI0ggYGBoJ2zEBg0gCTyFSN2dpes/GJ98SfngZ/pyMANLZoZdOYzExP3LTz2v3M4MGbpgn4nmkh8Vphtb1WSdrv6brXyqkxPfE3l1ljrsbwxN/TtU7UcmkVMa0LOahwqcqsMX/QY9Pz5/8ArkllUi2/o48AAAAASUVORK5CYII="
/>
</svg>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a viewBox before forwarding size props.

...props can override the root SVG size, but the inner <image> stays 32×32. Without a viewBox, any non-32 render size can crop the icon instead of scaling it.

Suggested fix
 const Reaper = (props: SVGProps<SVGSVGElement>) => (
-  <svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}>
+  <svg
+    xmlns="http://www.w3.org/2000/svg"
+    width={32}
+    height={32}
+    viewBox="0 0 32 32"
+    {...props}
+  >
🤖 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 `@frontend/pages/SoftwarePage/components/icons/Reaper.tsx` around lines 5 - 12,
The SVG lacks a viewBox so changing the root size via props can crop the inner
32×32 <image>; update the Reaper component's root <svg> element to include
viewBox="0 0 32 32" before spreading {...props} (i.e. set viewBox on the <svg>
in the Reaper function so scaling works while still allowing width/height to be
overridden by props).

@allenhouchins

Copy link
Copy Markdown
Member

@desmonet Please make the necessary changes to get this to pass the Test Fleet Maintained Apps - Darwin validation check and resubmit.

@allenhouchins
allenhouchins marked this pull request as draft May 30, 2026 03:35
@desmonet desmonet closed this Jun 4, 2026
@desmonet
desmonet deleted the fma/reaper branch June 4, 2026 10:49
@desmonet
desmonet restored the fma/reaper branch June 4, 2026 10:49
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.

3 participants