The four notice modes
A change to a legal text is not one thing. The package models the four ways a change is
communicated and enforced — NoticeMode — so a change gets exactly the notice the law
requires and never more:
| Notice mode | When to use it | The subject must… | On silence | Gates access? |
|---|---|---|---|---|
SilentEditorial (--editorial) | a typo, a clarification, a purely favorable change | nothing | bound | no |
InfoPush (--info) | a material change that is information only — a payment-contract change under § 675g, a material privacy-notice update, a reference-rate change | nothing (may object or terminate) | takes effect regardless | no |
DeemedConsent (--deemed) | a minor/peripheral contract change where silence may bind (Zustimmungsfiktion) | object before the deadline, else nothing | silence binds (§ 308 Nr. 5 BGB) | no |
ActiveReconsent (--active, or the legacy --material) | a material/core contract change, or a new/expanded real consent | actively accept before it applies | not bound; the old terms continue | yes |
How a mode reaches the subject
legal-consent:dispatch-notices routes each mode to the matching notification —
LegalChangeInformational ("no action required"), DeemedConsentNotice (carrying the
§ 308 Nr. 5 lit. b "silence counts as consent" warning), or ReconsentRequired — and, with
durable_medium.proof on, writes an append-only row to legal_notices proving the notice was
delivered. Only ActiveReconsent ever blocks access on a change — a mode says how a version
change is communicated, and it has no say over a subject who never accepted the document in the
first place. That second question belongs to gate.first_use.
Who a version is sent to
The audience depends on the mode, because "must re-consent" and "must be told" are two different populations:
| Mode | Audience |
|---|---|
ActiveReconsent | subjects the gate will actually stop — those holding only an older major |
InfoPush, DeemedConsent | every current party to that document, in that locale and tenant |
A notice duty under § 327r Abs. 2 BGB, § 675g Abs. 1 BGB, P2B Art. 3(2) or DSA Art. 14(2) attaches to being a party, not to holding an outdated version — so a non-gating change goes to everyone, while a gating one is addressed to exactly the people its middleware will block.
Two document classes are never swept, and both exclusions are deliberate. An informational
page (Impressum, cookie policy) is never accepted by anyone, so there is no ledger to draw an
audience from. A real consent (consent) is never nagged about a change: Art. 7(4) DSGVO. If a
voluntary consent's scope changes materially it needs a fresh, active opt-in — collected in your own
UI, not pushed as a notice.
The sweep runs hourly and is idempotent; it is auto-scheduled unless you turn
schedule.dispatch_notices off. See the delivery proof for what it
records.
The invariants (never violated)
- A privacy notice is acknowledged, never consented, and a change to one never gates — a
material privacy update is
InfoPush, announced but non-blocking (WP260 rev.01). A first acknowledgement is a different matter and can be collected at a first-use gate: nothing was announced there because nothing moved, so no mode applies and no consent is manufactured. - A real consent is never refreshed by silence or deemed consent; a material scope change needs a fresh, active opt-in (EDPB 05/2020).
- Deemed consent lives only in the contract type, and only for minor changes (BGH XI ZR 26/20, EuGH C-287/19).
- Advance-notice periods are per regime, never one global value (see
notice_periodsin the configuration reference).
A major version bump forces its mode
The publisher refuses --info and --deemed on a major bump of a contract — a material core
change cannot ride on silence or mere information (BGH XI ZR 26/20) — and refuses anything but
--info on a major privacy bump, because a privacy notice is acknowledged, never gated.
Publish a change that needs --info or --deemed as a minor or patch bump of the source
version.
Saying what changed
A notice that only names the document tells a reader nothing they can act on. Describe the change per locale and every notice carries it — see Saying what changed.
Worked examples
- An info-only contract change — announced, no action required, no one blocked.
- Deemed consent with an objection window — silence binds, provably.
- Active re-consent — a material core change, with a hard gate at the deadline.
- Saying what changed — the per-version delta a notice leads with.