Commit Graph

4 Commits

Author SHA1 Message Date
Jakub Zych
898de758ba fix: mark an answer failed when its last grading write fails
WR-07: when storing the grader's score fails on the last River attempt,
record the answer as failed instead of leaving it pending with no job.
The terminal failure write runs on a context detached from the job's,
so a timed-out or cancelled job still records it.
2026-11-09 22:53:17 +01:00
Jakub Zych
9ac53579e4 fix: end grading when a question stops being open
WR-06: a Question save hook clears grading_status on the answers of a
question that changed type away from open, in the save's transaction,
so they leave the review queue and needs_review. GradeAnswer ignores a
question that is no longer open, and a choice or self-check re-answer
clears the text, grade and review columns of its row.
2026-11-09 22:52:15 +01:00
Jakub Zych
adc02d7e0c fix: withhold grader feedback that repeats the rubric
WR-01: a deterministic server-side guard behind the grader's prompt.
storeGrade drops feedback sharing a run of six words with the rubric
(runs also in the question or model answer do not count) and notes it
for the owner in grading_error.
2026-11-09 22:46:41 +01:00
Jakub Zych
80ea79ee3e feat: grade open answers through a grader registry in the background
- graders registry collected at boot from every HasGraders plugin,
  manual first; a duplicate or reserved code fails boot
- grading job on queue quizzes_grading with three attempts; a stale
  or reviewed answer is never touched; the last failure marks it failed
- learning answers enqueue at once, tests at close; a grade
  recalculates a finished attempt and fires AnswerGradedEvent after
  commit
2026-11-09 17:51:55 +01:00