Skip to main content

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 modeWhen to use itThe subject must…On silenceGates access?
SilentEditorial (--editorial)a typo, a clarification, a purely favorable changenothingboundno
InfoPush (--info)a material change that is information only — a payment-contract change under § 675g, a material privacy-notice update, a reference-rate changenothing (may object or terminate)takes effect regardlessno
DeemedConsent (--deemed)a minor/peripheral contract change where silence may bind (Zustimmungsfiktion)object before the deadline, else nothingsilence binds (§ 308 Nr. 5 BGB)no
ActiveReconsent (--active, or the legacy --material)a material/core contract change, or a new/expanded real consentactively accept before it appliesnot bound; the old terms continueyes

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:

ModeAudience
ActiveReconsentsubjects the gate will actually stop — those holding only an older major
InfoPush, DeemedConsentevery 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_periods in 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