@@ -45,12 +45,14 @@ export interface FreebuffSessionEntitlementBreakdown {
4545 * Sessions included by the account's PAID subscription tier
4646 * (`common/constants/freebuff-subscriptions.ts`).
4747 *
48- * When present it is the whole of `limit`, not an addition to it: a
49- * subscribable model is metered by the subscription instead of by the free
50- * pool that would otherwise cover it, so `base`/`referral`/`streak` are all
51- * zero on that row. A subscriber whose row read "4 subscription + 5 premium"
52- * would reasonably expect nine sessions, and the shared premium pool is
53- * exactly what the subscription replaces.
48+ * An ADDITION to `base`, not a replacement for it — since 2026-08-26, when
49+ * the plan started topping the free pools up rather than replacing them.
50+ * Free sessions burn first and the plan covers what is left, so a row reading
51+ * "5 base + 4 subscription" means nine sessions today and `limit` is nine.
52+ *
53+ * (It was the whole of `limit` under the older replace-semantics, with
54+ * `base` zeroed. A client that sums the breakdown gets the right total under
55+ * both, which is why the change needed no client release.)
5456 *
5557 * Omitted for everyone without a live subscription, so an older client that
5658 * never reads it still sums to the right `limit`.
@@ -120,8 +122,12 @@ export interface FreebuffSubscriptionUsage {
120122 * free pool is spent the free figures are simply not on the wire, and a
121123 * client trying to add "free + plan" from it double-counts the plan row.
122124 *
123- * Both zero for accounts with no free pool at all (god/admin, who are
124- * quota-exempt), and absent entirely from servers older than this field.
125+ * Reported for quota-exempt accounts (god/admin) too: their free pool is not
126+ * ENFORCED, but the entitlement is still the honest free half of the combined
127+ * figure. Absent entirely from servers older than this field.
128+ *
129+ * The same numbers back the combined `rateLimitsByModel` rows, from one
130+ * memoized read, so the panel and every picker header cannot disagree.
125131 */
126132 freeDayUsed ?: number
127133 freeDayLimit ?: number
0 commit comments