In tasks.py, attempt.raw_score (used in the attempts CSV) seems to be the reliable score. The % in the Attempts CSV and both the raw and % in the Scores CSV seem to depend on attempt.scaled_score which isn't apparently always the final attempt score.
One case of this known at Newcastle: https://mas-numbas-lti.ncl.ac.uk/resource/5605
In tasks.py,
attempt.raw_score
(used in the attempts CSV) seems to be the reliable score. The % in the Attempts CSV and both the raw and % in the Scores CSV seem to depend onattempt.scaled_score
which isn't apparently always the final attempt score.