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