From dc9a951eb259eb79f8471341d3de2e9b44bd2592 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 5 Jun 2026 06:18:19 -0700 Subject: [PATCH] heph: pin RUSTUP_TOOLCHAIN=stable for build + self-update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The launchagent and ansible run without mise activation, so a bare cargo/rustc shim falls back to rustup's default toolchain — which lagged heph's rust-version floor (1.89) on both indri (1.87) and gilbert (1.84), silently failing the build. Pin the channel explicitly in the bootstrap env and the plist. Co-Authored-By: Claude Opus 4.8 (1M context) --- ansible/roles/heph/defaults/main.yml | 7 +++++++ ansible/roles/heph/tasks/main.yml | 1 + ansible/roles/heph/templates/heph.plist.j2 | 4 ++++ docs/reference/services/hephaestus.md | 6 +++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ansible/roles/heph/defaults/main.yml b/ansible/roles/heph/defaults/main.yml index 04d9c88..e5eea36 100644 --- a/ansible/roles/heph/defaults/main.yml +++ b/ansible/roles/heph/defaults/main.yml @@ -15,6 +15,13 @@ heph_repo_url: https://forge.eblu.me/eblume/hephaestus.git heph_bin_dir: /Users/erichblume/.cargo/bin heph_binary: "{{ heph_bin_dir }}/hephd" +# rustc/cargo here are rustup shims. The bare (non-mise) environment that the +# launchagent and ansible run in falls back to rustup's *default* toolchain, +# which can lag behind heph's rust-version floor (Cargo.toml: 1.89). Pin the +# channel explicitly so both the bootstrap build and unattended self-update +# always use a current toolchain regardless of the host's rustup default. +heph_rust_toolchain: stable + heph_data_dir: /Users/erichblume/.local/share/heph heph_db: "{{ heph_data_dir }}/heph.db" heph_socket: "{{ heph_data_dir }}/hephd.sock" diff --git a/ansible/roles/heph/tasks/main.yml b/ansible/roles/heph/tasks/main.yml index f27d39c..7a45fe3 100644 --- a/ansible/roles/heph/tasks/main.yml +++ b/ansible/roles/heph/tasks/main.yml @@ -38,6 +38,7 @@ heph hephd environment: PATH: "{{ heph_bin_dir }}:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin" + RUSTUP_TOOLCHAIN: "{{ heph_rust_toolchain }}" when: not heph_binary_stat.stat.exists changed_when: true notify: Restart heph diff --git a/ansible/roles/heph/templates/heph.plist.j2 b/ansible/roles/heph/templates/heph.plist.j2 index 9b3b3bf..19a2367 100644 --- a/ansible/roles/heph/templates/heph.plist.j2 +++ b/ansible/roles/heph/templates/heph.plist.j2 @@ -37,6 +37,10 @@ {{ heph_bin_dir }}:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin HOME /Users/erichblume + + RUSTUP_TOOLCHAIN + {{ heph_rust_toolchain }} StandardOutPath {{ heph_log_dir }}/mcquack.heph.out.log diff --git a/docs/reference/services/hephaestus.md b/docs/reference/services/hephaestus.md index 6faf3ab..838e440 100644 --- a/docs/reference/services/hephaestus.md +++ b/docs/reference/services/hephaestus.md @@ -43,7 +43,11 @@ hephd --mode server --http-addr 0.0.0.0:8787 --db ~/.local/share/heph/heph.db reconcile their op-log against. - **Self-update** (10-minute poll) rebuilds `hephd` from the forge when a newer release tag appears (`cargo install --git https://forge.eblu.me/eblume/hephaestus.git`). - Indri's Rust toolchain (`~/.cargo/bin`) is on the agent's `PATH` for this. + Indri's Rust toolchain (`~/.cargo/bin`) is on the agent's `PATH` for this, and + the plist pins `RUSTUP_TOOLCHAIN=stable` — the + launchagent runs without mise, so a bare `cargo` shim would otherwise fall back + to rustup's *default* toolchain, which can lag behind heph's `rust-version` floor + (1.89) and silently fail the build. - **PWA** (`--web-root`) serves the [heph-pwa] mobile shell; Caddy terminates TLS at `heph.ops.eblu.me` so the PWA runs in a secure context (service worker, install-to-home-screen, voice capture).