Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a7ea86c
fix(desktop): enable the content security policy (#4614)
jmecom Aug 5, 2026
4da7264
fix(acp): pace observer telemetry at 1/s with per-channel batch envel…
tlongwell-block Aug 6, 2026
5677e4c
test(desktop): match attachment button label (#4993)
tellaho Aug 6, 2026
16cc3de
fix(desktop): enforce owner-only access in internal builds (#4053)
brow Aug 6, 2026
e2796d4
fix(desktop): virtualize channel member lists (#4991)
wesbillman Aug 6, 2026
38bf642
ci: prove the relay-driven mesh lifecycle — discover, join, infer, de…
michaelneale Aug 6, 2026
96ae141
fix(desktop): skip native notifications outside app bundles (#5004)
wesbillman Aug 6, 2026
19b41e9
fix(desktop): stop rate-limited reconnect backfill from tearing down …
wesbillman Aug 6, 2026
5babb97
feat(desktop): show selected community in rail (#5000)
wesbillman Aug 6, 2026
480c41e
Improve desktop mobile pairing flow (#5024)
klopez4212 Aug 6, 2026
9213090
test(desktop): await thread scroll anchor (#3174)
cameronhotchkies Aug 6, 2026
6ca9641
Refine agent runtime controls (#5026)
klopez4212 Aug 6, 2026
bd2fdf4
fix(buzz-agent): classify read timeouts distinctly in LLM error messa…
wpfleger96 Aug 6, 2026
d232290
compute view mesh map
sandro-sq Aug 6, 2026
5523cd4
Merge remote-tracking branch 'origin/main' into sandro/mesh-compute-view
sandro-sq Aug 6, 2026
6eb6591
feat(identity): recover desktop identity from a signed-in phone (#4845)
tellaho Aug 6, 2026
a73414c
compute view polish and leaderboard
sandro-sq Aug 6, 2026
8c0a196
Merge remote-tracking branch 'origin/main' into sandro/mesh-compute-view
sandro-sq Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions .github/workflows/mesh-lifecycle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Mesh Lifecycle
# Relay-driven mesh lifecycle smoke: membership → signed discovery notes →
# relay-derived allowlist → join → CPU inference over QUIC → stranger denied
# (relay membership rejection + no routed inference, with a differential
# trusted-inference health proof so a dead serve node can't fake a denial).
# Runs the full Buzz "shared compute" join story with three real mesh-llm
# node processes on one runner, using the Buzz relay as the control plane
# (no hand-carried invite tokens). Mirrors the shape mesh-llm's own CI uses
# for its two-node smokes (tiny CPU model, one runner, real QUIC mesh).

on:
push:
branches: [main]
paths:
- 'crates/buzz-relay/examples/mesh_*.rs'
- 'crates/buzz-relay/Cargo.toml'
- 'crates/buzz-admin/**'
- 'crates/buzz-test-client/**'
- 'crates/buzz-ws-client/**'
- 'Cargo.lock'
- 'desktop/src-tauri/src/mesh_llm/**'
- 'scripts/ci-mesh-lifecycle-smoke.sh'
- 'scripts/start-relay-for-tests.sh'
- '.github/workflows/mesh-lifecycle.yml'
pull_request:
paths:
- 'crates/buzz-relay/examples/mesh_*.rs'
- 'crates/buzz-relay/Cargo.toml'
- 'crates/buzz-admin/**'
- 'crates/buzz-test-client/**'
- 'crates/buzz-ws-client/**'
- 'Cargo.lock'
- 'desktop/src-tauri/src/mesh_llm/**'
- 'scripts/ci-mesh-lifecycle-smoke.sh'
- 'scripts/start-relay-for-tests.sh'
- '.github/workflows/mesh-lifecycle.yml'
workflow_dispatch:

concurrency:
group: mesh-lifecycle-${{ github.event_name == 'pull_request' && github.ref || github.sha }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

env:
CARGO_TERM_COLOR: always

jobs:
lifecycle-smoke:
name: Relay-Driven Mesh Lifecycle Smoke
runs-on: ubuntu-24.04
timeout-minutes: 45
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3

- uses: cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1

- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2

Check warning

Code scanning / zizmor

detects commit SHAs that don't match their version comment tags Warning

detects commit SHAs that don't match their version comment tags
with:
save-if: ${{ github.event_name != 'pull_request' }}

# The mesh-llm SDK downloads a signed native runtime (llama.cpp CPU
# build) on first init, and the serve node downloads the smoke model
# from HuggingFace on first run. Key on the lockfile so a mesh pin bump
# rolls the runtime cache; the model ref is stable.
- name: Restore mesh runtime + model caches
id: mesh-caches
uses: actions/cache/restore@caa296126883cff596d87d8935842f9db880ef25 # v5
with:
path: |
~/.cache/mesh-llm/native-runtimes
~/.cache/huggingface/hub
key: mesh-lifecycle-${{ runner.os }}-smollm2-135m-${{ hashFiles('Cargo.lock') }}
restore-keys: |
mesh-lifecycle-${{ runner.os }}-smollm2-135m-

- name: Start integration services
run: |
for attempt in 1 2 3; do
if docker compose up -d postgres redis minio minio-init; then
break
fi
if [ "$attempt" -eq 3 ]; then
echo "docker compose up failed after 3 attempts" >&2
exit 1
fi
echo "docker compose up failed (attempt $attempt), retrying in $((attempt * 5))s..." >&2
sleep $((attempt * 5))
done

- name: Run relay-driven mesh lifecycle smoke
run: ./scripts/ci-mesh-lifecycle-smoke.sh 2>&1 | tee /tmp/mesh-lifecycle-harness.log

- name: Save mesh runtime + model caches
if: github.ref == 'refs/heads/main' && steps.mesh-caches.outputs.cache-hit != 'true'
uses: actions/cache/save@caa296126883cff596d87d8935842f9db880ef25 # v5
with:
path: |
~/.cache/mesh-llm/native-runtimes
~/.cache/huggingface/hub
key: mesh-lifecycle-${{ runner.os }}-smollm2-135m-${{ hashFiles('Cargo.lock') }}

- name: Upload relay + harness logs
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: mesh-lifecycle-logs
path: |
/tmp/buzz-relay.log
/tmp/mesh-lifecycle-harness.log
if-no-files-found: ignore
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 17 additions & 4 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,10 @@ desktop-tauri-test: _ensure-sidecar-stubs
desktop-terminal-performance-test:
cargo test --manifest-path desktop/src-tauri/crates/buzz-terminal/Cargo.toml --release --test latency g3_renderer_acquire_stays_within_frame_budget -- --ignored --exact --nocapture

# Verify compiled-flag behavior under both compile states (clean + internal).
# Runs the auto-connect compiled-flag test twice with independently supplied
# expected values; build.rs rerun-if-env-changed triggers recompilation.
# Verify compiled-flag behavior under both compile states (clean + capability set).
# Runs the auto-connect and owner-only access focused tests twice with
# independently supplied expected values; build.rs rerun-if-env-changed
# triggers recompilation.
desktop-tauri-test-compiled-flags: _ensure-sidecar-stubs
#!/usr/bin/env bash
set -euo pipefail
Expand All @@ -223,10 +224,22 @@ desktop-tauri-test-compiled-flags: _ensure-sidecar-stubs
env -u BUZZ_BUILD_AUTO_CONNECT_DEFAULT_RELAY \
BUZZ_TEST_EXPECTED_AUTO_CONNECT_DEFAULT_RELAY=false \
cargo test compiled_flag_matches_expected -- --ignored --nocapture
echo "=== Internal build (flag set) → expect true ==="
env -u BUZZ_BUILD_AGENT_ACCESS_OWNER_ONLY \
BUZZ_TEST_EXPECTED_AGENT_ACCESS_OWNER_ONLY=false \
cargo test --lib
env -u BUZZ_BUILD_AGENT_ACCESS_OWNER_ONLY \
BUZZ_TEST_EXPECTED_AGENT_ACCESS_OWNER_ONLY=false \
cargo test compiled_policy_matches_expected -- --ignored --nocapture
echo "=== Internal build (flags set) → expect true ==="
BUZZ_BUILD_AUTO_CONNECT_DEFAULT_RELAY=1 \
BUZZ_TEST_EXPECTED_AUTO_CONNECT_DEFAULT_RELAY=true \
cargo test compiled_flag_matches_expected -- --ignored --nocapture
BUZZ_BUILD_AGENT_ACCESS_OWNER_ONLY=1 \
BUZZ_TEST_EXPECTED_AGENT_ACCESS_OWNER_ONLY=true \
cargo test --lib
BUZZ_BUILD_AGENT_ACCESS_OWNER_ONLY=1 \
BUZZ_TEST_EXPECTED_AGENT_ACCESS_OWNER_ONLY=true \
cargo test compiled_policy_matches_expected -- --ignored --nocapture
echo "Both compiled states verified."

# Build the full desktop Tauri app locally (unsigned, for testing)
Expand Down
Loading