11 · Development note · QA

QA: automated matches and network simulation

Every wave goes through the same gates: rule tests, network simulation, menu regression and the frame matrix.

In a card game the most expensive bug is the silent one: a rule fires wrongly, nobody notices, the match ends wrongly. To prevent that, the FrostZero rule engine is wrapped in a test suite that can be run from outside the editor. The count was eighty in the first week; today one hundred and eighty three tests pass and none fail.

A separate simulation tool was written for the network side. Inside a single process a server and several clients talk over a real connection, and the tool runs authority, privacy, rejection and disconnect scenarios in sequence. There are twenty six separate run folders and every run leaves its own log.

On top of that come the real match runs. Three independent game processes connect to the same room and play on autopilot, then the logs are compared. In one run all three clients showed the same board across all twenty four turns, malformed decisions were refused and a bot took over the seat of the dropped player. On the second game the same exercise produced zero mismatches across one hundred and twelve decision points.

There are two more tools for the menus and screens. One walks the menu flows by clicking and runs sixty one checks; the other opens each screen in turn, captures a frame and writes a numeric measurement alongside it. The capture tool has a blank frame gate built in: if the captured image is close to a single colour or its variance is too low the frame is treated as invalid, so a silently black screen cannot be reported as a pass.

The interface gets its own audit. Clipped text, text that does not fit its box, icons that drift out of scale and warning colour used in the wrong place are all searched for automatically. The static audit went from two hundred and fifty four violations down to zero. There is also a separate wire audit of twenty one checks for the round trip of network packets.

The frames next to this note were captured with the same tooling. For a wave to close, all of these have to be green at the same time: a clean compile, zero failing rule tests, a passing network simulation, a complete menu regression and an interface audit with zero clipping and zero overflow.