// ExperimentManifest — everything needed to reproduce a run: host, toolchain, library version, plan, seeds, inputs. #pragma once #include #include #include #include #include "raid/core/types.hpp" #include "raid/core/plan.hpp" namespace raid { struct ExperimentManifest { std::string experiment; // e.g. "E1.batched_rv" std::string created_at_utc; std::string raid_version; std::string git_commit; nlohmann::json host; // from host_info() nlohmann::json plan; // ExecutionPlan::to_json u64 seed{0}; std::map inputs; // name → sha256 std::map parameters; std::vector records; // raw benchmark / result records nlohmann::json to_json() const; void save(const std::string& path) const; }; /// Host information gathered at run time (no secrets): chip, cores, memory, OS, compiler, load, thermal state, power. nlohmann::json host_info(); std::string now_utc_iso(); /// Peak resident set size in bytes (ru_maxrss), for memory metrics. u64 peak_rss_bytes(); } // namespace raid