Release v0.4.0: WHEA Logger, Crash Dump & BSOD Analyzer, Scan State Persistence & TUI Improvements - #46
Open
SecretLUL wants to merge 15 commits into
Open
Release v0.4.0: WHEA Logger, Crash Dump & BSOD Analyzer, Scan State Persistence & TUI Improvements#46SecretLUL wants to merge 15 commits into
SecretLUL wants to merge 15 commits into
Conversation
… OS command execution
…m specs panel width
…and extend VSS timeouts
Implements whea_logger diagnostic module to query Windows Hardware Error Architecture events (Events 19, 18, 17, 47, 1), extract APIC ID/Core and PCIe BDF fault locations, provide ASPM power management and mdsched fixes, and integrate into engine and UI.
…ext scan Three separate scans re-reported findings that a repair had already handled, or that no repair could ever clear: - Scheduled Tasks ignored a task's state. Disabling is the only thing the repair does, and Windows neither resets LastTaskResult nor restores a deleted program, so every task WinMedic switched off came straight back on the following scan. Disabled tasks are now skipped in both checks, and the disable reads the state back afterwards so a TrustedInstaller-owned task that accepts the command without applying it fails honestly instead of counting as repaired. - System Cleaner raised a finding on any non-zero byte. Every directory it sweeps is one the system refills by itself - a service's next log line, Explorer's 129-byte $Recycle.Bin\desktop.ini shell stub, the next favicon a browser caches - so the findings reappeared seconds after a successful repair. Cleanup targets now need 10 MB (50 MB for browser caches) before they are worth reporting, and the Recycle Bin's shell stub is neither counted nor deleted. - The DNS check ran `nslookup <name> 8.8.8.8`, pinning a public resolver and bypassing the machine's own. Networks that block outbound port 53 produced a permanent critical finding that ipconfig /flushdns cannot possibly fix. It now queries the configured resolver for two independent names, parses the answer record rather than substring matching a header that is present on failure too, and re-queries after the repair so an unfixed resolver is reported as a failed repair. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The README claimed the cache cleaner covered Brave and Opera; the discovery only ever walked Chrome, Edge and Firefox, so both browsers' caches were left untouched on every run. Brave is Chromium on the same `User Data\<profile>\<cache>` layout as Chrome and Edge, so all three now go through one helper instead of two copies of the same loop. Opera does not use a `User Data` root: each installed flavour (Opera Stable, Opera GX Stable, Opera One, ...) gets its own directory under `Opera Software` and that directory *is* the profile, so the flavours are enumerated rather than named and a flavour Opera ships next needs no code change. Both the LocalAppData and the Roaming root are checked, since the caches moved between releases and an upgraded machine still carries the old one. Only `Default` and `Profile N` directories are collected, so Chromium's shared state next to them - `Local State`, the user's dictionary, safe-browsing lists - is never swept. The progress line, issue title and fix steps name the browsers actually covered, so the finding in the TUI matches what the sweep does. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Parses kernel minidumps directly (PAGEDU64/PAGEDUMP headers) without external tools like WinDbg or BlueScreenView: stop codes, bugcheck parameters and faulting drivers (e.g. nvlddmkm.sys) are extracted from C:\Windows\Minidump and correlated with BugCheck Event 1001 and Kernel-Power Event 41 from the System log. Findings: crash_driver_fault (driver attribution with rollback plan), crash_video_tdr (0x116/0x117), crash_memory_bugcheck (0x1A/0x50/...), crash_bugcheck_history, crash_unexpected_shutdown (Event 41 without bugcheck) and crash_stale_dumps (cleanup). Fixes open Device Manager for driver issues, schedule mdsched.exe for memory-class stop codes and remove analysed dumps via PowerShell. Registered as the 11th module; module-count assertions and integration tests updated, 20 new unit tests added.
…1.98 Clippy 1.98 promotes chunks_exact_to_as_chunks to -D warnings, but the as_chunks return order differs between toolchain versions, so plain index pairs keep the UTF-16LE scan stable on every toolchain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary of v0.4.0 Release
This release introduces the WHEA Hardware Error Logger (\whea_logger) and Crash Dump & BSOD Analyzer (\crash_analysis) diagnostic modules alongside scan state persistence, scheduled tasks dynamic resolution, terminal UX enhancements, and triage controls.
🩺 1. WHEA Hardware Error Logger (\whea_logger)
💥 2. Crash Dump & BSOD Analyzer (\crash_analysis)
Fully automated parsing of kernel minidumps — no external tools (WinDbg, BlueScreenView) required:
💾 3. Scan State Persistence & Reconciler
🛠️ 4. UI & Engine Improvements
🔁 5. Repaired Findings No Longer Reappear
Three scans re-raised findings that a repair had already handled, or that no repair could ever clear. All three are fixed at the scan side, where the defect was:
State. Disabling is the only thing the repair does, and Windows neither resetsLastTaskResultnor restores a deleted program — so every task WinMedic switched off came straight back on the next scan. Disabled tasks are now skipped in both checks. The disable additionally reads the state back, so a TrustedInstaller-owned task that accepts the command without applying it (for example theUpdateOrchestratorbrokers) is reported as a failed repair rather than a successful one.desktop.inishell stub, the next favicon a browser caches — so findings reappeared seconds after a successful repair. Cleanup targets now need 10 MB (50 MB for browser caches) before they are worth reporting, and the Recycle Bin shell stub is neither counted nor deleted.nslookup <name> 8.8.8.8, pinning a public resolver and bypassing the machine's own. Any network blocking outbound port 53 produced a permanentCRITICALfinding thatipconfig /flushdnscannot possibly fix. The check now queries the configured resolver for two independent names, parses the answer record rather than substring-matching a header that is present on failure too, and re-queries after the repair so an unfixed resolver fails honestly with the reason.🌐 6. Brave & Opera Cache Sweeping
The README claimed the cache cleaner covered Brave and Opera; the discovery only ever walked Chrome, Edge and Firefox, so both browsers' caches were never touched.
User Data\<profile>\<cache>layout as Chrome and Edge — all three now share one discovery helper instead of two copies of the same loop.User Dataroot: each installed flavour (Opera Stable, Opera GX Stable, Opera One, …) gets its own directory underOpera Software, and that directory is the profile. Flavours are enumerated rather than named, so one Opera ships next needs no code change. Both the LocalAppData and the Roaming root are checked, since the caches moved between releases.DefaultandProfile Ndirectories are collected, so Chromium's shared state next to them (Local State, the user's dictionary, safe-browsing lists) is never swept.Verification