diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cd2e56ea..139910e61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ and this project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html) ## [Unreleased] +## [0.3.0] - 2026-08-20 + ### Upstream - Merged **LeanBitLab/LeanType v4.1.2** (pinned at `8720abeb`, covering v4.0.9–v4.1.2, 200 commits) — adds a clipboard edit mode, a personal-dictionary learning threshold, physical-keyboard and suggestion fixes, and Compose localization. LeanTypeDual retains its distinct `applicationId`, fork version, privacy tiers, Java fallback gesture engine, two-thumb typing, and persistent custom layout slots. (#137) @@ -25,6 +27,7 @@ and this project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html) ### Reliability & testing - **Dropped both `runTests` skip guards for defects inherited from upstream** — subtype edit persistence and symbol-prefixed regex expansion are both fixed in upstream v4.1.2. Verified twice: on a pristine upstream checkout at the tag, and in the merged tree. Those two tests now actually execute on CI instead of returning early. (#137) - **Fixed a latent test-harness bug** where `setText` accepted a `requireIdle` parameter it never passed through, so `reset()` could not tolerate leftover delayed messages. Harmless until the merge shifted JUnit's hash-based test ordering, at which point it failed an unrelated backspace test. (#137) +- **Test results are now gated rather than eyeballed** — `tools/check_test_results.py` refuses to report when the results are untrustworthy (any file predating the run, so a Gradle `UP-TO-DATE` task can't pass off a stale green report; or its own enumeration disagreeing with the totals the suites declare). It then diffs failing test *names* against a checked-in baseline and quarantines network-dependent tests so they are never counted as a regression or as a fix. Runs as the authoritative gate in CI. (#139) ## [0.2.0] - 2026-08-06 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 410bfed2d..aca349065 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,8 +28,8 @@ android { applicationId = "com.asafmah.leantypedual" minSdk = 21 targetSdk = 35 - versionCode = 4200 - versionName = "0.2.0" + versionCode = 4300 + versionName = "0.3.0" proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") diff --git a/docs/releasenote/release_notes_v0.3.0.md b/docs/releasenote/release_notes_v0.3.0.md new file mode 100644 index 000000000..a903afb97 --- /dev/null +++ b/docs/releasenote/release_notes_v0.3.0.md @@ -0,0 +1,27 @@ +# LeanTypeDual 0.3.0 + +Brings the fork up to **LeanBitLab/LeanType v4.1.2**, covering 200 upstream commits from v4.0.9 onwards, plus fixes for two fork features the merge would otherwise have broken. + +## Highlights + +- **Clipboard edit mode** — edit a clipboard entry in place, with cursor movement driven from the keyboard. +- **Voice recognition language selector** — auto-detect plus 99+ Whisper languages, chosen independently of the typing language. +- **Personal dictionary learning threshold** — decide how many times a word has to be typed before it is added, instead of it being added immediately. +- **Physical keyboard suggestions** — pick a suggestion with a shortcut key when a hardware keyboard is attached. +- **Localized settings** — the Compose settings screens are translated. +- More reliable text-expander regex shortcuts, and a range of emoji and clipboard layout fixes. + +## Fixed + +- **Held backspace no longer mis-deletes emoji.** The accelerated second deletion measured the character from *before* the first deletion rather than the one it was about to remove, so it could cut a multi-code-point emoji in half. The same defect exists upstream and is reported as `LeanBitLab/LeanType#423`. +- **Whole-word backspace keeps working.** Upstream's fix for a single backspace bulk-deleting numeric sequences would have stopped the two-thumb whole-word delete from clearing the composing span, leaving partial words behind. Both behaviours now coexist. +- **Custom layouts still restore after symbol mode.** Upstream resets the remembered custom layout when switching back to the alphabet, which conflicts with this fork's persistent custom layout slots. + +## Under the hood + +- Both defects this fork had been carrying from upstream — subtype edit persistence and symbol-prefixed regex expansion — are fixed in v4.1.2, so their CI skip guards are gone and those tests genuinely run again. +- Test-result analysis is now gated by `tools/check_test_results.py`, which refuses to report on stale or self-inconsistent results and diffs failing test names against a checked-in baseline. + +## Unchanged + +LeanTypeDual keeps its own `applicationId`, its own version line, the privacy tiers (`standard` / `standardfull` / `offline` / `offlinelite`, with network access only in the two standard builds), the Java fallback gesture engine, two-thumb typing, and persistent custom layout slots. diff --git a/fastlane/metadata/android/en-US/changelogs/4300.txt b/fastlane/metadata/android/en-US/changelogs/4300.txt new file mode 100644 index 000000000..4807ac671 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4300.txt @@ -0,0 +1,14 @@ +Upstream LeanType v4.1.2 merged in. + +New: +• Clipboard entries can be edited in place, with cursor control from the keyboard +• Voice recognition language selector with auto-detect and 99+ Whisper languages +• Personal dictionary learning threshold - choose how many times a word must be typed before it is saved +• Suggestions can be picked with shortcut keys from a connected physical keyboard +• Settings screens are localized + +Fixed: +• Held backspace no longer cuts an emoji in half +• Whole-word backspace after a swipe no longer leaves part of the word behind +• Custom layouts still restore after leaving symbol mode +• Text expander regex shortcuts expand more reliably