# Changelog

## Score

- CAI 57 → 57 (-0.1)

## Lenses

- Code Health 56 → 56 (+0.6)
- Architecture 86 → 87 (+0.0)
- Maturity 56 → 60 (+4.6)
- Readiness 59 → 64 (+5.1)
- Security 67 → 60 (-6.7)
- Accessibility 57 → 53 (-4.2)
- Performance 100 (new)

## Resolved (83)

- Ambiguous constructor naming: `new` takes a `str` (string slice), while `new_from_chars` takes an `Lrc` (likely `Arc<[char]>` or similar). The distinction between 'string' and 'chars' is not immediately obvious in intent (e.g., is one for pre-tokenized data?), and `new_from_chars` is inconsistent with the `new_plain_english_curated_chars` naming convention used elsewhere.
- Coverage not measured — JavaScript/TypeScript suite
- Critical CVE: [CVE redacted] (pnpm-lock.yaml)
- Duplicated block (9 lines × 2) (harper-desktop/src-tauri/src/highlighter/render_state.rs)
- FunctionTooLong: harper_desktop::run_highlighter (harper-desktop/src-tauri/src/lib.rs)
- High CVE: [CVE redacted] (pnpm-lock.yaml)
- High CVE: [CVE redacted] (pnpm-lock.yaml)
- High CVE: [CVE redacted] (pnpm-lock.yaml)
- High CVE: [CVE redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- …and 63 more

## New (129)

- Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
- Documentation: no build, run or usage example (README.md)
- Duplicated block (13 lines × 2) (harper-core/src/linting/code_in_write_in.rs)
- Duplicated block (9 lines × 2) (harper-desktop/src-tauri/src/highlighter/render_state/mod.rs)
- FileTooLong: render_state/render_lint_card.rs (harper-desktop/src-tauri/src/highlighter/render_state/render_lint_card.rs)
- FunctionTooLong: harper_desktop::run_highlighter (harper-desktop/src-tauri/src/main.rs)
- GonnaGottaWanna::match_to_lint_with_context (cyclomatic 17) (harper-core/src/linting/gonna_gotta_wanna.rs)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- High CVE: [GHSA redacted] (pnpm-lock.yaml)
- …and 109 more

## Changes since last survey

- 74 commits — 55 feature/other, 19 fixes

## By area

- harper-core/src — 26 commits
- harper-core/default_config.json — 11 commits
- packages/chrome-plugin — 10 commits
- harper-desktop/src-tauri — 6 commits
- (root) — 5 commits
- harper-core/dictionary.dict — 4 commits
- harper-cli/src — 2 commits
- packages/components — 2 commits
- packages/lint-framework — 2 commits
- packages/web — 2 commits
- .buildkite/commands — 1 commit
- harper-comments/tests — 1 commit
- harper-core/irregular_verbs.json — 1 commit
- harper-core/tests — 1 commit

## Notable commits

- fix: Revert "fix(chrome-ext): extend timeout"
- fix: fix(chrome-ext): Lexical tests now wait for linting to complete (#4624)
- fix: fix(chrome-ext): bypass spellcheck suppression on Gmail (#4653)
- fix: fix(chrome-ext): don't close popup when the context_hash changes (#4658)
- fix: fix(chrome-ext): enable the extension on `assistant.kagi.com`
- fix: fix(chrome-ext): extend timeout
- fix: fix(chrome-ext): ignore `spellcheck="false"` on `outlook.live.com` (#4698)
- fix: fix(core): DisjointPrefixes keeps title case when joining prefix (#4641)
- fix: fix(core): avoid PronounKnew false positive after anyone (#3442)
- fix: fix(core): don't ask for `to` after `try` followed by a noun (#4631)
- fix: fix(core): don't flag `MissingTo` after a possessive nominal (#4089)
- fix: fix(core): don't merge compound nouns across an open compound (#4149)
- fix: fix(core): read emphasis all-caps as words in AnA (#4180)
- fix: fix(desktop): stop recreating the linter every second (#4661)
- fix: fix(lint-framework): position highlights correctly under zoomed or scaled ancestors (#4506)
- fix: fix(web): give the home page FAQ section the #faqs anchor (#4620)
- fix: fix(web): preload logo for aesthetics (#4602)
- fix: fix: don't flag "deus" to change to "imus" (#4671)
- fix: test(core): cover its built-in possessive regression (#3844)
- change: Orthographic consistency its (#4474)
- …and 54 more
