herminal v0.2.4 — shell-set tab titles
Fourth stub-from-spike fix in the v0.2.0 → v0.2.4 audit window. `GhosttyApp.handleAction` was a one-case switch (only handled `RING_BELL`); SET_TITLE / SET_TAB_TITLE returned false, so OSC 0/2 escapes from vim/htop/starship-style prompts were silently dropped — the tab strip stayed on "herminal" no matter what the shell wrote.
Fix
- `GhosttyApp.handleAction` routes SET_TITLE + SET_TAB_TITLE through `ghostty_surface_userdata` → `ClipboardOwner` protocol → `surfaceTitleDidChangeNotification`.
- `WorkspaceView` observes, finds the matching pane by identity, updates `TerminalSession.title`, rebuilds the tab strip.
- Empty payload falls back to "herminal" (OSC 0 with empty string conventionally clears the title).
Try it
```bash
printf '\033]0;mytab\007'
```
The tab label switches to `mytab`.
Four-day audit pass
| Version | Stub fix |
|---|---|
| v0.2.1 | `read/write_clipboard_cb` (clipboard moves bytes) |
| v0.2.2 | mouse events → libghostty (drag-select works) |
| v0.2.3 | `close_surface_cb` (`exit` closes the pane) |
| v0.2.4 | SET_TITLE / SET_TAB_TITLE actions (this release) |
Each one survived 12+ months because the dogfood checklist never explicitly verified the round-trip end-to-end. The `verify-clipboard.sh` (v0.2.2) and `verify-title.sh` (v0.2.4) regression-guards now catch any future regression on day one.
Install
```bash
curl -LO https://github.com/hoangperry/herminal/releases/download/v0.2.4/herminal-v0.2.4.dmg
open herminal-v0.2.4.dmg
```
Signed + notarized + stapled.
Requirements
- macOS 14.0 (Sonoma) or later
- Apple Silicon (arm64)