A solve and a Check Solution run share the identical scoring logic. The difference is the search: a solve spends its time budget trying moves that might improve the score, while Check Solution runs with no time budget for search at all. It scores the roster exactly as it stands and stops. That is why it comes back in seconds regardless of how large the roster is: there is nothing to search, only arithmetic to do once against every active rule.
Works on anything, not just a solved roster
A planner who hand-placed half a roster and let the solver fill the rest can run Check Solution on the result exactly as they would on a fully automated solve. The scoring does not know or care how an assignment got there. It evaluates what is actually on the grid.
Changes nothing
Running it does not move a single shift. It is purely a read: a report of where the roster stands against the rules, which is exactly what makes it safe to run as often as anyone wants, before a publish, mid-edit, or to test a question that has nothing to do with publishing at all.