# Changelog

## Score

- CAI 53 → 54 (+0.5)

## Lenses

- Code Health 65 → 57 (-7.9)
- Architecture 89 → 88 (-1.0)
- Maturity 61 → 64 (+2.6)
- Readiness 72 → 78 (+6.1)
- Security 64 → 76 (+12.0)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 40 → 42 (+1.7)
- Performance 73 → 73 (+0.0)

## Resolved (177)

- AggregatedPluginResult::merge_into (cognitive 16) (crates/core/src/plugins/registry/mod.rs)
- App.App (cognitive 18) (apps/review-electron/src/renderer/src/App.tsx)
- Change coupling: astro.rs ↔ mdx.rs (crates/extract/src/astro.rs)
- Change coupling: commands.ts ↔ statusBar.ts (editors/vscode/src/commands.ts)
- Change coupling: commands.ts ↔ treeView.ts (editors/vscode/src/commands.ts)
- Change coupling: health.rs ↔ health_scores.rs (crates/config/src/config/health.rs)
- Change coupling: markdown.rs ↔ health_css.rs (crates/cli/src/report/markdown.rs)
- Change-coupling hub: types.rs → html.rs, parse.rs, sfc.rs, angular.rs, template_usage.rs, declarations.rs, helpers.rs, mod.rs, visit_impl.rs, visit_impl_helpers.rs, mod.rs (crates/extract/src/cache/types.rs)
- ClassTooLong: Command (crates/cli/src/lib.rs)
- DiffView.FileSection (cyclomatic 17) (apps/review-electron/src/renderer/src/components/DiffView.tsx)
- Duplicate intent for setting cancellation state. One method is mutable (setter), the other returns Self (builder/fluent style). While technically different signatures, they serve the exact same purpose of injecting a cancellation signal, confusing users on which to use.
- Duplicated block (10 lines × 2) (crates/api/src/markdown_output.rs)
- Duplicated block (10 lines × 2) (crates/config/src/config/dependency_ignore.rs)
- Duplicated block (10 lines × 2) (crates/engine/src/health/result.rs)
- Duplicated block (10 lines × 4) (crates/core/src/plugins/gatsby.rs)
- Duplicated block (10 lines × 4) (crates/engine/src/health/result.rs)
- Duplicated block (10–11 lines × 2) (crates/engine/src/health/findings.rs)
- Duplicated block (11 lines × 2) (crates/core/src/scripts/mod.rs)
- Duplicated block (11 lines × 2) (crates/extract/src/astro.rs)
- Duplicated block (11 lines × 3) (crates/engine/src/health/result.rs)
- …and 157 more

## New (285)

- Change coupling: knip_tables.rs ↔ builtin.rs (crates/cli/src/migrate/knip_tables.rs)
- Change coupling: mod.rs ↔ dynamic_imports.rs (crates/graph/src/cache/mod.rs)
- Change coupling: mod.rs ↔ mdx.rs (crates/extract/src/astro/mod.rs)
- Change coupling: mod.rs ↔ reachability.rs (crates/graph/src/cache/mod.rs)
- Change-coupling hub: commands.ts → client.ts, statusBar.ts, treeView.ts (editors/vscode/src/commands.ts)
- Change-coupling hub: types.rs → html.rs, parse.rs, sfc.rs, angular.rs, vue.rs, template_usage.rs, declarations.rs, helpers.rs, mod.rs, visit_impl.rs, visit_impl_helpers.rs (crates/extract/src/cache/types.rs)
- ClassTooLong: Command (crates/cli/src/cli_args.rs)
- Collector::visit_binary_expression (cyclomatic 16) (crates/mutation/src/collect.rs)
- Duplicated block (10 lines × 2) (crates/api/src/markdown_output.rs)
- Duplicated block (10 lines × 2) (crates/core/src/plugins/eslint.rs)
- Duplicated block (10 lines × 2) (crates/engine/src/health/result.rs)
- Duplicated block (10 lines × 4) (crates/engine/src/health/result.rs)
- Duplicated block (11 lines × 2) (crates/cli/src/bin/stub_sidecar.rs)
- Duplicated block (11 lines × 2) (crates/extract/src/visitor/visit_impl_member_destructuring.rs)
- Duplicated block (11 lines × 3) (crates/engine/src/health/result.rs)
- Duplicated block (11 lines × 3) (crates/extract/src/css_in_js/tokens.rs)
- Duplicated block (11 lines × 3) (crates/types/src/workspace.rs)
- Duplicated block (11–12 lines × 2) (crates/core/src/lib.rs)
- Duplicated block (12 lines × 2) (crates/core/src/analyze/unused_deps.rs)
- Duplicated block (12 lines × 2) (crates/core/src/plugins/vitest/mod.rs)
- …and 265 more

## Changes since last survey

- 300 commits — 175 feature/other, 125 fixes

## By area

- (root) — 39 commits
- .github/workflows — 29 commits
- tests/fixtures — 28 commits
- crates/extract — 27 commits
- crates/cli — 21 commits
- crates/core — 17 commits
- .agents/skills — 12 commits
- apps/review-electron — 12 commits
- crates/api — 12 commits
- editors/vscode — 9 commits
- docs/development — 8 commits
- tools/type-aware-sidecar — 8 commits
- crates/engine — 7 commits
- crates/graph — 6 commits
- crates/mutation — 6 commits
- .github/scripts — 5 commits
- tools/mutation-runner — 5 commits
- benchmarks/package-lock.json — 4 commits
- crates/config — 3 commits
- crates/napi — 3 commits

## Notable commits

- fix: chore(deps): fix vulnerable dependencies in the review app and demo project (#3615)
- fix: fix(action): find a merge base on a shallow checkout (#3782)
- fix: fix(action): request the branded token only when the action posts (#3755)
- fix: fix(api): deregister the programmatic base snapshot before analysis (#3941)
- fix: fix(audit): do not gate new-only on estimated CRAP alone (#3747)
- fix: fix(audit): do not gate on complexity findings in test files (#3753)
- fix: fix(audit): match same-named findings on structure before line order (#3836)
- fix: fix(audit): match styling findings without the line number (#3972)
- fix: fix(audit): report growth of an exceeded metric as worsened (#3750)
- fix: fix(ci): restore follow-up dependency repair runs (#3909)
- fix: fix(cli): apply the coverage-gaps rule on bare fallow (#3830)
- fix: fix(cli): name the unenforced failing gates of a bare machine run (#3875)
- fix: fix(cli): say where --fail-on-issues changes the exit code (#3841)
- fix: fix(codeowners): bound the wildcards in a CODEOWNERS file (#3859)
- fix: fix(codeowners): keep an escaped space in a CODEOWNERS pattern (#3860)
- fix: fix(config): escape the project root in on-disk glob expansion (#3589)
- fix: fix(config): read config values that a same-file constant holds (#3929)
- fix: fix(config): strip the root before the absolute check in ignored paths (#3761)
- fix: fix(core): keep a production-only enum member suppression out of the stale list (#3970)
- fix: fix(core): keep a production-only suppression out of the stale list (#3834)
- …and 280 more

## Architecture

- Unchanged — 0 containers · 1 contexts · 0 edges
