Thirteen modules carried over one to one
Nine 5×5 modules and four 3×3 ones — basic, time-based, row-based, zone-based, per player, restarts. The agreement is guarded by tests that compare the result cell by cell against printouts from the old program — quirks included, because agreement is agreement.
Sheet import with a validator that says what and where
You upload the file and get a list of problems with the row number, the rule name and a suggestion taken from the data — the nearest valid code, an adjacent time, the quarter of the neighbouring possessions. Nothing is applied on its own; you decide.
File check and comparison
Two sheets set side by side row by row, with agreement computed per column and a history of checks. This is a tool for settling arguments about numbers, not for hiding them.
An export that looks like your file
XLSX and CSV computed on the server, with the ordinal number and the formatting of the original. Column settings are remembered per user.
A rejected export stopped being a single sentence
When a game does not make it into the statistics, you get a list of problems with the rule, the field and the possession number, not an “import failed” message. The history of attempts is stored — including the ones that were stopped, because “what happened” is asked most often when something is missing.