Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
b062bd0
feat(gpui): gpui render backend + macos-app host with native text layout
doodlewind Aug 17, 2026
3e963a1
feat(bench): desktop editor benchmark harness + gpui shaping caches
doodlewind Aug 17, 2026
bb11334
feat(bench): gpui vs Tauri vs Electron results + tarball guard for be…
doodlewind Aug 17, 2026
c1cf367
perf(note): browser-style caret blink that demand rendering can skip
doodlewind Aug 17, 2026
09770ad
docs(bench): refresh desktop numbers after the square-wave caret
doodlewind Aug 17, 2026
d263dca
feat(note): double-click word selection + truthful backend copy
doodlewind Aug 18, 2026
17e1881
fix(gpui): review — exact TEXT_RUN words, one text provider per node,…
doodlewind Aug 18, 2026
73c102f
refactor(bench): split the desktop benchmark into its own PR
doodlewind Aug 18, 2026
0340e8d
fix(gpui): review round 2 — provider self-healing, truthful macos-app…
doodlewind Aug 18, 2026
d5a5401
ci(macos): wasm target + rustfmt component for the TS test steps
doodlewind Aug 18, 2026
ece6ad1
fix(note): windowed header drops the wordmark; roomier narrow-width p…
doodlewind Aug 18, 2026
5798ec9
test(note): the standalone smoke pins sample content, not widget chrome
doodlewind Aug 18, 2026
cca2d6e
fix(gpui): review round 3 — one provider gate with zero stale frames,…
doodlewind Aug 18, 2026
9050fa0
fix(gpui): review round 4 residue — deny-by-default svcOpen, gated RE…
doodlewind Aug 18, 2026
80af200
docs(gpui): review round 5 — invariant wording, surface tests in CI, …
doodlewind Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: macOS gpui backend

# The first macOS lane in CI: the gpui backend (engine/backends/gpui) and
# the macos-app host (hosts/macos) are standalone crates excluded from the
# ubuntu release workspace, so this is the only place they build. The lane
# also runs the TS surfaces its path filter watches (contract drift, the
# platform/note/font-bake tests, and a real macos-app plan+bundle build of
# the note). gpui needs a window server for anything more; runtime behavior
# is pinned by the note --proof acceptance run (docs/BACKENDS.md).

on:
pull_request:
paths:
- ".github/workflows/macos.yml"
- "contracts/spec/**"
- "engine/core/**"
- "engine/crates/pocket-ui-surface/**"
- "engine/backends/gpui/**"
- "hosts/macos/**"
- "tools/macos.ts"
- "apps/note/**"
- "framework/compiler/**"
- "assets/fonts/**"
- "tests/platform-contracts.test.ts"
- "tests/note.test.ts"
- "tests/font-bake.test.ts"
- "tests/npm-package.test.ts"
- "package.json"
push:
branches: [main]
paths:
- ".github/workflows/macos.yml"
- "contracts/spec/**"
- "engine/core/**"
- "engine/crates/pocket-ui-surface/**"
- "engine/backends/gpui/**"
- "hosts/macos/**"
- "tools/macos.ts"
- "apps/note/**"
- "framework/compiler/**"
- "assets/fonts/**"
- "tests/platform-contracts.test.ts"
- "tests/note.test.ts"
- "tests/font-bake.test.ts"
- "tests/npm-package.test.ts"
- "package.json"
workflow_dispatch: {}

permissions:
contents: read

jobs:
rust:
name: gpui backend + host
runs-on: macos-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v7

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
# note.test.ts boots the sim host, which builds the wasm core.
targets: wasm32-unknown-unknown

- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine/backends/gpui
hosts/macos
engine/wasm

- uses: oven-sh/setup-bun@v2

- name: Install JS dependencies
run: bun install --frozen-lockfile

- name: Contract + note + platform + npm package tests
run: bun test tests/platform-contracts.test.ts tests/note.test.ts tests/font-bake.test.ts tests/npm-package.test.ts && bun tests/contract.ts

- name: Compile the note against macos-app (plan + bundle + pak)
run: |
bun -e '
import { validateAndResolveBuildPlan } from "./framework/src/manifest/resolve.ts";
import { mkdirSync } from "node:fs";
const m = await Bun.file("apps/note/pocket.json").json();
const r = validateAndResolveBuildPlan(m, { target: "macos-app" });
if (!r.ok) throw new Error(JSON.stringify(r.diagnostics));
mkdirSync(".pocket/macos-app", { recursive: true });
await Bun.write(".pocket/macos-app/note-main.plan.json", JSON.stringify(r.plan, null, 2) + "\n");'
bun tools/build.ts --plan=.pocket/macos-app/note-main.plan.json

- name: Test core (TEXT_RUN + native measure gates)
run: cargo test --locked --manifest-path engine/core/Cargo.toml

- name: Test ui surface (svcOpen deny-by-default, string ops)
run: cargo test --locked --manifest-path engine/Cargo.toml -p pocket-ui-surface

- name: rustfmt
run: |
cargo fmt --check --manifest-path engine/backends/gpui/Cargo.toml
cargo fmt --check --manifest-path hosts/macos/Cargo.toml

- name: Clippy gpui backend
run: cargo clippy --locked --manifest-path engine/backends/gpui/Cargo.toml -- -D warnings

- name: Clippy macos-app host
run: cargo clippy --locked --manifest-path hosts/macos/Cargo.toml -- -D warnings

- name: Build macos-app host
run: cargo build --locked --manifest-path hosts/macos/Cargo.toml
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,6 @@ hosts/apple/ns-shell/platforms/
hosts/apple/ns-shell/hooks/
hosts/apple/ns-shell/src/assets/pocket/
hosts/apple/ns-shell/package-lock.json

# tauri codegen (regenerated by tauri-build at compile time)
tools/bench-desktop/tauri/src-tauri/gen/
Loading