Skip to content

fix: retry unresolved sparse focus ownership - #348

Merged
tiensonqin merged 1 commit into
mainfrom
devin/1794113849-apple-focus-row-recovery
Nov 8, 2026
Merged

tiensonqin merged 1 commit into
mainfrom
devin/1794113849-apple-focus-row-recovery

Conversation

@tiensonqin

@tiensonqin tiensonqin commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Reuse a cached sparse focus row only when the native responder still matches and that row remains live. A nil or removed row now retries the existing coordinate lookup on the next ownership refresh; a valid cached row keeps its identity even when geometry changes. No new API, timer, pin source, schema, dependency, or default is introduced.

The existing full-width identifier test now requires an active native field editor and verifies that it is the window's first responder before waiting for a pinned-row callback.

Validation: the actual cache-decision source fragment was executed in an isolated Swift counterfactual without AppKit: the base failed nil/invalid-cache recovery, the change passed both, and valid-row identity was retained. The temporary harness was removed. swift build --build-tests passed; existing pure Swift contracts passed 8/8, OCaml build/tests passed 234/234, and schema tests passed 12/12. Strict Swift formatting still reports seven identical public-base diagnostics outside the changed lines; no new diagnostics.

CI: all 16 checks passed. Apple logs explicitly show the full-width callback test passing and a complete Swift summary of 212 tests in 14 suites; the existing bounded native test also passed separately.

Evidence boundary: no AppKit/window test was rerun locally. The stronger native preconditions were compiled locally and exercised by the passing callback test in CI; that test does not deterministically exercise both cache-recovery branches. The earlier pins=[] assertion reproduces on untouched public base, but its actual responder/geometry cause remains unproven; this PR fixes the independently established cache-recovery hole, not a claimed diagnosis of those logs.

Link to Devin session: https://app.devin.ai/sessions/eccad85c243745debb033bc62ba68c4e
Open in Devin Desktop: https://app.devin.ai/desktop/session/eccad85c243745debb033bc62ba68c4e?variant=devin
Requested by: @tiensonqin

@devin-ai-integration

Copy link
Copy Markdown
Contributor

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@tiensonqin
tiensonqin merged commit 347de2f into main Nov 8, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant