v2.7.0

Automattic/harperv2.7.0Jul 28, 2026by github-actions[bot]

AI Summary

This release marks the desktop app as beta, introduces several new grammar rules, and includes major refactoring of core linters and Chrome extension functionality.

Key Highlights

  • Desktop application is now clearly marked as beta.
  • Added new grammar rules such as 'jump the gun', 'call it quits', and 'in retaliation to'.
  • Refactored core linters and centralized suggestion transformation depth limits.
  • Improved Chrome extension testing and inline HN page support.

New Features

  • Linting for Source Control commit message boxes.
  • Standardization of inline bounds syntax for linters.
  • Added 'Precess' and derivatives to the dictionary.
  • Improved battery life and lagging status indicators for desktop.

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