1// ExperimentManifest — everything needed to reproduce a run: host, toolchain, library version, plan, seeds, inputs.2#pragma once3#include <string>4#include <vector>5#include <map>6#include <nlohmann/json.hpp>7#include "raid/core/types.hpp"8#include "raid/core/plan.hpp"910namespace raid {1112struct ExperimentManifest {13 std::string experiment; // e.g. "E1.batched_rv"14 std::string created_at_utc;15 std::string raid_version;16 std::string git_commit;17 nlohmann::json host; // from host_info()18 nlohmann::json plan; // ExecutionPlan::to_json19 u64 seed{0};20 std::map<std::string, std::string> inputs; // name → sha25621 std::map<std::string, std::string> parameters;22 std::vector<nlohmann::json> records; // raw benchmark / result records23 nlohmann::json to_json() const;24 void save(const std::string& path) const;25};2627/// Host information gathered at run time (no secrets): chip, cores, memory, OS, compiler, load, thermal state, power.28nlohmann::json host_info();29std::string now_utc_iso();30/// Peak resident set size in bytes (ru_maxrss), for memory metrics.31u64 peak_rss_bytes();3233} // namespace raid34