V11.0: richer action vocabulary, pause/resume, honest timing, real CLI - #5
Merged
Conversation
Built from 7fe288d with packaging/build_release.py, which now reads its version from APP_VERSION rather than a hard-coded string. - AutoClicker.exe 32.4 MB (was 45.6 MB in V10.1) - AutoClickerLite.exe 31.9 MB - AutoClickerInstaller.exe 76.9 MB The main executable shrank ~26% because gspread, oauth2client, colormap and pywin32 were imported but never used, and are no longer collected into the bundle. Both executables now bundle favicon.ico via --add-data. Previously the onefile build had no such file at runtime, so iconbitmap() failed silently. Verified on the built AutoClicker.exe: --version, health, health --json, schema action, state-summary and the legacy --health-check flag all return the correct output and exit codes, and an unknown flag exits 2 instead of opening a window. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CI installs no third-party packages by design, so pyautogui and keyboard are absent there. MAINWINDOW_REDESIGNED() therefore reached _ensure_dependencies, which called messagebox.showerror -- a modal dialog with nobody to dismiss it. The Windows jobs blocked until GitHub's 6-hour limit; the two earlier runs on this branch were cancelled at 6h00m each. Linux was unaffected only by accident: with no display, showerror raises, the error is swallowed, and the tests skip. - get_shared_gui now injects a fake `keyboard` alongside the fake pyautogui and clears the matching IMPORT_ERRORS entries, because it is supplying working stand-ins. The dependency gate no longer fires. - silence_dialogs() replaces every messagebox entry point with a non-blocking stub for the duration. No test can open a dialog that waits for a human. - Both CI jobs gained timeout-minutes as a backstop, so any future hang costs minutes rather than hours. Verified by simulating CI locally with pyautogui and keyboard absent and a watchdog armed: all 17 GUI tests now run and pass in 31s instead of blocking. They previously did not execute on either platform. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Strictly additive on user-facing capability: no existing feature was removed. Dead and
shadowed code was deleted, which has no user-visible effect.
136 tests pass (up from 20). GUI, classic window, lite app and the built
.exeallverified by hand in addition to the suite.
New features
ACTION_REGISTRYaddsKey Press,Key Hold,Type Text,Scroll Up/Scroll Down,Click And Hold,Drag To,Move OnlyandTriple Left Clickalongside the six original click types. The six originals resolve tobyte-identical behaviour, so existing profiles, sequences and workspaces keep loading.
Sequences accept the new actions too.
drivable while minimised over the target. In-window:
F5start,F6pause,Escstop.HH:MMwall clock), round-robin targets over a recording,Run History viewer with lifetime totals that survive restarts, Midnight and
System (follows OS dark mode) themes, and a Feather Touch preset.
displayed 12.
Correctness fixes
Each of these was reproduced before fixing and is covered by a regression test.
0.10delay produced ~5 actions/sec while the UI promised 10.Precisepacing (newdefault) zeroes it;
Legacy V10.1pacing reproduces the old behaviour exactly.stop_eventwas shared by threesubsystems and two of them cleared it on exit. Now one token each.
finishedmessage could orphan a live run, leaving Stop dead while clickscontinued. Now generation-guarded.
keyboard.is_pressedraises for multi-stephotkeys and unmapped names, and the engine swallowed it. Now rejected at validation.
a zero-click run.
switch produced white text on a light background. Verified across 9 consecutive switches.
_click_workerhad notry/finallyand could leakFAILSAFE=Falseprocess-wide andwedge Start permanently;
_playback_workercould lock out all three run paths for thesession;
_pump_ui_queueself-terminated on any exception, freezing all UI feedback.os._exit(0), discarding unsaved work. It now persists first.global thingson a closure local made List Coordinates > Deletealways raise
NameErrorwhile Run List kept clicking the deleted point; the same functionpassed listbox text through
eval(). Sixexit(0)calls on a worker thread killed onlythat thread silently. Invalid X/Y fell through into the click loop with strings.
keyboardhook thread and appended to a list the Tk threadrebinds wholesale.
Architecture, CLI and tests
MAINWINDOW_NEWSTYLE(596 lines, nevercalled), two shadowed top-level functions, two shadowed methods,
class Coordinates.import AutoClickerwent from ~15s to ~0.7s by dropping four packages that wereimported but never used (
gspread,oauth2client,colormap,pywin32) and makingwin10toastlazy.--help,--version, 14 subcommands, a stable JSON envelopeand a documented exit-code contract (0/1/2/3). All nine V10.1 flags still work. Two
deliberate differences: an unknown flag is now a usage error instead of silently opening
the GUI, and stacking two legacy commands reports the extra one instead of dropping it
behind a success exit.
doctor,readiness,profiles,schema,history,support-bundle.python -m unittest discoverpreviously ran zero tests and exited 0. Fixed withtests/__init__.pyandpyproject.toml.secret-scan job.
packaging/now derives its version fromAPP_VERSION(it had drifted across threefiles), checks its inputs before deleting tracked artifacts, bundles
favicon.ico, andrefuses to
rmtreea home directory or drive root via--install-dir.Security
creds.jsonheld a live Google service-account private key, committed since 2020 in seventracked copies. All seven are removed and
.gitignorenow blocks them. The key is stillin git history and must be revoked in the Google Cloud console — removing the files does
not undo the exposure. No code needed it: the Google Sheets feedback path was already dead.
Release build
Builds/V11.0/contains executables built from 7fe288d.AutoClicker.exeAutoClickerLite.exeAutoClickerInstaller.exeNote: GitHub warns that the installer exceeds its 50 MB recommendation. Committing release
binaries follows this repo's existing convention, but Git LFS or GitHub Releases would be
worth considering before the history grows further.
🤖 Generated with Claude Code