Problem
ActorCell emits actor_mailbox_dropped_total with labels { class, path, reason } (src/internal/ActorCell.ts:827-834). DefaultMetricsRegistry keys children by label-tuple in a Map that is only cleared wholesale (src/metrics/Metrics.ts — clear() is documented "primarily for tests"). Anonymous actors get $1, $2, … (src/internal/ActorCell.ts:187-197).
A per-request actor pattern under load — or sharded entities, whose ids are user-supplied and become actor paths — creates one permanent series per actor, in-process and in Prometheus. The metrics module's own doc warns "high-cardinality labels … will OOM your monitoring system" — and the framework's stock metric ships one. This is a concrete, framework-made instance of #131's threat model.
Proposed behaviour
Drop path from the stock label set (keep class + reason), or gate it behind an explicit opt-in high-cardinality flag.
Acceptance criteria
- Spawning 10 000 anonymous actors that overflow produces O(1) series.
Related: #131, #196
Problem
ActorCellemitsactor_mailbox_dropped_totalwith labels{ class, path, reason }(src/internal/ActorCell.ts:827-834).DefaultMetricsRegistrykeys children by label-tuple in aMapthat is only cleared wholesale (src/metrics/Metrics.ts—clear()is documented "primarily for tests"). Anonymous actors get$1,$2, … (src/internal/ActorCell.ts:187-197).A per-request actor pattern under load — or sharded entities, whose ids are user-supplied and become actor paths — creates one permanent series per actor, in-process and in Prometheus. The metrics module's own doc warns "high-cardinality labels … will OOM your monitoring system" — and the framework's stock metric ships one. This is a concrete, framework-made instance of #131's threat model.
Proposed behaviour
Drop
pathfrom the stock label set (keepclass+reason), or gate it behind an explicit opt-in high-cardinality flag.Acceptance criteria
Related: #131, #196