Skip to content

Separate exact native text content from IME decoration in API26 compatibility checks #108

Closed

Description

@moikdev

Follow-up slice of #69, after merged #107 separated incompatible-engine recovery from native input behavior.

Current passive probes on the unchanged fec0a4bf app reproduce Android8 composing underlines during navigation/Escape. One large-draft run records exact title characters but unequal AnnotatedString values after an asynchronous IME update. Idle Updates/Note caller-return selections currently remain exact. These observations do not identify every original readiness failure or establish a production fix.

Acceptance criteria:

  • Preserve passive default-IME observations without creating diagnostic InputConnections; record exact characters/code points, decoration, selection, focus and delivered key pairs.
  • Compare native editable content by exact UTF-16 characters, with no trimming, normalization or character loss; retain decoration separately when diagnosing composition.
  • Demonstrate an intended strict-annotation failure and corrected character assertion on a matched app/protocol pair, including unchanged production sources and meaningful wrong-content rejection.
  • Verify explicitly committed navigation/caret behavior separately from active multilingual composition; preserve current composition guards and avoid language heuristics or forced production commits.
  • Verify bounded owned large-draft recreation and same-turn activation, and native idle-route caller selection, with exact claims and APK/source identities. Keep unreproduced original live-network/old-image failures open under Resolve API26 keyboard, IME and caller-selection compatibility failures #69.
  • Use owned API26 and API36 emulator runs with original data/APK/settings restoration, durable real screenshots and declared test/fixture setup.
  • Record appropriate local checks, actual exact-head hosted Android results and two independent gpt-6.1-sol/high audits before an expected-head merge.

This issue is a test-contract/diagnostic improvement. It does not clear Android8 extension execution, all six original input failures, physical/OEM/accessibility coverage or full parity.

Activity

  1. moikdev commented on Nov 5, 2026

    @moikdev
    OwnerAuthor

    Calibration update: the initial old-assertion controls both passed because the IME finished composition during hierarchy/screenshot collection before the assertion. Those runs are retained as insensitive controls with zero intended-negative credit. Moving the decoration witness and matcher evaluation into one UI-thread turn succeeds on API36, but the API26 system IME can expire the fixture before a witness is observed; that cohort remains 2/5 failed. The next controlled protocol therefore uses an explicit silent test-APK IME, separate from system-IME diagnostics. The guarded runner snapshots/restores original default, enabled methods and subtype settings before stopping/replacing the test APK, retains ownership on failed restoration, and gives this fixture no everyday-keyboard credit. Production code/assets remain unchanged. A local disk-full build failure is also retained; only ignored intermediates in inactive Droidcast scratch checkouts were removed, preserving binaries, receipts and private recovery inputs.

  2. moikdev commented on Nov 5, 2026

    @moikdev
    OwnerAuthor

    PR #109 is open at 3f87bf7a4182b74ba16c52c113c67613e5f6bb41: #109 . The exact-character matcher preserves every UTF-16 unit while accepting legitimate IME decoration. Recorded scope: 23 controlled positives/seven whole cohorts; two intended strict-annotation failures/zero passes; 137 successful cohort restoration checks and 13 read-only final checks, including original APKs and all573 original app/evidence files. JVM343, Python130 per mode, both build variants and lint0 errors/56 warnings pass. The base/common harness and strengthened same-length supplement keep distinct binaries/source identities. Initial system-IME failures, insensitive controls, the first probes' unrecorded original subtype-history identity and failed modern cleanup with separate16-check recovery remain documented. This changes tests/fixtures, not production input behavior. #69 and broader parity/platform/signing gaps remain open. Exact-head hosted CI and the two independent sol/high audits are pending; no merge clearance is claimed.

  3. moikdev commented on Nov 5, 2026

    @moikdev
    OwnerAuthor

    PR #109 merged as d8d8978ba63379e332cbef013fa909ea930075da using expected head 3f87bf7a4182b74ba16c52c113c67613e5f6bb41. Root independently verified both parents and merge tree e1e90ae1d5385c70b3f6b073e31ec7fd9ea5f3f7, identical to the reviewed head. Both required independent gpt-6.1-sol/high full-head audits cleared within scope; exact-head Android run42026037454 and local/android58146385516 succeeded. Review conclusions are recorded in COMMENT review5784970043. Issue#108 closed; #69 remains open. Production behavior/assets are unchanged, and the documented system-IME, pre-probe-history, physical/OEM/accessibility and signing limits remain. Watch stopped. Next intake: explicit touch Clear search affordances under the broader touch/readability goal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions