Repository navigation
feat(packages): Moss wdocker 0.15.8 with its pinned Holochain 0.6.1 - #60
Merged
Merged
Conversation
…ochain 0.6.1 wdocker-0_15 builds the always-online node from the Moss v0.15.8 tag with fetchYarnDeps and yarnConfigHook. The file: workspace dependencies become workspace links, the Holochain release binary is fetched at the sha256 Moss pins and patched for the store, and WDOCKER_HOLOCHAIN_BINARY points wdocker at it so nothing downloads at runtime. vmTestWdocker starts a throwaway conductor through the stdin password path in a VM without network. Refs #28.
This was referenced Sep 27, 2026
# Conflicts: # .github/workflows/ci.yml # README.md
Contributor
Author
Review follow-up: the one blocking item is fixed, and the branch is up to date with What changed
Local checks on
Left for later
|
# Conflicts: # .github/workflows/ci.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #28
Why
On 2026-09-27 the Sensorica Moss group and two Vines applets were hosted always-online on the homelab by
wdocker, Moss's headless node, built by hand from the Moss sources. The next run is on a Holoport at the lab, where a hand build is where the session would stall. This PR is the first brick of #28: the package, not the service.What
packages.x86_64-linux.wdocker-0_15(packages/wdocker.nix) builds wdocker from the Moss tagv0.15.8(the release that bundles Holochain 0.6.1), offline in the Nix sandbox, withfetchYarnDepsandyarnConfigHook. npm's@theweave/wdocker@0.15.4is unusable: it still carriesfile:workspace dependencies and dies withERR_MODULE_NOT_FOUND @theweave/utils.The
file:dependencies are resolved as workspaces, not symlinked by hand. wdocker's threefile:../libs/api-style dependencies are rewritten to the workspaces' own versions, so yarn links them as workspaces; the root manifest is narrowed to the five workspaces wdocker needs (api, moss-types, utils, group-client, wdocker), which leaves the Electron app out. The upstreamyarn.lockis consumed unmodified. A secondyarn install --productiondrops typescript and the other build tools from the output.we-rust-utils: the prebuilt napi addon from npm (@lightningrodlabs/we-rust-utils-linux-x64-gnu@0.601.1, the version wdocker's range resolves to), patched byautoPatchelfHook(RPATH to libgcc), not built from source.bufferutilandutf-8-validateprebuilds likewise; their musl and foreign-platform prebuilds are removed.The Holochain 0.6.1 binary is in the package, and wdocker never downloads one. Decision below.
checks.x86_64-linux.vmTestWdocker, added to the CI VM list: a NixOS VM with no network starts a throwaway conductor throughwdaemon(the password on stdin, the one entry point that needs no TTY), and asserts the daemon reports ready, nothing was downloaded into wdocker'sbins, the running conductor is the packaged binary, the admin port answers,wdocker listshows it running, andwdocker stopends it.docs/moss-node.md: running the packaged wdocker by hand until the service lands, the restart-after-join rule, tagged tools, where data lives, the Moss network endpoints, and what is not headless yet.The Holochain binary decision
Where wdocker looks and how it checks, at
v0.15.8:The path is
<data>/wdocker/0.15.x/bins/holochain-v0.6.1-moss-0.15-wdocker(wdocker/src/filesystem.ts:232-233, name fromwdocker/src/const.ts:46).It downloads only when that file does not exist (
wdocker/src/daemon/start.ts:137-140,fetchHolochainBinaryatstart.ts:279-319).The sha256 is checked once, right after a download (
wdocker/src/utils.ts:76-83), againstholochain-checksums.json. A file already in place is never hashed.wdocker stopfinds the conductor by the first 14 characters of its process name (wdocker/src/commands/stop.ts:26).So the package fetches the same release asset with
fetchurl, pinned to the sha256 Moss pins (423f1111…ada7, checked at build time against the tag'sholochain-checksums.jsonandmoss.config.json), keeps the file name wdocker expects sostopstill recognises it, and patches its ELF interpreter withautoPatchelfHook. Patching changes the file's hash, which is harmless because wdocker never hashes a binary it did not download; the BuildID is unchanged. It no longer needs nix-ld: its interpreter is the store's glibc, and it runs on the homelab withNIX_LDunset.The binary's location is runtime state under the user's data directory, so the package cannot place it there; a one-line patch to
filesystem.tsletsWDOCKER_HOLOCHAIN_BINARYname the binary, and the wrapper sets it by default. The wrapper also putsnodeandcurlonPATH, because wdocker spawnsnode daemon.jsby name (start.ts:102) and downloads the group hApp withcurl(utils.ts:69).How to test (exit codes observed)
Locally (Ubuntu with Nix, sandbox on):
On the homelab (NixOS), from this branch, without starting any daemon:
The native addon loads from the result:
import('@lightningrodlabs/we-rust-utils')listsWeRustHandler happBytesWithCustomProperties saveHappOrWebhapp validateHappOrWebhapp, exit 0.The VM check can go red: with the wrapper's variable renamed (a throwaway mutant, not committed), the same check exits 1, the daemon logging
No holochain binary found. Downloading from Github...and thecurlfailing in the offline VM. With the mutant reverted, the committed tree passes again (exit 0).Closure: 396 MiB, of which the wdocker path 144 MiB (node_modules and the Holochain binary) and Node 22 most of the rest.
Not covered
The declarative service. No NixOS module, systemd unit, password credential, join from an invite file or restart after a join: that is Moss always-online node service #28 proper.
Headless start. Every command except the daemon still prompts on a TTY. The headless environment variables from lightningrodlabs/moss PR #224 are not on tag
v0.15.8; whether Moss always-online node service #28's service carries them as a patch or driveswdaemonover stdin is Soushi's call, and this PR does not build frommain.aarch64. Moss pins an aarch64 Holochain binary and
we-rust-utilsships a linux-arm64 addon, but nothing here has run on ARM, so the package is x86_64 only.Tool bytes by hash. A tagged tool whose webhapp URL serves different bytes than the group recorded still fails to install (Moss always-online node service #28, finding 3); the docs give the hand workaround.
wdocker --versionprints0.15.4, the version in wdocker's ownpackage.jsonat the tag; the package version is the Moss tag, 0.15.8.