eval-vm.md: port campaign started — increment 10 (5a) landed. derivation.ml's grpc_call_unary/streaming are now transport-agnostic behind raw byte refs; native h2 impl installed via connect_native, dune build green. Next (5b): install the VM host-prim transport into the same refs so real derivation.ml runs in the sandbox.
Created by pmeunier on Aug 5, 2026, 6:48 AM
State:
PA2W44SLWXPFR2YRKINTUU5KNHK26ZADOKXD5LM4EMYQOGUXSW3QCelpe frontend increment 10 (port campaign start): introduce the backend transport seam in derivation.ml. grpc_call_unary/streaming are now transport-agnostic — they do the typed protobuf encode/decode and call raw byte-level refs (backend_unary_raw/backend_stream_raw : bytes-in/bytes-out, no gRPC types leak past). Native h2/grpc-lwt impl (native_unary/native_stream) installed by elpe_bin via connect_native; the embedded-VM host-prim impl plugs into the same refs in the next increment. connection param kept vestigial to avoid churning every call site (derivation.ml/elpe.ml/lock.ml) this increment; return shapes unchanged (Ok(v,OK status), error pinned to Grpc.Status.t) so no caller changes. dune build green (native path structurally unchanged: only transport indirection + transport errors now raise instead of returning Error).
Created by pmeunier on Aug 5, 2026, 6:47 AM
State:
OQEV5CSIVIGEIQZUMZBIW4S57VXC2YJTR45VYLZWLXOTTHVIBGMACbazel aquery: provision the launcher's runtime — libstdc++6/zlib1g build inputs + LD_LIBRARY_PATH on the standard multiarch dirs (the container sets LIBRARY_PATH for compile, not LD_LIBRARY_PATH for runtime), so the dynamically-linked bazel launcher loads in-container
Created by pmeunier on Aug 5, 2026, 5:36 AM
State:
SMUTCCQ32XKRPF4GXDSOENUD44QG6PS5EMWMYE5R5ZDXTYXS2DJQCcontainer: unit-test elf_trailing_data_len — appended payload detected (delta ≈ payload, robust to baseline), non-ELF is a no-op, a normally linked ELF stays under the 4KiB skip floor so real outputs still patch
Created by pmeunier on Aug 5, 2026, 5:34 AM
State:
JYDSPQH2J76VAGCNOS3VJ5AFSGTFXXXLDG2A4I6ST6HGGYGRADQACcontainer: patch_result_elf skips self-extracting binaries (ELF + appended payload). elfedit rewrites ELF headers in place and drops any data glued after the ELF image; the 55MB bazel launcher (ELF + embedded JDK/server zip) was being patched down to its 5.7MB ELF, losing the zip -> 'cannot find central directory' at self-extraction. New elf_trailing_data_len computes the true ELF image extent (max end across program/section header tables and every header's file range, ignoring SHT_NOBITS) and patch_result_elf now returns Ok(false) when >4KiB of payload follows it. Fixes bazel-in-container (aquery-drive) and any makeself/AppImage-style output.
Created by pmeunier on Aug 5, 2026, 5:32 AM
State:
ZLQPRMDGOZ6SZA6LY5LC4RFPZYJVBCNXXSW4JEBE7IORKXQN3NHACimage_service: current_system unit ExecStart /bin/sh -> /bin/bash
Created by pmeunier on Aug 5, 2026, 5:31 AM
State:
ALQDGVUVZIFL5V5KNNE3IU54LPF5JPM4GTEYFTHWUQJTVGHCFZ4ACeval-vm.md: REVERSE the host_solve-in-Rust decision — solve is pure compute, not an effect, so it stays OCaml (opam_solve.ml keeps Mccs.resolve_cudf in-process). Dropping it avoids an absurd OCaml->Rust->spawn-mccs-binary->back triple-hop. Clarify the model: the curated table's boundary is EFFECT, not native code — pure-compute native libs (mccs/cudf, later blake3/zlib) join the table and run in the VM; only IO goes through a host prim. Effect table now complete; increment 4 becomes 'admit mccs/cudf C stubs to the table + link libmccs'.
Created by pmeunier on Aug 5, 2026, 5:24 AM
State:
5KQSXFWQQWOEFNWR3OGR5VVHPJPUDXEFSBKMVGGUUTPH4FD6PHTQCelpe: fetch_bin (script-friendly raw fetch by url+hash, string algo, no unpack) + use it in examples/bazel for the bazel launcher; drop unused self in class aquery. A build.ml should never have to name the internal Elpe__Elpegrpc Hash enum or hex-decode by hand — fetch_bin wraps http with hash_of_string + Hex.to_bytes.
Created by pmeunier on Aug 5, 2026, 5:16 AM
State:
XQ5OQ4EKAGKPQUPEUIWTAUXWCEDH7K3QLVLKQNF5SOLNIDDKKRZQCeval-vm.md: increment 9 landed — sync write leaf host_write_file (write_lock/write_sbom ✅) + read_lock reuses the read leaf, proven end-to-end. Only host_solve remains in the sync table (wiring trivial; e2e proof needs the mccs binary on PATH).
Created by pmeunier on Aug 5, 2026, 5:16 AM
State:
VPYDHYOQJ7CTVL45WLXA2K7TADTZFWRUTLSXI34JE7ZCCAEXOGFACeval-vm increment 9: the sync write leaf host_write_file (behind write_lock/write_sbom) + read_lock. host_write_file : string -> string -> unit writes a CWD-confined path atomically (tmp+rename, matching Lock.write); read_lock reuses the read leaf (same CWD policy as local_src, OCaml parses JSON). The DSL keeps the filename policy + rendering (Lock.render/Sbom); only the write syscall + CWD policy move to the host. Demo test round-trips a lock snapshot and confirms out-of-CWD writes are denied. (host_solve deferred: needs the mccs binary on PATH, absent in this env.)
Created by pmeunier on Aug 5, 2026, 5:15 AM
State:
PPLLUPNCUCYY7OYPVRPI434TI6ZGKP6BXDD47GEI7FZKCEST2YGQCelpe: Bazel aquery-in-container live wiring + examples/bazel. class aquery now takes the bazel toolchain as a build INPUT (so std_derivation's PATH picks up usr/bin/bazel; add_path only feeds the SBOM closure) and pulls ca-certificates for the HTTPS module registry; from_targets drops the redundant pre-build. New examples/bazel: fetch the official bazel 7.6.0 self-extracting launcher (bundled JDK) as a toolchain, run aquery over a two-genrule workspace in-container, build the terminal action as a native derivation. Cargo-parity path (aquery : cargo metadata :: action replay : crate build); live run is the next empirical milestone.
Created by pmeunier on Aug 5, 2026, 5:12 AM
State:
DFEY7YAG5V3AJDJI6WKGRMCMDXHNHWXRL522NW6BXZ7TQ33T7O5ACeval-vm increment 8: regenerate Cargo.nix for demo's new prost/prost-build deps (keeps the crate2nix file in sync with Cargo.lock)
Created by pmeunier on Aug 5, 2026, 5:10 AM
State:
44ML2JDIC4CSARUZ3MGXC6HO73ZEDWRNII34USDL7HD4FTM7SE6QCelfedit: repoint all section-naming DT_* tags after a section move
Created by pmeunier on Aug 5, 2026, 5:10 AM
State:
62RUNLHDTWBRDRC4DUELITNZ5O5RW2Q2FH6WA6ZY6FAXMEORXMAQCeval-vm.md: increment 8 landed — host_add_path (client-streaming AddPath) proven end-to-end; primitive table row ✅; effect table now has all three gRPC shapes. Remaining increment 4 narrowed to the sync leaves (locks/solve/sbom).
Created by pmeunier on Aug 5, 2026, 5:09 AM
State:
37FD263H3FK4LA6JLURUV4X5MC57TWMJH6WZSPSZBZNU3MHFQ2IQCeval-vm increment 8: host_add_path, the client-streaming effect leaf (add_path). The CWD-confined directory walk moves to Rust (readdir/lstat/read are denied prims in the VM) and client-streams prost-encoded AddPathRequest to the backend; the single DerivationReply resolves the Lwt thread (unary-shaped via the bridge). Ignore POLICY stays in OCaml (default_src_ignores/.ignore), handed to the host as a resolved pattern set; only the match runs host-side. New: prost codegen of elpegrpc.proto in demo, addpath.rs walk, grpc.rs client_streaming. Vm_prelude add_path; demo test walks eval-vm/demo/ocaml and decodes the reply.
Created by pmeunier on Aug 5, 2026, 5:08 AM
State:
JBQWCICDQIFYOVKR4F5CIZRXODTZ5ZK6IPSQD3T66YON5INHLLSACelpe frontend: Bazel aquery-drive layer 3 — acquisition (aquery-in-container) + real-dump regression test. Bazel.aquery std_derivation runs 'bazel aquery --output=proto deps(<targets>)' over the workspace src and captures the ActionGraphContainer on stdout (mirror of Rust.metadata/cargo metadata); from_targets decodes it and yields one native derivation per terminal action via the layer-2 replay. aquery_query wraps targets in deps() — REQUIRED (verified against real Bazel 7: a bare aquery emits only the target's own action, misclassifying every generated input as a source). New test decodes a real 'bazel aquery deps(//:gen2)' dump (two-genrule chain) to pin that the trimmed vendored analysis_v2.proto stays wire-compatible with real Bazel and L1 rebuilds the true DAG; plus aquery_query/aquery_script unit tests. Live run still needs a Bazel-containing image + network (the argv[0]/external-tree toolchain gap that in-container aquery closes).
Created by pmeunier on Aug 5, 2026, 4:59 AM
State:
3G5GT3ICZSGGO7N3S46TP2T36BHMNHJP3YEL2PLP24TUZTGS5TGQCeval-vm.md: roadmap sync — status = increments 1-7 landed & proven (both gRPC leaves + local_src); primitive table gets a landed/todo (✅/⬜) column + real split-effect signatures; migration increments rewritten as a 6-step checklist (1-3 done, 4-6 = finish effect table, port real lib, CLI-to-Rust)
Created by pmeunier on Aug 5, 2026, 4:49 AM
State:
KV7VIYJO5K6XHWWIJPUR5ORTIFSK6D7Q6KRCZLUDM5J6ON7GBD2QCdesign.org: VM OCaml roadmap — increment 7 (host_backend_stream, server-streaming effect leaf) landé & prouvé; les deux leaves gRPC ont leur prim hôte. Reste = réécrire grpc_call_unary/streaming + add_path/locks/solve dans la vraie lib.
Created by pmeunier on Aug 5, 2026, 4:46 AM
State:
7OSK3WCM4CN2RNPASYMIO4XJN5YSN4QVCPVQKSGFEDLTUAHGLGRQCeval-vm increment 7 fixup: rename Vm_prelude type effect->waiter (effect is an OCaml 5 keyword) and make the backend_stream demo callback synchronous (string->unit); demo builds and runs, streaming Derivation RPC round-trips (Stdout chunk + terminal Error, EOS resolves the Lwt thread)
Created by pmeunier on Aug 5, 2026, 4:45 AM
State:
YKYGG2R5AGBC7GYH3L3VOAA6JI3JVCWNCOTEJGPQ4EGU4AKSC7NACdefault.nix: add bazel_7 to the dev shell (propagatedBuildInputs) — unblocks the aquery-drive acquisition layer, lets us generate real 'bazel aquery --output=proto' ActionGraphContainer dumps to test bazel.ml layers 1/2 against and bootstrap aquery-in-container
Created by pmeunier on Aug 5, 2026, 4:44 AM
State:
TVDQPPQS5CCWXLZJJGMUSLLA76PJPMUHD3K5LTCV5CBQOXK2GWQACimage.ml rootfs merge: two-pass tar (symlinks without -p) + deterministic package order
Created by pmeunier on Aug 5, 2026, 4:43 AM
State:
XWMZ6BTYAPLASAQU252HRNNBYJFR3BGF3AWRRXA6TETESWQCRJ5AC