# Changelog

## Score

- CAI 38 → 45 (+7.6)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

## Lenses

- Code Health 68 → 63 (-4.4)
- Architecture 39 (new)
- Maturity 73 → 79 (+5.7)
- Readiness 20 → 46 (+25.9)
- Security 43 → 75 (+31.8)
- Accessibility 42 (new)

## Resolved (144)

- (anonymous) (cognitive 17) (packages/i18n/lib/i18n.js)
- Boundary-crossing change coupling: actions.ts ↔ comment-replies.js (apps/comments-ui/src/actions.ts)
- Boundary-crossing change coupling: vite.config.mjs ↔ vite.config.mjs (apps/portal/vite.config.mjs)
- Change coupling: actions.js ↔ api.js (apps/portal/src/actions.js)
- Change coupling: automated-emails.js ↔ service.js (ghost/core/core/server/api/endpoints/automated-emails.js)
- Change coupling: boot.js ↔ index.js (ghost/core/core/boot.js)
- Change coupling: commands.js ↔ schema.js (ghost/core/core/server/data/schema/commands.js)
- Change coupling: index.js ↔ routes.js (ghost/core/core/server/api/endpoints/index.js)
- Change coupling: pages.js ↔ posts.js (ghost/core/core/server/api/endpoints/utils/serializers/input/pages.js)
- Change coupling: schema.js ↔ newsletter.js (ghost/core/core/server/data/schema/schema.js)
- Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
- Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
- Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
- Dimension evaluation failed
- FileTooLong: acceptance/search-test.js (apps/ember-admin/tests/acceptance/search-test.js)
- FileTooLong: core/boot.js (ghost/core/core/boot.js)
- FileTooLong: e2e-webhooks/posts.test.js (ghost/core/test/e2e-webhooks/posts.test.js)
- FileTooLong: utils/e2e-framework-mock-manager.js (ghost/core/test/utils/e2e-framework-mock-manager.js)
- FileTooLong: utils/e2e-framework.js (ghost/core/test/utils/e2e-framework.js)
- FileTooLong: utils/fixtures-generator.js (apps/portal/src/utils/fixtures-generator.js)
- …and 124 more

## New (4373)

- #fetchEventsFromDomain (cognitive 18) (ghost/core/core/server/services/lib/mailgun-client.js)
- #fetchEventsFromDomain (cyclomatic 18) (ghost/core/core/server/services/lib/mailgun-client.js)
- #mapPosts (cognitive 45) (ghost/core/core/server/services/posts/posts-exporter.js)
- #mapPosts (cyclomatic 42) (ghost/core/core/server/services/posts/posts-exporter.js)
- #run (cognitive 28) (ghost/core/core/server/data/seeders/data-generator.js)
- #run (cyclomatic 21) (ghost/core/core/server/data/seeders/data-generator.js)
- #runARRQueries (cognitive 30) (ghost/core/core/server/services/milestones/milestones-service.js)
- #runARRQueries (cyclomatic 16) (ghost/core/core/server/services/milestones/milestones-service.js)
- #runMemberQueries (cognitive 17) (ghost/core/core/server/services/milestones/milestones-service.js)
- .lintstagedrc.expandPattern (cognitive 37) (.lintstagedrc.cjs)
- .pnpmfile.beforePacking (cognitive 18) (.pnpmfile.mjs)
- App.componentDidUpdate (cognitive 20) (apps/portal/src/app.jsx)
- App.componentDidUpdate (cognitive 20) (apps/sodo-search/src/app.jsx)
- App.fetchLinkData (cognitive 67) (apps/portal/src/app.jsx)
- App.fetchLinkData (cyclomatic 48) (apps/portal/src/app.jsx)
- App.fetchOfferQueryStrData (cognitive 29) (apps/portal/src/app.jsx)
- App.fetchOfferQueryStrData (cyclomatic 29) (apps/portal/src/app.jsx)
- App.fetchQueryStrData (cognitive 51) (apps/portal/src/app.jsx)
- App.fetchQueryStrData (cyclomatic 50) (apps/portal/src/app.jsx)
- App.getPageFromLinkPath (cognitive 27) (apps/portal/src/app.jsx)
- …and 4353 more

## Changes since last survey

- 300 commits — 243 feature/other, 57 fixes

## By area

- ghost/core — 121 commits
- apps/admin — 85 commits
- (root) — 22 commits
- packages/i18n — 15 commits
- apps/ember-admin — 12 commits
- apps/portal — 7 commits
- .github/workflows — 6 commits
- apps/admin-x-framework — 5 commits
- .changeset/changelogs — 3 commits
- e2e/helpers — 3 commits
- packages/api-framework — 3 commits
- packages/limit-service — 3 commits
- (repo) — 2 commits
- .agents/skills — 2 commits
- apps/shade — 2 commits
- packages/metafield-types — 2 commits
- .github/renovate.json5 — 1 commit
- apps/activitypub — 1 commit
- docker/fake-mailgun — 1 commit
- docker/ghost-dev — 1 commit

## Notable commits

- fix: Fixed Admin 7 pill style inconsistencies (#30849)
- fix: Fixed Admin locale data type resolution
- fix: Fixed CI coverage failing after the Node 22.23.3 bump (#30974)
- fix: Fixed Portal address fields losing focus on every keystroke
- fix: Fixed Portal lint running before the metafield types it checks against are built
- fix: Fixed React Admin caches going stale after post deletes and tag-creating saves (#30968)
- fix: Fixed React Admin crashing on periodic host limits (#30967)
- fix: Fixed Renovate deadlock from stale env var and PR cap counting (#30876)
- fix: Fixed S3 integration tests after MinIO image removal (#30707)
- fix: Fixed a saved members view opening unfiltered when clicked straight after leaving it
- fix: Fixed address part errors landing on the whole field in the member editor
- fix: Fixed analytics debug timestamps to use UTC (#30679)
- fix: Fixed author acceptance test race (#30942)
- fix: Fixed automation email analytics filtering (#30430)
- fix: Fixed bulk post deletes removing sent email history (#30981)
- fix: Fixed content-type headers for local files storage (#30762)
- fix: Fixed dev data scripts failing in a fresh checkout (#30984)
- fix: Fixed email rendering crash on malformed inline CSS declarations (#30768)
- fix: Fixed embed publish netlify workflow (#30973)
- fix: Fixed embed publish netlify workflow (#30977)
- …and 280 more
