Why the harness owns the loop, not the project
The harness is shared by every project that has a model. Each project supplies a set and a bar, and inherits the loop.
The one thing that must not be cached
The grade is never cached, the output is. Caching the grade freezes a grader that may have been fixed since.