@vue-skuilder/db 0.2.15 → 0.2.17

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.
@@ -37,6 +37,53 @@ declare function getSrsBacklogDebug(): SrsBacklogDebug[];
37
37
  /** Drop all captured snapshots (called on session start, alongside pipeline history). */
38
38
  declare function clearSrsBacklogDebug(): void;
39
39
 
40
+ /**
41
+ * A single named pressure reading. The common shape across strategies: a
42
+ * multiplier that climbs under some accumulated condition (staleness, debt,
43
+ * blockage), optionally clamped at a cap.
44
+ */
45
+ interface PressureGaugeDebug {
46
+ /** Stable identifier within the source (e.g. 'group:intro-core:target'). */
47
+ id: string;
48
+ /** Short display label (e.g. 'intro-core targets'). */
49
+ label: string;
50
+ /** Current pressure multiplier (×1.0 = no pressure). */
51
+ multiplier: number;
52
+ /** Clamp ceiling, if the multiplier is capped. Omit for unbounded. */
53
+ max?: number;
54
+ /** One-line context for the reading (counts, mode, staleness). */
55
+ detail?: string;
56
+ /** Expandable rows (blocked target ids, per-tag debt ages, ...). */
57
+ items?: Array<{
58
+ label: string;
59
+ value?: string;
60
+ }>;
61
+ }
62
+ /** One strategy's pressure snapshot for one course, captured once per run. */
63
+ interface StrategyPressureDebug {
64
+ /** Producer identity — implementingClass name (e.g. 'prescribed'). */
65
+ source: string;
66
+ courseId: string;
67
+ gauges: PressureGaugeDebug[];
68
+ /**
69
+ * Highest score this strategy emitted into the candidate pool this run;
70
+ * null if it emitted nothing. Compare against the supplyQ head score to
71
+ * read how the pressure is competing for slots (same crossover read as the
72
+ * SRS panel's `top review`).
73
+ */
74
+ topScore?: number | null;
75
+ /** Label of any one-shot hints emitted alongside the cards this run. */
76
+ hintsLabel?: string;
77
+ /** Epoch ms of capture. */
78
+ timestamp: number;
79
+ }
80
+ /** Called by a strategy once per run. Latest snapshot per (source, course) wins. */
81
+ declare function captureStrategyPressure(snapshot: StrategyPressureDebug): void;
82
+ /** Current pressure snapshot for every source seen, newest-first. */
83
+ declare function getStrategyPressureDebug(): StrategyPressureDebug[];
84
+ /** Drop all captured snapshots (called on session start, alongside pipeline history). */
85
+ declare function clearStrategyPressureDebug(): void;
86
+
40
87
  /**
41
88
  * Snapshot of the learning state for a strategy.
42
89
  *
@@ -805,4 +852,4 @@ declare const userDBDebugAPI: {
805
852
  */
806
853
  declare function mountUserDBDebugger(): void;
807
854
 
