v1.65.0 (2026-06-29)
Features
- V1.65.0 - PoH rollover detection, dashboard density controls, settings fix (#629)
- Promotes the 1.65.0 beta line to master (1.64.0 -> 1.65.0). Scope below is limited to changes that are actually new versus master; features merged to master earlier (per-URL heartbeat, navigation visibility, host grouping, ATA self-test history, contextual help) are already shipped and are NOT part of this delta.
- Features
- Fixes
- Refactors (cognitive complexity)
- Power-On Hours 16-bit counter rollover detection (#595, #625) - new smart_rollover_test.go, thresholds logic
- Dashboard layout controls: max column count + card density ('comfortable' | 'compact') (#471)
- Preserve server-capability flags on settings save: server_version and collector_trigger_enabled were dropped from the POST /api/settings response, so the "Run collectors" button vanished after any settings change. Backend now echoes both flags (shared collectorTriggerEnabled() helper); frontend config setter preserves them with a current-value fallback. Adds handler regression tests.
- smart.go, measurement models, repository, migration runner, middleware/monitors, notify senders, SMTP sender, device detection, collector commands, frontend components (#616-#624)
Refactoring
-
Reduce cognitive complexity in smart.go (#616)
- Reduces SonarQube cognitive complexity (go:S3776) across all 10 flagged functions in webapp/backend/pkg/models/measurements/smart.go. The functions ranged from complexity 17 to 43; all now sit at or below the allowed limit of 15.
-
Reduce cognitive complexity in collector commands (#617)
- Reduces SonarQube cognitive complexity (go:S3776) in main() across all five collector command entrypoints. They ranged from complexity 17 to 47; all functions now sit at or below the allowed limit of 15.
- | Command | Before | After |
- |---------|--------|-------|
- | collector-performance | 47 | ≤15 |
- | collector-filesystem | 45 | ≤15 |
- | collector-btrfs | 45 | ≤15 |
- | collector-zfs | 17 | ≤15 |
- | collector-mdadm | 17 | ≤15 |
-
Reduce cognitive complexity in notification senders (#618)
- Reduces SonarQube cognitive complexity (go:S3776) across the notify package. All flagged functions now sit at or below the allowed limit of 15.
- | Function | File | Before | After |
- |----------|------|--------|-------|
- | ShouldNotify | notify.go | 58 | ≤15 |
- | SendShoutrrrNotification | notify.go | 19 | ≤15 |
- | SendSMTPNotification | smtp_sender.go | 30 | ≤15 |
- | sendSMTPRecipient | smtp_sender.go | 16 | ≤15 |
- | maskAppriseURL | mask.go | 24 | ≤15 |
- | mockSMTPServer.serve | notify_test.go | 17 | ≤15 |
-
Reduce cognitive complexity in device detection (#619)
- Reduces SonarQube cognitive complexity (go:S3776) across the collector device-detection code. All flagged functions now sit at or below the allowed limit of 15.
- | Function | File | Before | After |
- |----------|------|--------|-------|
- | TransformDetectedDevices | detect/detect.go | 38 | ≤15 |
- | btrfs parseScrubStatus | btrfs/detect.go | 25 | ≤15 |
- | zfs parseScrubStatus | zfs/detect/detect.go | 21 | ≤15 |
- | getArrayDetail | mdadm/detect/detect.go | 20 | ≤15 |
- | findMissingDevices | detect/devices_darwin.go | 19 | ≤15 |
- | getMountUsage | mdadm/detect/mount_linux.go | 19 | ≤15 |
-
Reduce cognitive complexity in components (#620)
- Reduces SonarQube cognitive complexity (typescript:S3776) for all three flagged frontend functions. Each now sits well below the allowed limit of 15.
- | Function | File | Before | After |
- |----------|------|--------|-------|
- | buildAppriseUrl | dashboard-settings.component.ts | 24 | <15 |
- | set range | @treo/date-range.component.ts | 22 | <15 |
- | _generateSmartAttributeTableDataSource | detail.component.ts | 21 | <15 |
-
Reduce cognitive complexity in repository (#621)
- Reduces SonarQube cognitive complexity (go:S3776) across the database repository. Every flagged function (except the migration runner) now sits at or below the allowed limit of 15.
- | Function | File | Before |
- |----------|------|--------|
- | GetSummary | scrutiny_repository.go | 56 |
- | EnsureTasks | scrutiny_repository_tasks.go | 30 |
- | computeEndurance | scrutiny_repository_workload.go | 26 |
- | GetSmartTemperatureHistory | scrutiny_repository_temperature.go | 24 |
- | newScrutinyRepository | scrutiny_repository.go | 19 |
- | GetDevicesLastSeenTimes | scrutiny_repository.go | 19 |
- | reconcileLegacyDeviceIdentity | scrutiny_repository_device.go | 17 |
- | GetWorkloadInsights | scrutiny_repository_workload.go | 17 |
- | summaryRiskScore | summary_risk.go | 16 |
- | EnsureBuckets | scrutiny_repository.go | 16 |
- All now ≤15.
-
Reduce cognitive complexity in measurement models (#622)
- Reduces SonarQube cognitive complexity (go:S3776) across the measurement models and threshold parsing. All flagged functions now sit at or below the allowed limit of 15.
- | Function | File | Before |
- |----------|------|--------|
- | NewBtrfsMetricsFromInfluxDB | measurements/btrfs_metrics.go | 34 |
- | NewPerformanceFromInfluxDB | measurements/performance.go | 32 |
- | ValidateThreshold | measurements/smart_ata_attribute.go | 27 |
- | parseConsumerDriveProfiles | thresholds/consumer_drive_profiles.go | 23 |
- | NewMDADMMetricsFromInfluxDB | measurements/mdadm_metrics.go | 18 |
-
Reduce cognitive complexity in middleware and monitors (#623)
- Reduces SonarQube cognitive complexity (go:S3776) across the web middleware and background monitors. All flagged functions now sit at or below the allowed limit of 15.
- | Function | File | Before |
- |----------|------|--------|
- | AuthMiddleware | middleware/auth.go | 25 |
- | GetStatus | missed_ping_monitor.go | 21 |
- | checkAndSendHeartbeat | heartbeat_monitor.go | 19 |
- | LoggerMiddleware | middleware/logger.go | 17 |
-
Reduce cognitive complexity in the migration runner (#624)
- Final SonarQube Group 5 cluster. Reduces cognitive complexity (go:S3776) in the database migration runner — the two highest-complexity functions in the project.
- | Function | Before | After |
- |----------|--------|-------|
- | Migrate | 166 | ≤15 |
- | m20201107210306_From...SmartResults... | 17 | ≤15 |