# Nexus Performance OS Stabilization v1 - Audit

Dato: 2026-06-06
Branch: integration/platform-sprint-before-phase1

## P0/P1 fund og ændringer

### P1 - Desktop status kørte tung capture på UI-tråden

Location: `source/nexus-shell/NexusShell/ViewModels/DesktopViewModel.cs`

Problem: `DispatcherTimer` kaldte `RefreshStatus`, som synkront kørte `SystemStatusService.Capture`. Det kunne gøre desktop, dock og loginoplevelsen hakkende, især når processer eller systemmetrics var langsomme.

Fix: Statuscapture køres nu på baggrundstråd med reentrancy-guard og marshales tilbage til Dispatcher. Lange captures logges via diagnostics som `long_operation`.

### P1 - PerformanceMode ændrede label, men ikke samplerens faktiske interval

Location: `source/nexus-shell/NexusShell/Services/Diagnostics/PerformanceMonitorService.cs`

Problem: `SampleInterval` ændrede sig, men den underliggende `Timer` beholdt sin gamle cadence.

Fix: `PerformanceMode` og `SetEnabled` ændrer nu den aktive timer med `Timer.Change`, og samplerens interval registreres i `NexusTimerRegistry`.

### P1 - Diagnostics-eksport landede under diagnostics-roden

Location: `source/nexus-shell/NexusShell/Services/Diagnostics/DiagnosticSessionManager.cs`

Problem: Eksport blev skrevet som `logs\diagnostics\exports`, mens POC-kontrakten kræver `C:\NinjaNexusPOC\logs\exports`.

Fix: `DiagnosticSessionManager` har nu separat `ExportRoot` og default til sibling-mappen `logs\exports`.

### P1 - Partikelbaggrund og connection field gav unødvendigt rendertryk

Locations:

- `source/nexus-shell/NexusShell/Controls/NexusDesktopParticleField.xaml.cs`
- `source/nexus-shell/NexusShell/Controls/NexusDesktopConnectionField.xaml.cs`

Problem: Desktop-particles brugte op til 121 elementer ved 33 ms UI-timer, og connection field genopbyggede visuals direkte på size changes.

Fix: Reduced motion og PerformanceMode giver statiske/lavere counts. Normal particle cadence er sænket til 50 ms. Connection rebuild er debounced og reducerer antal lines/particles.

### P1 - Update recovery kunne crashe ved låst pending-job.json

Location: `source/nexus-shell/NexusShell/Services/NexusPlatformUpdateJobStore.cs`

Problem: Hvis en kørende Nexus-proces låste `pending-job.json`, kunne startup recovery kaste under `Save` og vælte `UpdateService`-construction.

Fix: Recovery bruger nu defensiv persist med logging ved `IOException` og `UnauthorizedAccessException`, så shellen fortsætter i en kendt update-state.

### P2 - Animations respekterede ikke motion/performance-ønsker konsekvent

Locations:

- `source/nexus-shell/NexusShell/Controls/NexusBottomDock.xaml.cs`
- `source/nexus-shell/NexusShell/Controls/NexusWindow.cs`
- `source/nexus-shell/NexusShell/Services/NexusMotionPreferences.cs`

Problem: Dock og vinduer kørte entrance animationer selv ved performance/reduced-motion signaler.

Fix: Ny fælles `NexusMotionPreferences` samler Windows animation setting og Nexus performance settings. Dock/window animationer springes over, når motion bør reduceres.

### P2 - Nexus Console åbnede modal og kunne blokere host flow

Location: `source/nexus-shell/NexusShell/MainWindow.xaml.cs`

Problem: Console åbnede med modal dialog, selvom den er en Nexus-hosted app.

Fix: Eksisterende console-window genbruges, registreres i workspace manager og åbnes nonmodal med `Show`.

## Diagnostics- og observability-forbedringer

Nye filer:

- `source/nexus-shell/NexusShell/Services/Diagnostics/NexusTimerRegistry.cs`
- `source/nexus-shell/NexusShell/Services/NexusMotionPreferences.cs`

Forbedringer:

- Active timers/polling kan ses i settings diagnostics HUD.
- Diagnostics-export skriver `support-summary.txt`.
- Diagnostics-export skriver `timers.json`.
- Long operations kan måles med `TrackOperation` og `TrackOperationAsync`.
- Startup logger `startup_complete` med `startupToShellWindowMs`.

## Kendte resterende P2-risici

- Der findes fortsat synkron fil-IO i flere små lokale services. Det blev ikke bredt refaktoreret i denne pass, fordi ændringen ville øge blast radius.
- XAML har stadig mange eksisterende shadows/storyboards. Den konkrete desktop-shell cadence og reduced-motion-sti er reduceret, men hele design-systemet er ikke omskrevet.
- `dotnet test` fra repo-roden fejler, fordi roden ikke har `.sln` eller projektfil. De konkrete testprojekter kører grønt.
