Loadout
Purpose
Section titled “Purpose”A Loadout captures what one player brought to one Match: their faction, character, starting cards, or any other game-specific configuration that applies to them individually, rather than to the Match as a whole.
Loadout is the per-player counterpart to Playset. Playset is shared and applies equally to every participant (expansions, variants, scenario); Loadout is individual and can differ from player to player within the same Match.
Responsibilities
Section titled “Responsibilities”A Loadout is responsible for:
- holding player-specific, game-defined configuration for one Participation;
- feeding faction- and character-level statistics (e.g. faction win rates).
Not Responsible For
Section titled “Not Responsible For”A Loadout is NOT responsible for:
- configuration shared across all participants — that belongs to Playset;
- the player’s result (score, rank, outcome) — that belongs to Participation directly;
- identity resolution.
Invariants
Section titled “Invariants”- A Loadout belongs to exactly one Participation.
- A Loadout’s fields are game-dependent and may be partially or fully empty for games that do not define factions, characters, or comparable concepts.
- A Loadout does not change except through an approved MatchEdit that targets it — the same rule as Participation’s result.
Lifecycle
Section titled “Lifecycle”Creation
Section titled “Creation”A Loadout is created together with its Participation, when the Match is recorded, for games that define player-specific configuration.
Evolution
Section titled “Evolution”None. Immutable once created.
End State
Section titled “End State”A Loadout is never deleted while its Participation exists.
Relationships
Section titled “Relationships”- Loadout belongs to Participation.
Aggregate Design
Section titled “Aggregate Design”Loadout is a value object / child entity within the Match aggregate, scoped under its Participation. It has no independent identity or lifecycle outside of its Participation.