Skip to content

v0.2.0

Choose a tag to compare

@SecretLUL SecretLUL released this 15 Aug 08:35
· 91 commits to main since this release
c882b0b

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::JoinSet statt nacheinander
  • Verzeichnis-Walks laufen in spawn_blocking und 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 CheckTokenMembership mit Elevation-Prompt in der TUI
  • CleanerPaths als injizierbarer Dateisystem-Seam: Tests laufen in einer Sandbox statt gegen echte Browser-Caches, WER-Archive und C:\Windows\Panther
  • windows_updates: Dateigrößen wurden auf volle Megabyte abgeschnitten, alles unter 1 MB fiel unter den Tisch — behoben
  • Update-Check aus App::new herausgezogen; das Konstruieren einer App macht kein Netzwerk-I/O mehr
  • Gemeinsamer Verzeichnis-Walker in utils::fs_stats, genutzt von system_cleaner, storage und windows_updates

Architektur & Tests

  • CommandRunner-Trait mit SystemCommandRunner und MockCommandRunner — 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 auf windows-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