diff --git a/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEngine.cs b/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEngine.cs
index 307308d..400369e 100644
--- a/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEngine.cs
+++ b/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEngine.cs
@@ -240,6 +240,12 @@ public sealed class PerkUnlockEngine(
events = newIds
.Select(pid => new PerkUnlockEvent(playerId, pid, skillId, tierIndex, branchId, source))
.ToList();
+
+ // --- Telemetry hook site (NEO-49): future E9.M1 catalog event `perk_unlock` ---
+ // TODO(E9.M1): catalog emit — once per entry in `events` (idempotent reevaluation produces none).
+ // Planned payload fields: playerId, perkId, skillId, tierIndex, branchId, source (BranchPick | LevelUp).
+ // No ingest or ILogger here (comments-only).
+
return true;
}
}
diff --git a/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEvent.cs b/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEvent.cs
index 63bde65..3d28bda 100644
--- a/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEvent.cs
+++ b/server/NeonSprawl.Server/Game/Mastery/PerkUnlockEvent.cs
@@ -1,6 +1,6 @@
namespace NeonSprawl.Server.Game.Mastery;
-/// Internal event when a perk becomes unlocked (NEO-47; NEO-49 telemetry).
+/// Internal event when a perk becomes unlocked (NEO-47). E9.M1 perk_unlock hook site: TryUnlockPerks (NEO-49).
public enum PerkUnlockSource
{
BranchPick,