Every policy automatically asks the reader to acknowledge they've read it. The "Mark as read" banner appears the first time a user opens a policy (or any new revision); once acknowledged, the read receipt is recorded with their name and timestamp.
How "must read" surfaces
Banner on the policy — "You need to read this policy!" with a "Mark as read" button.
Read-by list — moderators see who's read the latest revision.
Audit trail — read events are logged.
Chasing unread policies
Use the workflow trigger policy.section_unread_for_days to fire a follow-up when staff haven't marked a policy read within N days. Common follow-ups: send an email, queue a form, escalate to a manager. See Workflows.
Note — Read receipts implicitly reset on revision — when an admin edits a policy, the new revision starts with zero "read by" entries and prompts everyone to re-read.
Heads up — There isn't a "Required reading" tick-box in the policy editor today — the underlying
ensure_readflag exists in the database but is only settable via the workflow actionpolicy.require_acknowledgement. A UI toggle is on the roadmap.