v0.2.0
WinMedic v0.2.0
Zwei neue Module — System & Cache Cleaner und Auto-Updater — dazu Report-Export, parallele Scans, eine testbare Kommando-Architektur und eine Test-Suite mit 335 Tests.
Das erste Release, das der eingebaute Updater auch sieht: v0.1.0 war als Pre-Release markiert und damit für /releases/latest unsichtbar.
Neue Features
System & Cache Cleaner mit WinSxS Deep Clean
Neues Diagnosemodul, das neun Speicherfresser findet und aufräumt:
| Bereich | Was passiert |
|---|---|
| WinSxS Component Store | DISM /AnalyzeComponentStore, danach StartComponentCleanup |
| Delivery Optimization | Delete-DeliveryOptimizationCache, dann manueller Sweep |
| Package Cache | Installer-Reste (RiskScore::High) |
| Browser-Caches | Chrome, Edge, Firefox, Brave, Opera — inkl. aller Profile |
| Setup-Logs | C:\Windows\Panther, CBS-Logs |
| Error Reporting | WER-Archive und Crash-Dumps |
| Shader- & Cert-Caches | D3DSCache, CryptnetUrlCache |
| Papierkorb | Clear-RecycleBin (RiskScore::High) |
| System-Temp | %TEMP%, C:\Windows\Temp |
Gesperrte Dateien werden übersprungen statt den Lauf abzubrechen. Konnte keine Datei entfernt werden, meldet das Modul einen Fehler statt einen leeren Erfolg. Package Cache und Papierkorb sind als RiskScore::High eingestuft und standardmäßig abgewählt — --auto-fix leert sie nicht unbeaufsichtigt. WinSxS-Ergebnisse werden nur ausgewertet, wenn DISM tatsächlich erfolgreich war; das Parsing versteht deutsche und englische DISM-Ausgaben.
Auto-Updater beim Start
Fragt beim Start das neueste GitHub-Release ab und meldet eine neue Version über [U], statt ein Modal aus einem Hintergrund-Event zu öffnen — so kann kein Dialog einen Tastendruck verschlucken. Der Download öffnet sich im Browser.
Abgesichert: vollständiges SemVer-Parsing inklusive Pre-Release-Ordering (1.0.0-beta < 1.0.0), Release-URLs müssen mit https://github.com/ beginnen und dürfen keine Shell-Metazeichen enthalten, Start über explorer.exe statt cmd /c start, Draft- und Pre-Releases werden übersprungen.
Report-Export
Befunde als HTML, Markdown oder JSON — über --output <pfad> oder [E] in der TUI.
Lauf-Steuerung
Abbrechbare Scans und Reparaturen, Rollback, Settings-Tab, Dry-Run-Modus und aussagekräftige Exit-Codes für Skripting.
Oberfläche
- Issue-Liste mit Severity-Filter [c/w/i], Modul-Filter [m], Live-Suche [/] und Reset [x]
- Log-Ansicht als Ring-Buffer (max. 2000 Zeilen) mit PgUp/PgDn/Home/End — lange Läufe fressen keinen Speicher mehr
- Live-Sub-Step-Logs während der Scans, SMART-Telemetrie für Laufwerke
- Dashboard-Karten brechen lange Modulnamen um statt sie abzuschneiden
- Eigenes Icon und PE-Versionsmetadaten in der
winmedic.exe
Performance
- Module scannen parallel über ein
tokio::JoinSetstatt nacheinander - Verzeichnis-Walks laufen in
spawn_blockingund blockieren die Async-Runtime nicht mehr - Audit-Log ist ein append-only JSONL mit O(1)-Schreibzugriff und automatischer Rotation; bestehende Logs werden migriert
Sicherheit & Korrektheit
- Admin-Erkennung über Win32
CheckTokenMembershipmit Elevation-Prompt in der TUI CleanerPathsals injizierbarer Dateisystem-Seam: Tests laufen in einer Sandbox statt gegen echte Browser-Caches, WER-Archive undC:\Windows\Pantherwindows_updates: Dateigrößen wurden auf volle Megabyte abgeschnitten, alles unter 1 MB fiel unter den Tisch — behoben- Update-Check aus
App::newherausgezogen; das Konstruieren einerAppmacht kein Netzwerk-I/O mehr - Gemeinsamer Verzeichnis-Walker in
utils::fs_stats, genutzt vonsystem_cleaner,storageundwindows_updates
Architektur & Tests
CommandRunner-Trait mitSystemCommandRunnerundMockCommandRunner— Module lassen sich ohne echte Systemaufrufe deterministisch testen- 335 Tests: 77 Unit-Tests plus 258 Integrationstests über vier Tiers (Features, Boundaries, Combinations, Scenarios) und mehrere adversariale Suites
- CI prüft Formatierung, Clippy (
-D warnings), Tests und den Release-Build aufwindows-latest
Release-Prozess
Pre-Release-Markierung folgt jetzt SemVer: Nur Tags mit Suffix (v0.3.0-rc1) sind Pre-Releases. Vorher galt jeder Tag vor v1.0 als Pre-Release — dadurch lieferte /releases/latest nichts und der Updater fand grundsätzlich kein Update.
Release Notes kommen aus docs/release-notes/<tag>.md; fehlt die Datei, generiert GitHub die Commit-Liste.
Vollständiges Changelog: v0.1.0...v0.2.0