2.8 KiB
Wave B-5a: @suaveplan/game-server matchmaking slice
Package: @suaveplan/game-server
Status: PROPOSED
Type: feature-add (additive to existing 0.1.0 package)
Why
Wave A landed the @suaveplan/game-server core foundation (DI
container, error registry, Zod-validated boundary types). Five parallel
waves now extend the package along orthogonal axes; B-5 owns the
matchmaking + performance axis. This change covers the matchmaking
half; a sibling change (game-server-performance) covers pooling and
network-tier adapter.
The upstream reference
(/mnt/s/web/suaveplan/packages/universal/game-server/src/matchmaking/)
ships five modules — MatchmakingEngine, QueueManager,
SpectatorManager, skill-matcher, winner-stays-on — but couples
them to upstream-only types (Logger, GameEventEmitter,
AbstractStorage) and emits events that do not appear in the genesis
GameEvents map. This slice ports the algorithms, replaces the
upstream couplings with @suaveplan/types (Clock, IdGenerator,
Rng) plus typed observer callbacks, and adds OTel-native
instrumentation that the upstream lacked.
What changes
- ADDED:
src/matchmaking/queue-manager/— priority-queue manager with premium / wait-time / explicit-offset priority math, configurablemaxQueueSize, four OTel instruments, Zod-validated boundary, typedMATCHMAKING_QUEUE_FULL/INVALID_QUEUE_REQUESTerrors. - ADDED:
src/matchmaking/skill-matcher/— Elo-style matcher with pluggable scoring fn, base + wait-time range, injectableClockandRng, two OTel instruments. - ADDED:
src/matchmaking/spectator-manager/— per-session spectator roster with cap enforcement, three OTel counters, Zod-validated permissions,onSpectatorJoined/onSpectatorLeftcallbacks. - ADDED:
src/matchmaking/winner-stays-on/— winner-stays-on strategy with champion / streak / challenger-queue tracking, two OTel counters, configurable streak cap. - ADDED:
src/matchmaking/matchmaking-engine/— top-level façade composing the above;createMatch(players, criteria, algorithm)+createMatchFromQueue(queueKey, criteria, algorithm)(drain + match- restore on shortfall);
quickandskill-basedalgorithms; injectableIdGenerator; three OTel instruments.
- restore on shortfall);
Impact
- Affected specs:
openspec/specs/game-server/spec.md(game-server capability). - New error codes:
MATCHMAKING_QUEUE_FULL,INVALID_QUEUE_REQUEST,INVALID_MATCH_CRITERIA,NO_MATCH_FOUND,INVALID_SKILL_SCORE,SPECTATOR_LIMIT_REACHED,INVALID_SPECTATOR_REQUEST,UNKNOWN_MATCHING_ALGORITHM. - New subpath exports:
./matchmaking/{queue-manager, skill-matcher, spectator-manager, winner-stays-on, matchmaking-engine}. - No
core//state//engine//network/modifications.