- import document, manage routes and MCP question tools take rubric and
max_length; open questions refuse answers, max_length is 1..20000 and
both apply to open questions only
- quizzes take a grader; the manage routes refuse a code the registry
does not know, the import accepts any well-formed code
- quiz stats report unreviewed open answers and their average points
- import_quiz warns that replace deletes the grades and reviews
- 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