A cell is one (task × protocol × grid × baseline) runner invocation; it is done only when every expected test-set result.json is valid. Three non-green states are kept distinct and none is hidden: pending (queued sweep work), failed (partial artifacts), and N/A (excluded by a stated applicability rule, not missing).
legend: done · pending · failed · N/A by rule (hover any square for the cell and its reproduce command)
columns per task strip: grid (voltage order: cigre_mv · double_line · testgrid_110kv · ieee39) × baseline (majority · threshold · random_forest · mlp · gru · cnn · resnet)
columns per task strip: grid (voltage order: template_20kv · template_110kv · template_345kv) × baseline (majority · threshold · random_forest · mlp · gru · cnn · resnet)
columns per task strip: grid (voltage order: cigre_mv · double_line · testgrid_110kv · ieee39) × baseline (majority · threshold · random_forest · mlp · gru · cnn · resnet)
columns per task strip: grid (voltage order: cigre_mv · double_line · testgrid_110kv · ieee39) × baseline (majority · threshold · random_forest · mlp · gru · cnn · resnet)
The same matrix is committed as coverage_snapshot.json with the exact runner argument line per cell, and summarized by python -m evemtbench.coverage --summary.