Skip to content

fix: audit fixes and per-tab colors - #367

Merged
arzafran merged 27 commits into
mainfrom
fix/audit-integration
Sep 28, 2026
Merged

arzafran merged 27 commits into
mainfrom
fix/audit-integration

Conversation

@arzafran

Copy link
Copy Markdown
Member

What this does

Fixes the findings from the September codebase audit and adds color coding for pane tabs.

  • The sidebar workspace menu no longer closes by itself. It is a native menu now, so terminal output redrawing the sidebar can't dismiss it. Solid-fill sidebars keep custom workspace colors.
  • Pane tabs can be color coded from their right-click menu (swatches, custom, clear). The tint survives relaunch and moving the tab to another pane.
  • The notification popover's row menu stays open, and the popover no longer hits the safe-area layout loop.
  • programa notify posts to the workspace you name instead of the one you ran it from.
  • The daemon's session.close no longer stalls a worker thread, and kills sessions that ignore SIGHUP.
  • Socket command handling no longer claims main-actor isolation it doesn't have; scrollback replay no longer keeps a closed terminal alive.
  • The command palette can't crash on duplicate saved-layout ids.
  • 47 missing catalog keys added, and every string now has a Japanese translation.
  • Moving animations respect Reduce Motion; fades stay.
  • CLI browser commands and the MCP server use the generated v2 method names.
  • Workflow tokens are read-only by default; CONTRIBUTING documents the zig-skip build path.
  • Two new session-restore tests for duplicate-repository parents.

Review order

  1. Sources/TabItemView.swift (sidebar menu) and vendor/bonsplit + Sources/Workspace*.swift (tab colors)
  2. Sources/TerminalController.swift (threading change)
  3. core/crates/programad (daemon close)
  4. The rest is small, and Localizable.xcstrings is data

Test plan

  • Right-click a sidebar workspace while a terminal prints output; the menu stays open
  • Color a pane tab, relaunch, and drag it to another pane; the tint persists
  • Right-click a notification row; mark read/unread works
  • App in Japanese shows no English leftovers
  • With Reduce Motion on, sidebar rows fade instead of sliding

…tion

Covers M5 from docs/audits/codebase-audit-2026-09-28.md: a session whose
child ignores SIGHUP must still be reaped by session.close(kill: true)
instead of returning Timeout and leaving the process running. Currently
red against the unfixed close path (no SIGKILL escalation).
@arzafran
arzafran merged commit 30d213f into main Sep 28, 2026
12 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant