Launchpad v0.1.2
Bug-fix sweep across high-churn files — silent correctness issues, resource leaks, and stuck-state bugs caught by a focused code review.
Install
- Download
Launchpad_0.1.2_aarch64.dmgbelow - Open the DMG, drag
Launchpad.appto/Applications - On first launch, macOS will complain (the app isn't code-signed). Right-click → Open, or run:
xattr -dr com.apple.quarantine /Applications/Launchpad.app
Fixes
- Filesystem events no longer drop after navigating into a subfolder. The fs-changed listener was comparing the emitted path against the file browser's currently-browsed path, so any navigation below the project root silently killed the tree refresh, git status updates, and external-edit detection. Now compares against the project path — the same root the watcher was started for.
- Terminals can no longer spawn in a file-browser sub-directory.
createPanehad agetCurrentPath()fallback that could silently land a new PTY in whatever folder the file browser happened to be viewing, contradicting the project-scoped design. Removed. - Branch checkout no longer silently discards uncommitted changes.
checkout_branchused.force(), overwriting dirty files without warning. Now uses a safe checkout and errors likegit checkoutwould — with the tree updated before HEAD, so a failure doesn't leave HEAD pointing at an unchecked-out branch. - Split-pane
exitno longer kills the sibling. If one pane of a split terminal exited, Launchpad would close the whole tab — showing a "running process" dialog for the healthy pane and destroying it on confirm. Now just collapses the exited pane. - Rapid file-browser actions no longer swap stale trees. Toggle-hidden, search input, and setRoot could run concurrent
loadDirectorycalls that rendered in non-deterministic order. Top-level loads are now serialized via a promise chain. - Moving the last left-group tab to the right no longer leaves an empty dead group. A new terminal is minted in the left group instead of
activeTabUiId = -1and a non-functional+button. - Drag listeners on the split handles no longer leak. Both in-tab pane split (Cmd+D) and workspace split (Cmd+\) were attaching
mousemove/mouseuptodocumenton every toggle without cleanup. Now scoped to each drag session. - PTY reader buffer has a hard cap. On corrupted UTF-8 streams (binary output, crashed shells), the leftover buffer could grow unbounded. Caps at 64KB and flushes as replacement characters.
- Git cancel race window closed.
run_git_cancellable's cleanup now tags each op with a monotonic id so it can't accidentally clear a slot a later operation has already claimed.
Full changelog
- `9cd2e6d` fix: bug-fix sweep across high-churn files
- `508819c` chore: bump version to 0.1.2