Skip to content

Releases: nitschw/Panewright

Panewright 0.6.31

Choose a tag to compare

@nitschw nitschw released this 28 Jul 21:55

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 20:53

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 20:24

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 19:39

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 own log tool, 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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 19:29

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 19:02

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 18:22

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 17:56

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 17:47

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

Choose a tag to compare

@nitschw nitschw released this 28 Jul 17:31

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.