From b9d4687b1b65792c241cbf09c65aefa08d88ac8d Mon Sep 17 00:00:00 2001 From: hz Date: Thu, 23 Jul 2026 23:01:52 -0500 Subject: [PATCH] Fix dynamic Elo clamp updates --- api/QuestionsApi/Services/DynamicQuestionStore.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/api/QuestionsApi/Services/DynamicQuestionStore.cs b/api/QuestionsApi/Services/DynamicQuestionStore.cs index 932ca7a..76aaca3 100644 --- a/api/QuestionsApi/Services/DynamicQuestionStore.cs +++ b/api/QuestionsApi/Services/DynamicQuestionStore.cs @@ -143,7 +143,10 @@ public sealed class DynamicQuestionStore await _mastery.UpdateOneAsync( value => value.UserId == claims.UserId && value.ObjectiveId == claims.ObjectiveId, Builders.Update - .Max(value => value.Elo, DynamicDifficultyPolicy.MinimumElo) + .Max(value => value.Elo, DynamicDifficultyPolicy.MinimumElo)); + await _mastery.UpdateOneAsync( + value => value.UserId == claims.UserId && value.ObjectiveId == claims.ObjectiveId, + Builders.Update .Min(value => value.Elo, DynamicDifficultyPolicy.MaximumElo)); if (!string.IsNullOrWhiteSpace(claims.CaseFamilyId)) await UpdateFamilyRatingAsync(claims, generated, isCorrect); @@ -156,7 +159,7 @@ public sealed class DynamicQuestionStore IsCorrect = isCorrect, CorrectChoiceId = generated.Question.CorrectChoiceId, ObjectiveId = claims.ObjectiveId, - ObjectiveElo = updated.Elo, + ObjectiveElo = DynamicDifficultyPolicy.Clamp(updated.Elo), RatingChange = delta, SelectedMisconceptionId = misconceptionId, IsScheduledReview = claims.IsScheduledReview, @@ -272,7 +275,10 @@ public sealed class DynamicQuestionStore await _familyRatings.UpdateOneAsync( value => value.Id == current.Id, Builders.Update - .Max(value => value.Elo, DynamicDifficultyPolicy.MinimumElo) + .Max(value => value.Elo, DynamicDifficultyPolicy.MinimumElo)); + await _familyRatings.UpdateOneAsync( + value => value.Id == current.Id, + Builders.Update .Min(value => value.Elo, DynamicDifficultyPolicy.MaximumElo)); }