build/platform: macOS remains unsupported and plugin-host cfg paths lack CI #59
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
h-dv/code-index#59
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Decision record + tracking issue for the deliberate deferral of macOS release builds, and for the coverage hole that deferral leaves behind.
Decision: macOS builds are deferred
x86_64-apple-darwinandaarch64-apple-darwinare not built and not published. This is intentional, not a build failure. Every release from v0.8.4 through v0.9.0 has shipped four artifacts:The matrix entries in
.forgejo/workflows/release.ymlwere already commented out (not merelycontinue-on-error) because a matrix entry whoseruns-onlabel has no registered runner does not fail — it queues forever and hangs the whole run.continue-on-errortolerates failures, never never-scheduled jobs. That distinction is why commenting out is the correct mechanism here.The README/packaging steps still carry
macos-x86_64/macos-aarch64casearms. Those are deliberately kept pre-wired so re-enabling is a pure uncomment.The part that is NOT just cosmetic
There is a
windows-checkCI job that cross-compiles--target x86_64-pc-windows-gnuto keep Windows-only code honest. There is no macOS equivalent. So these paths are compiled by nothing, anywhere in CI:crates/indexer/src/watcher.rs—#[cfg(any(target_os = "windows", target_os = "macos"))]single recursive watch (FSEvents native subtree subscription), and theIN_Q_OVERFLOW/FSEvents overflow handlingcrates/daemon/src/lifecycle.rs—#[cfg(target_os = "macos")]stale-PID detection, and the Linux/macOSflockEWOULDBLOCKpathcrates/indexer/tests/watcher.rs/periodic_reconcile.rs— assertions gated oncfg!(target_os = "macos")that consequently never executeThese can bit-rot silently: a refactor that breaks the macOS arm produces a green CI run. Given the project's standing parity requirement (all languages × 3 OSes × 2 arches), this is the actual debt — not the missing binaries.
Why a cheap check-only gate does not work
cargo check --target aarch64-apple-darwinfrom the Linux container is not sufficient.cargo checkstill runs build scripts, and the seventree-sitter-*grammar crates each compile C viaccinbuild.rs. That needs a darwin C toolchain (osxcross + the Apple SDK), not justrustup target add. So the options are:macos, with Xcode CLT) → uncomment the two matrix entries; real builds and real tests.ci-base→ enables amacos-checkcompile gate, and possibly full cross-builds. Note the Apple SDK has redistribution constraints; this needs a licensing look before baking it into a shared image.Acceptance
.sha256publish, and add amacos-checkjob alongsidewindows-checkStatus
release.ymlheader comments and the release-notes footer are being corrected to state the deferral plainly (they previously described macOS as an attempted "best-effort" target, contradicting the disabled matrix entries).Runtime-plugin architecture impact
#79 introduces a new helper executable, process containment, handle inheritance, timeout/kill behavior and dynamic WASM runtime. None of those paths may be advertised on macOS while macOS has no compile or runtime gate.
Until a runner/toolchain exists:
This issue stays open as the explicit platform-support decision record.
build: macOS release builds DEFERRED — and the macOS cfg paths are compiled by nothing in CIto build/platform: macOS remains unsupported and plugin-host cfg paths lack CITriage 2026-09-06: LEFT OPEN — correctly, by its own acceptance. Option 3 was chosen; this issue is the standing record. Its text should say so.
The decision was taken, and the reason is measured rather than asserted
crates/daemon/tests/platform_support_claims.rs:1-64records the actualcargo check --target x86_64-apple-darwinfailure (tree-sitterbuild.rs→ccfor the target) as the cost of option 2. That is the right way to decline work — with the number that made declining correct, not an estimate..forgejo/workflows/release.yml:601-638still has both darwin entries commented out, deliberately, with the never-scheduled-job reasoning intact.The doc-honesty half landed and is gated
platform_support_claims.rs— 5 tests: the matrix parses both halves, no live Apple target, the README archive list matches the matrix in both directions, no document promises macOS, and a ledger of macOS-cfgfiles. Sibling:crates/daemon/tests/readme_security_claims.rs:103, sharingcrates/daemon/tests/support/claims.rs.The ledger has already earned its keep: it caught
crates/daemon/src/takeover.rsgrowing macOS arms after this issue was written. That is a fact this issue's body does not have.The CI hole is untouched, and that is the open half
.forgejo/workflows/ci.ymljobs arefmt, clippy, msrv, windows-check, deny, docs, test, test-daemon-leg, corpus, corpus-scale, plugin-path-cost, grammar-rebuild— nomacos-check. So the macOScfgpaths still compile nowhere, and the ledger records which files carry them rather than proving they build.What this issue's text should become
Option 3 means "keep this issue open as the standing record", so it stays open — but it currently reads as an undecided question. It should say:
platform_support_claims.rs:1-64.cfgcode.macos-checkjob, so thosecfgpaths are uncompiled — andtakeover.rshas joined the ledger since filing.That turns a stale open question into an accurate standing record, which is what option 3 asked for.
🤖 Triage lane, 2026-09-06, master
45cf6e4release_gate_e2e.rs:102-122still says musl is continue-on-error and that nothing runs the step-13 migration gate — both false since #84 #187release_gate_e2e.rs:102-122still says musl is continue-on-error and that nothing runs the step-13 migration gate — both false since #84 #187install.shas a release asset, so an installer can be pinned to a release instead of tracking master #261