fix: restore capture runtime contract#39
Closed
abrichr wants to merge 1 commit into
Closed
Conversation
Member
Author
|
Superseded by #40, which preserves this dependency-boundary change and adds the reviewed native observer/runtime and release-artifact gates on one exact green head. Closing this duplicate without merge so only the consolidated fix lands. |
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.
Summary
wait_for_ready()when startup stops or raises instead of making callers wait for the full timeoutoa-atomacosmacOS accessibility wrapper with direct MIT-licensed PyObjC/ApplicationServices APIsRoot cause
openadapt_capture.Recorderimported the performance plotting module eagerly, but Matplotlib was declared only for development. A normal runtime installation therefore caught the missing dependency in the package-level headless fallback and silently exposedRecorder = None.Separately, the readiness loop did not observe
terminate_processing, so a worker that never set its ready event could leave Desktop teardown waiting forever. The macOS default dependency also pulled GPL-licensedoa-atomacosinto the frozen installer even though the needed AX operations are available directly through permissively licensed PyObjC.User impact
A normal installation now exposes the recorder, failed or cancelled startup tears down promptly, and native macOS window/accessibility observation no longer depends on
oa-atomacos.This PR is necessary but not sufficient for the next frozen Desktop release: the follow-up native-input PR must remove the remaining LGPL
pynputruntime dependency before Capture or Desktop is published.Validation
ruff check openadapt_capture scripts/verify_distribution.py testspytest -q tests --ignore=tests/test_browser_bridge.py --timeout=120— 197 passed, 7 skippedscripts/verify_distribution.pyRecorderis availableoa_atomacosis absentThe local browser-bridge suite was not used as a verdict because this sandbox forbids binding its loopback test ports; that suite remains intentionally excluded by the repository's CI workflow.