Multi-device premium and admin device grants fixed: 30-device style grants no longer false-block macro runtime; real limit/block/revoke checks remain strict
v1.0.37
Bundled fallback7/9/2026
Premium multi-device grants: when an admin grants more than one device slot (for example 30 devices), the server no longer lets a stale single-device app-binding check override the approved device list. The same Google account can use the granted device count without the macro runtime stopping with "Security check failed. Runtime was blocked."; real over-limit, blocked-device, expired, revoked, or unapproved-device cases still fail closed.
Admin panel: the premium grant form now includes the device-limit field and applies the requested limit in the same confirmation flow, so an intended "99 days + 30 devices" grant cannot silently remain at 1/1 because the separate device-limit save step was missed.
Premium profile stability: premium duration and device limit granted from the admin panel are now written in the same backend transaction. This prevents a successful-looking grant from keeping the old device limit, producing binding denials on extra devices, and making Premium appear/disappear on the profile screen.
Backend entitlement coverage: checkEntitlement and heartbeat now have a regression contract for multi-device admin grants, and the existing admin-device-limit, Play-billing device-limit, and badge-only entitlement contracts still pass.
Work-area adaptation: Macro Settings now includes an "Adapt to this device" action; macros can rebase to the current resolution/DPI without manually clearing the source profile, while no-code click and region coordinates preserve their real screen positions.
Control-panel work-area safety: when the overlay work-area profile is changed, project coordinates are persisted before the profile is written, so a save failure cannot leave the macro split between old coordinates and a new reference profile.
Overlay work-area adaptation is hardened: imported macros without an explicit work area now rebase to the full target device screen by default in Change Work Area, while users can still narrow the area deliberately. Even when an old/imported macro still says orientation auto, the target orientation is inferred from the source reference ratio; region/target coordinates left behind in the portrait axis by an earlier bad save are repaired to the full landscape device profile. A Xiaomi 2772x1280 screen / 1280x720 source-profile regression test preserves clicks, regions, and image-search scaling as if the macro was authored on the new resolution; raw rebase class names stay hidden and open no-code save failures stop the profile write.
Macro Settings rebase stability: fixed the Android-ICU regex issue that stopped work-area adaptation before coordinate math and showed "Save failed: rebase"; on Xiaomi devices, "Adapt to this device" now runs without the rebase class-load failure. The same action no longer triggers the global Save/scheduled-trigger flow, no longer shows the scheduled-trigger saved toast, and keeps Macro Settings open.
Control-panel helper rail: while the main control panel is dragged, the helper rail is synchronously locked to the main rail on every movement frame, removing the temporary right-side gap that appeared until the drag was released.
Public macro sharing: public macro payloads now carry the reference resolution, DPI, coordinate mode, and game-area ratios; gallery import and version refresh write that profile back, reducing no-code coordinate drift on different devices.
Workspace adaptation accuracy: 'Adapt to this device' and the control-panel workspace change now rebase coordinates through the exact viewport the runtime executes (including the implicit aspect-fit letterbox), fixing off-center click/region drift on devices with a different aspect ratio. Macros without an explicit work area stay adaptive (implicit) after adapting, and Save/Reset with a full-screen selection no longer locks future cross-aspect runs into stretch mode.
Image search survives adaptation: resolution changes and adaptation from Macro Settings now stamp legacy image templates with their capture-time profile first (matching the control-panel path), so old metadata-less templates are no longer searched at the wrong scale after adapting.
Script (Lua) macros protected: saving or adapting with blank fields on a macro without a visual workspace no longer overwrites the declared reference resolution with device values - script coordinates keep auto-scaling at runtime; an explicitly typed resolution is still honored as a deliberate re-declaration.
Stability and sharing fixes: healthy landscape macros can no longer be mis-'repaired' as swapped on a plain save (the default touch entry present on every block no longer pollutes the measurement); the control-panel workspace change is safely refused while the no-code editor is open or crashed with unrecovered work; the helper rail no longer stays misaligned after a panel drag ends; human-like landing (jitter) padding now scales with adaptation; updating a forum macro from an older app version no longer strips the shared reference profile, and a corrupt stored profile no longer blocks macro download.
Forum macro sharing now carries image templates with the macro: on publish, template files (bounded: max 16 templates / 1.5 MB total) are uploaded to secure storage and rebuilt on the importer's device with the same names and their capture-time profile. Public macros with image blocks no longer come back empty with 'image not found' on another device, and updating a macro from an older app version does not strip the stored template set.
Multi-display fixes: coordinate mapping, screenshots, and touch dispatch now share the same target display geometry (secondary-display scenarios on emulators/cloud phones/foldables); moving the control panel to a secondary display stamps workspace profiles with that display's resolution/DPI; nested macro calls (Macro.runWait) get the live game-area resolver too; a half-corrupt reference profile is now completed with the full device profile.
Workspace changes are crash-resilient: if the app dies between the project and profile writes, a recovery journal safely completes the interrupted change at the next start; the profile write on these paths is now synchronous.
Release metadata: the Android app version is advanced to 1.0.37 / versionCode 50 so the app build, in-app changelog, website changelog, and Google Play notes all identify the same current release.
1.0.37 release notes are synced across the in-app changelog, the web changelog source, and the Google Play texts.