Open
Conversation
908bf62 to
a10abde
Compare
5 tasks
ef4881c to
75dee31
Compare
joshribakoff
added a commit
to joshribakoff/Handy
that referenced
this pull request
Jan 26, 2026
Shows how to inject mocks for testing. Depends on cjpais#672 Co-Authored-By: Claude Opus 4.5 <[email protected]>
75dee31 to
5cb51af
Compare
joshribakoff
added a commit
to joshribakoff/Handy
that referenced
this pull request
Jan 26, 2026
Shows how to inject mocks for testing. Depends on cjpais#672 Co-Authored-By: Claude Opus 4.5 <[email protected]>
6d7e467 to
2c37814
Compare
Fixes cjpais#641, cjpais#462 Co-Authored-By: Claude Opus 4.5 <[email protected]>
2c37814 to
b5f8fba
Compare
Owner
|
Thanks for this, this is one of the higher priority issues for me. Will try and review in about a week |
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.
Before Submitting This PR
Please confirm you have done the following:
Human Written Description
Implements state machine, single source of truth, declarative UI pattern, testing pattern, fixes race conditions at multiple layers. Trades off concurrency for simplicity, laying the foundation for future extensibility (and concurrency). Replaces jQuery style imperative UI management with React style declarative updates.
I am new to Rust and tried to do my best with AI, open to feedback / feel free to close and "steal" the idea but I would love feedback and/or credit!
Related Issues/Discussions
Fixes #641, #462
How to Reproduce
Three ways to trigger / different issue(s):
Testing
Tested locally by triggering all three reproduction scenarios above.
AI Assistance
If AI was used:
The app has multiple sources of state that can get out of sync - different mutex locks at different layers, imperative UI updates with delays that don't get cancelled. This PR demonstrates a pattern that fixes the UI overlay and tray icon: a single source of truth state machine where UI syncs declaratively when the phase changes (similar to React's model).
This also fixes the "Not Responding" freeze by adding a global lock that prevents concurrent operations.
Intentionally pragmatic: I've kept this PR minimal to avoid overwhelming reviewers with huge changes. It focuses on fixing the immediate issue and demonstrating a pattern that could be extended to other parts of the app in future PRs.
Other state could be consolidated into this pattern in follow-up PRs:
In “Rust way” terms: I made state transitions explicit, serialized with a single lock, and made UI a pure projection of state.
That’s consistent with correctness-first design.
I’d pitch it as: