From 59b793be76fe46126b3f9d6d4cc994c71b0a0441 Mon Sep 17 00:00:00 2001
From: Sergey Fedorov <barracuda@macos-powerpc.org>
Date: Sun, 19 Jul 2026 14:31:21 +0000
Subject: [PATCH 30/71] =?UTF-8?q?docs(macos):=20roadmap=20=E2=80=94=20add?=
 =?UTF-8?q?=20SSH=20and=20background=20image;=20defer=20audio/notification?=
 =?UTF-8?q?s?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Built-in SSH (vtpty::SshSession, engine-side/libssh2) and background image
(compositor draws ColorPalette::backgroundImage under the cells) added to the
roadmap. Audio/custom bell and desktop notifications moved to "very end" (both
need native reimplementation; notifications via Growl on 10.6). blur/vibrancy
noted as 10.10+-only, out of scope on 10.6.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeG2jwYMX5gdvvtUnx3PJa
---
 docs/macos-roadmap.md | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/docs/macos-roadmap.md b/docs/macos-roadmap.md
index aa73eccd..daee5c34 100644
--- a/docs/macos-roadmap.md
+++ b/docs/macos-roadmap.md
@@ -60,6 +60,24 @@ menu item / shortcut.
   path(s)). Standard terminal behavior.
 - Optionally **drag out** a selection as text (lower priority).
 
+### 6. Built-in SSH
+Contour ships `vtpty::SshSession` (a `Pty` subclass backed by libssh2, engine-side and
+Qt-free). A frontend selects it in place of the local `vtpty::Process`: construct an
+`SshSession` from an `SshHostConfig { hostname, port, username, ... }` plus a host-key
+verification callback (surface an AppKit dialog for unknown/changed host keys). Everything
+downstream (Terminal, rendering, input) is identical to the local session. Moderate frontend
+work; nothing platform-blocked (libssh2 is available on MacPorts).
+
+### 7. Background image
+Contour's `ColorPalette::backgroundImage` (`BackgroundImage { path-or-data, opacity=0.5,
+blur }`) is stored in the engine but was *drawn* by the deleted Qt RhiRenderer — so on this
+port it is entirely a compositor job: load the image and draw it scaled under the cells at
+the configured opacity, in `execute()`, before/under the cell backgrounds. This composes
+naturally with how cell backgrounds already work (only non-default backgrounds are painted,
+so default-background areas let the image show through). Implement in the CPU
+`SoftwareRenderTarget` first, then the GL backend. `blur` is optional (skippable on 10.6).
+Config exposes the image path + opacity (fits the preferences window, item 2).
+
 ## Additional low-cost features worth adding (from contour, cheap here)
 
 These are cheap because the engine already implements the behavior; only frontend wiring or
@@ -95,9 +113,19 @@ This is the performance path (CPU per-pixel blending on every keystroke/`cat` is
 slow PPC memory bandwidth). The CPU backend was built first deliberately as the correctness
 reference the GL backend is validated against.
 
+## Deferred to the very end (low priority)
+
+- **Audio / custom bell sounds** — contour uses Qt Multimedia (won't port). Reimplement
+  natively with `NSSound` for a custom bell (the default `NSBeep` is already wired). Not
+  important; do last.
+- **Desktop notifications** — contour's `FreeDesktopNotifier` is Linux D-Bus (won't port).
+  Native `NSUserNotification` is 10.8+; on 10.6, **Growl** is the option (adds a dependency).
+  Not important; do last.
+
 ## Explicitly out of scope for now (from contour, deferred)
 
 Tabs and split panes (engine model `vtmux` is present and linked, so the frontend can add
 them later — nice-to-have, not required now); tmux control mode; the QML settings pages;
-shell-integration niceties beyond the basics; blur-behind / vibrancy; per-profile config
-files (a minimal preferences store covers the near-term need).
+shell-integration niceties beyond the basics; blur-behind / vibrancy (needs macOS 10.10+, no
+API on 10.6; cosmetic); per-profile config files (a minimal preferences store covers the
+near-term need).
