Skip to content

Cross-platform impl (P2 Linux-X11 + P3 macOS) + README/release-notes/docs overhaul - #15

Merged
Haaaiawd merged 8 commits into
masterfrom
feat/readme-release-notes-and-cross-platform
Oct 7, 2026
Merged

Haaaiawd merged 8 commits into
masterfrom
feat/readme-release-notes-and-cross-platform

Conversation

@Haaaiawd

@Haaaiawd Haaaiawd commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Summary

Brings the engine/GUI to Linux-X11 and macOS behind the three platform traits, rewrites the README and release notes, and adds platform/component docs — with honest verification status throughout (Windows is the only machine-verified platform).

Cross-platform (P1–P3)

  • service/src/platform/: OS/session detection, status_json() (wayland_degraded, no_display, ax_permission_missing), per-OS config/db dirs, IPC endpoints, 0700/0600 runtime-dir perms
  • Linux X11: x11rb foreground context · global-hotkey · arboard · enigo/XTEST injector · XDG autostart
  • macOS: AX write + clipboard⌘V fallback injector · AXIsProcessTrusted probe + settings-page onboarding · NSWorkspace context · .icns + template tray icon
  • IPC: one-line protocol preserved on both transports — named pipes (Windows) / Unix sockets (Linux+macOS); debounce still latches only after successful sends
  • Windows zero-regression: windows_impl logic untouched, only cfg-gated
  • Wayland: explicit degradation surface, not silent failure; P4 (portals/ydotool) intentionally out of scope — documented

GUI

  • Settings → Platform group: status line, AX permission row (macOS only), launch-at-login switch (XDG/LaunchAgent/Run key via tauri-plugin-autostart), all strings bilingual
  • Null-safe platform-status handling (a null response no longer throws → misleading global toast)

Docs & releases

  • README rewritten against verified facts; platform matrix has an explicit verification column
  • docs/PLATFORMS.md: impl table + verification matrix; docs/COMPONENTS.md: modules/design-system/components/i18n/icons/tests
  • CHANGELOG gains the missing 2.0.3 entry; release notes v2.0.0–v2.0.4 rewritten with symptom → root cause → fix
  • Screenshots: real UI rendered headless (same stub mechanism as e2e), provenance labeled
  • CI: new rust-check job compiles the workspace on Windows/Linux/macOS

Test plan

  • cargo check --workspace — Linux (local sysroot) clean
  • cargo clippy --workspace — no errors; new code warning-free
  • cargo test -p service — 9/9
  • Playwright: hotkey_recorder 22/22, hotkey_status 10/10, wheel_sort_drag 17/17, no_tauri 13/13
  • scripts/check_capabilities.mjs — OK
  • Cross-platform CI jobs green on this PR
  • Linux/macOS runtime — NOT machine-verified (documented in PLATFORMS.md; first-run feedback welcome)

Generated with Devin

haa and others added 8 commits October 7, 2026 08:41
Engine/platform boundary is now three traits (Injector/Context/Hotkey)
with per-OS *_impl modules; the service main loop stays platform-neutral
and remains an embedded thread, not a daemon.

- platform/mod.rs: os()/session() detection, status_json() for the GUI
  (wayland_degraded / no_display / ax_permission_missing notes), per-OS
  config+db dirs, ipc endpoints, runtime dir 0700 / socket 0600
- Linux X11: x11rb foreground context, global-hotkey worker-owned pump,
  arboard clipboard, enigo/XTEST injector with refocus, XDG paths
- macOS: AX write + clipboard+Cmd-V fallback injector, AXIsProcessTrusted
  probe, NSWorkspace frontmost context, global-hotkey backend
- IPC: one-line protocol preserved on both transports — named pipes on
  Windows, Unix domain sockets elsewhere (selector + inject endpoints)
- Wayland: explicit degradation reporting instead of silent failure
- Windows impls only moved behind cfg — logic unchanged (zero-regression
  constraint); debounce still latches only after successful sends