808
- export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory, CardHistory, CardRecord, CourseDBInterface, DIVERSITY_FLOOR, DIVERSITY_STRENGTH, type DiversityRerankOptions, DocType, DocTypePrefixes, type FilterContext, type FilterImpact, type GeneratorSummary, type GradientObservation, type GradientResult, type ImportResult, LearnableWeight, Loggable, OrchestrationContext, type PeriodUpdateInput, type PeriodUpdateResult, type PipelineForecaster, type PipelineRunReport, QuestionRecord, ReplanHints, type SignalConfig, type SrsBacklogDebug, StrategyContribution, type StrategyLearningState, type StrategyStateDoc, type StrategyStateId, UserDBInterface, UserOutcomeRecord, WeightedCard, aggregateOutcomesForGradient, areQuestionRecords, buildStrategyStateId, clearSrsBacklogDebug, computeOutcomeSignal, computeStrategyGradient, diversityRerank, docIsDeleted, getActivePipeline, getCardHistoryID, getDefaultLearnableWeight, getSrsBacklogDebug, importParsedCards, isQuestionRecord, mountPipelineDebugger, mountUserDBDebugger, parseCardHistoryID, pipelineDebugAPI, recordUserOutcome, runPeriodUpdate, scoreAccuracyInZone, updateLearningState, updateStrategyWeight, userDBDebugAPI, validateProcessorConfig };
855
+ export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory, CardHistory, CardRecord, CourseDBInterface, DIVERSITY_FLOOR, DIVERSITY_STRENGTH, type DiversityRerankOptions, DocType, DocTypePrefixes, type FilterContext, type FilterImpact, type GeneratorSummary, type GradientObservation, type GradientResult, type ImportResult, LearnableWeight, Loggable, OrchestrationContext, type PeriodUpdateInput, type PeriodUpdateResult, type PipelineForecaster, type PipelineRunReport, type PressureGaugeDebug, QuestionRecord, ReplanHints, type SignalConfig, type SrsBacklogDebug, StrategyContribution, type StrategyLearningState, type StrategyPressureDebug, type StrategyStateDoc, type StrategyStateId, UserDBInterface, UserOutcomeRecord, WeightedCard, aggregateOutcomesForGradient, areQuestionRecords, buildStrategyStateId, captureStrategyPressure, clearSrsBacklogDebug, clearStrategyPressureDebug, computeOutcomeSignal, computeStrategyGradient, diversityRerank, docIsDeleted, getActivePipeline, getCardHistoryID, getDefaultLearnableWeight, getSrsBacklogDebug, getStrategyPressureDebug, importParsedCards, isQuestionRecord, mountPipelineDebugger, mountUserDBDebugger, parseCardHistoryID, pipelineDebugAPI, recordUserOutcome, runPeriodUpdate, scoreAccuracyInZone, updateLearningState, updateStrategyWeight, userDBDebugAPI, validateProcessorConfig };
@@ -37,6 +37,53 @@ declare function getSrsBacklogDebug(): SrsBacklogDebug[];
37
37
  /** Drop all captured snapshots (called on session start, alongside pipeline history). */
38
38
  declare function clearSrsBacklogDebug(): void;
39
39
 
40
+ /**
41
+ * A single named pressure reading. The common shape across strategies: a
42
+ * multiplier that climbs under some accumulated condition (staleness, debt,
43
+ * blockage), optionally clamped at a cap.
44
+ */
45
+ interface PressureGaugeDebug {
46
+ /** Stable identifier within the source (e.g. 'group:intro-core:target'). */
47
+ id: string;
48
+ /** Short display label (e.g. 'intro-core targets'). */
49
+ label: string;
50
+ /** Current pressure multiplier (×1.0 = no pressure). */
51
+ multiplier: number;
52
+ /** Clamp ceiling, if the multiplier is capped. Omit for unbounded. */
53
+ max?: number;
54
+ /** One-line context for the reading (counts, mode, staleness). */
55
+ detail?: string;
56
+ /** Expandable rows (blocked target ids, per-tag debt ages, ...). */
57
+ items?: Array<{
58
+ label: string;
59
+ value?: string;
60
+ }>;
61
+ }
62
+ /** One strategy's pressure snapshot for one course, captured once per run. */
63
+ interface StrategyPressureDebug {
64
+ /** Producer identity — implementingClass name (e.g. 'prescribed'). */
65
+ source: string;
66
+ courseId: string;
67
+ gauges: PressureGaugeDebug[];
68
+ /**
69
+ * Highest score this strategy emitted into the candidate pool this run;
70
+ * null if it emitted nothing. Compare against the supplyQ head score to
71
+ * read how the pressure is competing for slots (same crossover read as the
72
+ * SRS panel's `top review`).
73
+ */
74
+ topScore?: number | null;
75
+ /** Label of any one-shot hints emitted alongside the cards this run. */
76
+ hintsLabel?: string;
77
+ /** Epoch ms of capture. */
78
+ timestamp: number;
79
+ }
80
+ /** Called by a strategy once per run. Latest snapshot per (source, course) wins. */
81
+ declare function captureStrategyPressure(snapshot: StrategyPressureDebug): void;
82
+ /** Current pressure snapshot for every source seen, newest-first. */
83
+ declare function getStrategyPressureDebug(): StrategyPressureDebug[];
84
+ /** Drop all captured snapshots (called on session start, alongside pipeline history). */
85
+ declare function clearStrategyPressureDebug(): void;
86
+
40
87
  /**
41
88
  * Snapshot of the learning state for a strategy.
42
89
  *
@@ -805,4 +852,4 @@ declare const userDBDebugAPI: {
805
852
  */
