Skip to content

Reductive pass: remove non-core features - #329

Merged
arzafran merged 16 commits into
mainfrom
reductive-pass
Sep 2, 2026
Merged

Reductive pass: remove non-core features#329
arzafran merged 16 commits into
mainfrom
reductive-pass

Conversation

@arzafran

@arzafran arzafran commented Sep 2, 2026

Copy link
Copy Markdown
Member

What this does

Cuts Programa back to the features the README actually sells. The app no longer links the iroh transport, the release no longer ships remote daemon binaries, and CI no longer needs a Go toolchain. Every removal has a record under docs/removed/ with the commit to restore from and what we learned while the feature was in the app.

Features dropped

Each of these was reachable by a user before this PR and is gone after it.

  1. SSH remote workspaces. programa ssh user@host, the sidebar Reconnect/Disconnect items, the workspace.remote.* socket commands, browser panes routing through the remote network, and the programad-remote Go daemon with its six release assets. Workspaces are local only.
  2. Mobile companion. The Settings > Phone tab, QR pairing, paired-device list, phone push notifications, and the iOS app with its TestFlight lane.
  3. Browser data import wizard. Settings > "Import Browser Data" and the View menu item that imported cookies and history from Chrome, Safari, Firefox, Arc, and others.
  4. Browser extensions. The puzzle-piece toolbar button and extension loading.
  5. React Grab. The shortcut, menu item, and palette command that picked a React element in the browser and pasted it into the terminal. Design Mode stays, reachable only through the automation API (surface.browser.design_mode.toggle).
  6. AppleScript. The programa.sdef dictionary and scripting classes; osascript can no longer drive the app.
  7. Inline VS Code. The "Open Current Directory in VS Code (Inline)" panel backed by code serve-web. The plain "Open Current Directory in VS Code" item still opens the desktop app.
  8. Custom notification sound files. Settings still offers the system sound picker; picking your own audio file is gone.

Not dropped, despite being on the list: browser developer tools. The inspector docking code is threaded through the browser portal classes, so it needs its own refactor (docs/removed/browser-developer-tools.md).

What stays: the built-in browser

The in-app browser and its automation API are untouched. This is the surface agents use to show work inside Programa, and it is worth stating how to reach it because it has been easy to confuse with the external browser:

  • In the app: ⌘⇧L opens a browser split beside the focused terminal. ⌘L with a terminal focused opens a browser in that pane and focuses the address bar. The command palette has "Split browser right/down".
  • From the CLI or an agent: programa browser open <url> creates a browser split in the caller's workspace; programa browser open-split <url> is the explicit split form. After that, programa browser snapshot, click, fill, eval, wait, screenshot, and the rest of the browser.* socket family (about 85 commands) drive that pane.
  • External default browser: the built-in browser's "open in default browser" action and the PROGRAMA_DEFAULT_BROWSER / PROGRAMA_DEFAULT_BROWSER_BUNDLE_ID environment variables (plus the app.browsers socket command) identify the system browser. Nothing in this PR changes that path.

Summary for reviewers

  • 677 files changed, about 112,000 tracked lines removed before the cleanup commits; 67k of that is vendored mobile packages and the iOS app, 25k the remote stack and daemon.
  • The release payload drops from ten assets to four. scripts/*.test.js and the three tests/*.sh release tests pass with the new contract.
  • Follow-up commits collapse the upload-era pasteboard planner, delete the unreachable image-transfer indicator, flatten BrowserAvailability, and prune 94 orphaned localization strings.
  • Kept on purpose: Claude quota footer, local tmux-compat CLI, escrow and WAL, layouts, worktrees and race, markdown recap panel.

Review order: docs/removed/README.md and the per-feature docs, then Sources/Workspace.swift and Sources/Panels/BrowserPanel.swift (the remote branches), then the release scripts under scripts/ and .github/workflows/. The rest is deletion fallout.

Test plan

  • CI unit tests pass on this branch.
  • test-e2e.yml passes; the removed test_ssh_remote_* suites are gone, the tmux-compat and browser suites still run.
  • Rolling release dry run (workflow_dispatch on release.yml) uploads the four-asset payload.
  • A Debug build restores an existing session file that still contains remote and inspector fields without error.
  • programa browser open https://example.com from a terminal inside the app opens a browser split and programa browser snapshot returns the page.

@arzafran
arzafran merged commit eb87ee2 into main Sep 2, 2026
9 checks passed
@arzafran
arzafran deleted the reductive-pass branch September 2, 2026 16:41
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