Skip to content

Acknowledging

An announcement shown with Display.DialogOnce is shown to a person until they acknowledge it. The acknowledgement is a fact: AnnouncementAcknowledged(AnnouncementId, UserSubject), recorded in the tenant’s namespace under the announcement’s id, with the person as compliance subject. That is the one place where a tenant’s own namespace holds anything about announcements; the announcements themselves are product-wide, see Receiving.

AcknowledgeAnnouncement(AnnouncementId) is in the Acknowledging/AcknowledgeAnnouncement slice and requires a signed-in person.

The announcement isThe command
a DialogOnce for this tenant, not acknowledged by the personrecords AnnouncementAcknowledged
a DialogOnce the person already acknowledgedsucceeds and records nothing
a DialogEverySessionsucceeds and records nothing: it returns at the next session whatever the person did, and looking is not a fact
a Bannerrefused: a banner can not be dismissed
not held by the product, or not for the person’s tenantrefused

Acknowledging twice appends nothing: the command takes the tenant’s acknowledgements as a read-model parameter, and the product runs with read protection On, so two concurrent acknowledgements by the same person record one fact.

The acknowledgement belongs to the person, not the browser. UserSubject is the sub claim of the signed-in principal (or the name identifier), the same subject on every device, so a dialog acknowledged on one device is gone on the next.

UserSubject is marked [PII], and the event’s compliance subject is a one-way hash of it, PersonSubjects.For(subject), not the subject itself. To erase a person, compute that subject and delete its key in every tenant namespace they signed in to.