806
853
  declare function mountUserDBDebugger(): void;
807
854
 
808
- export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory, CardHistory, CardRecord, CourseDBInterface, DIVERSITY_FLOOR, DIVERSITY_STRENGTH, type DiversityRerankOptions, DocType, DocTypePrefixes, type FilterContext, type FilterImpact, type GeneratorSummary, type GradientObservation, type GradientResult, type ImportResult, LearnableWeight, Loggable, OrchestrationContext, type PeriodUpdateInput, type PeriodUpdateResult, type PipelineForecaster, type PipelineRunReport, QuestionRecord, ReplanHints, type SignalConfig, type SrsBacklogDebug, StrategyContribution, type StrategyLearningState, type StrategyStateDoc, type StrategyStateId, UserDBInterface, UserOutcomeRecord, WeightedCard, aggregateOutcomesForGradient, areQuestionRecords, buildStrategyStateId, clearSrsBacklogDebug, computeOutcomeSignal, computeStrategyGradient, diversityRerank, docIsDeleted, getActivePipeline, getCardHistoryID, getDefaultLearnableWeight, getSrsBacklogDebug, importParsedCards, isQuestionRecord, mountPipelineDebugger, mountUserDBDebugger, parseCardHistoryID, pipelineDebugAPI, recordUserOutcome, runPeriodUpdate, scoreAccuracyInZone, updateLearningState, updateStrategyWeight, userDBDebugAPI, validateProcessorConfig };
855
+ export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory, CardHistory, CardRecord, CourseDBInterface, DIVERSITY_FLOOR, DIVERSITY_STRENGTH, type DiversityRerankOptions, DocType, DocTypePrefixes, type FilterContext, type FilterImpact, type GeneratorSummary, type GradientObservation, type GradientResult, type ImportResult, LearnableWeight, Loggable, OrchestrationContext, type PeriodUpdateInput, type PeriodUpdateResult, type PipelineForecaster, type PipelineRunReport, type PressureGaugeDebug, QuestionRecord, ReplanHints, type SignalConfig, type SrsBacklogDebug, StrategyContribution, type StrategyLearningState, type StrategyPressureDebug, type StrategyStateDoc, type StrategyStateId, UserDBInterface, UserOutcomeRecord, WeightedCard, aggregateOutcomesForGradient, areQuestionRecords, buildStrategyStateId, captureStrategyPressure, clearSrsBacklogDebug, clearStrategyPressureDebug, computeOutcomeSignal, computeStrategyGradient, diversityRerank, docIsDeleted, getActivePipeline, getCardHistoryID, getDefaultLearnableWeight, getSrsBacklogDebug, getStrategyPressureDebug, importParsedCards, isQuestionRecord, mountPipelineDebugger, mountUserDBDebugger, parseCardHistoryID, pipelineDebugAPI, recordUserOutcome, runPeriodUpdate, scoreAccuracyInZone, updateLearningState, updateStrategyWeight, userDBDebugAPI, validateProcessorConfig };
@@ -1667,6 +1667,30 @@ var init_SrsDebugger = __esm({
1667
1667
  }
1668
1668
  });
1669
1669
 
