Skip to content

Arbitrium 0.9.8

Choose a tag to compare

@github-actions github-actions released this 24 Aug 19:05
· 0 commits to 38eee38b2a2ec23f714579e3196906b5cc804fd6 since this release
4328a17

411 tweaks, twelve more blocks on the dashboard, and a migration that was deleting the wrong key

The largest release so far, and it opens with a bug worth reading about.

A migration step was deleting a context menu entry Arbitrium never wrote. The 0.9.5
cleanup removed HKCR\*\shell\runas and HKCR\Directory\shell\runas outright, on every
install that had not yet recorded migration level 2 — which includes every machine that
never ran 0.9.4 at all. runas is a verb name Windows itself defines and any program may
register; "Run as administrator on every file type" is one of the most widely copied
registry tweaks there is. If you had that entry and it disappeared, this is why. The step
now reads the verb's command first and removes only the one that invokes Arbitrium with
--own or --disown. The module's own header always said it would touch nothing but keys
Arbitrium created; now it does.

Four more real ones alongside it:

  • The Apps page could crash the app. A QProcess that dies emits both errorOccurred
    and finished; the first handler cleared the pointer and the second read the scan output
    off it.
  • MULTI_SZ values were written back as REG_SZ. Reverting a journalled multi-string
    value changed its type behind your back. DWORD and QWORD reads also took four or eight
    bytes out of the buffer without checking that many were there.
  • The journal recorded the wrong value on a restore. It wrote down the catalogue's
    target rather than what the write actually put in place — and those differ precisely when
    you are putting something back, which is when the Log page matters most.
  • Applying a tweak with no options asked qBound for a range whose minimum exceeded its
    maximum.

Two settings did nothing. Confirm before applying is on by default, so most people
had been promised a confirmation they never saw — Apply went straight to the writes either
way. Check for updates at launch had no caller but the manual button. Both are wired up.
A failed apply now also tells you what failed, rather than only how many did.


268 → 411 tweaks

Checked against what is actually maintained: WinUtil's sixty-six tweaks were already in the
catalogue almost to the last one, Optimizer was archived in January, and privacy.sexy's
history-recording material was missing entirely. What follows comes from those gaps rather
than from a longer list of the same things.

Three new categories.

Windows Update 30 The catalogue had sixty-two tweaks for Sistem and not one for this. Automatic restart, update behaviour, feature and quality deferral, pinning a release (TargetReleaseVersion — stay on 24H2), where drivers come from, active hours, notification level, Insider builds, Delivery Optimisation mode; Windows Error Reporting, crash dump type, DiagTrack; reserved storage, Storage Sense
Security hardening 23 SmartScreen's three separate faces, AutoRun/AutoPlay, Windows Script Host, the PowerShell 2.0 engine, LSA as a protected process, anonymous SID enumeration, the LM hash, WDigest, remote registry, RDP network level authentication, SMBv1, SMB signing, WPAD, IP source routing, Defender cloud/PUA/network protection, the spooler value that closes the PrintNightmare family, Point and Print, Office macros
Power management 11 USB selective suspend — the commonest cause of a mouse that stutters on wake and an external drive that drops — USB controller sleep, PCIe ASPM, S3 instead of modern standby, the hibernation file and its size, lid close, battery saver threshold, adaptive brightness

And the thin ones filled in. Cleanup 3 → 26 (history recording, cache control, event log
sizes, shutdown timeouts). Memory & CPU 9 → 36 (MMCSS responsiveness, network throttling,
Win32PrioritySeparation, core parking, power throttling, NTFS last-access and 8.3 short
names, the three GameDVR keys, Game Bar, Auto HDR, mouse acceleration). Network 18 → 30, all
of it stack tuning: TCP autotuning, Nagle, QoS reserved bandwidth, LLMNR, NetBIOS, mDNS,
Wi-Fi Sense. Context menu 9 → 20: copy as path, SHA256 hash, unblock, run as a different
user, open PowerShell or Terminal here, empty the Recycle Bin, end tasks that are not
responding, turn off the display. And a new audio section under System.

Two of these do not fit the tweak model and were not forced into it. A scheduled task's
enabled state is not a reversible registry value, so the four that do have a policy key are
tweaks and the rest are not pretended to be. Most "recent activity" lists are cleared rather
than switched, so what went in are the seven keys that stop the recording in the first place.


The dashboard answers twelve more questions

SysInfo is on the startup path, so everything it reads has to be answerable in a frame.
That ruled out most of what you actually go looking for when something is wrong. A second
reader now does it off the startup path, in three stages that each repaint as they land —
the window opens as fast as it did.

Windows Update · System integrity · Scheduled tasks · Drivers · Privacy · Encryption ·
Accounts · Virtualisation · Disk health · Performance · Connection · Sensors.

A few are worth pointing at. The crash row reads the bug-check code out of the minidump
header itself and names it, instead of saying that a crash happened; the two kernel dump
headers keep it at different offsets and both are handled. The pending-restart row names
which flag is actually set rather than answering "yes". The privacy block reads each switch
where Windows reads it — policy before per-user setting — and ends on a single number. Disk
health reports real SMART counters: health, remaining life, power-on hours, total bytes
written, temperature.

Nothing on that page is guessed. A value the machine cannot answer stays at the dash it
started at, and the sensor rows say "not readable" rather than inventing a temperature.


Every word of it, in ten languages

All 143 new tweak names and descriptions are translated, along with the new category,
section and option labels — 302 new keys. The table is at 1533 and not one of them is short
a language.

That also fixes something that had been quietly wrong: the catalogue is built once, so every
Locale::tr() inside the service and startup synthesisers froze that text in whichever
language the app started in. Service positions, startup positions, section titles and row
descriptions now resolve at draw time and follow the language switch like everything else.
The words that had never been given a key at all have one now.


Also

  • The sidebar list is a scroll area. It was a plain widget clipped to the height left over,
    so a row past the bottom edge was not scrolled out of view — it was not drawn at all. A
    large interface scale already did that; three more categories would have taken Advanced
    off the end.
  • Info rows can stack the label above the value. Side by side, the value takes what it asks
    for and the label gets the remainder — right for "Version 24H2 · 26100", wrong for a row
    naming a physical disk, where Samsung SSD 990 PRO 2TB was arriving as Sam….
  • Sorting alphabetically and the "busiest category" tile were reading the raw Turkish out of
    catalog.json instead of what is on screen.
  • A CHANGELOG.md now lives in the repository.

Downloads

Arbitrium-v0.9.8-win64.zip is the application with the Qt runtime beside it — unzip it
anywhere and run Arbitrium.exe. No install, nothing to register.

This one is built by the release workflow rather than by hand, which is new: the tag, these
notes and the archive all come out of .github/workflows/release.yml, and the run refuses
to start if the tag disagrees with the version in CMakeLists.txt, app.rc or the
manifest.

The single-file build from earlier releases needs a statically linked Qt, which takes about
an hour to compile and is not something CI does on every tag. If it turns up here later, it
is the same application in one executable.