Design an intermediate representation (IR) for a graphics testing workflow as a DAG. Define node/edge types, metadata, and side-effect modeling. Explain how to compile this IR into an executable plan with caching, incremental rebuilds, and deterministic ordering. How would you handle versioning and schema evolution?