Last verified: 28 September 2026
Terms acceptance — signed-bundle ceremony
Sovern records terms-of-service acceptance as a §FF.sub5 signed evidence bundle, verified on every read by the §GG compliance verifier and bound by §LL.sub7 anti-PII rules.
The signed-bundle invariant
Acceptance is not a checkbox — it is a server-attested, signed evidence row written into participant_terms_acceptanceswith a manifest that survives independent verification. Operators cannot retroactively change a participant's acceptance record without producing an auditable trail.
Bundle kind: participant-terms-acceptance
Single closed bundle kind at v1. The manifest schema is enforced by the §FF-i Zod schema and verified by the §GG verifyComplianceEvidence() primitive on read.
Manifest fields
participant_id — the participant accepting the terms.terms_version — the version string of the operator's terms-of-service at acceptance time.accepted_at — server-stamped ISO-8601 timestamp.ip_anonymized — hashed/truncated; raw IP NEVER stored per §LL.sub7.user_agent_anonymized — generic UA family only; raw UA NEVER stored per §LL.sub7.
Consent categories captured alongside (4)
Terms acceptance is conventionally paired with consent capture for the four cookie-consent categories. Substrate persists each consent decision into participant_consent_preferences, mirrored from the closed consent-categories-registry set.
necessary — Necessary
required: yes
functional — Functional
required: no
analytics — Analytics
required: no
marketing — Marketing
required: no
See also /trust/onboarding for the full §FF substrate disclosure (state machine, entry vectors, consent categories, terms bundle).