ci: compile-check the agent-gui feature on macOS (VA-55 follow-up) #149

Merged
longjacksonle merged 1 commit from chore/VA-55-macos-feature-ci into main 2026-07-15 19:50:27 +02:00

Closes the VA-55 validation gap: the macOS agent-gui path was compiled nowhere in CI.

Why

The Linux CI and a cross-target cargo check both stop short of the macOS GUI code because notify-rust's mac-notification-sys builds Objective-C and objc2 links AppKit, needing the real macOS SDK. build-macos.yml only builds the default features (agent-gui off), so a macOS regression in the tray / NSWindowSharingNone / IPC / consent code could ship unnoticed. This was the "needs a Mac" gap flagged in the VA-55 PR.

What

A Check macOS features workflow that runs on the dedicated macOS runner (VA-90):

cargo check --package vervain-agent --features agent-gui --target x86_64-apple-darwin

cargo check (no final link) still runs every build script, so it compiles the ObjC/C the cross-check cannot and type-checks the feature-gated code - enough to enforce AC#1 ("builds on macOS").

Trigger scope (deliberate)

  • main pushes + v* tags, paths-gated (crates/**, Cargo.toml, Cargo.lock, rust-toolchain.toml, the workflow file).
  • No pull_request trigger - the paths filter matches most code PRs, so a PR trigger would serialise nearly every change through the single macOS runner (VA-136 contention). Enforcement is post-merge; a pull_request trigger can be added later if pre-merge coverage is worth the runner load.
  • Concurrency cancel-in-progress: true de-duplicates the release merge-commit + tag double-fire, since a one-commit compile-check only needs to run once (unlike the build-macos publish, which must run both contexts).

Note

Merging this is the first real macOS compile of the VA-55 GUI and VA-138 tunnel-keymap code (previously validated on Linux + an isolated objc2 cross-check). If the runner surfaces a macOS-only compile error, I'll fix forward.

🤖 Generated with Claude Code

Closes the VA-55 validation gap: the macOS `agent-gui` path was compiled nowhere in CI. ## Why The Linux CI and a cross-target `cargo check` both stop short of the macOS GUI code because notify-rust's `mac-notification-sys` builds Objective-C and `objc2` links AppKit, needing the real macOS SDK. build-macos.yml only builds the default features (agent-gui off), so a macOS regression in the tray / NSWindowSharingNone / IPC / consent code could ship unnoticed. This was the "needs a Mac" gap flagged in the VA-55 PR. ## What A `Check macOS features` workflow that runs on the dedicated macOS runner (VA-90): ``` cargo check --package vervain-agent --features agent-gui --target x86_64-apple-darwin ``` `cargo check` (no final link) still runs every build script, so it compiles the ObjC/C the cross-check cannot and type-checks the feature-gated code - enough to enforce AC#1 ("builds on macOS"). ## Trigger scope (deliberate) - **main pushes + `v*` tags, paths-gated** (`crates/**`, `Cargo.toml`, `Cargo.lock`, `rust-toolchain.toml`, the workflow file). - **No `pull_request` trigger** - the paths filter matches most code PRs, so a PR trigger would serialise nearly every change through the single macOS runner (VA-136 contention). Enforcement is post-merge; a `pull_request` trigger can be added later if pre-merge coverage is worth the runner load. - Concurrency `cancel-in-progress: true` de-duplicates the release merge-commit + tag double-fire, since a one-commit compile-check only needs to run once (unlike the build-macos publish, which must run both contexts). ## Note Merging this is the first real macOS compile of the VA-55 GUI and VA-138 tunnel-keymap code (previously validated on Linux + an isolated objc2 cross-check). If the runner surfaces a macOS-only compile error, I'll fix forward. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ci: compile-check the agent-gui feature on macOS (VA-55 follow-up)
All checks were successful
Check / fmt + clippy + tests (pull_request) Successful in 4m32s
Create release / Create release from merged PR (pull_request) Has been skipped
43314fb685
The macOS `agent-gui` path (VA-55: AppKit NSStatusItem tray, NSWindowSharingNone capture exclusion, unix-socket IPC, plus the daemon-side gui_ipc/consent/assistance wiring) cannot be compiled by the Linux CI or a cross-target `cargo check`: notify-rust's mac-notification-sys builds Objective-C and objc2 links AppKit, both of which need the real macOS SDK. build-macos.yml only builds the default features, so `agent-gui` was compiled nowhere in CI and a macOS regression could ship unnoticed.

Add a `Check macOS features` workflow that runs `cargo check --package vervain-agent --features agent-gui --target x86_64-apple-darwin` on the dedicated macOS runner (VA-90). `check` (no final link) still runs every build script, so it compiles the ObjC/C the cross-check cannot and type-checks the feature-gated code, enforcing the "builds on macOS" acceptance bar for VA-55.

Triggers on main pushes + `v*` tags, paths-gated. Pull requests are intentionally excluded to spare the single macOS runner: the paths filter matches most code PRs, so a PR trigger would serialise nearly every change through that one runner (VA-136). A fixed concurrency group with cancel-in-progress:true de-duplicates the merge-commit + tag double-fire at release, since a compile-check of one commit only needs to run once.

Merging this is also the first real macOS compile of the VA-55 GUI and VA-138 tunnel-keymap code, which until now was validated only on Linux plus an isolated objc2 cross-check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYb1fkK32XQdwkGkStxXR9
Signed-off-by: longjacksonle <longjacksonle@gmail.com>
longjacksonle deleted branch chore/VA-55-macos-feature-ci 2026-07-15 19:50:27 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/vervain-agent!149
No description provided.