Teams use "replay" to mean three different things, and each one demands a different schema.
Decision replay answers "what did we do, and with what inputs?" You re-read the stored record and confirm the action matches the threshold. This is cheap and you should always support it.
Rubric replay answers "was that the right call under the guidelines of the day?" You re-score the stored text against a frozen copy of the rubric. Educational work on rubrics is a useful reference: a rubric is criteria plus a scale plus descriptors that separate each level, and a well-built one turns quality from an implicit judgment into an explicit shared standard the ASCD guide to rubrics. If you cannot retrieve the descriptors live at decision time, you cannot re-score anything.
Model replay answers "would the same model produce the same score again?" This is the brittle one. Hosted models change under you and samplers are not guaranteed deterministic.
The decision rule: build decision replay and rubric replay, and state plainly in your documentation that model replay is best-effort. Chase exact model replay only if a contract or regulator requires it, because it costs you a frozen inference snapshot and a lot of storage for a question that rarely changes an outcome.
One more distinction shapes the schema. A rejection is a chain, not an event: a model scored the text, a rule compared the score to a threshold, and possibly a human overrode the result. Log the chain, or your appeals reviewers will reconstruct it by hand.



