Repository navigation
feat(check): add axidev-osk check and a failure notice - #47
Open
inayayousfi wants to merge 10 commits into
Open
inayayousfi wants to merge 10 commits into
inayayousfi wants to merge 10 commits into
Conversation
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. axidev-osk check decodes the bundled root config without starting the app and explores every profile from the state it starts in. In each state it runs every binding, calls every node callback and every on handler with every event its arguments allow, and checks what comes back: actions decode, key and modifier names use axidev_io's official spelling, windows and profiles exist, and state.set and state.append fit their declarations. Each problem is printed once with the shortest trail of callbacks that reaches it, and the command exits nonzero on a problem or when axidev_io cannot be imported. How far it explores is the depth: how many state units (a variable or one map entry) may differ from the start. A profile sets it with check_depth, default 1, and --depth overrides it for every profile. On the bundled config depth 1 takes about a second and depth 2 about 80. At runtime nothing is checked ahead. A key name that is not the official spelling now fails with action.failed naming the right one, and action.failed and callback.failed carry a hint to run the check. std.failures adds an opt-in notice window, used by every bundled profile, that lists each different failure once with its repeat count until OK clears it. It appends through a new state.append action, which reads the list when it runs, so failures queued together all land. The app's action decoders now live in one table, APP_ACTION_DECODERS, shared by the app, the check and the tests, and ScreenCorner and the new QuitReason are the single source of the corner and quit-reason lists.
…d marks inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. CHECK_HINT moves into the dispatcher, which reports action.failed, and runtime/hints.py, which held only that constant, is deleted. one_of and stand_in built the same field mark, so samples replaces both. APP_ACTION_DECODERS says what it is for. AGENTS.md maps config_check/, APP_ACTION_DECODERS, and the event field marks, and asks for axidev-osk check after a bundled profile or the standard library changes; the check itself is described in its modules.
inayayousfi
force-pushed
the
feat/wheel-profile
branch
from
October 13, 2026 13:47
7ea2339 to
d6bd7b7
Compare
inayayousfi
force-pushed
the
feat/config-check
branch
from
October 13, 2026 13:47
a2af94e to
4c8b9ed
Compare
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings in timers, hover, pointer reports, std.lit, and the font-proof label tests. The config check now builds timer.fired with a stand-in timer ID and the node.pointer_* events with each of the profile's nodes at a sample point, so handlers for them are explored like any other event.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings in the dwell tests' wait for clicks.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings in the dwell indicator options and the close_label window value.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings in the interaction reports and gives the check the field marks and action decoders for the new messages.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings in optional built-ins and their raw reports, std.locator, window anchors, and report_geometry in place of report_size. The check now feeds the new reports: hover, leaving, wheel, and geometry for profile nodes, and every mouse button name for title-bar and grip drags and for the close button, whose button may also be None. std.with_handlers takes both also and failure_notice.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. The check covers what the shape audit added: window.state_changed marks its content size, display.configuration_changed marks no screens and one screen, and window.move_to and window.resize_to join the application's actions, whose window the check verifies.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings the Windows mouse-button fix.
inayayousfi directed the work and made every decision. Claude Opus 5.5, running in Claude Code, carried inayayousfi's decisions out. Brings plain-window moves and resizes.
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.
Stacked on #46.
axidev-osk checkdecodes the bundled root config without starting the app and explores every profile from its start state. In each state it runs every binding, calls every node callback and everyonhandler with every event its arguments allow, and checks what comes back: actions decode, key and modifier names use axidev_io's official spelling (Escape, notesc), windows and profiles exist, andstate.set/state.appendfit their declarations. Each problem prints once with the shortest trail of callbacks that reaches it; the command exits nonzero on a problem or when axidev_io cannot be imported.Depth
How many state units (a variable or one map entry) may differ from the start. A profile sets
check_depth(default 1), and--depth Noverrides every profile. Bundled config: depth 1 about 1 s (1,800 states), depth 2 about 80 s (630,000 states). CI does not run it.Runtime changes
action.failednaming the right spelling instead of typing.action.failedandcallback.failedcarry ahintfield telling the user to run the check; their log lines end with it.state.append: adds to a declared list when it runs, so appends queued together all land.std.failures: opt-in notice window (every bundled profile uses it) listing each different failure once with its repeat count until OK clears it.Architecture
APP_ACTION_DECODERSinruntime/app_messages.pyis the one table of app action decoders, read by the app, the check and the tests.runtime/event_fields.py) so the check can generate every event a handler may receive.ScreenCornerand newQuitReasonlive inapp_messages;HOT_CORNERSandQUIT_REASONSderive from them.check_depth, read only by the check.