fix: harden macOS clipboard fallback - #41
Merged
Merged
Conversation
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
.appin desktop CI, and require Developer ID authority, Team ID, and effective entitlement checks in release CI.CurrentHostOnly, first-change attribution, delayed event behavior, and the remaining compare-and-write TOCTOU boundary.Risk
Verification
npm run check(34 tests and production build)npm run test:smokewhen user-facing behavior changed (5 passed, 1 skipped)cargo check --manifest-path src-tauri/Cargo.tomlwhen desktop code changednpm run desktop:check(format, Clippy-D warnings, 21 Rust tests, check)npm run test:site(12 passed)git diff --check.appbuild, local ad-hoc Hardened Runtime signature verification, bundled usage text, effective Apple Events entitlement, launch, steady process check, and normal terminationReview Notes
NSPasteboarddoes not expose writer identity or an atomic compare-and-swap restore. The first generation after Copy cannot be attributed with certainty, and a narrow check-to-write TOCTOU boundary remains. System Events also cannot acknowledge that the target app has processed an injected key event; quarantine prevents ambiguous failures from entering a newer Wordwise transaction, but a delayed event may still change the current system clipboard. Restored snapshots useNSPasteboardContentsCurrentHostOnlybecause the original sync option is not observable.The local launch smoke does not replace signed/notarized-candidate validation. Keep the release blocker open until a real Developer ID build passes permission allow/deny, first-run TCC, no-selection/quarantine, timeout/quarantine, multi-format pasteboard, concurrent-write, revoke/regrant, and cross-application shortcut testing.
Refs #39