OXYGENHUB

narvi-1: a RISC-V runner (syscall tier) building the riscv64 releases issue #69 closed: completed andymccall opened this · 3 comments

andymccall

Andy's decisions (2026-10-19):

  • narvi-1: a site runner on narvi (OrangePi RV2, Ky X1, riscv64, 8 cores, 7 GiB), labels narvi and riscv64, one job at a time, a 4 GiB cap. Syscall tier only: the Ky X1 has no hypervisor extension, so there is no /dev/kvm and no microVM tier. Landlock, user namespaces, seccomp and a delegated cgroup (user service with linger) are all present.
  • Image: Ubuntu Base 24.04 riscv64 (checked against its SHA256SUMS) plus the Rust toolchain, imported with flow rootfs import.
  • First work: oxy and oh built natively for riscv64 in the oxygen and oxygenhub pipelines (on tags and by hand), replacing the manual RISC-V release step, each with the runner's signed receipt.

Only jobs whose image is riscv64 are placed there (arch-aware placement), so x86 work never lands on it.

andymccall set labels flow-next ·

andymccall

Progress (2026-10-19):

  • flow built natively on narvi (main-2b009250), installed at ~claude/flow/bin/flow. flow tiers under a delegated user scope: syscall available, microvm unavailable (no /dev/kvm: the Ky X1 has no H extension).
  • Image: Ubuntu Base 24.04.5 riscv64 (sha256 and the cdimage signature checked) + build-essential, pkg-config, git, make, xz, curl + Rust 1.97.1 (rustfmt, clippy) via rustup + the same vendored crates as the x86 image (/opt/vendor, offline cargo config). Tarball sha256 68f6fe55…4fff, imported with CARGO_HOME/RUSTUP_HOME as cas://blob/b4edba9173ddf63aa1df46222e6a59b265071b19f2815c89d0153b593835c616.
  • Smoke: a syscall-tier job built a crate from the vendored sources offline and ran it (57 s).
  • User unit flow-runner.service written (Delegate=yes, KillMode=mixed, TimeoutStopSec=75min, MemoryMax=5G), not enabled until registered; linger is on.
  • Waiting on: Andy mints a site registration token and runs flow runner register on narvi (the token never passes through Claude). Then: runner.toml limits (1 job, 4096 MiB, 6 CPUs, keyless, cache 60 GB), enable the unit, and add the native riscv64 check jobs to the oxygen and oxygenhub pipelines.
andymccall

Done for oxygen (2026-10-19): narvi-1 is online (syscall tier, riscv64, flow main-bfe28437 with build caches, issue #70). oxygen's riscv64 job builds oxy natively and runs a signed init/commit/bookmark/merge/verify/fsck: passed in run 356, cold 41.4 min; rerun warm 0.2 min (cache restored, 249/249 unchanged, cargo 2.6 s). Native binary kept as artifact oxy-linux-riscv64-native with the receipt. Next: the same check for oh in oxygenhub's pipeline.

andymccall

Done (2026-10-19): oxygenhub's riscv64 job passed in run 397: oh built natively on narvi-1 (cold 31 min, cache now kept) and run; artifact oh-linux-riscv64-native with the receipt. Together with oxygen's (run 356, warm rerun 0.2 min), every release is now checked on real RISC-V hardware. Closing.

andymccall closed ·