Right now, we only allow recording ballot marks for a given ballot once within an audit, even though we actually sample with replacement. This can be seen in the audit_mark table's compound primary key, (audit_id, ballot_id, contest_id), and in the function Statement.Audit.createMark.
Instead, track the sample count (m) per audit so we truly sample with replacement (i.e. add a column to audit_mark). Ensure that on the client side, the recorded marks for an audit are shown with repeated samples, and listed in sample order (not ordered by ballot sequence number/ID).
Right now, we only allow recording ballot marks for a given ballot once within an audit, even though we actually sample with replacement. This can be seen in the
audit_mark
table's compound primary key,(audit_id, ballot_id, contest_id)
, and in the functionStatement.Audit.createMark
.Instead, track the sample count (
m
) per audit so we truly sample with replacement (i.e. add a column toaudit_mark
). Ensure that on the client side, the recorded marks for an audit are shown with repeated samples, and listed in sample order (not ordered by ballot sequence number/ID).