Last Challenge
Per-run timing (start / finish) for the last-challenge variant.
Record the start of a last-challenge run
Idempotently insert a row into the `last_challenges` table. Re-posting the same (nickname, templateId, startedAt) tuple returns 200 without modifying the existing row.
Record the finish of a last-challenge run
Update the matching `last_challenges` row with `finishedAt` and computed `duration_ms`. Conditional: the row must exist and not already be finished; otherwise responds 404.