Releases: nitschw/Panewright
Release list
Panewright 0.6.31
Fixed
- Windows no longer scramble across workspaces after visiting another
native Space (issue #23). Two engine fixes: the engine now remembers
which workspace each window lived on when a Space visit hides it from
Accessibility and gets it garbage-collected, and re-homes it there
when it reappears (instead of dumping it on the focused workspace);
and leaving native fullscreen returns the window to its own workspace
instead of whichever one the fullscreen Space had displaced onto its
monitor.
Panewright 0.6.30
Fixed
- The engine is no longer restarted for looking stalled from a foreign
native Space (issue #22): zero managed windows with windows on screen
is also what a healthy engine looks like while the user visits a
fullscreen app's Space — AX can't see windows on inactive Spaces and
the engine garbage-collects them. The stall verdict now stands down
for two minutes after any native Space change, is vetoed outright
when a fullscreen window owns the current Space, and needs three
consecutive ticks — and every held or confirmed verdict logs its
reasoning and inputs.
Panewright 0.6.29
Fixed
-
A display the bar never reports geometry for (hidden by a monitor
profile, or on a Space that never laid out) no longer traps the
monitor map in a rebuild-forever loop — the loop that stacked bar
pollers every tick until SketchyBar stopped answering on 3-monitor
setups (issue #21). Missing displays are now paired by elimination,
the geometry poller is single-flight, and a mismatch a rebuild
couldn't cure backs off instead of refiring every 20 seconds. -
The bar's learned y-offset unit ratio can no longer be poisoned by a
measurement taken mid-wake or on a dark display (one such reading
persisted a ratio of 2762.80 and misplaced every future bar); the
placer now stands down while waking and rejects implausible ratios. -
Deathwatch no longer files a false autopsy when a fast restart boots
the new instance while the old one is still mid-teardown.
Changed
- Wake recovery is fast now: a dead engine or bar is detected the
moment the machine wakes (process-existence checks can't be fooled
by a half-awake system) instead of riding the display-settle
debounce — lid-open to windows-restored dropped from ~13s to ~2-3s.
A zombie bar gets its verdict from two quick post-wake probes
instead of the steady-state three-strike rule.
Panewright 0.6.28
Added
- Deathwatch: when an instance vanishes without a clean shutdown, the
next launch autopsies it — pulling the system log for the minutes around
the last heartbeat (via Apple's ownlogtool, which endpoint security
doesn't block) and writing anything that smells like a kill, denial, or
removal into our log. The two-day mystery of silent deaths on managed
machines gets named by its next occurrence, automatically, inside the
next bug report.
Panewright 0.6.27
Fixed
- The accessibility-debris problem is fixed at both ends (the root of
the day's lag, orphaned-at-startup apps, and slow menus). Release builds
of the engine intercepted no signals, so every ordinary restart killed it
without removing a single AXObserver — depositing debris inside every
subscribed app, accumulating until the machine's whole accessibility
layer crawled. The engine now unsubscribes cleanly on SIGTERM, and app
registration is time-bounded so even a poisoned accessibility layer
can't wedge the command server. Measured on the debris-laden machine:
engine answers went from 10.2 seconds to 15 milliseconds. (Existing
debris in long-running apps clears when they — or the Mac — restart.)
Panewright 0.6.26
Fixed
- The pinwheels are over — profiled, root-caused, and closed at every
layer. The menu (and everything else) froze because the engine's server
had slowed to seconds per answer and the app still made two synchronous
engine calls on the UI thread. Engine: hidden windows are parked once,
not re-parked with an AX call on every refresh (dozens of parked windows
× a slow accessibility layer = 10-second answers, measured). App: the
fitter's roster and membership reads now serve their cache and refresh in
the background — the UI thread never waits on the engine, wedged or not.
Menu interactions also stop rebuilding the open menu (status refreshes
only notify on real changes). Measured: main-thread blocking frames went
from 4,657 to 1 in a six-second sample.
Panewright 0.6.25
Fixed
- The bar appears once, fully formed, in the right place. Startup used to
be visible theater: items bolted on one by one, then the whole bar
jumped to its corrected position (the display's y_offset unit ratio was
relearned and discarded every boot). The bar is now born hidden and
revealed after its first full paint, and the learned ratio persists so
the emitted geometry is right from birth. Verified across two boots:
the first learns (one last visible correction), every boot after is
born in place with zero corrections.
Panewright 0.6.24
Fixed
- Switching native macOS Spaces no longer breaks tiling (issue #18): a
Space change makes every window on the departed Space invisible to the
sensing stack, and corrections against that half-visible world caused
the "unpopulated workspaces / broken tiling" mess. Space changes now get
the same stand-down as workspace switches, and a one-time notice explains
the model — Panewright's workspaces replace Spaces; one Space per display
works best.
Panewright 0.6.23
Fixed
- Restarting the environment no longer multiplies the machinery
(issue #17). Every restart re-armed the periodic jobs without stopping
the previous set — three restarts meant three health loops, three orphan
sweeps, and three display handlers racing each other through workspace
redistribution: the flicker storms, and windows left stranded off to the
side, were the app fighting its own clones. Every start is idempotent
now; restart as often as you like, there is always exactly one of each.
Panewright 0.6.22
Added
float-secondary-windows(config + Layout tab toggle, off by default):
any new window of an app that already has one arrives floating — auth
prompts, OAuth popups and password sheets are usually an app's second
window even when macOS types them as standard windows. Re-tile keepers
with$mod+shift+space; the float is the arrival state, not a cage.