elpe frontend: Bazel aquery-drive tree artifacts — is_tree index (Artifact.is_tree_artifact) + artifact_is_tree/action_outputs_full accessors; replay_script ~outputs now (exec, is_tree) pairs, pre-creating a tree output's directory itself (not just its parent) so declare_directory actions can fill it, cp -a harvests the whole subtree. Unit tests: is_tree round-trips through the real codec, tree vs plain output pre-creation.
Created by pmeunier on Aug 5, 2026, 7:48 AM
State:
3RLPSR3TMSBXVATGPPDFAB3GN62INSZAGY3ZXCNKGYRCZEDZXQOACexamples/sbom-ci: Nix-free SBOM validation harness (elpe-provisioned jsonschema + syft)
Created by pmeunier on Aug 5, 2026, 7:37 AM
State:
SZ5PUWP6YYC3FKTJFOMBVK7QWOGB7FT7EHZFOGFWBNV3LHFHQ46QCelpe: Bazel aquery-drive beyond genrules — cc_binary proven end-to-end (runs). New: (1) action_body dispatches on action shape not mnemonic — SpawnAction runs argv; FileWrite writes file_contents; TemplateExpand substitutes template_content; UnresolvedSymlink ln -sfn — replay_script takes ~body. (2) --include_file_write_contents so FileWrite param/manifest contents are in the proto. (3) ~toolchain provisions compilers/linkers in BOTH aquery (Bazel's cc auto-config detects them) and every replay (baked argv[0] store paths resolve). (4) ~override_repos threads --override_repository so vendored rules_cc/bazel_skylib resolve without a GitHub http_archive; plus minimal /etc/resolv.conf+nsswitch so the remaining hash-pinned WORKSPACE-suffix rules (rules_python/java) fetch at planning time (replay stays hermetic). (5) aquery writes the proto to $DESTDIR/aquery.pb (analyse reads it there) — survives a cache hit, unlike stdout which does not re-stream. (6) LIBRARY_PATH gains every toolchain lib dir incl. the gcc version dir (libstdc++.so) — Elpe keeps inputs as distinct store paths, not a merged /usr. (7) output_derivation selects the deliverable by output basename (a cc_binary's 'hello', not its stripped/dwp leaves). examples/bazel-cc: cc_binary compiled+linked as native derivations via the container's own gcc-14; the ELF runs ('hello from bazel cc via elpe').
Created by pmeunier on Aug 5, 2026, 7:32 AM
State:
UD64UKU63NIP2WTHPNPBBUP3IS57NITIOIXAD2HS7CGQ34SRBA2ACeval-vm.md: increment 12 (5b-ii) landed — THE BIG PROOF. The unmodified real derivation.ml runs inside the sandbox VM over the host-prim transport; a real Derivation RPC round-trips against the live backend. Status header updated. Remaining: 5c (add_path/local_src/locks -> host prims, drop h2), CLI to Rust.
Created by pmeunier on Aug 5, 2026, 7:31 AM
State:
OK2DBBIVU7PIALUTUU6MXBOJKJG7UNIBKBNDCANQ6RNZWMQN7ZMACeval-vm increment 12 (port step 5b-ii): THE REAL derivation.ml runs inside the sandbox VM. The demo bytecode now compiles the actual elpe/lib/derivation.ml (h2-free since inc 11) + platform.ml straight from the source tree (no copy/drift) alongside the VM plumbing; Vm_backend installs the host-prim transport (backend_call/backend_stream) into Derivation's backend_unary_raw/backend_stream_raw refs. test.ml calls the UNMODIFIED Derivation.derivation to run a real Derivation RPC over host prims. Vm_prelude.backend_stream's ~f is now string->unit Lwt.t (matches the real grpc_call_streaming handler; the sync DSL handlers resolve immediately). build.rs adds hex+ppx_string packages. Verified in scratch: the real derivation.ml closure compiles AND links against the curated prim set (no denied prim).
Created by pmeunier on Aug 5, 2026, 7:29 AM
State:
AQ6XAUZIHQDCXFYCYS7F257CSHBWDLEPLXEHHH26K6QVVTVHVQEQCelfedit: refuse un-relocatable ELFs cleanly instead of panicking (vDSO). update_section_allocate now returns UnsupportedLayout when the PT_LOAD alignment is sub-page (no mmap-friendly relocation, no writable tail) rather than tripping assert_eq!(off%4096, vaddr%4096); update() propagates it and elpe's patch_elf/patch_result_elf skip the file. Add vdso fixture+regression test, an ELF corpus_stress example, and make machoedit scan.rs edit a temp copy (never the input, covers read-only files, avoids framework-seal false positives)
Created by pmeunier on Aug 5, 2026, 7:24 AM
State:
IWQS4WHXI5CKYF7DXHP5ETVVLFCGJNE7UD3PZSYK34WM4DMVKNXACseed: publish sha256 of the first reproducibly self-built nix-free elpe backend (f960f4ee, roadmap §6)
Created by pmeunier on Aug 5, 2026, 4:18 AM
State:
V3O2MVQRMUTJ5BVHGSK4T2WYBD3UTXADQTZDRMVS64NGEXOQER7ACeval-vm.md: increment 11 (5b-i) landed — derivation.ml decoupled from h2/grpc (native transport moved to Backend_native, linked native-only), now VM-linkable. Next 5b-ii: compile derivation.ml into the VM + host-prim transport installer + run a real Derivation in the sandbox.
Created by pmeunier on Aug 5, 2026, 7:20 AM
State:
P7FXXY2JHHQVFBHFC4L7STG7TFPCLCFCVAY6GRV6EO4JTW7QAL3ACelpe frontend increment 11 (port step 5b): decouple derivation.ml from h2/grpc-lwt so it's VM-linkable. Move the native h2 transport (native_unary/native_stream/connect_native + the live connection handle) out to a new Backend_native module, linked ONLY in the native elpe_bin — never the curated VM image (whose bytecode may reference no socket prim). derivation.ml is now h2/grpc/unix-FREE: grpc_call_* talk only to the raw byte refs; backend_conn is a unit 'connected' flag (real h2 handle lives in Backend_native.native_conn, read by the not-yet-ported add_path in elpe.ml); the return tuple's status slot is now unit (callers already discard it) so grpc-lwt no longer leaks in. connection param stays a vestigial unit token -> ZERO churn in lock.ml and all call sites. elpe.ml re-exports connect_native so elpe_bin is unchanged. dune build green; native path structurally identical (native_* byte-for-byte, just relocated).
Created by pmeunier on Aug 5, 2026, 7:18 AM
State:
2VDUXLITB3VNCSEMNJACE6QJPQ7HRJXCVRV3IAZRMV666A3K7OWACelpe: Bazel aquery-in-container proven end-to-end (Cargo parity). Closes the external/ gap: class aquery exports Bazel's managed external/ tree (output_base/external — @bazel_tools etc., where genrule-setup.sh lives; the execroot symlink farm is only materialised for executed actions) into $DESTDIR, and action_replay stages source inputs under external/ from that export (is_external_exec) instead of the user workspace. Also: action_replay provisions bash and symlinks Bazel's baked /bin/bash genrule shell; replay_script pre-creates each output's parent dir in the execroot. examples/bazel now runs offline via .bazelrc --noenable_bzlmod + empty WORKSPACE (a genrule needs only the embedded @bazel_tools, zero network); MODULE.bazel dropped (vestigial once bzlmod is off). Proven live against :50051: aquery->proto->2 native derivations->execroot replay->final artifact 'HELLO BAZEL\nHELLO BAZEL' (uppercased doubled in.txt), external/ input from the aquery export, generated out.txt from the producer derivation, /bin/bash resolved to the container bash.
Created by pmeunier on Aug 5, 2026, 6:49 AM
State:
CCIAHN6QKU2CNS7NM6YO5RWKM5AP6KNUNL4SQVDV3LGRIYFGTETQCeval-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:
DFEY7YAG5V3AJDJI6WKGRMCMDXHNHWXRL522NW6BXZ7TQ33T7O5AC