From 6d5c9bf821ec2fd9a0b19bb88c766bfc71baf164 Mon Sep 17 00:00:00 2001 From: Sol Dubock <94075844+sjd210@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:52:19 +0000 Subject: [PATCH 1/4] Remove marksAwarded from validator and response The term "marksAwarded" is still used for markedExamples but this is under a different context and is okay to remain --- .../isaac/dos/LLMFreeTextQuestionValidationResponse.java | 4 ---- .../isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java | 4 ---- .../ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidator.java | 3 --- .../cl/dtg/isaac/quiz/IsaacLLMFreeTextValidatorTest.java | 6 +++--- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java index 6400a27433..00f9558ffe 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java @@ -13,7 +13,6 @@ @DTOMapping(LLMFreeTextQuestionValidationResponseDTO.class) public class LLMFreeTextQuestionValidationResponse extends QuestionValidationResponse { private List markBreakdown; - private Integer marksAwarded; public LLMFreeTextQuestionValidationResponse() { } @@ -30,7 +29,4 @@ public List getMarkBreakdown() { public void setMarkBreakdown(List markBreakdown) { this.markBreakdown = markBreakdown; } - - public Integer getMarksAwarded() { return marksAwarded; } - public void setMarksAwarded(Integer marksAwarded) { this.marksAwarded = marksAwarded; } } diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java index 9f801856c3..678944f9df 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java @@ -7,7 +7,6 @@ public class LLMFreeTextQuestionValidationResponseDTO extends QuestionValidationResponseDTO { private List markBreakdown; - private Integer marksAwarded; public LLMFreeTextQuestionValidationResponseDTO() { } @@ -18,7 +17,4 @@ public List getMarkBreakdown() { public void setMarkBreakdown(List markBreakdown) { this.markBreakdown = markBreakdown; } - - public Integer getMarksAwarded() { return marksAwarded; } - public void setMarksAwarded(Integer marksAwarded) { this.marksAwarded = marksAwarded; } } diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidator.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidator.java index 46be221dad..8a0a1c66cc 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidator.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidator.java @@ -293,10 +293,7 @@ private LLMFreeTextQuestionValidationResponse generateQuestionValidationResponse LLMFreeTextQuestionValidationResponse validationResponse = new LLMFreeTextQuestionValidationResponse( question.getId(), answer, isConsideredCorrect, null, new Date()); - // TODO: Remove marksAwarded field once database migration has occurred to remove it from question_attempts JSON - // (both fields are currently required for backwards compatibility) validationResponse.setMarks(markTotal); - validationResponse.setMarksAwarded(markTotal); validationResponse.setMarkBreakdown(markBreakdown); return validationResponse; } diff --git a/src/test/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidatorTest.java b/src/test/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidatorTest.java index 028da55007..45eb51714e 100644 --- a/src/test/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidatorTest.java +++ b/src/test/java/uk/ac/cam/cl/dtg/isaac/quiz/IsaacLLMFreeTextValidatorTest.java @@ -247,17 +247,17 @@ public static LLMFreeTextQuestionValidationResponse validate(Question question, * @param response - response from the validator, the object we examine by performing assertions. * @param isCorrect - whether the response should be marked as correct or incorrect. Use provided constants * CORRECT, INCORRECT. - * @param marksAwarded - how many marks should be awarded in total for the question. This is calculated from + * @param marks - how many marks should be awarded in total for the question. This is calculated from * the breakdown specified during the act part. Use provided constants NO_MARKS, * ONE_MARK, TWO_MARKS. * @param expectedMarks - double check that the breakdown is returned in the expected format */ public static void expectMark(LLMFreeTextQuestionValidationResponse response, boolean isCorrect, - int marksAwarded, + int marks, List expectedMarks) { assertEquals(isCorrect, response.isCorrect()); - assertEquals(marksAwarded, (long) response.getMarks()); + assertEquals(marks, (long) response.getMarks()); assertTrue(expectedMarks.containsAll(response.getMarkBreakdown())); assertTrue(response.getMarkBreakdown().containsAll(expectedMarks)); } From 0c5306d734e1b12d2e31b6eaba47c710536c253c Mon Sep 17 00:00:00 2001 From: Sol Dubock <94075844+sjd210@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:13:24 +0000 Subject: [PATCH 2/4] Migrate question attempts to remove marksAwarded Replaces "marksAwarded" field in JSON with "marks" field for consistent naming --- .../2026-02-remove-marksawarded-validation-field.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql diff --git a/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql b/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql new file mode 100644 index 0000000000..3d832fc79a --- /dev/null +++ b/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql @@ -0,0 +1,8 @@ +UPDATE question_attempts +SET question_attempt = + jsonb_set( + question_attempt - 'marksAwarded', + '{marks}', + question_attempt->'marksAwarded', + ) +WHERE question_attempt ? 'marksAwarded'; \ No newline at end of file From 6a8f0a1d44095bbaa0fb4cc6dfec57322cf726d2 Mon Sep 17 00:00:00 2001 From: Sol <94075844+sjd210@users.noreply.github.com> Date: Tue, 10 Feb 2026 14:43:43 +0000 Subject: [PATCH 3/4] Remove extra comma Co-authored-by: James Sharkey --- .../migrations/2026-02-remove-marksawarded-validation-field.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql b/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql index 3d832fc79a..7226d1ae9c 100644 --- a/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql +++ b/src/main/resources/db_scripts/migrations/2026-02-remove-marksawarded-validation-field.sql @@ -3,6 +3,6 @@ SET question_attempt = jsonb_set( question_attempt - 'marksAwarded', '{marks}', - question_attempt->'marksAwarded', + question_attempt->'marksAwarded' ) WHERE question_attempt ? 'marksAwarded'; \ No newline at end of file From c30fec77e84dce0391848ea9449bc8c8f10ae40a Mon Sep 17 00:00:00 2001 From: Sol Dubock <94075844+sjd210@users.noreply.github.com> Date: Thu, 12 Feb 2026 15:20:48 +0000 Subject: [PATCH 4/4] Add JSON ignore tag for marksAwarded --- .../cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java | 1 + .../dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java index 00f9558ffe..d4c12e5e62 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/dos/LLMFreeTextQuestionValidationResponse.java @@ -10,6 +10,7 @@ import java.util.Date; import java.util.List; +@JsonIgnoreProperties({"marksAwarded"}) @DTOMapping(LLMFreeTextQuestionValidationResponseDTO.class) public class LLMFreeTextQuestionValidationResponse extends QuestionValidationResponse { private List markBreakdown; diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java index 678944f9df..8bff08a821 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/dto/LLMFreeTextQuestionValidationResponseDTO.java @@ -5,6 +5,7 @@ import java.util.List; +@JsonIgnoreProperties({"marksAwarded"}) public class LLMFreeTextQuestionValidationResponseDTO extends QuestionValidationResponseDTO { private List markBreakdown;