Order-independent matchup rows
Ember versus Tide and Tide versus Ember are treated as one matchup. The reported side is alphabetically first, so the result stays stable when CSV row order changes.
Draws are not discarded
The confidence interval uses decisive games, while the report keeps the draw count visible. A high draw rate can be its own design signal and should not be disguised as half a win.
Separate confounding conditions
The minimum schema groups by rules version, but not seat, map, scenario, or player skill. Filter those conditions before import when they could explain a matchup pattern, then retest rather than treating correlation as a faction diagnosis.