Keeps only engine-agnostic checks: spec shape and effect-measure existence.
Per-engine hard errors live in that engine's own validate hook, registered
via register_engine(), and run by evaluate() after this shared check.
Keeps only engine-agnostic checks: spec shape and effect-measure existence.
Per-engine hard errors live in that engine's own validate hook, registered
via register_engine(), and run by evaluate() after this shared check.