Skip to content

Releases: Nowalski/Power-X

v0.1.20

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 20:47

A second audit pass, plus a repair to the README.

  • Importing a setup file from a newer PowerX now tells you. A powerx.config file written by a later version still opens, but anything in it this build does not understand is dropped, which meant the import plan could look complete while quietly leaving parts out. It now says so before you apply it.
  • The updater holds the installer open while it checks it. It already re-checked the download's fingerprint immediately before running it. Now it keeps the file locked across that check and the launch, so the file that was verified is provably the file that runs, and nothing can swap it in between.
  • The README had mangled characters from an old bad text conversion: three dashes and four separators had turned into things like â€" and ·. Repaired, and the separators are now written in a form that cannot be corrupted again. Every text file in the repository was checked; nothing else was affected.
  • The product spec was still describing 0.1.0 and listing things as upcoming that shipped a while ago. It now reflects what is actually built.

179 tests passing.

Installer: PowerX-Setup-0.1.20-win-x64.msi
Portable: PowerX-0.1.20-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.19

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 20:32

An audit pass following 0.1.18, on the principle that the bug fixed there was an instance of a class rather than a one-off.

  • Report jobs could open the previous run's report and call it a success. The tools behind them do not reliably fail when they fail: powercfg /batteryreport exits 0 and prints "Battery life report saved to file path ..." having written nothing at all. Because reports go to a fixed path that survives between runs, the file simply being there was never evidence that this run produced it. PowerX now offers a report only if it was written after the run started, and says plainly when nothing was written. This covers the energy and battery reports and anything added later.
  • The bug class is now closed by measurement. Every program the Repair jobs run was checked for whether it can send output back at all. perfmon.exe, fixed in 0.1.18, was the only one that could not; the other thirteen are fine.
  • A latent memory bug in process enumeration. When the process list outgrew its buffer, a failure while allocating the larger one could have led to the same memory being released twice. It needs the machine to be out of memory to happen, but it is the kind that corrupts rather than crashes cleanly.
  • The "Recommended repair" button could silently do nothing. It finds its two jobs by name, and a rename would have left it dead with only a line in the log file. It now reports the problem, and a test pins the names so this fails during development instead.

Also measured and deliberately left alone: process sampling is the largest remaining cost in the live dashboards, but most of it is a single Windows call that cannot be made faster, and what is left amounts to about a tenth of a percent of one CPU core. There was no win worth the risk.

172 tests passing.

Installer: PowerX-Setup-0.1.19-win-x64.msi
Portable: PowerX-0.1.19-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.18

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 16:45
  • The system diagnostics report in Repair now works, and no longer opens a window. "Generate a system diagnostics report" ran perfmon.exe /report, which is a GUI program: it opened the Resource and Performance Monitor window, wrote nothing back to PowerX, and did not exit until that window was closed by hand. The Repair console showed the job header and then nothing for a minute, and no report was ever opened. The data was being collected correctly the whole time; PowerX just never said where it went.
  • The report was never a feature of that window. It is configured on the Windows collector set itself and produced by the Performance Logs and Alerts service when the set stops. PowerX now drives that collector directly through its COM interface: nothing opens, the console counts down while it collects, it prints where the data was written, and the finished HTML report opens on its own.
  • A stale-report bug found during verification. The collector's properties are a snapshot rather than live values, so a first version of this reported the previous run's folder and opened an older report with a success message and no sign anything was wrong. Properties are now re-read each time, and a report is only accepted if it is newer than the moment collection started.
  • Repair jobs can now report a file they discover while running, rather than only a path fixed in advance.

Each run collects for 60 seconds and writes roughly 50 MB under C:\PerfLogs, and runs accumulate there. That is now stated in the job's own description so it is not a surprise.

169 tests passing.