- GUI side: ipc_listener + inject_pipe_client get unix transports;
  get_platform_status / request_ax_permission / launch-at-login commands;
  tauri-plugin-autostart (XDG desktop file / LaunchAgent / Run key)

Verified locally on Linux: cargo check --workspace, clippy, service
tests 9/9. Linux/macOS runtime behavior NOT machine-verified — see
docs/PLATFORMS.md for the honest verification matrix.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Settings gains a Platform group driven by get_platform_status:
- status line: OS + session + capability state (ok / wayland degraded /
  no display / ax permission missing), raw JSON on hover for bug reports
- AX permission row appears only when macOS reports ax_permission_missing;
  Grant button re-triggers the system prompt, then re-polls
- Launch-at-login switch backed by the OS registration, rolls back on
  failure (not a stored preference)

Null-safe status handling — a missing/empty response degrades to an error
state line instead of a thrown TypeError (which used to surface as a
misleading global toast and break e2e mocks). All new strings bilingual.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
- scripts/make_icons.py: derives all bundle assets from the brand master
  — Windows .ico, real PNG-payload .icns for macOS, linux PNG set, and a
  monochrome template tray icon (macOS menu-bar template-image rule)
- tauri.conf.json: icon list now includes icns/ico/pngs; bundle targets
  stay "all" so tauri build emits deb+AppImage on Linux, app+dmg on macOS
- macOS tray uses icon_as_template + the template PNG so it tracks
  light/dark menu bar instead of rendering as a colored blob
- CI: new rust-check job compiles the workspace on windows-latest,
  ubuntu-latest (with GTK/WebKit sys deps) and macos-latest — compile
  evidence for the un-verified platforms without claiming runtime tests
- gen/schemas: regenerated by tauri-build incl. new linux-schema.json
- scripts/screenshots.py: stubbed-__TAURI__ renderer for docs screenshots

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…nshots

README rewritten against verified code facts:
- platform matrix with honest verification column (Windows = only
  machine-verified platform; Linux/macOS compile+test green, no runtime
  verification — stated explicitly, not footnoted)
- per-OS install paths incl. Wayland degrade + macOS AX onboarding +
  unsigned/notarization caveats; config/db locations per platform;
  IPC transports; design-doc index; real project structure
- screenshots: real UI rendered headless in Chromium with stubbed
  __TAURI__ (same mechanism as the e2e suites), provenance labeled —
  no fake "looks like" imagery
- un-ignore docs/ (was a blanket scratch rule; it now holds real docs)

docs/PLATFORMS.md: per-platform impl table (trait → file), Wayland
degrade contract, macOS permission model, IPC protocol, capability x
platform x verification matrix
docs/COMPONENTS.md: modules, design tokens extracted from styles.css,
component inventory (btn/switch/seg/drawer/toast/recorder/wheel/hk-state),
i18n mechanism, icon pipeline, e2e map
CHANGELOG: fills the missing 2.0.3 entry (capabilities root cause —
symptom → root cause → fix, matching house style)

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
macOS CI caught what local Linux checks can't see (all macOS code is
cfg'd out here):
- `extern "C"` blocks must be `unsafe extern "C"` in edition 2024
  (macos_ax.rs ApplicationServices FFI + unix_impl.rs GCD dispatch FFI)
- context/macos_impl.rs shares the AX helpers → macos_ax is now pub(crate)

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
macOS CI round 2 found:
- WebviewWindowBuilder::transparent is gated behind tauri's
  macos-private-api feature (undocumented WKWebView API — acceptable:
  ships unsigned outside the App Store; required for the wheel overlay)
- Image::from_bytes requires image-png
- both added as a cfg(macos)-scoped tauri dep so Windows/Linux feature
  trees stay byte-identical
- edition-2024 unsafe_op_in_unsafe_fn in macOS context impl wrapped

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@Haaaiawd
Haaaiawd merged commit 0f648d0 into master Oct 7, 2026
5 checks passed
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