1670
+ // src/core/navigators/StrategyPressureDebugger.ts
1671
+ var StrategyPressureDebugger_exports = {};
1672
+ __export(StrategyPressureDebugger_exports, {
1673
+ captureStrategyPressure: () => captureStrategyPressure,
1674
+ clearStrategyPressureDebug: () => clearStrategyPressureDebug,
1675
+ getStrategyPressureDebug: () => getStrategyPressureDebug
1676
+ });
1677
+ function captureStrategyPressure(snapshot) {
1678
+ snapshots2.set(`${snapshot.source}:${snapshot.courseId}`, snapshot);
1679
+ }
1680
+ function getStrategyPressureDebug() {
1681
+ return [...snapshots2.values()].sort((a, b) => b.timestamp - a.timestamp);
1682
+ }
1683
+ function clearStrategyPressureDebug() {
1684
+ snapshots2.clear();
1685
+ }
1686
+ var snapshots2;
1687
+ var init_StrategyPressureDebugger = __esm({
1688
+ "src/core/navigators/StrategyPressureDebugger.ts"() {
1689
+ "use strict";
1690
+ snapshots2 = /* @__PURE__ */ new Map();
1691
+ }
1692
+ });
1693
+
1670
1694
  // src/core/navigators/generators/CompositeGenerator.ts
1671
1695
  var CompositeGenerator_exports = {};