Installer: PowerX-Setup-0.1.18-win-x64.msi
Portable: PowerX-0.1.18-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.17

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 15:47
  • The process inspector was cutting off text. Right-click a process, Details, and long values lost their right-hand side mid-word. It asked for a fixed 700px width, but the dialog hosting it clamps content to 548, so everything was laid out wide and then clipped at the edge with no scrollbar to reveal the rest. It now stretches to fit the dialog instead of forcing a width, and the dialog is allowed to be wide enough to read.
  • Live sampling costs about half what it did (a tick went from ~20.6ms to ~9.6ms). The network sample was 60% of it, and the cost was re-enumerating every network adapter once a second (55 of them on the test machine) purely to read byte counters, which are nearly free by comparison. The adapter list is now kept for five seconds while the counters behind the rate charts are still read every tick, so the charts are unchanged.
  • The default sampling interval moves from 1 second to 2, taking idle cost from roughly 2% of one core to roughly half a percent. Existing settings are untouched, and Settings still offers 0.5s through 5s if you want it livelier or cheaper.
  • Straightened punctuation in a few remaining strings, including the process "About" text where it was visible on screen.

On CPU temperature, which came up alongside this: there is nothing honest to show on most desktops. Every temperature source Windows exposes reports no data on the test machine, because AMD die temperature lives behind the CPU's own interface and needs a kernel driver or vendor SDK to reach, and this board does not populate the ACPI thermal zones that would be the built-in route. Disk temperatures continue to work because Windows genuinely reports those.

158 tests passing.

Installer: PowerX-Setup-0.1.17-win-x64.msi
Portable: PowerX-0.1.17-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.16

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 15:18

A measurement-first audit pass: every significant provider was timed before anything was changed, which is what decided the work.

  • The background configuration snapshot is about 1.7x faster (~1940ms to ~1120ms). It collects six categories from six unrelated sources, and was reading them one after another, so the roughly one-second driver query was being added to everything else rather than overlapped with it. Output verified byte-identical by dumping every category before and after and diffing.
  • The slow driver query is now settled rather than deferred again. It costs about a second on every call, and the cost is the WMI class itself, not the columns asked for: seven columns, a single column, or no filter at all all measure the same within noise. A lower-level device enumeration returns the same data roughly 10x faster, but it cannot report whether a driver is signed, which the Drivers page flags and the health check counts. Guessing at that is not something PowerX will do, so the query stays and the numbers are written down so it does not get re-investigated a fourth time.
  • Two suspected bugs checked and cleared. Boot timing shows nothing on some machines because the Windows diagnostics log genuinely contains no boot events, not because parsing failed, and the page correctly hides the card. The coloured bar on process rows is also correct: it tracks a memory share as well as CPU, so a memory-heavy idle process rightly gets one.
  • The "What changed" comparison gained the regression tests it never had.

158 tests passing.

Installer: PowerX-Setup-0.1.16-win-x64.msi
Portable: PowerX-0.1.16-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.15

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 11:10

A performance, bug and polish pass. No new features.

  • Startup and Scheduled tasks load about twice as fast. Both read the Task Scheduler through each task's definition XML in a single call now, instead of a dozen-plus separate property reads that each round-trip to the scheduler service. Measured across fresh runs: ~950ms to ~460ms for the Startup subset, ~1520ms to ~780ms for the full task inventory. Output was verified byte-identical by dumping every field of all 262 tasks before and after and diffing them.
  • Tasks that have never run no longer claim to have run. The page was showing "last ran 30.11.1999 (result 0x41303)" for them, where that date is Task Scheduler's own "never" sentinel and 0x41303 literally means "has not run". Those result codes are successes rather than errors, so the documented ones are now spelled out ("still running", "no more runs scheduled") and only a genuine failure keeps its code.
  • Two tweak profile descriptions were being cut off mid-sentence on their cards (Gaming and Potato mode both lost their last line). The cards are sized to fit now.
  • Byte sizes line up in a column again: a whole number lost its decimal, so a list read "377.3 GB / 5.2 GB / 3 GB / 1.1 GB".
  • Text pass across dialogs and page copy: real singular/plural instead of "thing(s)", and straightened punctuation.

148 tests passing.

Installer: PowerX-Setup-0.1.15-win-x64.msi
Portable: PowerX-0.1.15-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.14

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 10:32
  • Disk cleanup now scans its 13 cache/temp targets in parallel instead of one after another - 698ms to 377ms on the dev machine (about 1.85x faster) for the same result.
  • Audit found two duplicate Task Scheduler reads: Startup and Scheduled tasks each do their own full scan of the same ~260 tasks (about 1.3s and 1.7s respectively) - wasteful whenever both are read together, as the health check does. Not fixed this release: a correct fix needs either a shared cache with real invalidation (a just-toggled task must show its new state immediately) or restructuring who reads what from whom, and both are bigger decisions than an audit pass should make unilaterally. Full reasoning in docs/DECISIONS.md (D-033).
  • Re-confirmed the driver inventory's roughly one-second WMI query cost (found last release) is inherent to that WMI class, not fixable without a larger rewrite.

