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).