v2.7.0

Xiaojiu-z/EasyControlv2.7.0Jul 28, 2026by github-actions[bot]

AI Summary

This release focuses on grammar checking improvements, dependency updates, and performance optimizations. It introduces features for standardizing phrases and fixing common writing errors, alongside various UI and build dependency updates.

Key Highlights

  • Expanded phrase standardization (e.g., 'on top of', 'neither here nor there')
  • Refactored iterators and bounds syntax for better performance
  • Updated desktop app beta status and documentation
  • Dependency updates including egui and nokogiri
  • Bug fixes for false positives and specific grammar cases

New Features

  • Expanded phrase standardization (e.g., 'on top of', 'neither here nor there')
  • 'Standard option' for Oxymorons
  • Criterion benchmarking tool
  • English isolation exposure for harper.js
  • Improved Chrome extension testing capabilities

Full Release Notes

## What's Changed
* refactor: more vec ctors and builders converted to iterators per #3670 by @hippietrail in https://github.com/Automattic/harper/pull/3712
* build(deps): bump egui from 0.34.2 to 0.34.3 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3674
* build(deps): bump the actions-minor-patch group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/Automattic/harper/pull/3695
* build(deps): bump nokogiri from 1.19.3 to 1.19.4 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3701
* feat: max exodus→mass exodus by @hippietrail in https://github.com/Automattic/harper/pull/3637
* feat: add "standard option" to `Oxymorons` by @hippietrail in https://github.com/Automattic/harper/pull/3651
* feat: level of details→level of detail/levels of detail by @hippietrail in https://github.com/Automattic/harper/pull/3486
* feat: on one's own accord→of one's own accord by @hippietrail in https://github.com/Automattic/harper/pull/3646
* feat: on top off/ontop off/on topof → on top of by @hippietrail in https://github.com/Automattic/harper/pull/3400
* feat: that's here nor there→that's neither here nor there by @hippietrail in https://github.com/Automattic/harper/pull/3606
* feat: as much than→as much as by @hippietrail in https://github.com/Automattic/harper/pull/3493
* feat: Expand `conf`, `config`, `perf`, and `pref` by @hippietrail in https://github.com/Automattic/harper/pull/3535
* feat: over [number] plus→over [number] + [number] plus by @hippietrail in https://github.com/Automattic/harper/pull/3634
* Fixes three false positives when "A" or "B" are school test grades by @hippietrail in https://github.com/Automattic/harper/pull/3718
* feat: no longer I→I no longer by @hippietrail in https://github.com/Automattic/harper/pull/3611
* fix: remove debug print statements and related comments by @hippietrail in https://github.com/Automattic/harper/pull/3358
* refactor: standardize inline bounds syntax for linters by @hippietrail in https://github.com/Automattic/harper/pull/3601
* refactor: `PhrasalVerbAsCompoundNoun` now doesn't flag "meltdown ended up" by @hippietrail in https://github.com/Automattic/harper/pull/3599
* feat: in this/that regards→in this/that regard by @hippietrail in https://github.com/Automattic/harper/pull/3482
* feat: in retaliation to→in retaliation for/in response to by @hippietrail in https://github.com/Automattic/harper/pull/3476
* feat: jump a gun/jump the guns→jump the gun by @hippietrail in https://github.com/Automattic/harper/pull/3404
* feat:by my own→on my own/by myself by @hippietrail in https://github.com/Automattic/harper/pull/3322
* docs: add inline-scribe to Projects Using Harper by @mk668a in https://github.com/Automattic/harper/pull/3719
* feat: a mean to an end→a means to an end by @hippietrail in https://github.com/Automattic/harper/pull/3720
* refactor(core): introduce `SequenceExpr::number()` constructor by @hippietrail in https://github.com/Automattic/harper/pull/3732
* build(deps): bump actions/checkout from 6.0.3 to 7.0.0 in the actions-major group by @dependabot[bot] in https://github.com/Automattic/harper/pull/3727
* fix: allow lowercase mp3 after an by @cfcryptotrader-rgb in https://github.com/Automattic/harper/pull/3369
* Expose English isolation in harper.js and browser extension by @mirsella in https://github.com/Automattic/harper/pull/3669
* build(deps): bump faraday from 1.10.5 to 1.10.6 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3735
* feat: call it quit→call it quits by @hippietrail in https://github.com/Automattic/harper/pull/3740
* feat(core): criterion by @elijah-potter in https://github.com/Automattic/harper/pull/3698
* docs: copy the agent policy to be inside the repository by @elijah-potter in https://github.com/Automattic/harper/pull/3738
* docs(obsidian): make the "Ignored Files" setting description more helpful by @elijah-potter in https://github.com/Automattic/harper/pull/3737
* build(deps): bump sysinfo from 0.38.4 to 0.39.5 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3747
* feat: lint the Source Control commit message box by @dmytrosorokame in https://github.com/Automattic/harper/pull/3729
* chore: dictionary curation for 2026/06/13 by @hippietrail in https://github.com/Automattic/harper/pull/3654
* docs(harper-ls): declare that we only support the latest stable Rust version by @elijah-potter in https://github.com/Automattic/harper/pull/3745
* refactor(desktop): make things human-readable by @elijah-potter in https://github.com/Automattic/harper/pull/3734
* refactor(web): de-slopify and centralize components by @elijah-potter in https://github.com/Automattic/harper/pull/3744
* feat: link list→linked list by @hippietrail in https://github.com/Automattic/harper/pull/3742
* refactor: centralize suggestion transformation depth limit #3597 by @jdgajjar in https://github.com/Automattic/harper/pull/3614
* build(deps): bump cargo-bins/cargo-binstall from f8810ffa11196f23afb38e6fb64716fbf814ad8f to 910d9e4456ce4b039662d2a02a34ef1d23c3c50c by @dependabot[bot] in https://github.com/Automattic/harper/pull/3728
* refactor: missed lint message `.to_string()` change to `.to_owned()` by @hippietrail in https://github.com/Automattic/harper/pull/3749
* feat: for nth time→for the nth time by @hippietrail in https://github.com/Automattic/harper/pull/3750
* feat: clearly state that the desktop app is in beta by @elijah-potter in https://github.com/Automattic/harper/pull/3751
* fix(desktop): improve battery life by @elijah-potter in https://github.com/Automattic/harper/pull/3753
* Avoid mass noun lints for ing modifiers by @puneetdixit200 in https://github.com/Automattic/harper/pull/3457
* fix(core): use `default_config.json` as the canonical config by @elijah-potter in https://github.com/Automattic/harper/pull/3755
* perf(lint-framework): remove unconditional lint polling by @Elias0419 in https://github.com/Automattic/harper/pull/3678
* feat: truth to the fact→truth to the claim etc. by @hippietrail in https://github.com/Automattic/harper/pull/3394
* fix: 2 unused imports and 1 nested if by @hippietrail in https://github.com/Automattic/harper/pull/3759
* feat: Redundant self-harm onself, self-teach oneself, do self-harm to oneself, self host it oneself by @hippietrail in https://github.com/Automattic/harper/pull/3326
* feat: may of us/you/them→many of ... by @hippietrail in https://github.com/Automattic/harper/pull/3761
* feat: not along after/afterward/afterwards→not long ... by @hippietrail in https://github.com/Automattic/harper/pull/3762
* feat: analog/acoustic bike→pushbike/pedal bike by @hippietrail in https://github.com/Automattic/harper/pull/3444
* build: improve iteration speed on several fronts by @elijah-potter in https://github.com/Automattic/harper/pull/3756
* build(deps): bump the actions-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/Automattic/harper/pull/3773
* test(chrome-plugin): always run "headless" when testing + increase workers by @elijah-potter in https://github.com/Automattic/harper/pull/3783
* feat(chrome-ext): inline HN page for testing by @elijah-potter in https://github.com/Automattic/harper/pull/3825
* feat: a little of practice → a little / a bit of by @hippietrail in https://github.com/Automattic/harper/pull/3839
* feat: till date→to date by @hippietrail in https://github.com/Automattic/harper/pull/3706
* feat: into a different direction→in a different direction by @hippietrail in https://github.com/Automattic/harper/pull/3665
* feat: throw the baby with the bathwater → throw out / throw the baby out by @hippietrail in https://github.com/Automattic/harper/pull/3827
* feat: helped built → helped build etc. by @hippietrail in https://github.com/Automattic/harper/pull/3823
* feat: have hard time → have a hard time by @hippietrail in https://github.com/Automattic/harper/pull/3812
* chore: remove temporary commented-out code by @hippietrail in https://github.com/Automattic/harper/pull/3849
* feat(docs): clearly define testing strategy by @elijah-potter in https://github.com/Automattic/harper/pull/3845
* fix(desktop): lagging status indicator by @elijah-potter in https://github.com/Automattic/harper/pull/3779
* chore: dictionary curation by @hippietrail in https://github.com/Automattic/harper/pull/3824
* feat: fall a distance below→fall a distance by @hippietrail in https://github.com/Automattic/harper/pull/3733
* feat: have ways to go → have a ways to go by @hippietrail in https://github.com/Automattic/harper/pull/3810
* fix: new clippy warnings in rust 1.97.0 by @hippietrail in https://github.com/Automattic/harper/pull/3797
* feat: passionate of→passionate about by @hippietrail in https://github.com/Automattic/harper/pull/3743
* feat: how do/does x compared/compares→compare by @hippietrail in https://github.com/Automattic/harper/pull/3770
* feat: barely unusable → barely usable etc. by @hippietrail in https://github.com/Automattic/harper/pull/3774
* feat: be pale by/in comparison → to pale by/in comparison by @hippietrail in https://github.com/Automattic/harper/pull/3796
* feat: on stock→in stock by @hippietrail in https://github.com/Automattic/harper/pull/3788
* fix(chrome-ext): inline Draft.js and Prosemirror pages by @elijah-potter in https://github.com/Automattic/harper/pull/3854
* feat: neither fish nor foul/bird → fowl by @hippietrail in https://github.com/Automattic/harper/pull/3767
* fix: correct bad verb dictionary entries by @hippietrail in https://github.com/Automattic/harper/pull/3864
* feat: no harm no fowl→no harm no foul by @hippietrail in https://github.com/Automattic/harper/pull/3768
* feat: fix redundant "first invented" / "invented for the first time" by @hippietrail in https://github.com/Automattic/harper/pull/3790
* style: group and format individual linters and generators cleanly in … by @hippietrail in https://github.com/Automattic/harper/pull/3802
* feat: as is with anything→as with anything/as is the case with anything by @hippietrail in https://github.com/Automattic/harper/pull/3758
* feat: `just sort-config-settings` to put the config items in alphabetical order by @hippietrail in https://github.com/Automattic/harper/pull/3869
* feat: one's self→oneself by @hippietrail in https://github.com/Automattic/harper/pull/3769
* feat: support "over 1000+" in addition to "over 1000 plus" by @hippietrail in https://github.com/Automattic/harper/pull/3885
* test: pin phrasal-verb handling of "rollback" and "comeback" (#3239) by @lukiod in https://github.com/Automattic/harper/pull/3884
* build(deps): bump json from 2.19.5 to 2.19.9 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3896
* build(deps): bump pulldown-cmark from 0.13.3 to 0.13.4 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3625
* build(deps): bump actions/setup-node from 6 to 7 in the actions-major group by @dependabot[bot] in https://github.com/Automattic/harper/pull/3893
* build(deps): bump actions/checkout from 7.0.0 to 7.0.1 in the actions-minor-patch group by @dependabot[bot] in https://github.com/Automattic/harper/pull/3892
* feat: filled/full to the brim of → with by @hippietrail in https://github.com/Automattic/harper/pull/3898
* docs(harper-ls): termux installation by @MrStickyPiston in https://github.com/Automattic/harper/pull/3900
* feat(chrome-ext): allow feedback on site support by @elijah-potter in https://github.com/Automattic/harper/pull/3853
* build(deps): bump quinn-proto from 0.11.13 to 0.11.16 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3899
* fix: dictionary had `//` comments instead of `#` by @hippietrail in https://github.com/Automattic/harper/pull/3905
* fix: run into further troubles→further trouble by @hippietrail in https://github.com/Automattic/harper/pull/3906
* fix(core): major issues with `SplitWords` by @elijah-potter in https://github.com/Automattic/harper/pull/3857
* feat(comments): add support for `gleam` by @elijah-potter in https://github.com/Automattic/harper/pull/3754
* fix: "steamer that" no longer flagged as typo by @hippietrail in https://github.com/Automattic/harper/pull/3903
* feat: regiment→regimen by @hippietrail in https://github.com/Automattic/harper/pull/3901
* feat: mixing up "little known" and "a little known" by @hippietrail in https://github.com/Automattic/harper/pull/3907

## New Contributors
* @mk668a made their first contribution in https://github.com/Automattic/harper/pull/3719
* @mirsella made their first contribution in https://github.com/Automattic/harper/pull/3669
* @dmytrosorokame made their first contribution in https://github.com/Automattic/harper/pull/3729
* @puneetdixit200 made their first contribution in https://github.com/Automattic/harper/pull/3457
* @Elias0419 made their first contribution in https://github.com/Automattic/harper/pull/3678
* @lukiod made their first contribution in https://github.com/Automattic/harper/pull/3884
* @MrStickyPiston made their first contribution in https://github.com/Automattic/harper/pull/3900

**Full Changelog**: https://github.com/Automattic/harper/compare/v2.6.0...v2.7.0