1672
1696
  __export(CompositeGenerator_exports, {
@@ -2031,6 +2055,13 @@ function shuffleInPlace(arr) {
2031
2055
  [arr[i], arr[j]] = [arr[j], arr[i]];
2032
2056
  }
2033
2057
  }
2058
+ function formatAge(ms) {
2059
+ const minutes = Math.max(0, Math.round(ms / 6e4));
2060
+ if (minutes < 60) return `${minutes}m`;
2061
+ const hours = Math.round(minutes / 60);
2062
+ if (hours < 24) return `${hours}h`;
2063
+ return `${Math.round(hours / 24)}d`;
2064
+ }
2034
2065
  function pickTopByScore(cards, limit) {
2035
2066
  return [...cards].sort((a, b) => b.score - a.score || a.cardId.localeCompare(b.cardId)).slice(0, limit);
2036
2067
  }
@@ -2039,6 +2070,7 @@ var init_prescribed = __esm({
2039
2070
  "src/core/navigators/generators/prescribed.ts"() {
2040
2071
  "use strict";
2041
2072
  init_navigators();
2073
+ init_StrategyPressureDebugger();
2042
2074
  init_logger();
2043
2075
  DEFAULT_FRESHNESS_WINDOW = 3;
2044
2076
  DEFAULT_MAX_DIRECT_PER_RUN = 3;
@@ -2115,6 +2147,7 @@ var init_prescribed = __esm({
2115
2147
  const groupRuntimes = [];
2116
2148
  const priorPracticeDebt = progress.practiceDebt ?? {};
2117
2149
  const nextPracticeDebt = {};
2150
+ const practiceDebtsByGroup = /* @__PURE__ */ new Map();
2118
2151
  for (const group of this.config.groups) {
2119
2152
  const runtime = this.buildGroupRuntimeState({
2120
2153
  group,
@@ -2163,7 +2196,7 @@ var init_prescribed = __esm({
2163
2196
  courseId,
2164
2197
  emittedIds
2165
2198
  );
2166
- const practiceCards = this.buildPracticeCards({
2199
+ const practice = this.buildPracticeCards({
2167
2200
  group,
2168
2201
  courseId,
2169
2202
  emittedIds,
@@ -2176,7 +2209,8 @@ var init_prescribed = __esm({
2176
2209
  priorPracticeDebt,
2177
2210
  nextPracticeDebt
2178
2211
  });
2179
- emitted.push(...directCards, ...supportCards, ...discoveredSupportCards, ...practiceCards);
2212
+ practiceDebtsByGroup.set(group.id, practice.debts);
2213
+ emitted.push(...directCards, ...supportCards, ...discoveredSupportCards, ...practice.cards);
2180
2214
  }
2181
2215
  nextState.practiceDebt = nextPracticeDebt;
2182
2216
  const hintSummary = this.buildSupportHintSummary(groupRuntimes);
@@ -2192,6 +2226,7 @@ var init_prescribed = __esm({
2192
2226
  } else {
2193
2227
  logger.info("[Prescribed] No hints to emit (no blocked targets or no support tags)");
2194
2228
  }
2229
+ this.capturePressureSnapshot(courseId, groupRuntimes, practiceDebtsByGroup, emitted, hints);
2195
2230
  if (emitted.length === 0) {
2196
2231
  logger.info(
2197
2232
  "[Prescribed] 0 cards emitted (all targets blocked, authored/discovered support candidates exhausted)" + (hints ? " \u2014 boost hints emitted but may not survive filters" : "")
@@ -2253,6 +2288,60 @@ var init_prescribed = __esm({
2253
2288
  supportTags: [...supportTags].sort()
2254
2289
  };
2255
2290
  }
2291
+ /**
2292
+ * Translate this run's per-group runtimes and practice debts into gauges on
2293
+ * the generic strategy-pressure debug channel (rendered by the live session
2294
+ * overlay's "strategy backpressure" section).
2295
+ */
2296
+ capturePressureSnapshot(courseId, groupRuntimes, practiceDebtsByGroup, emitted, hints) {
2297
+ const now = Date.now();
2298
+ const gauges = [];
2299
+ for (const runtime of groupRuntimes) {
2300
+ const group = runtime.group;
2301
+ const window2 = group.freshnessWindowSessions ?? DEFAULT_FRESHNESS_WINDOW;
2302
+ gauges.push({
2303
+ id: `group:${group.id}:target`,
2304
+ label: `${group.id} targets`,
2305
+ multiplier: runtime.pressureMultiplier,
2306
+ max: MAX_TARGET_MULTIPLIER,
2307
+ detail: `${runtime.pendingTargets.length} pending (${runtime.surfaceableTargets.length} surfaceable, ${runtime.blockedTargets.length} blocked) \xB7 sinceSurfaced ${runtime.sessionsSinceSurfaced}/${window2}`,
2308
+ items: runtime.blockedTargets.map((cardId) => ({ label: cardId, value: "blocked" }))
2309
+ });
2310
+ if (runtime.blockedTargets.length > 0) {
2311
+ const mode = runtime.supportCandidates.length > 0 ? "direct-support" : runtime.discoveredSupportCandidates.length > 0 ? "inserted-support" : "boost-only";
2312
+ gauges.push({
2313
+ id: `group:${group.id}:support`,
2314
+ label: `${group.id} support`,
2315
+ multiplier: runtime.supportMultiplier,
2316
+ max: MAX_SUPPORT_MULTIPLIER,
2317
+ detail: `mode=${mode} \xB7 ${runtime.supportTags.length} support tag(s)`,
2318
+ items: runtime.supportTags.map((tag) => ({ label: tag }))
2319
+ });
2320
+ }
2321
+ const debts = practiceDebtsByGroup.get(group.id) ?? [];
2322
+ if (debts.length > 0) {
2323
+ gauges.push({
2324
+ id: `group:${group.id}:practice-debt`,
2325
+ label: `${group.id} practice debt`,
2326
+ multiplier: Math.max(...debts.map((d) => d.multiplier)),
2327
+ max: MAX_PRACTICE_MULTIPLIER,
2328
+ detail: `${debts.length} under-practiced skill(s)`,
2329
+ items: debts.map((d) => ({
2330
+ label: d.tag,
2331
+ value: `\xD7${d.multiplier.toFixed(2)} \xB7 open ${formatAge(now - new Date(d.firstOwedAt).getTime())}`
2332
+ }))
2333
+ });
2334
+ }
2335
+ }
2336
+ captureStrategyPressure({
2337
+ source: "prescribed",
2338
+ courseId,
2339
+ gauges,
2340
+ topScore: emitted.length > 0 ? Math.max(...emitted.map((c) => c.score)) : null,
2341
+ hintsLabel: hints?._label,
2342
+ timestamp: now
2343
+ });
2344
+ }
2256
2345
  parseConfig(serializedData) {
2257
2346
  try {
2258
2347
  const parsed = JSON.parse(serializedData);
@@ -2409,6 +2498,7 @@ var init_prescribed = __esm({
2409
2498
  supportTags: [...supportTags],
2410
2499
  pressureMultiplier,
2411
2500
  supportMultiplier,
2501
+ sessionsSinceSurfaced,
2412
2502
  debugVersion: PRESCRIBED_DEBUG_VERSION
2413
2503
  };
2414
2504
  }
@@ -2541,13 +2631,13 @@ var init_prescribed = __esm({
2541
2631
  nextPracticeDebt
2542
2632
  } = args;
2543
2633
  const patterns = group.practiceTagPatterns ?? [];
2544
- if (patterns.length === 0) return [];
2634
+ if (patterns.length === 0) return { cards: [], debts: [] };
2545
2635
  const practiceMinCount = group.practiceMinCount ?? DEFAULT_PRACTICE_MIN_COUNT;
2546
2636
  const maxPractice = group.maxPracticeCardsPerRun ?? DEFAULT_MAX_PRACTICE_PER_RUN;
2547
2637
  const practiceTags = [...cardsByTag.keys()].filter(
2548
2638
  (tag) => patterns.some((p) => matchesTagPattern(tag, p)) && this.isUnlockedGatedSkill(tag, hierarchyConfigs, userTagElo, userGlobalElo) && (userTagElo[tag]?.count ?? 0) < practiceMinCount
2549
2639
  );
2550
- if (practiceTags.length === 0) return [];
2640
+ if (practiceTags.length === 0) return { cards: [], debts: [] };
2551
2641
  const now = Date.now();
2552
2642
  const DAY_MS = 24 * 60 * 60 * 1e3;
2553
2643
  const tagMultiplier = /* @__PURE__ */ new Map();
@@ -2562,6 +2652,11 @@ var init_prescribed = __esm({
2562
2652
  );
2563
2653
  tagMultiplier.set(tag, mult);
2564
2654
  }
2655
+ const debts = practiceTags.map((tag) => ({
2656
+ tag,
2657
+ multiplier: tagMultiplier.get(tag) ?? PRACTICE_BASE_MULT,
2658
+ firstOwedAt: nextPracticeDebt[tag]
2659
+ })).sort((a, b) => b.multiplier - a.multiplier || a.tag.localeCompare(b.tag));
2565
2660
  const practiceCardIds = this.findDiscoveredSupportCards({
2566
2661
  supportTags: practiceTags,
2567
2662
  cardsByTag,
@@ -2570,7 +2665,7 @@ var init_prescribed = __esm({
2570
2665
  excludedIds: emittedIds,
2571
2666
  limit: maxPractice
2572
2667
  });
2573
- if (practiceCardIds.length === 0) return [];
2668
+ if (practiceCardIds.length === 0) return { cards: [], debts };
2574
2669
  logger.info(
2575
2670
  `[Prescribed] Group '${group.id}' practice: ${practiceTags.length} unlocked under-practiced skill(s), emitting ${practiceCardIds.length} drill card(s)`
2576
2671
  );
@@ -2600,7 +2695,7 @@ var init_prescribed = __esm({
2600
2695
  ]
2601
2696
  });
2602
2697
  }
2603
- return cards;
2698
+ return { cards, debts };
2604
2699
  }
2605
2700
  /**
2606
2701
  * True for a skill that was *gated and is now reached*: it has at least one
@@ -5277,6 +5372,7 @@ var init_3 = __esm({
5277
5372
  "./PipelineAssembler.ts": () => Promise.resolve().then(() => (init_PipelineAssembler(), PipelineAssembler_exports)),
5278
5373
  "./PipelineDebugger.ts": () => Promise.resolve().then(() => (init_PipelineDebugger(), PipelineDebugger_exports)),
5279
5374
  "./SrsDebugger.ts": () => Promise.resolve().then(() => (init_SrsDebugger(), SrsDebugger_exports)),
5375
+ "./StrategyPressureDebugger.ts": () => Promise.resolve().then(() => (init_StrategyPressureDebugger(), StrategyPressureDebugger_exports)),
5280
5376
  "./defaults.ts": () => Promise.resolve().then(() => (init_defaults(), defaults_exports)),
5281
5377
  "./diversityRerank.ts": () => Promise.resolve().then(() => (init_diversityRerank(), diversityRerank_exports)),
5282
5378
  "./filters/WeightedFilter.ts": () => Promise.resolve().then(() => (init_WeightedFilter(), WeightedFilter_exports)),
@@ -5309,7 +5405,9 @@ __export(navigators_exports, {
5309
5405
  NavigatorRole: () => NavigatorRole,
5310
5406
  NavigatorRoles: () => NavigatorRoles,
5311
5407
  Navigators: () => Navigators,
5408
+ captureStrategyPressure: () => captureStrategyPressure,
5312
5409
  clearSrsBacklogDebug: () => clearSrsBacklogDebug,
5410
+ clearStrategyPressureDebug: () => clearStrategyPressureDebug,
5313
5411
  diversityRerank: () => diversityRerank,
5314
5412
  getActivePipeline: () => getActivePipeline,
5315
5413
  getCardOrigin: () => getCardOrigin,
@@ -5317,6 +5415,7 @@ __export(navigators_exports, {
5317
5415
  getRegisteredNavigatorNames: () => getRegisteredNavigatorNames,
5318
5416
  getRegisteredNavigatorRole: () => getRegisteredNavigatorRole,
5319
5417
  getSrsBacklogDebug: () => getSrsBacklogDebug,
5418
+ getStrategyPressureDebug: () => getStrategyPressureDebug,
5320
5419
  hasRegisteredNavigator: () => hasRegisteredNavigator,
5321
5420
  initializeNavigatorRegistry: () => initializeNavigatorRegistry,
5322
5421
  isFilter: () => isFilter,
@@ -5399,6 +5498,7 @@ var init_navigators = __esm({
5399
5498
  init_diversityRerank();
5400
5499
  init_PipelineDebugger();
5401
5500
  init_SrsDebugger();
5501
+ init_StrategyPressureDebugger();
5402
5502
  init_logger();
5403
5503
  init_();
5404
5504
  init_2();
@@ -8423,7 +8523,9 @@ __export(core_exports, {
8423
8523
  aggregateOutcomesForGradient: () => aggregateOutcomesForGradient,
8424
8524
  areQuestionRecords: () => areQuestionRecords,
8425
8525
  buildStrategyStateId: () => buildStrategyStateId,
8526
+ captureStrategyPressure: () => captureStrategyPressure,
8426
8527
  clearSrsBacklogDebug: () => clearSrsBacklogDebug,
8528
+ clearStrategyPressureDebug: () => clearStrategyPressureDebug,
8427
8529
  computeDeviation: () => computeDeviation,
8428
8530
  computeEffectiveWeight: () => computeEffectiveWeight,
8429
8531
  computeOutcomeSignal: () => computeOutcomeSignal,
@@ -8440,6 +8542,7 @@ __export(core_exports, {
8440
8542
  getRegisteredNavigatorNames: () => getRegisteredNavigatorNames,
8441
8543
  getRegisteredNavigatorRole: () => getRegisteredNavigatorRole,
8442
8544
  getSrsBacklogDebug: () => getSrsBacklogDebug,
8545
+ getStrategyPressureDebug: () => getStrategyPressureDebug,
8443
8546
  getStudySource: () => getStudySource,
8444
8547
  hasRegisteredNavigator: () => hasRegisteredNavigator,
8445
8548
  importParsedCards: () => importParsedCards,
@@ -8494,7 +8597,9 @@ init_core();
8494
8597
  aggregateOutcomesForGradient,
8495
8598
  areQuestionRecords,
8496
8599
  buildStrategyStateId,
8600
+ captureStrategyPressure,
8497
8601
  clearSrsBacklogDebug,
8602
+ clearStrategyPressureDebug,
8498
8603
  computeDeviation,
8499
8604
  computeEffectiveWeight,
8500
8605
  computeOutcomeSignal,
@@ -8511,6 +8616,7 @@ init_core();
8511
8616
  getRegisteredNavigatorNames,
8512
8617
  getRegisteredNavigatorRole,
8513
8618
  getSrsBacklogDebug,
8619
+ getStrategyPressureDebug,
8514
8620
  getStudySource,
8515
8621
  hasRegisteredNavigator,
8516
8622
  importParsedCards,