An evaluation is only useful if the harness stays fixed while the model changes. The moment you fork the runner to talk to a second API, the two code paths drift: one gets a fix to the JSON repair step, the other does not, and the numbers you compare are produced by different programs. The practical rule is to treat the eval runner as the constant and the provider as the variable, the same discipline that a weighted criteria matrix brings to a decision, where scoring options against a shared set of weighted factors makes the comparison explicit rather than political the GoLeanSixSigma matrix guide. If the criteria, in this case the assertions, are not identical across rows, the comparison tells you nothing.
LLM evaluation is already hard for reasons that have nothing to do with the API: infinite prompt space, non-determinism, sensitivity to tiny prompt edits, and error compounding in multi-step agent runs the practical evaluation guide. Adding a second, nearly identical copy of the harness multiplies that difficulty. A compatibility harness with a golden dataset of 50 to 200 real inputs and a multi-dimensional rubric is the pattern teams that survive provider migrations share the portability write-up. That harness is worth building once.
There is a second reason to keep one runner: prompt behavior does not transfer cleanly. Reusing a prompt engineered for one model on another often produces worse results, a phenomenon documented as model drifting, and cross-model prompt transfer has been measured to change downstream accuracy substantially the PromptBridge paper. You cannot see that drift if your two evals are written differently.



