# Changelog

> **This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.**

## Score

- CAI 42 → 39 (-3.1)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 71 → 52 (-19.3)
- Architecture 76 → 74 (-1.5)
- Maturity 75 → 52 (-23.2)
- Readiness 30 → 30 (-0.6)
- Security 71 → 70 (-0.5)
- Domain Modelling 55 → 55 (-0.1)
- Accessibility 38 → 37 (-0.5)
- Performance 100 → 100 (+0.0)

## Resolved (21)

- Change-coupling hub: all_settings.php → all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php (lang/fr/all_settings.php)
- Duplicated block (12 lines × 6) (app/Actions/Photo/StructOfArrays/QueryPhotoDetails.php)
- Duplicated block (14 lines × 2) (app/Services/AlbumBucketComputer.php)
- Duplicated block (15–16 lines × 3) (app/Actions/Photo/StructOfArrays/QueryPhotoBuckets.php)
- Duplicated block (16 lines × 2) (app/Actions/Photo/StructOfArrays/QueryPhotoRatios.php)
- Duplicated block (17–18 lines × 2) (app/Http/Controllers/Gallery/AlbumListing/AlbumChildrenController.php)
- Duplicated block (31 lines × 2) (app/Jobs/RecomputeChildAlbumBucketsJob.php)
- Duplicated block (32–38 lines × 2) (app/Jobs/RecomputeAlbumPhotoBucketsJob.php)
- Duplicated block (35 lines × 2) (app/Actions/Album/StructOfArrays/BuildAlbumDataResource.php)
- Duplicated block (5 lines × 2) (app/Http/Controllers/Gallery/AlbumListing/AlbumChildrenController.php)
- Duplicated block (6 lines × 2) (app/Actions/Photo/StructOfArrays/ResolvesPhotoSource.php)
- Duplicated block (7 lines × 3) (app/Actions/Photo/StructOfArrays/QueryPhotoBuckets.php)
- Duplicated block (8 lines × 2) (app/Http/Controllers/Gallery/AlbumListing/AlbumChildrenController.php)
- FaceObserver.updated (cognitive 18) (app/Observers/FaceObserver.php)
- Hotspot: resources/js/v8/components/headers/AlbumsHeader.vue (resources/js/v8/components/headers/AlbumsHeader.vue)
- Low CVE: [GHSA redacted] (package-lock.json)
- ManagedCachePhotoListingInvalidator.evictTimelineBucketsFor (cognitive 19) (app/Listeners/ManagedCachePhotoListingInvalidator.php)
- Medium: security finding (details withheld)
- Members sharing a duplicated core (6 members, 50+ identical tokens) (app/Actions/Photo/StructOfArrays/QueryPhotoDetails.php)
- Off-boarding risk: anonymized user #1
- …and 1 more

## New (214)

- Change coupling clique: maintenance.php, maintenance.php, maintenance.php, maintenance.php, maintenance.php, maintenance.php (lang/de/maintenance.php)
- Change coupling: all_settings.php ↔ all_settings.php (lang/fr/all_settings.php)
- Change coupling: all_settings.php ↔ all_settings.php (lang/ja/all_settings.php)
- Change-coupling hub: all_settings.php → all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php (lang/en/all_settings.php)
- Change-coupling hub: all_settings.php → all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php, all_settings.php (lang/nl/all_settings.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/zh_TW/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/zh_CN/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/ru/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/pt/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/ja/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/fa/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/es/dialogs.php)
- Change-coupling hub: dialogs.php → dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php, dialogs.php (lang/el/dialogs.php)
- Cross-context type AccessPermission (Models → Http) (app/Http/Requests/Traits/HasAccessPermissionTrait.php)
- Cross-context type AccessPermission (Models → Http) (app/Http/Resources/Models/AccessPermissionResource.php)
- Cross-context type Album (Models → Http)
- Cross-context type Album (Models → Http) (app/Http/Requests/Album/GetAlbumBucketsRequest.php)
- Cross-context type Album (Models → Http) (app/Http/Requests/Face/BulkScanRequest.php)
- Cross-context type Album (Models → Http) (app/Http/Requests/Face/ScanPhotosRequest.php)
- Cross-context type Album (Models → Http) (app/Http/Requests/Frame/FrameRequest.php)
- …and 194 more

## Changes since last survey

- 55 commits — 47 feature/other, 8 fixes

## By area

- (root) — 17 commits
- resources/js — 14 commits
- docs/specs — 9 commits
- .github/workflows — 2 commits
- app/Actions — 2 commits
- app/Http — 2 commits
- database/migrations — 2 commits
- lang/de — 2 commits
- app/Jobs — 1 commit
- lang/ar — 1 commit
- lang/el — 1 commit
- lang/en — 1 commit
- scripts/commit-msg — 1 commit

## Notable commits

- fix: Fix frame not showing photo on v8 (#4853)
- fix: Fix memory leak when uploading 3000 photos at the same time (#4863)
- fix: Fix pointer interaction (#4887)
- fix: Fix sprintf vulnerability (#4856)
- fix: Fixes the link in CONTRIBUTING.md (#4902)
- fix: Improve bucketing on map and fix scrubber (#4857)
- fix: More fixes on v8: missing data due to StructofArrays and visuals (#4858)
- fix: fix(photo): scroll PDF pages instead of changing photo (#4898)
- change: Add Pocket ID OAuth provider (#4852)
- change: Add support for email login (#4871)
- change: Add tag-person album section (#4895)
- change: Adding OpenTelemetry and provide traces (#4598)
- change: Bucketing refactor (#4883)
- change: Bump frankenphp (#4865)
- change: Claude is just a tool, however we expect you to understand what you write (#4904)
- change: Date format album thumb (#4888)
- change: Ensure that config always have translation keys (#4872)
- change: Face quick naming (#4886)
- change: Frame settings improved UX (#4882)
- change: Google Motion Photos: Android 11+ format and grid hover playback (#4900)
- …and 35 more

## Architecture

- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
