UI corrections, driven by maintainer review of the running app. Supersedes v2.0.2 — if you're on Windows, take this one instead. Zero policy behaviour change: every preset builds byte-identical policy, the tri-state enums are untouched, and the suite (373 tests) is green on all three platforms.
Fixed
Every GUI column has shown a horizontal scrollbar since v2.0.0. Rows reached 1–2px past the width a panel has once its vertical scrollbar appears — three scrollbars for two invisible pixels, and each one cost its column ~21px of height. Rows now end inside the budget, and a regression test parses every Location/Size pair out of the script and fails any row that crosses it.
Text could clip at non-100% display scaling. The preset buttons were fixed-width and "Performance Focused Preset" clipped at 125% DPI; the DNS labels and three of the five action buttons were within a few pixels of the same fate. Buttons now measure their rendered text at runtime and size themselves, labels are AutoSize, and the DNS fields start past the measured width of the wider label instead of at fixed offsets. No DPI rounding can clip or collide them again.
Changed
"Permissions & Access" is now two sections in the GUI and the TUI:
- Site Permissions — the eight dropdown defaults sites are granted (Not managed / Ask / Block, plus Allow where Chromium has it)
- Access Controls — the seven lockdown toggles (SafeSearch, SafeSites, guest mode, extension blocks, incognito)
The split follows the semantics, not the widget style — and "Site Permissions" is the vocabulary brave://settings already uses. Saved configs and presets are unaffected; they key on policy names, not section names.
More room everywhere. Row pitch went 25 → 28px; the tri-state rows get 33px of their own, since a dropdown is a box, not a line of text. The dropdowns themselves widened 103 → 157px — the space came from shortening one greedy caption ("Multi-Screen (Window Management) Access" → "Multi-Screen Access"; the tooltip keeps the detail). Preset buttons drop the redundant " Preset" suffix — the row is already captioned Quick Presets.
Verified how
An in-process probe renders the real form and enforces three invariants — no control prefers more width than it has, no two controls intersect, no panel shows a horizontal scrollbar — all zero at release. Plus the standing gates: presets byte-identical through both Python modules, embedded presets matching the JSON files, tri-state enums in three-way lockstep.
Verifying this release
7be91c857694ec0721524a52de244415ed101c6187372752eb9dc8b429c85b08 SlimBrave.ps1
dd1516ae4b508e416cdf9c9c12a19c6c4f7875c240a7b4d08b4eebfe935bbe5b slimbrave-linux.py
54b92955ca804a3a855e933572a10d140969ec3b106135d6573827f79f4bf78e slimbrave-mac.py
Get-FileHash -Algorithm SHA256 .\SlimBrave.ps1sha256sum slimbrave-linux.py # Linux
shasum -a 256 slimbrave-mac.py # macOSTags are not signed — there's no maintainer signing key published yet, so don't read an unsigned tag as a sign of tampering. See SECURITY.md.