05 — Personal<T>
Personal data is a type. Erasure is one call.
The host seals each person's data under their own key. Erasing them destroys the key.
record Holder { name: Personal<HolderName> email: Personal<Email> } mutation erase(id: HolderId) -> Erasure { let Erased = personal.erase(id) Erased }
- subject h_1 sealing key live · 4 sealed values
- subject h_2 sealing key live · 2 sealed values
Everywhere the host stored it
rows rewritten by an erase: 0| Place | Reference | Values |
|---|---|---|
| Entity row | holders/h_1 | name Ingrid Haugenemail ingrid@example.com |
| Past version | holders/h_1 · v1 | name Ingrid Haugan |
| Event | Registered | email ingrid@example.com |
| Ledger posting | postings/p_412 | holder h_1amount EUR 120.00 |
| Entity row | holders/h_2 | name Lars Bakkenemail lars@example.com |
| Ledger posting | postings/p_413 | holder h_2amount EUR 40.00 |
flyt check · the build is refused
let name = sealed.value_or(holder.name, fallback: "")
entity.append(entities.note, key: id, state: Note { text: name })error[E426] personal_data: `state` of `entities.note.append` is opened from a `Personal` value: a row would keep it past its subject's erasure