Skip to content

Commit fe45f41

Browse files
charliekclaude
andcommitted
docs: record the possible mac-iced direction + freeze M5
Charlie (2026-08-05): replacing the Swift app with Iced is now a possible direction, not a non-goal — not committed, lots of testing first, Swift stays the daily driver. Consequences captured: new Iced native surfaces get per-OS backend seams (notifications are the first instance — Linux D-Bus ships, the macOS UNUserNotificationCenter backend waits for a real bundle identity rather than half-shipping unbundled); M5's facade exploration freezes at don't-invest-don't- delete until the direction resolves; the eventual evaluation vehicle (parallel-install signed DMG) and its robustness gate are sketched so the future pass starts from criteria, not memory. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WLKWsLV45DAk61xG6Utj3e
1 parent 76950ae commit fe45f41

1 file changed

Lines changed: 34 additions & 1 deletion

File tree

docs/development/iced-migration-roadmap.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,40 @@ plan 011/slice 3c replaced with persisted 160-400 pt). The audit should
240240
re-verify every row against current behavior, close what shipped, and
241241
decide [#284] (visual-parity CI gate: required for M4 or waived).
242242

243-
### M5 — Rust under Swift (exploration, not a commitment)
243+
### Possible direction — macOS side-by-side evaluation (not committed)
244+
245+
Recorded 2026-08-05: the Iced work has landed better than expected, and
246+
replacing the Swift app is now a *possible* direction rather than a
247+
non-goal — but it is not guaranteed, a lot of testing stands between here
248+
and any commitment, and **Swift remains the production daily driver
249+
regardless** (guardrail #1 unchanged). Two consequences today:
250+
251+
1. **Design Iced platform-clean now.** New roost-iced capability with a
252+
native surface gets a per-OS backend seam rather than a Linux-only
253+
shape — notifications (slice 3f) are the first instance: Linux D-Bus
254+
ships; the macOS backend (`UNUserNotificationCenter`, which needs a
255+
real .app bundle identity + code signature) is deferred, not
256+
designed out. No macOS backend gets half-shipped from an unbundled
257+
binary.
258+
2. **M5 is frozen pending this direction** — see below.
259+
260+
If the direction firms up, the evaluation vehicle is a parallel-install
261+
signed+notarized DMG (the `ai.stridelabs.Roost.iced` profile is already
262+
fully isolated for side-by-side running), gated on a robustness pass:
263+
release-profile CI coverage for Iced, the [#299] swash release-hang fix
264+
(a Mac daily driver meets the full macOS font universe), a panic-hook
265+
crash/feedback story, and a mac-UX gap audit (menu bar, cmd-key
266+
conventions, dock badge — plus 3e's vibrancy spike). Guardrail #3's
267+
"absent from release artifacts" would be amended consciously at that
268+
point (separate opt-in artifact, never bundled into the Swift release).
269+
270+
### M5 — Rust under Swift (exploration, frozen)
271+
272+
Frozen 2026-08-05 pending the possible-direction note above: if a
273+
full Iced replacement is evaluated, a Swift-facing FFI boundary is
274+
likely wasted investment — [#286] holds at "don't invest, don't
275+
delete" until the direction resolves. Original exploration plan kept
276+
below for when/if it resumes.
244277

245278
The Swift app's polish and daily use make replacement remote; the question
246279
is where shared Rust reduces duplication *without* slowdowns.

0 commit comments

Comments
 (0)