namespace NeonSprawl.Server.Game.Mastery; /// Persisted mastery branch picks and unlocked perks per player (NEO-47). public interface IPlayerPerkStateStore { PerkStateSnapshot GetSnapshot(string playerId); /// Fails when pick already exists for (skillId, tierIndex) or player cannot be written. bool TrySetBranchPick(string playerId, string skillId, int tierIndex, string branchId); /// Adds perks not already unlocked; fails when player cannot be written. bool TryAddUnlockedPerks(string playerId, IEnumerable perkIds); }