Skip to content

fix: install hardening + first-run welcome + about footer#24

Merged
hiskudin merged 4 commits into
mainfrom
feat/install-improvements
May 1, 2026
Merged

fix: install hardening + first-run welcome + about footer#24
hiskudin merged 4 commits into
mainfrom
feat/install-improvements

Conversation

@hiskudin

@hiskudin hiskudin commented May 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Bundles the install-flow review wins from earlier:

Install hardening

  • pkill survivor processes before re-registering launchd agents so the unload→load doesn't race a stale instance
  • Rotate app.log / daemon.log if they exceed 10MB; old logs go to .old
  • Boxed hotkey reminder in the install completion message so new users see cmd+opt+n immediately
  • Welcome notification fired at end of install — confirms the system works AND triggers macOS notification permission during install instead of mid-task later

First-run welcome screen

  • WelcomeView replaces the tab strip on first panel open. Summarises what stack-nudge does, surfaces the hotkey, lists the three tabs, includes a "Grant permissions" button next to "Got it"
  • Persisted via STACKNUDGE_WELCOMED=true so it never reappears
  • Auto-opens the panel on first launch (when the welcome flag isn't set) so new users don't need to discover the hotkey first

Permissions overhaul

  • Add Notifications row alongside Accessibility and Automation in the in-app Permissions window
  • Drop level=.modalPanel — that was forcing our window above macOS system dialogs and clipping them. With .normal level, system alerts and System Settings naturally take precedence
  • Fix stale com.stackonehq.stack-nudge-panel bundle ID (single binary uses com.stackonehq.stack-nudge)
  • Non-destructive Permissions.prompt() for first-run onboarding (vs resetAndPrompt for dev-time recovery)

Settings

  • About footer at the bottom of Settings showing the app version (read from CFBundleShortVersionString) + clickable GitHub link
  • Space activates rows alongside Enter

Test plan

  • Fresh install → welcome panel auto-opens, banner notification fires for "You're all set", macOS asks for notification permission
  • Click "Grant permissions" in welcome → Permissions window opens with three rows
  • Click "Reset & prompt" / "Settings" → macOS dialog or System Settings takes focus naturally (no z-order fight)
  • Settings tab → space and enter both activate rows; About footer shows version
  • Reinstall over an existing install → no orphaned processes, no duplicate launchd agents

🤖 Generated with Claude Code

hiskudin and others added 4 commits May 1, 2026 10:51
Bundles four small UX improvements pulled out of the install-flow review:

- install.sh: pkill survivor processes before re-registering launchd agents
  so the unload→load sequence doesn't race a stale instance. Rotate
  app.log / daemon.log if they exceed 10MB; old logs go to .old.
- Settings: small "About" footer at the bottom of the scroll view shows
  the app version (read from CFBundleShortVersionString) and a clickable
  link to the GitHub repo. Non-navigable so it doesn't bump rowCount.
- First-run welcome: WelcomeView replaces the tab strip on first panel
  open after install, summarising what the app does, surfacing the
  hotkey, and listing the three tabs. Enter dismisses; the choice
  persists via STACKNUDGE_WELCOMED=true so it never reappears.
- PanelController auto-opens the panel on first launch when the welcome
  flag isn't set, so new users see stack-nudge work without having to
  discover the hotkey first.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Welcome view: replace em dashes; add "Grant permissions" / "Got it"
  action bar so the user explicitly chooses when to set up perms instead
  of being ambushed by an auto-fired Accessibility prompt
- Apply ThinScrollers() to the welcome scroll view so its scrollbars
  match the rest of the panel
- Permissions: add Notifications row alongside Accessibility and
  Automation; new Permissions.notifications() / promptNotifications()
  helpers, .notifications case on SettingsPane, "Prompt" label
  (instead of "Reset & prompt") for the notifications row since TCC
  reset doesn't apply to it
- Permissions window: drop level=.modalPanel — that was forcing it above
  macOS system dialogs and clipping them. With .normal level, system
  alerts and System Settings naturally take precedence as the OS
  intends. Window now centres normally; user can move it themselves.
- Install completion message: boxed hotkey reminder so new users see
  cmd+opt+n on first install

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Gives the user immediate proof the install worked AND triggers macOS's
notification permission prompt during install instead of mid-task later.

- notify.sh: new 'welcome' event with a friendly "You're all set" body;
  bypasses STACKNUDGE_MUTE_WHEN_FOCUSED so the banner fires even though
  the user is staring at the install terminal at that moment
- install.sh: after hooks are wired, wait briefly for the launchd-managed
  app's panel socket to come up, then post the welcome via the freshly
  installed notify.sh

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
@hiskudin hiskudin changed the title feat: install hardening + first-run welcome + about footer fix: install hardening + first-run welcome + about footer May 1, 2026
@hiskudin hiskudin merged commit 40e9d0a into main May 1, 2026
4 checks passed
@hiskudin hiskudin deleted the feat/install-improvements branch May 1, 2026 09:36
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