import type { EnvironmentConfig, RawEvalSchema } from "../eval/types.js"; import type { ParamValue } from "../params/types.js"; import type { ExperimentExecution } from "./types.js"; /** A fully resolved experiment, ready for Phase 2 runner execution. */ export interface ResolvedExperiment { /** Experiment config name. */ name: string; /** Absolute path to the experiment file. */ experimentFile: string; /** The baseline variant name. */ baseline: string; /** Variant names in declaration order. */ variantNames: string[]; /** JSON Pointer paths declared as the comparison axis (the `vary` * field). Carried through so downstream consumers (shard manifest, * `experiment compare`) don't have to re-read the experiment config. */ vary: string[]; /** Execution settings. */ execution: ExperimentExecution; /** Resolved run plans: one per eval × variant. */ plans: ResolvedRunPlan[]; } /** A single eval × variant run plan with effective config. */ export interface ResolvedRunPlan { /** Variant name (key from experiment.variants). */ variant: string; /** Absolute path to the eval file. */ evalFile: string; /** Eval file path relative to experiment directory (for provenance). */ relativeEvalFile: string; /** The original loaded eval spec (unmodified). */ originalEvalSpec: RawEvalSchema; /** * Runnable eval spec with experiment + variant overrides applied. * Pass this directly to runMatchedEval as the spec. */ effectiveSpec: RawEvalSchema; /** Config hash for provenance (covers defaults + environment). */ configHash: string; /** Content hash of the eval file (for provenance). */ evalHash: string; } export interface ResolveExperimentOptions { /** Named environments from .vally.yaml (for resolving string environment refs). */ environments?: Record; /** Suite-level params from .vally.yaml (lowest precedence). */ suiteParams?: Record; /** CLI-level params (highest precedence, scalars only). */ cliParams?: Record; /** * Path/glob patterns that narrow the experiment's declared evals to a subset. * Each pattern is resolved with the same semantics as the experiment file's * `evals:` globs and intersected with them — selectors can only narrow the * declared set, never introduce an eval the file didn't already declare. A * pattern that is invalid, or that matches none of the declared evals, fails * fast. */ evalFilters?: string[]; } /** * Resolve an experiment YAML file into a complete execution plan. * * 1. Load & validate the experiment config * 2. Resolve eval globs to file paths * 3. Load each eval spec * 4. For each eval × variant: interpolate, merge, hash * 5. Run drift detection per eval * 6. Return the resolved experiment */ export declare function resolveExperiment(experimentFile: string, options?: ResolveExperimentOptions): Promise; //# sourceMappingURL=resolver.d.ts.map