You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
## [0.31.0] - 2026-07-02
11
+
12
+
### Fixed
13
+
- The system could be prevented from sleeping indefinitely: the activity assertion that blocks idle sleep while a session is working was only released when a tab was put to sleep — not when a working tab was closed, restarted, or had its focused pane closed. Those paths now re-evaluate sleep prevention, so a leftover working tab no longer keeps the Mac awake.
14
+
- Hover auto-hide could get permanently stuck: if the cursor briefly re-entered the notch/panel during the hide delay, the one-shot timer's reference was never cleared, blocking every future auto-hide until the app restarted. The panel now reliably hides when the cursor leaves.
15
+
- Autocomplete defaults and zsh history only ever populated the first project directory opened in a session; every other directory silently had an empty suggestion store and took a synchronous disk read on the main thread the first time you typed there. Each directory is now seeded independently, and the zsh history file is read at most once.
16
+
- The floating panel could open partly off-screen when the menu bar icon was near the right edge of the display. Its horizontal position is now clamped to the visible screen so the tabs and side buttons stay reachable.
17
+
- Acting on a notification now clears the other stacked notifications for the same session instead of leaving stale duplicates in Notification Center.
18
+
19
+
### Security
20
+
- File and folder names are stripped of control bytes (newline, carriage return, escape) before their paths are sent to the terminal — a crafted name in a cloned repo or unzipped archive can no longer inject keystrokes or terminal escape sequences via drag-and-drop.
21
+
-`.notchy.json` project configs can no longer set `ZDOTDIR`, `BASH_ENV`, or `ENV`, which a login shell reads before any command runs and which could otherwise turn a project's env config into pre-execution of arbitrary code. The trust dialog now shows full env key=value pairs (and truncates over-long fields) instead of just key names, so a hidden value can't slip past.
22
+
- Project (folder) names are sanitized of bidi-override and zero-width characters before appearing in notifications, tabs, and menus, closing a Trojan-Source-style UI spoofing vector.
23
+
24
+
### Performance
25
+
- The tab strip no longer does an O(n) index lookup per tab on every render (previously O(n²), re-run on each status update); it builds the lookup once.
26
+
- Resolving the built-in (notch) display is now cached and only refreshed on a screen-configuration change, instead of being recomputed on every mouse move and every 10 Hz proximity tick.
27
+
10
28
## [0.30.0] - 2026-07-01
11
29
12
30
### Removed
@@ -324,6 +342,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
0 commit comments