build: defer macOS release builds explicitly (#59) #60

Closed
buildagent wants to merge 0 commits from docs/defer-macos-build into master
Member

Closes nothing; documents a deferral and files the debt as #59.

macOS artifacts have not shipped since v0.8.4, but release.yml told two contradictory stories: the header listed macos-x86_64/macos-aarch64 as attempted "best-effort" targets, while the matrix entries themselves were commented out. This makes the deferral the documented position rather than an implicit gap.

Changes

  • release.yml header — split SHIPPED (4 artifacts) from DEFERRED (both macOS targets + windows-aarch64).
  • Recorded why commenting out is the correct mechanism, because it reads like something to tidy up: a matrix entry whose runs-on label has no registered runner does not fail — it queues forever and hangs the whole run. continue-on-error tolerates failures, never never-scheduled jobs. Converting these to optional: true would break releases.
  • Release notes now state plainly that macOS is not built and link #59, replacing "macOS builds are added once a macOS runner is registered", which read as an imminent promise. Also dropped "the table lists all attempted targets" — every listed platform is actually published.
  • README — lists the musl archive (it ships and was omitted) and points macOS users at building from source.

The debt this surfaces

Not the missing binaries — the untested code. Windows has the windows-check cross-compile gate; macOS has no equivalent, so the #[cfg(target_os = "macos")] paths in watcher.rs (FSEvents recursive watch) and lifecycle.rs (flock / stale-PID) are compiled by nothing in CI and can bit-rot green.

A check-only gate is not a cheap substitute: cargo check still runs build scripts, and the seven tree-sitter-* grammar crates each compile C via cc, so even checking needs a darwin C toolchain (osxcross + Apple SDK). #59 lays out the three options.

Verification

No behaviour change intended, and checked rather than assumed:

  • YAML parsed — the enabled matrix is the same 4 entries (linux-x86_64, linux-x86_64-musl optional, linux-aarch64, windows-x86_64).
  • The release-notes BODY construction was executed with TAG/SERVER_URL/REPO set, and the rendered markdown inspected — shell string concatenation across ~15 BODY+= lines is easy to get subtly wrong.
  • Confirmed no stale "best-effort"/"attempted targets" wording remains.

The macos-* case arms in the packaging and README steps are deliberately kept so re-enabling is a pure uncomment.

🤖 Generated with Claude Code

https://claude.ai/code/session_012MHQAsEFs3eLYoSKygkmzy

Closes nothing; documents a deferral and files the debt as #59. macOS artifacts have not shipped since v0.8.4, but `release.yml` told two contradictory stories: the header listed `macos-x86_64`/`macos-aarch64` as attempted "best-effort" targets, while the matrix entries themselves were commented out. This makes the deferral the documented position rather than an implicit gap. ## Changes - **`release.yml` header** — split SHIPPED (4 artifacts) from DEFERRED (both macOS targets + `windows-aarch64`). - **Recorded why commenting out is the correct mechanism**, because it reads like something to tidy up: a matrix entry whose `runs-on` label has no registered runner does *not* fail — it queues forever and hangs the whole run. `continue-on-error` tolerates *failures*, never *never-scheduled* jobs. Converting these to `optional: true` would break releases. - **Release notes** now state plainly that macOS is not built and link #59, replacing _"macOS builds are added once a macOS runner is registered"_, which read as an imminent promise. Also dropped "the table lists all attempted targets" — every listed platform is actually published. - **README** — lists the musl archive (it ships and was omitted) and points macOS users at building from source. ## The debt this surfaces Not the missing binaries — the untested code. Windows has the `windows-check` cross-compile gate; macOS has no equivalent, so the `#[cfg(target_os = "macos")]` paths in `watcher.rs` (FSEvents recursive watch) and `lifecycle.rs` (flock / stale-PID) are compiled by **nothing** in CI and can bit-rot green. A check-only gate is not a cheap substitute: `cargo check` still runs build scripts, and the seven `tree-sitter-*` grammar crates each compile C via `cc`, so even checking needs a darwin C toolchain (osxcross + Apple SDK). #59 lays out the three options. ## Verification No behaviour change intended, and checked rather than assumed: - YAML parsed — the enabled matrix is the same 4 entries (`linux-x86_64`, `linux-x86_64-musl` optional, `linux-aarch64`, `windows-x86_64`). - The release-notes `BODY` construction was **executed** with `TAG`/`SERVER_URL`/`REPO` set, and the rendered markdown inspected — shell string concatenation across ~15 `BODY+=` lines is easy to get subtly wrong. - Confirmed no stale "best-effort"/"attempted targets" wording remains. The `macos-*` `case` arms in the packaging and README steps are deliberately **kept** so re-enabling is a pure uncomment. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_012MHQAsEFs3eLYoSKygkmzy
build: defer macOS release builds explicitly (#59)
All checks were successful
CI / cargo fmt (pull_request) Successful in 21s
CI / OSS corpus (nightly) (pull_request) Has been skipped
CI / OSS corpus tier-3 scale (weekly) (pull_request) Has been skipped
CI / cargo clippy (pull_request) Successful in 49s
CI / cargo check (MSRV 1.88) (pull_request) Successful in 1m49s
CI / cargo check (windows-gnu) (pull_request) Successful in 1m51s
CI / cargo deny (pull_request) Successful in 3m11s
CI / cargo test (pull_request) Successful in 2m33s
98fe85c84d
macOS artifacts have not shipped since v0.8.4, but the workflow told two
contradictory stories: the header listed macos-x86_64/macos-aarch64 as
attempted "best-effort" targets while the matrix entries themselves were
commented out. Make the deferral the documented position.

- release.yml header: split SHIPPED (4 artifacts) from DEFERRED (both
  macOS targets + windows-aarch64), and record WHY commenting out is the
  right mechanism — a matrix entry whose runner label has no registered
  runner never fails, it queues forever and hangs the run, and
  continue-on-error tolerates failures rather than never-scheduled jobs.
  Someone will otherwise "simplify" this back into `optional: true`.
- Record the real debt: unlike Windows, which has the `windows-check`
  cross-compile gate, the #[cfg(target_os = "macos")] paths in watcher.rs
  (FSEvents recursive watch) and lifecycle.rs (flock / stale-PID) are
  compiled by nothing in CI and can bit-rot green. A check-only gate is
  not a cheap fix: `cargo check` runs build scripts, and the seven
  tree-sitter-* grammars compile C via `cc`, so even checking needs a
  darwin C toolchain.
- Release notes: state plainly that macOS is not built and point at #59,
  instead of "added once a macOS runner is registered", which read as an
  imminent promise. Also stop calling the table "all attempted targets" —
  every listed platform is actually published.
- README: list the musl archive (it ships and was omitted) and tell macOS
  users to build from source.

No behaviour change: the enabled matrix is the same 4 entries, verified
by parsing the YAML, and the rendered notes body was checked by
executing the BODY construction.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012MHQAsEFs3eLYoSKygkmzy
dhoyer closed this pull request 2026-08-18 13:57:05 +02:00
Author
Member

Bookkeeping correction: this shows as closed without merge, which misrepresents what happened. The content DID ship.

It auto-closed at 13:57 today when the docs/defer-macos-build branch was deleted during a branch cleanup. By then its content was already on master — merged manually as d7f8f52 ("Merge: defer macOS release builds explicitly (#59)"), released in v0.14.0.

The merge hit one conflict in release.yml's header, resolved by keeping BOTH paragraphs: master's (the windows-gate and what it does and does not prove — added after this branch was cut, so this branch could not have mentioned it) and this branch's (why macOS is deferred and why commenting out is the only mechanism that works). The one sentence present on both sides — windows-aarch64 needing a Windows+MSVC runner — is kept once.

Verified after the merge: YAML parses, the enabled matrix is still the same four entries, and v0.14.0 published exactly those four artifacts.

#59 stays open, correctly. This PR said so itself — "Closes nothing; documents a deferral and files the debt as #59." The documentation shipped; the debt it names (the #[cfg(target_os = "macos")] paths in watcher.rs and lifecycle.rs compiled by nothing in CI) is untouched.

Bookkeeping correction: this shows as **closed without merge**, which misrepresents what happened. The content DID ship. It auto-closed at 13:57 today when the `docs/defer-macos-build` branch was deleted during a branch cleanup. By then its content was already on `master` — merged manually as **`d7f8f52`** ("Merge: defer macOS release builds explicitly (#59)"), released in **v0.14.0**. The merge hit one conflict in `release.yml`'s header, resolved by keeping BOTH paragraphs: master's (the `windows-gate` and what it does and does not prove — added after this branch was cut, so this branch could not have mentioned it) and this branch's (why macOS is deferred and why commenting out is the only mechanism that works). The one sentence present on both sides — `windows-aarch64` needing a Windows+MSVC runner — is kept once. Verified after the merge: YAML parses, the enabled matrix is still the same four entries, and v0.14.0 published exactly those four artifacts. **#59 stays open**, correctly. This PR said so itself — *"Closes nothing; documents a deferral and files the debt as #59."* The documentation shipped; the debt it names (the `#[cfg(target_os = "macos")]` paths in `watcher.rs` and `lifecycle.rs` compiled by nothing in CI) is untouched.
All checks were successful
CI / cargo fmt (pull_request) Successful in 21s
CI / OSS corpus (nightly) (pull_request) Has been skipped
CI / OSS corpus tier-3 scale (weekly) (pull_request) Has been skipped
CI / cargo clippy (pull_request) Successful in 49s
CI / cargo check (MSRV 1.88) (pull_request) Successful in 1m49s
CI / cargo check (windows-gnu) (pull_request) Successful in 1m51s
CI / cargo deny (pull_request) Successful in 3m11s
CI / cargo test (pull_request) Successful in 2m33s

Pull request closed

Sign in to join this conversation.
No reviewers
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
h-dv/code-index!60
No description provided.