Skip to content

Adopt the shared Settings, About, menu, Help and menu bar surfaces - #27

Merged
AdamXweb merged 6 commits into
mainfrom
claude/surfaces-adoption
Oct 6, 2026
Merged

AdamXweb merged 6 commits into
mainfrom
claude/surfaces-adoption

Conversation

@adamXbot

@adamXbot adamXbot commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Follows #26, which brought the shared surface code into the repository without changing a screen. This change moves the app's Settings, About, menus, Help and the watch-mode menu bar item onto that code, refreshes the copy to version 6, and adds the bundled manual.

What changed per surface

Settings — Settings { SurfaceSettings(app:panes:) } with the four panes the standard keeps for this app: General, Helper, VM agent, Updates. Each is grouped-form sections; the scaffold adds the About button to General.

  • General: run history (auto-save toggle with ⓘ, saved-run count, Show in Finder, Delete All Runs… now gated by a confirmation and a typed DELETE), analysis cache (Clear Cache… behind a confirmation), and the standard Menu bar section with the watch-mode icon picker reading the existing watchModeIconStyle key, plus a live status row. The onboarding replay row moved to Help.
  • Helper: the same status, version and actions, with the "how it works" text behind ⓘ and Uninstall Helper… behind a confirmation.
  • VM agent: the same functional rows (build/reveal/rebuild the installer image, detected VM tools and their VMs, guest agent address and test, run in VM, decompile in VM) on four sections; the walkthrough prose moved into ⓘ popovers and the manual's VM mode chapter.
  • Updates: SurfacePane.updates(SurfaceUpdates(driver: updater, releaseNotes:)), automatic checks off until turned on (SUEnableAutomaticChecks was already false). A Homebrew Cask install gets a section above it with the brew upgrade --cask command; automatic checks are still forced off at launch on those installs.
  • The About tab is gone.

About — SurfaceAboutWindow: icon, two-tone wordmark, version and build provenance, summary, a six-row capability grid, Source on GitHub and Report an Issue, Help and Keyboard Shortcuts links, Acknowledgements (Sparkle's licence text and the CC0 tools catalogue), and the MIT License · © 2026 privacykey line. The custom About window scene and AboutSettingsView/WordmarkView are removed, as is the now-unused GitHub image asset. NSHumanReadableCopyright is now a real © line.

Menus — SurfaceCommands(app:help:updates:) supplies About, Check for Updates… (below Settings…, no shortcut; ⌘U is dropped) and the three Help items. File is restored with Open .app… (⌘O), Scan Installed Apps… (⇧⌘B) and the three Save Run Report… exports, replacing the separate Export menu. Knowledge Base… (⇧⌘K) moved from Help into View. Run keeps its four commands. Refresh Helper Status is gone (the Helper pane refreshes itself).

Help — privacycommand Help opens the bundled manual (Resources/Manual, nine pages: getting started, static analysis, monitored runs, VM mode, batch scan, history and compare, reports, settings, troubleshooting), Keyboard Shortcuts (⌘?) lists every shortcut after the standard group, and Welcome to privacycommand replays the onboarding. The Manual folder is a folder reference in Copy Bundle Resources, so it lands at Contents/Resources/Manual.

Menu bar item — the watch-mode popover now has the standard header (mark, name, elapsed time) and footer (Open privacycommand, Settings gear, Quit). The app's own content is unchanged: watched app, change log, Clear Log, and Stop Watching as the primary action (⌘↩). The item still appears only while watching, and the status item's accessibility label states its state.

Shared copy — version 3 → 6 (adds SurfaceManual.swift and SurfaceShortcuts.swift). UpdateController shrinks to owning the Sparkle updater and the stable channel; UpdatesSettingsView is deleted. privacycommandSurface.swift defines the app's SurfaceApp, shortcuts and acknowledgements once.

Validation

  • Unsigned Debug build (CODE_SIGNING_ALLOWED=NO CODE_SIGN_IDENTITY=-) succeeds; the bundle contains Contents/Resources/Manual with the nine pages.
  • just check passes (lint, security check, docs check, tooling tests including the surfaces copy check, and the package tests).
  • The surface audit reports nothing to fix. Its six review items are ⌘O (a real Open) and ⌘R for Start Monitored Run and the batch Scan, which the standard's per-app row does not ask to free.

🤖 Generated with Claude Code

adamXbot and others added 6 commits October 5, 2026 02:19
Vendor the shared macOS surface sources under
privacycommand/Sources/privacycommand/MacSurfaces with a lock of their
hashes, and compile the folder into the app as a synchronized group.
`just surfaces` refreshes the copy, a scheme pre-action runs the same step
before each build, and `just check` verifies the copy against its lock.

The shared code needs macOS 14, so the minimum moves from macOS 13 to 14.
Nothing in the app uses the new types yet.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
CI and TestFlight or release builds now only verify the committed copy,
so a publication build never changes its own sources.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ed surface code

Settings is SurfaceSettings with the General, Helper, VM agent and Updates
panes as grouped-form sections; the About tab is gone and the scaffold adds
the About button to General. Delete All Runs, Clear Cache and Uninstall
Helper are gated destructive buttons; explanations sit behind info labels.
The Updates pane is the shared one driven by the app's Sparkle updater, with
a Homebrew section on Cask installs.

About is SurfaceAboutWindow with the capability grid, source and issue
links, acknowledgements and the licence line. SurfaceCommands supplies
About, Check for Updates… (below Settings…, ⌘U dropped) and the three Help
items; File is restored with Open .app…, Scan Installed Apps… and the report
exports; Knowledge Base… moves to View. Help opens a bundled manual of nine
pages (Resources/Manual, a folder reference in Copy Bundle Resources), the
Keyboard Shortcuts window and the onboarding replay.

The watch-mode popover takes the standard header and footer. The shared
copy moves from version 3 to 6, and privacycommandSurface.swift defines the
app's SurfaceApp, shortcuts and acknowledgements once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Version 8 tidies the vendored copy tool, .project/mac_surfaces.py, which
the code quality review flagged: sync no longer returns check()'s
always-None result, and the git lookup no longer ends in a bare
except/pass. Behaviour is unchanged. The copy also moves from version 3
to the current Swift sources (the in-app manual and Keyboard Shortcuts
windows among them), which the adoption PR stacked on this one already
builds against.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from claude/mac-surfaces to main October 6, 2026 13:39
@AdamXweb
AdamXweb merged commit 4f0ebc2 into main Oct 6, 2026
3 checks passed
@AdamXweb
AdamXweb deleted the claude/surfaces-adoption branch October 6, 2026 13:39
adamXbot added a commit that referenced this pull request Oct 9, 2026
…3 claims (#30)

Help → Show Onboarding… went away when the shared surfaces landed (#27);
the Help menu now has Welcome to privacycommand, which replays the whole
wizard. Settings → Helper installs the helper directly, so the File events
empty state, its badge tooltip and the onboarding's closing step now send
people there, matching the BTM audit view.

Every target builds for macOS 14.0, including the SwiftPM-built guest
agent, so the guest installer README now says macOS 14+ and the bug
report placeholder no longer suggests a macOS 13 setup.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants