Skip to content

fix(desktop): gate Share Compute when mesh-llm is not packaged (#3841) - #3914

Open
Chessing234 wants to merge 6 commits into
block:mainfrom
Chessing234:fix/mesh-llm-unavailable-linux-3841
Open

fix(desktop): gate Share Compute when mesh-llm is not packaged (#3841)#3914
Chessing234 wants to merge 6 commits into
block:mainfrom
Chessing234:fix/mesh-llm-unavailable-linux-3841

Conversation

@Chessing234

Copy link
Copy Markdown
Contributor

Summary

  • Official Linux/Windows desktop packages build without --features mesh-llm, so Share Compute always failed with an opaque stub error (#3841).
  • Add a mesh_feature_enabled Tauri probe, clearer stub copy, and a Settings → Compute empty state that explains the packaging gap instead of offering a dead-end toggle.
  • Document the macOS-only packaging choice in the shared-compute runbook and Linux release/canary workflows (no packaging change yet — CI llama builds still target Metal).

Test plan

  • node --test desktop/src/features/mesh-compute/isMeshFeatureDisabledError.test.mjs
  • Desktop built without mesh-llm: Settings → Compute shows the unavailable empty state (data-testid=settings-mesh-share-unavailable), no toggle
  • just mesh=1 dev / macOS release-style build: Share Compute card behaves as before
  • e2e mesh-compute specs still pass (bridge stubs mesh_feature_enabled: true)

Closes #3841

Made with Cursor

@Chessing234
Chessing234 requested a review from a team as a code owner July 31, 2026 12:03
Chessing234 and others added 6 commits July 31, 2026 15:24
Official Linux/Windows packages build without --features mesh-llm, so Share
Compute always hit opaque stub errors. Add a synchronous capability probe and
clearer stub copy pointing at the packaging gap (block#3841).

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Taksh <takshkothari09@gmail.com>
Add meshFeatureEnabled() and a small error classifier so the UI can tell a
missing Cargo feature apart from a real mesh runtime failure (block#3841).

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Taksh <takshkothari09@gmail.com>
When mesh-llm was not compiled in, Settings → Compute used to render a toggle
that always failed with a stub error. Gate the card on the build probe instead (block#3841).

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Taksh <takshkothari09@gmail.com>
Keep Playwright mesh-compute flows on the enabled path while the new probe is
wired through invoke.

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Taksh <takshkothari09@gmail.com>
Document that official Linux/Windows installs omit --features mesh-llm and that
Settings → Compute explains the gap via mesh_feature_enabled (block#3841).

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Taksh <takshkothari09@gmail.com>
Leave packaging unchanged (Metal-oriented CI) but point release/canary Linux
jobs at the Settings empty-state contract for block#3841.

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Taksh <takshkothari09@gmail.com>
@Chessing234
Chessing234 force-pushed the fix/mesh-llm-unavailable-linux-3841 branch from efb898b to 32888d3 Compare July 31, 2026 12:24
@Chessing234

Copy link
Copy Markdown
Contributor Author

added Signed-off-by on all commits so the DCO check should go green.

@Chessing234

Copy link
Copy Markdown
Contributor Author

@tlongwell-block @wesbillman @wpfleger96 mind taking a look when you get a chance?

tlongwell-block added a commit that referenced this pull request Aug 3, 2026
…#4524)

## Summary

Official Linux desktop packages (`.deb` / AppImage) are built without
`--features mesh-llm`, so they ship the `mesh_llm_stubs` backend and
Settings → Compute always fails with `mesh-llm feature not enabled`.
This PR adds the feature flag to the two Linux build commands:

- `release.yml` → `release-linux` job
- `linux-canary.yml` → canary build

That's the whole diff — 2 lines. Fixes #3788 (Linux); see also #3841
(dup with UI-gating PR #3914) and the Windows twin #2836/#3223.

## Why no native prebuild step (unlike the macOS job)

The macOS job carries Metal llama prebuild/cache steps from #798. Linux
doesn't need an equivalent:

- `mesh-llm-host-runtime` is compiled with `dynamic-native-runtime` and
installs the recommended runtime on first use (verified by sha256
checksum over HTTPS; upstream's signature verification path is not yet
implemented — default policy is `RequireChecksum`, per
`mesh-llm-runtime-install/src/lib.rs`)
(`desktop/src-tauri/src/mesh_llm/mod.rs` —
`initialize_mesh_native_runtime`), so release builds work on clean
machines without bundling llama.cpp.
- Upstream publishes Linux x86_64/aarch64 runtime bundles for the pinned
`v0.74.0` line, and `scripts/ensure-mesh-native-runtime.sh` already maps
`meshllm-native-runtime-linux-x86_64-cpu` / `linux-aarch64-cpu` for
local/e2e use.
- The unmerged branch `micn/mesh-node-download` (`96f29417a`) treats
even the macOS prebuild steps as removable dead weight for the same
reason.

## Background

The omission is historical drift, not a decision: Linux packaging
predates the mesh feature flag (#693), mesh became opt-in for
build-cost/reliability reasons (#823, #1183), and #1221 re-enabled it
for releases by editing only the macOS build line. `release-linux` and
the later `linux-canary` copy were never revisited.

The mesh shutdown hard-exit/relaunch path is gated `all(mesh-llm,
target_os = "macos")` because ggml/Metal destructors abort on macOS;
ordinary mesh shutdown (`shutdown_mesh_runtime`) is cross-platform, so
Linux falls through to the generic path.

## Validation

- [x] `./bin/cargo check --manifest-path desktop/src-tauri/Cargo.toml
--features mesh-llm` green at base `2c0ac2467` (feature graph compiles
at the pinned v0.74.0 line)
- [ ] Linux canary run with this change: AppImage/.deb build succeeds
and binary contains real `mesh_llm` symbols (not `mesh_llm_stubs`)
- [ ] Installed package: cold-start → Settings → Compute → runtime
download → serve → clean shutdown

The last two need a Linux run/host. **Note (from review):**
`linux-canary.yml` is `workflow_dispatch`-only and its `Require main`
step rejects non-main refs, so the canary cannot run on this branch
pre-merge — and `.github/workflows/**` matches no ci.yml paths-filter,
so this PR's own CI does not exercise the changed lines. Validation
sequencing is therefore merge → dispatch linux-canary on main →
live-package pass, with a trivial 2-line revert as the escape hatch.

Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Share Compute (mesh-llm) is unavailable in every official Linux build — release and canary

1 participant