DEVELOPER DOCUMENTATION
Retakes and Remediation Plans
Grant a corrected attempt with a stale-review guard, then plan and apply checksum-bound retake batches.
/api/public/v1/project-todos/quizzes/manageA retake is a returned submission: the AI trainer sees your reason, the to-do reopens, and they get exactly one extra attempt on the same published version. Requires project_todos:write.
require_retake
Section titled “require_retake”actionstringbodyrequiredrequire_retakeidempotencyKeystringbodyrequiredassignmentIdstringbodyrequiredreasonstringbodyrequiredexpectedSubmittedAtstringbodyrequiredThe exact submittedAt you reviewed. If the AI trainer resubmitted in between, the return is rejected with 409 instead of acting on evidence you never saw.
attemptIdstringbodyOptional binding proof: the exact attempt you reviewed. A mismatch rejects the return.
The retake allowance is additive: each return grants one more attempt beyond the version’s published limit. Grading and release remain separate operations.
require_retake_plan
Section titled “require_retake_plan”Validates a whole remediation batch without writing, so an agent can build a review-then-execute workflow.
actionstringbodyrequiredrequire_retake_planjobIdstringbodyrequiredrowsarraybodyrequired1–500 rows of { "rowKey", "assignmentId", "reason", "expectedSubmittedAt", "attemptId?", "grade?", "release?" }.
The plan checks every row against live state — binding identity, current submission, and grade/release feasibility — and returns ordered per-row commands with stable content-derived keys, plus a deterministic plan checksum.
require_retake_apply
Section titled “require_retake_apply”Applies the exact ordered rows returned by require_retake_plan. The server executes rows sequentially with deterministic per-step receipts, so retrying the same request converges without duplicating worker-visible obligations.
actionstringbodyrequiredrequire_retake_applyidempotencyKeystringbodyrequiredjobIdstringbodyrequiredrowsarraybodyrequiredplanChecksumstringbodyrequiredconfirmLivebooleanbodyrequiredtrue.If the request no longer matches the plan or live state moved, the apply fails closed with 409 PLAN_STALE. Selective question-level redo uses the separate coaching workflow, not this full-retake action.