@vue-skuilder/db 0.2.10 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2568,7 +2568,7 @@ var srs_exports = {};
2568
2568
  __export(srs_exports, {
2569
2569
  default: () => SRSNavigator
2570
2570
  });
2571
- var import_moment3, DEFAULT_HEALTHY_BACKLOG, MAX_BACKLOG_MULTIPLIER, SRSNavigator;
2571
+ var import_moment3, DEFAULT_HEALTHY_BACKLOG, BACKLOG_GROWTH_RATE, SRSNavigator;
2572
2572
  var init_srs = __esm({
2573
2573
  "src/core/navigators/generators/srs.ts"() {
2574
2574
  "use strict";
@@ -2577,7 +2577,7 @@ var init_srs = __esm({
2577
2577
  init_SrsDebugger();
2578
2578
  init_logger();
2579
2579
  DEFAULT_HEALTHY_BACKLOG = 20;
2580
- MAX_BACKLOG_MULTIPLIER = 2;
2580
+ BACKLOG_GROWTH_RATE = 2;
2581
2581
  SRSNavigator = class extends ContentNavigator {
2582
2582
  /** Human-readable name for CardGenerator interface */
2583
2583
  name;
@@ -2699,7 +2699,7 @@ var init_srs = __esm({
2699
2699
  dueNow: dueReviews.length,
2700
2700
  healthyBacklog: this.healthyBacklog,
2701
2701
  backlogMultiplier,
2702
- maxBacklogMultiplier: MAX_BACKLOG_MULTIPLIER,
2702
+ backlogGrowthRate: BACKLOG_GROWTH_RATE,
2703
2703
  topReviewScore: sorted.length > 0 ? sorted[0].score : null,
2704
2704
  nextDueIn,
2705
2705
  timestamp: Date.now()
@@ -2709,25 +2709,30 @@ var init_srs = __esm({
2709
2709
  /**
2710
2710
  * Compute the multiplicative backlog pressure based on number of due reviews.
2711
2711
  *
2712
- * ×1.0 at or below the healthy threshold (no boost), increasing linearly above
2713
- * it and maxing out at MAX_BACKLOG_MULTIPLIER at the healthy backlog.
2712
+ * ×1.0 at or below the healthy threshold (no boost); above it, grows as
2713
+ * BACKLOG_GROWTH_RATE raised to the excess expressed in multiples of the
2714
+ * healthy threshold. Uncapped — self-regulating instead: reviews winning
2715
+ * slots depletes dueCount, which drops the ratio and relaxes the multiplier
2716
+ * next run.
2714
2717
  *
2715
- * Examples (with default healthyBacklog=20, MAX_BACKLOG_MULTIPLIER=2.0):
2716
- * - 10 due reviews → ×1.00 (healthy)
2717
- * - 20 due reviews → ×1.00 (at threshold)
2718
- * - 40 due reviews → ×1.50 (2x threshold)
2719
- * - 60 due reviews → ×2.00 (3x threshold, maxed)
2718
+ * Examples (with default healthyBacklog=20, BACKLOG_GROWTH_RATE=1.5):
2719
+ * - 10 due reviews → ×1.00 (healthy)
2720
+ * - 20 due reviews → ×1.00 (at threshold, ratio 0)
2721
+ * - 40 due reviews → ×1.50 (ratio 1, 2x threshold)
2722
+ * - 60 due reviews → ×2.25 (ratio 2, 3x threshold — old hard cap was ×2.00 here)
2723
+ * - 100 due reviews → ×5.06 (ratio 4, 5x threshold)
2724
+ * - 160 due reviews → ×17.09 (ratio 7, 8x threshold)
2720
2725
  *
2721
2726
  * @param dueCount - Number of reviews currently due
2722
- * @returns Multiplier applied to review urgency (1.0 to MAX_BACKLOG_MULTIPLIER)
2727
+ * @returns Multiplier applied to review urgency (>= 1.0, unbounded)
2723
2728
  */
2724
2729
  computeBacklogMultiplier(dueCount) {
2725
2730
  if (dueCount <= this.healthyBacklog) {
2726
2731
  return 1;
2727
2732
  }
2728
2733
  const excess = dueCount - this.healthyBacklog;
2729
- const multiplier = 1 + excess / this.healthyBacklog * ((MAX_BACKLOG_MULTIPLIER - 1) / 2);
2730
- return Math.min(MAX_BACKLOG_MULTIPLIER, multiplier);
2734
+ const ratio = excess / this.healthyBacklog;
2735
+ return Math.pow(BACKLOG_GROWTH_RATE, ratio);
2731
2736
  }
2732
2737
  /**
2733
2738
  * Compute urgency score for a review card.
@@ -2743,17 +2748,17 @@ var init_srs = __esm({
2743
2748
  * - 180 days → ~0.30
2744
2749
  *
2745
2750
  * 3. Backlog pressure = global *multiplier* when review backlog exceeds the
2746
- * healthy threshold (×1.0 healthy → up to MAX_BACKLOG_MULTIPLIER at ).
2751
+ * healthy threshold (×1.0 healthy → exponential growth, uncapped, above it).
2747
2752
  *
2748
2753
  * Combined: (base 0.5 + urgency factors * 0.45) × backlog multiplier.
2749
2754
  * Per-card range before pressure: ~0.57–0.95. NOT clamped to 1.0 — under a
2750
2755
  * heavy backlog reviews scale onto the open scale to compete with (and exceed)
2751
- * new cards; what keeps them from running away is the bounded multiplier, not
2752
- * a hard ceiling.
2756
+ * new cards; there's no ceiling at all now, so a bad enough backlog always
2757
+ * wins eventually — self-regulating because winning slots depletes dueCount.
2753
2758
  *
2754
2759
  * @param review - The scheduled card to score
2755
2760
  * @param now - Current time
2756
- * @param backlogMultiplier - Pre-computed backlog multiplier (1.0 to MAX_BACKLOG_MULTIPLIER)
2761
+ * @param backlogMultiplier - Pre-computed backlog multiplier (>= 1.0, unbounded)
2757
2762
  */
2758
2763
  computeUrgencyScore(review, now, backlogMultiplier) {
2759
2764
  const scheduledAt = import_moment3.default.utc(review.scheduledAt);