cgagentharness-release

Build, verify and prepare CG-agent-harness macOS desktop release artifacts, including universal Apple Silicon and Intel binaries and GitHub Bundle workflow provenance.

SKILL.md

GitHub

Release the macOS desktop

Follow AGENTS.md; read the README-linked docs/DESKTOP.md, docs/RELEASING.md, scripts/package-desktop.sh, scripts/verify-desktop-bundle.sh and the current desktop/Bundle/release workflows. Package committed source so Resources/COMMIT is meaningful; identify the release version as well as the source SHA. CGAH_ALLOW_DIRTY=1 is only for marked development artifacts.

Build on Apple Silicon macOS with installed Xcode CLT and rustup toolchains from both toolchain files. Install aarch64-apple-darwin and x86_64-apple-darwin standard libraries for both toolchains before a universal build. Use rustup Cargo on PATH. Run scripts/package-desktop.sh --universal (optional --dmg).

The critical order is backend slices -> lipo -> sign universal backend -> compile both desktop slices embedding that exact whole-file SHA256 -> lipo desktop -> sign shell/bundle. Never re-sign the sidecar after its digest is embedded. The backend remains a separate child; native commands must not become browser capabilities.

Verify the ZIP checksum, extract to a fresh directory with spaces, and run scripts/verify-desktop-bundle.sh '<extracted app>' universal '<release version>'. Verify the bundled version matches the planned release and both executables contain arm64 and x86_64, nested signatures, resources and system-only linkage. Run scripts/test-desktop-backend.py with CGAH_TEST_BINARY set to the packaged backend. Run desktop policy tests and both dependency policies.

Launch the actual app with a disposable CGAGENTHARNESS_HOME, distinct from any operator home. Record app PID, owned sidecar/listener, local model chat and shutdown. Do not treat a shared listener as this bundle's process. GUI acceptance requires actual WKWebView evidence; HTTP tests do not prove pixels, focus or native dialogs. Intel cross-compilation, Rosetta execution and native Intel testing are different claims. Do not silently install Rosetta or change TCC settings to fill an evidence gap.

Record acceptance limits before publication. Bundle calls reusable desktop CI; tagged releases reuse it too. Match remote SHA, workflow run, artifact COMMIT and checksums. PRs produce no Bundle artifacts; for an unmerged candidate, run desktop.yml by hand on its branch. Scheduled/manual publication requires main and a successful Bundle run at that SHA. The release planner rejects prerelease tags. Check existing runs, tags and releases before dispatch. Publication follows explicit user authorization. Never overwrite release assets or tags after an ambiguous result. Ad-hoc signing is not Developer ID signing or notarization; state that limitation.