namespace NeonSprawl.Server.Game.Mastery; /// How the unlock was triggered (branch-pick tier perks vs path-auto after level-up). public enum PerkUnlockSource { BranchPick, LevelUp, } /// Internal event when a perk becomes unlocked (NEO-47). E9.M1 perk_unlock hook site: TryUnlockPerks (NEO-49). /// Chosen branch when relevant; null for edge cases without a branch context. public sealed record PerkUnlockEvent( string PlayerId, string PerkId, string SkillId, int TierIndex, string? BranchId, PerkUnlockSource Source);