Unfreeze Worksheet Crafter (macOS) - #50515
Conversation
Remove "frozen": true from the Homebrew input and regenerate the output manifest so test-fma-darwin-pr-only can validate worksheet-crafter/darwin at its current upstream version (2026.2.4 -> 2026.2.11). Claude-Session: https://claude.ai/code/session_01FjUiXomzNHvAE8MzFibxxu
There was a problem hiding this comment.
Pull request overview
Unfreezes the Fleet-maintained app (FMA) definition for Worksheet Crafter on macOS by removing the frozen flag and updating the generated output manifest to a newer upstream version so the test-fma-darwin-pr-only validation shard can run successfully.
Changes:
- Removed
"frozen": truefrom the Homebrew input forworksheet-crafter/darwin. - Bumped the Worksheet Crafter macOS output manifest from
2026.2.4to2026.2.11(including updated installer URL and install script ref). - Regenerated the embedded install script to reference the new pkg filename.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| ee/maintained-apps/outputs/worksheet-crafter/darwin.json | Updates the generated macOS output manifest to version 2026.2.11 and updates the embedded install script reference. |
| ee/maintained-apps/inputs/homebrew/worksheet-crafter.json | Removes the frozen flag so the maintained-app validation can run again. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "installer_url": "https://website.cdn.getschoolcraft.com/downloads/worksheet-crafter_2026.2.11.pkg", | ||
| "install_script_ref": "9be99456", | ||
| "uninstall_script_ref": "cad81f0b", | ||
| "sha256": "c931f890d554c312ea985eccc51bd51e380c2a82d8a3dfb24405f9153dcd0b08", |
| ], | ||
| "refs": { | ||
| "aa497eb5": "#!/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# install pkg files\nquit_and_track_application 'com.SchoolCraft.WillBeReplacedByQMake'\nsudo installer -pkg \"$TMPDIR/worksheet-crafter_2026.2.4.pkg\" -target / || exit $?\nrelaunch_application 'com.SchoolCraft.WillBeReplacedByQMake'\n", | ||
| "9be99456": "#!/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# install pkg files\nquit_and_track_application 'com.SchoolCraft.WillBeReplacedByQMake'\nsudo installer -pkg \"$TMPDIR/worksheet-crafter_2026.2.11.pkg\" -target /\nrelaunch_application 'com.SchoolCraft.WillBeReplacedByQMake'\n", |
Script Diff Resultsee/maintained-apps/outputs/worksheet-crafter/darwin.json=== Install // aa497eb5 -> 9be99456 ===
--- /tmp/old.2ILvsa 2026-08-04 18:06:33.396569535 +0000
+++ /tmp/new.kG28DC 2026-08-04 18:06:33.396569535 +0000
@@ -96,5 +96,5 @@
# install pkg files
quit_and_track_application 'com.SchoolCraft.WillBeReplacedByQMake'
-sudo installer -pkg "$TMPDIR/worksheet-crafter_2026.2.4.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/worksheet-crafter_2026.2.11.pkg" -target /
relaunch_application 'com.SchoolCraft.WillBeReplacedByQMake'
=== Uninstall Script (no changes) === |
|
Automated unfreeze probe: failed validation, so Worksheet Crafter (macOS) stays frozen. Failing step: The validator installed the app fine but the declared version does not match what osquery reports: The Homebrew cask version ( Generated by Claude Code |
Automated unfreeze probe. Removes
"frozen": trueand regenerates the output manifest sotest-fma-darwin-pr-onlycan validateworksheet-crafter/darwinat its current upstream version.Frozen since: 2026-07-09 (4a219a2, "Update Fleet-maintained apps" #49055)
Version: 2026.2.4 -> 2026.2.11
Upstream Homebrew cask reports 2026.2.11, which is newer than the pinned 2026.2.4, so this is a
genuine forward bump rather than a regression.
Draft until validation reports. Merge only if the FMA checks are green and the validate shard
actually ran for this slug.
Related issue: NA
Checklist for submitter
Generated by Claude Code