Worked example — an info-only change
A payment-contract change your users only need to be told about ("no action required"):
php artisan legal-consent:publish terms de --info --regime=psd2_675g \
--announce-at=2026-07-01 --enforce-at=2026-09-01
The dates above are illustrative — pick your own future dates.
What happens
Once the announcement date passes, legal-consent:dispatch-notices emails every current party to
that contract a LegalChangeInformational ("we've updated our contract; no action is required"),
records a durable-medium proof row, and the change takes effect on the effective date —
no one is blocked.
Every current party, not just those on an older major: an info-only change is owed to everyone the contract binds. See who a version is sent to.
Look at the size of that first, especially if this is your first info-only change:
php artisan legal-consent:dispatch-notices --dry-run
It reports the audience of every due version and sends nothing, writes no proof row, and stamps no watermark.
Render the heads-up banner
ConsentBanner produces the dismissible banner for all three announceable states:
@php($banners = app(\Pushery\LegalConsent\Support\ConsentBanner::class)->forSubject($user, app()->getLocale()))
@include('legal-consent::consent-banner', [
'pending' => $banners['reconsent'],
'informational' => $banners['informational'],
'deemed' => $banners['deemed'],
'consentUrl' => route('legal.consent'),
])
consentUrl is load-bearing rather than decorative: since 0.19.0 the banner renders no call to
action when it is missing, instead of a link to # that goes nowhere.
See User interface for the published stubs and their WireKit twins.