- Use native Cairn lifecycle artifacts under
cairn/for planning and change tracking in this repo. Do not create or update OpenSpec artifacts unless the user explicitly asks for migration/compatibility work. - Use
/home/brittonr/git/cairnas the local Cairn source checkout. It should authenticate to the canonical projecthttps://github.com/OnixResearch/cairnvia the SSH remotegit@github.com:OnixResearch/cairn.git. - Validate with
nix run path:/home/brittonr/git/cairn#cairn -- validate --root /home/brittonr/git/onix-core --policy /home/brittonr/git/cairn/cairn-policy/generated/cairn-policy.json.
- Bare
aspen1is not reliably resolvable from managed hosts. Useaspen1.localfor SSH deploy targets and runtime URLs (root@aspen1.local, Lemonade API bases) unless a specific network path requires another name. Harmonia's extra substituter is one such exception: usehttp://100.100.103.95:5000so nix-daemon does not depend on mDNS. - On this workstation,
clan machines update ...can lose vars generatorfinalScriptstore paths to local auto-GC mid-run (/nix/store/...-generator-...: No such file or directory). If that happens, rerun the deploy withNIX_CONFIG=$'min-free = 0\nmax-free = 0'so the generator script survives long enough to execute. - Changing a vars generator's output does not automatically rewrite already-generated shared vars. If a deploy still sees stale generator content, run
clan vars generate <machine> --generator <name> --regeneratefirst, then deploy again so the updated secret files are synchronized. - Removed vars-generator outputs can linger too. After switching a generator from one output file shape to another (for example
env-file->auth-json), manually delete orphanedvars/shared/<generator>/...files that the new generator no longer declares. - Unset clan prompt secret files can decrypt to the stock SOPS placeholder text
Welcome to SOPS! Edit this file as you please!rather than an empty string. Treat that placeholder as "unset" when auditing or migrating vars. vars/shared/.../secretfiles are stored as raw secret blobs ({"data": "ENC[...]", ...}), not schema-aware JSON payloads. If you hand-edit a structured secret likeauth-json, re-encrypt the whole plaintext file withsops encrypt --input-type binary --output-type json ...; encrypting nested JSON fields makessops-install-secretsfail witherror emitting binary store: no binary data found in tree.- If
clan machines update ... --upload-inputsfails innix flake archive --to ssh://...withsized: unexpected end-of-file, check the named source path withnix-store --verify-path. Legacyssh://store copying can hide the realhash mismatch importing pathwhen a local fixed-output flake input was modified/corrupted. Clean any invalid partial target path withnix-store --delete --ignore-liveness, prefetch the same locked input on the target (nix flake prefetch github:owner/repo/rev) so upload skips the corrupt local stream, then repair the local store as root later.
britton-desktophas no NVIDIA GPU. Its installed accelerators are two Tenstorrent Blackhole P150 cards; the AMD Granite Ridge controller is display-only. Do not select CUDA, NVIDIA container passthrough, or the Strix-Halo-specificamd-gpucompute tag for this host.- For Tenstorrent debugging, start with
tt-smi, service journals, and each service'stt-metal-logs/generated/inspectordata. Use the official TT-Metalium tools index for Inspector,tt-triage, Watcher, Device Print, and profiler escalation. Upstream only fully supports those tools on source builds, so source-level triage must use a checkout matching the pinned runtime. - The Speaches container writes its Hugging Face cache as the in-container
ubuntuuser. Mount the cache directory with uid/gid1000:1000or model preloading fails withPermissionErrorunder/home/ubuntu/.cache/huggingface/hub. modules/hermes-gatewaysyncs clan-var Matrix secrets into~/.hermes/.envat service start. Do not setTERMINAL_CWDin the systemd environment; Hermes warns that env var is deprecated, so setterminal.cwdin~/.hermes/config.yamlinstead.- The Hermes gateway unit carries
HERMES_GATEWAY_MATRIX_SETTINGS_HASHfor non-secret Matrix settings so allowlist/config changes restart the service and resync.env. Updating only the deployed secretenv-filecan leave a running gateway stale until the service restarts. - Hermes Matrix E2EE needs the module's overridden
hermes-agentwithpython-olm/mautrix crypto deps. Becauseolmis marked insecure,enableEncryption = trueintentionally requires explicitacceptInsecureLibolm = true.
nix flake show --all-systemsfails in this repo unless you pass--option allow-import-from-derivation true; thewasm-pluginschecks evaluate nix-wasm plugin derivations during flake evaluation.
pkgs/lemonade/default.nixmust accept eitherlemondorlemonade-routeras the daemon binary name. Upstream changed names across releases, so install both aliases for compatibility.
- The
calling import-environment without specifying desired variables is deprecatedstartup message comes from upstreamresources/niri-session(systemctl --user import-environment). In this repo, greetd launches/etc/profiles/per-user/brittonr/bin/niri-session, so that warning is session-wrapper noise, not proof thatniri.servicecrashed. niri: Page flip commit failed on device ... (Permission denied)immediately before a boot boundary can be compositor shutdown fallout after DRM master is lost during reboot. Check for surroundingsystemd[1]: Stopping ...lines before treating it as root cause.
- Helix wrapper packages from
inputs.wrappers.wrapperModules.helix.applykeep command bindings in the generatedXDG_CONFIG_HOMEstore config referenced by the wrapper script, not inside the final wrapper package root. For integration checks, inspect both the wrapper script (bin/hx/bin/zen) and the exported config store path.
britton-desktopmanages~/.cargo/config.tomlthrough theinventory/home-profiles/brittonr/kacheHome Manager profile. Preservetarget-dir = "/home/brittonr/.cargo-target",net.retry = 3, andterm.quiet = falsewhen changing that profile.- Build storage on
britton-desktopis ZFS-backed and quota-limited:datapool/cargo-targetmounts at~/.cargo-target,datapool/gitmounts at~/git, and interactive Kache data uses/var/cache/kache-nix/user-brittonr. Keep repo-localCARGO_TARGET_DIR=targetoutputs under~/git; do not create new sibling~/.cargo-target-*paths unless isolation cannot use the Git dataset. machines/britton-desktop/build-storage.nixremoves ignored Cargo targets only after 21 days without modified files and skips cleanup while Cargo or rustc is active. Preserve theCACHEDIR.TAGand Git-ignore safeguards when changing retention.SCCACHE_IGNORE_SERVER_IO_ERROR=1on stocksccacheis not enough for dead-transport startup/connect failures like a brokenSCCACHE_SERVER_UDS;sccache rustc -vVcan still abort before local fallback. For Home Manager Cargo rollouts here, use an outer rustc-wrapper that can detect those transport failures and exec realrustcdirectly.