126 tests passing.

Installer: PowerX-Setup-0.1.14-win-x64.msi
Portable: PowerX-0.1.14-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.13

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 01:05

A two-part audit, run in parallel and verified independently before merging:

  • The system report and event log now read their independent sections concurrently instead of one after another - about 2x faster for the system report, about 40% faster for the event log. Crash insights was tried the same way and reverted after measuring it slower on this machine (WER reads are already near-free, so there was nothing to overlap against); documented why so it isn't retried blindly later.
  • Fixed a real bug: two identically-modeled disks would report the same temperature instead of their own, because the reliability-counter lookup joined back by drive name rather than each disk's own WMI association. Confirmed and fixed on a machine with two identical NVMe drives (was 37.0°C / 37.0°C, now 44.0°C / 37.0°C, matching a raw probe).
  • Added a second fallback source for CPU/system temperature, a different WMI provider over the same underlying ACPI data, for machines whose firmware populates one but not the other.
  • Investigated and declined shelling out to nvidia-smi for GPU temperature: it works and returns real data, but it crosses a line this project has drawn on purpose (no vendor SDKs), and would only ever help NVIDIA users since there's no equivalent for AMD's consumer GPUs. Full reasoning in docs/DECISIONS.md (D-032).

126 tests passing.

Installer: PowerX-Setup-0.1.13-win-x64.msi
Portable: PowerX-0.1.13-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.12

Choose a tag to compare

@Nowalski Nowalski released this 05 Sep 00:33
  • GPU page now shows every real adapter instead of blending them into one reading. Adapter identity and VRAM come from DXGI instead of WMI (which has no LUID to key per-adapter counter data on, and whose AdapterRAM field saturates at 4 GB on anything with more). A picker lets you choose Combined or one specific GPU, defaulting to the highest-VRAM card so nothing changes if you never touch it, and every GPU also gets its own always-visible card below.
  • Network page can enable or disable an adapter, through the same CIM class Enable-NetAdapter/Disable-NetAdapter use. Shown as its own list rather than folded into the live throughput cards, because a disabled adapter disappears from the normal interface enumeration entirely and would otherwise have no way back from the same page.
  • New Temperatures page: ACPI thermal zones plus the per-disk sensors already used on the Storage page. CPU and GPU temperature are not exposed by any built-in Windows API on most machines, and PowerX does not reach for a vendor SDK or a kernel driver to get them, so the page says that plainly instead of guessing. powerx temps.
  • The health check now runs its eleven checks concurrently instead of one after another, since none of them touch shared state, about 2.8x faster on the dev machine for the same result.

125 tests passing. Verified live against real multi-GPU hardware (NVIDIA + AMD integrated) and a mix of enabled/disabled network adapters.

Installer: PowerX-Setup-0.1.12-win-x64.msi
Portable: PowerX-0.1.12-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.

v0.1.11

Choose a tag to compare

@Nowalski Nowalski released this 04 Sep 20:01
  • Network page felt sluggish: TelemetryHub sampled network on only every other tick, a leftover micro-optimization from an earlier audit that saved ~10-20ms of work already running entirely on a background thread so it bought nothing visible. The cost: the down/up rate stuck at its old value for a full extra second between updates, and read blank for up to 2 seconds after the app opened. Now samples every tick, same as CPU/memory/GPU.
  • Health check page could freeze the app: HealthCheck.ScanAsync ran its fourteen checks including a powercfg /batteryreport process spawn, WMI, COM firewall/task enumeration, and a 7-day event-log read fully synchronously on the calling thread. The page awaits it directly on navigate and also auto-scans on first load, so opening it could freeze the whole app for a second or more. Fixed by moving the check batch onto a background thread inside HealthCheck.ScanAsync itself.

Installer: PowerX-Setup-0.1.11-win-x64.msi
Portable: PowerX-0.1.11-portable-win-x64.zip

Not code-signed yet; SmartScreen will show an "unknown publisher" prompt (More info → Run anyway). Verify what you downloaded against SHA256SUMS.txt.