# Assessment buffer checklist (exam-day decoupling)

## Accept path (must complete in &lt; 500 ms p95)

- [ ] API Gateway → Lambda **submit validator** only (schema + session token)
- [ ] Validator writes to **SQS** with `submission_id` UUID — response 202 Accepted to client
- [ ] Client polls `/status/{submission_id}` or WebSocket for grade readiness
- [ ] No synchronous grading in accept Lambda

## Grade path (async)

- [ ] Grading Lambda triggered by SQS with `batchSize=1` for high-stakes exams (ordering)
- [ ] Results in **DynamoDB** with GSI on `student_id` + `exam_id`
- [ ] DLQ alarm + manual replay runbook before exam window

## Capacity

- [ ] Reserved concurrency on validator ≥ expected peak ÷ 60 × safety factor 1.2
- [ ] Aurora max ACU set 24h before window; scale-in disabled until +30 min after
- [ ] Load test at **2×** projected peak with [worksheet](./exam-day-capacity-worksheet.csv) numbers

## When NOT to use SQS buffer

- Low-stakes formative quizzes (&lt; 500 concurrent) — sync Lambda may suffice
- Offline-first mobile with local SQLite sync — different conflict resolution model
