v1.31.3 QA — Random Pack mixed difficulty

Scope

This QA pass covers only the new weighted mixed-difficulty behaviour in Random Pack mode and regression protection for the existing fixed-difficulty and manual workflows.

Automated checks

assets/99club/tests/games-random-pack-smoke.js now verifies:

  • fixed Challenge Random Packs still generate every activity at Challenge;
  • fixed-difficulty worked examples retain the selected level;
  • an 8-activity 25/50/25 pack allocates exactly 2 Easy / 4 Standard / 2 Challenge;
  • a 6-activity 20/50/30 pack uses largest-remainder allocation of 1 / 3 / 2;
  • relative weights such as 1/2/1 normalize to 25/50/25;
  • the mixed plan remains deterministic for the same seed;
  • manual mode still preserves each selected engine’s own difficulty;
  • the UI exposes Mixed mode, all four presets and the derived-Standard explanation.

Local Node syntax checks and the expanded random-pack smoke test pass.

Regression boundary

No intentional changes to:

  • individual game generators;
  • arithmetic/category generation added in v1.31.2;
  • direct PDF layout/rendering;
  • manual game selection and individual engine settings;
  • year/topic compatibility filtering;
  • personalisation or answer-sheet behaviour.