runTwinFixtureCase function
Runs one validated fixture case against the Dart rules twin, returning
failure descriptions (empty ⇒ the case passes).
A parse throw (config/observation/action fromJson) is reported as a
failure, not rethrown — a codec that cannot read the recorded payload is
itself twin drift.
Implementation
List<String> runTwinFixtureCase(
GameRules<dynamic, dynamic, dynamic> rules,
TwinFixtureCase fixtureCase,
) => switch (fixtureCase) {
ActionCase() => _runActionCase(rules, fixtureCase),
RatingPoolCase() => _runRatingPoolCase(rules, fixtureCase),
BotSeatableCase() => _runBotSeatableCase(rules, fixtureCase),
};