feat(services): wire service_mycelium --download + service_complete --download #229

Merged
mik-tf merged 1 commit from development_mik_mycelium_download into development 2026-05-07 02:48:57 +00:00
Owner

Closes the heroci stack-up unblocker — heroci can now bring up mycelium → router → 24-service stack from prebuilt CI binaries with no Rust toolchain on the box.

What

service_mycelium.nu

  • install: add --download/--version flags. Under --download fetch release assets from geomind_code/mycelium_network and skip the cargo build path. setcap CAP_NET_ADMIN factored into svx_apply_capability so the daemon can create its TUN device whether built from source or downloaded.
  • start: add --download/--version, thread to install, pass $download to svc_verify_binaries_fresh.

Asset suffix is x86_64-unknown-linux-musl per session 64's home#212 naming convention. Asset names match SVX_BINARIES = ["mycelium" "mycelium_ui"]; the producer workflow in geomind_code/mycelium_network PR #45 renames mycelium_servermycelium before upload to align.

dispatcher.nu

[mycelium install] / [mycelium start] forward --download/--version (closing the dispatcher gap session 62 introduced as a class).

packages.nuservice_complete --download

  • Add --download/--version to service_complete.
  • Under --download, skip Phase 1 (service_install_all) entirely. Phase 1 builds from cargo; the per-service starts in Phase 2 will re-run install with --download and download from CI. Running both is wasted work and pulls in a Rust toolchain we explicitly want to avoid on heroci-class boxes.
  • Thread --download=$download --version $version to every service in starts_core + starts_extra whose start accepts both flags (proc, router, mycelium, embedder, proxy, db, osis, collab, biz, aibroker, logic, slides, whiteboard, indexer, foundry, voice, agent — 17 of 22). The five unsupported (code, codescalers, os, livekit, onlyoffice) keep the cargo path; they have no Forgejo CI release pipeline today.

Validation

Producer side validated end-to-end on tag v0.7.5-pre1 of geomind_code/mycelium_network — both mycelium-x86_64-unknown-linux-musl and mycelium_ui-x86_64-unknown-linux-musl published, 16.3 + 6.6 MB.

Full heroci end-to-end (proc → mycelium → router → 24 services) validated after this lands, the producer PR squash-merges, and final canonical tags (mycelium_network v0.7.5-rc1, hero_router v0.2.3-rc1) are cut.

See lhumina_code/home#212 for the broader naming-convention rollout.

Signed-off-by: mik-tf

Closes the heroci stack-up unblocker — heroci can now bring up mycelium → router → 24-service stack from prebuilt CI binaries with no Rust toolchain on the box. ## What ### `service_mycelium.nu` - `install`: add `--download`/`--version` flags. Under `--download` fetch release assets from `geomind_code/mycelium_network` and skip the cargo build path. setcap CAP_NET_ADMIN factored into `svx_apply_capability` so the daemon can create its TUN device whether built from source or downloaded. - `start`: add `--download`/`--version`, thread to install, pass `$download` to `svc_verify_binaries_fresh`. Asset suffix is `x86_64-unknown-linux-musl` per session 64's home#212 naming convention. Asset names match `SVX_BINARIES = ["mycelium" "mycelium_ui"]`; the producer workflow in [geomind_code/mycelium_network PR #45](https://forge.ourworld.tf/geomind_code/mycelium_network/pulls/45) renames `mycelium_server` → `mycelium` before upload to align. ### `dispatcher.nu` `[mycelium install]` / `[mycelium start]` forward `--download`/`--version` (closing the dispatcher gap session 62 introduced as a class). ### `packages.nu` — `service_complete --download` - Add `--download`/`--version` to `service_complete`. - Under `--download`, skip Phase 1 (`service_install_all`) entirely. Phase 1 builds from cargo; the per-service starts in Phase 2 will re-run install with `--download` and download from CI. Running both is wasted work and pulls in a Rust toolchain we explicitly want to avoid on heroci-class boxes. - Thread `--download=$download --version $version` to every service in `starts_core` + `starts_extra` whose `start` accepts both flags (proc, router, mycelium, embedder, proxy, db, osis, collab, biz, aibroker, logic, slides, whiteboard, indexer, foundry, voice, agent — 17 of 22). The five unsupported (code, codescalers, os, livekit, onlyoffice) keep the cargo path; they have no Forgejo CI release pipeline today. ## Validation Producer side validated end-to-end on tag `v0.7.5-pre1` of geomind_code/mycelium_network — both `mycelium-x86_64-unknown-linux-musl` and `mycelium_ui-x86_64-unknown-linux-musl` published, 16.3 + 6.6 MB. Full heroci end-to-end (proc → mycelium → router → 24 services) validated after this lands, the producer PR squash-merges, and final canonical tags (`mycelium_network v0.7.5-rc1`, `hero_router v0.2.3-rc1`) are cut. See https://forge.ourworld.tf/lhumina_code/home/issues/212 for the broader naming-convention rollout. Signed-off-by: mik-tf
feat(services): wire service_mycelium --download + service_complete --download
All checks were successful
Build and Publish Skills / build-and-publish (pull_request) Successful in 4s
d49b32939c
Closes the heroci stack-up unblocker — heroci can now bring up
mycelium → router → 24-service stack from prebuilt CI binaries with
no Rust toolchain on the box.

## service_mycelium.nu

- install: add `--download`/`--version` flags. Under `--download` fetch
  release assets from geomind_code/mycelium_network and skip the cargo
  build path entirely. The setcap CAP_NET_ADMIN step is factored out
  into svx_apply_capability and shared across both paths so the daemon
  can create its TUN device whether built from source or downloaded.
- start: add `--download`/`--version` flags, thread to install,
  pass `$download` to svc_verify_binaries_fresh (skips the mtime
  check on the download path per the lib.nu contract).

Asset suffix is x86_64-unknown-linux-musl per session 64's home#212
naming convention. Asset names match SVX_BINARIES = ["mycelium"
"mycelium_ui"]; the producer workflow (geomind_code/mycelium_network
PR #45) renames mycelium_server → mycelium before upload to align.

## dispatcher.nu

- [mycelium install] / [mycelium start] forward `--download`/`--version`
  (closing the dispatcher gap session 62 introduced as a class).

## packages.nu — service_complete --download

- Add `--download`/`--version` to service_complete.
- Under `--download`, skip Phase 1 (`service_install_all`) entirely.
  Phase 1 builds from cargo; the per-service starts in Phase 2 will
  re-run install with --download and download from CI. Running both
  is wasted work and pulls in the Rust toolchain we explicitly want
  to avoid on heroci-class boxes.
- Thread `--download=$download --version $version` to every service
  in starts_core + starts_extra whose `start` accepts both flags
  (proc, router, mycelium, embedder, proxy, db, osis, collab, biz,
  aibroker, logic, slides, whiteboard, indexer, foundry, voice,
  agent — 17 of 22 starts). The five unsupported (code, codescalers,
  os, livekit, onlyoffice) keep the cargo path; they have no Forgejo
  CI release pipeline today.

Demo path after this lands:
  service_proc start --download --version v0.5.0-rc1 --reset
  service_complete --download --version latest --reset

See lhumina_code/home#212 for the
broader naming-convention rollout.

Signed-off-by: mik-tf
mik-tf merged commit a825d387ee into development 2026-05-07 02:48:57 +00:00
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
lhumina_code/hero_skills!229
No description provided.