Data Retention & Privacy
On this page9
What is stored
| Data | Table | Why |
|---|---|---|
| Identity generation, voice frequency, face key | recognition_identities | One row per character. The voice frequency and the face key are derived values, not readable text. |
| What A remembers about B | recognition_memories | The core feature. |
| How well A knows B | recognition_familiarity | Scan speed. |
| Names people gave each other | recognition_introductions | Waiting names, until a scan attaches them. |
| Scan history | recognition_scans | The admin trend chart and timeline. |
| Action snapshots | recognition_proofs | Dispute handling. Tamper-evident. |
| Admin actions | recognition_admin_log | Accountability. Tamper-evident. |
| Anomalies | recognition_anomalies | Possible cheating, for staff to review. |
| Papers | recognition_reports | Camera reports, statements, descriptions. |
| Photos | recognition_photos | Only when PhotoHost = 'local'. |
| Devices | recognition_devices | Serial, owner, battery, preset. |
| Virtual items | recognition_items | Standalone servers only. |
| Death sessions | recognition_death_sessions | New Life Rule outcomes and witness lists. |
| Identity resets | recognition_identity_resets | Face implants and admin resets. |
| Clothing knowledge | recognition_clothing, recognition_clothing_baseline | What each item covers. Not about players. |
| Setting overrides | recognition_settings | In-game admin changes. |
Personal identifiers appear in exactly two shapes: the character key your framework uses (citizenid, identifier, license, depending on your setup) and, where your framework exposes it, the character name. License identifiers are stored where the framework's own key is a license (standalone, and some frameworks) — they are never added on top.
Where a player's own settings live
HUD position, scale, icon shape and the marks toggle are saved on the player's own PC, not on your server. They are not in any table, they are not in any export, and they do not follow the player to another server.
Retention
ServerConfig.Retention = {
HistoryDays = 60,
ProofDays = 60,
AnomalyDays = 30,
AdminLogDays = 180,
DeathSessionDays = 60,
DeviceDays = 180,
IdentityResetDays = 365,
}| Key | Default | What it prunes |
|---|---|---|
HistoryDays | 60 | recognition_scans. |
ProofDays | 60 | recognition_proofs, oldest first. |
AnomalyDays | 30 | recognition_anomalies. |
AdminLogDays | 180 | recognition_admin_log. |
DeathSessionDays | 60 | recognition_death_sessions. |
DeviceDays | 180 | Devices that have not been used for this long. |
IdentityResetDays | 365 | Face implant and identity reset history. |
Memories and reports are not on that list: they are deleted when they expire,
which is what their tier or Config.Report.KeepDays already says. Familiarity is
never deleted by age — it is reset only by the death rule or a face implant.
ServerConfig.Prune = {
IntervalMinutes = 15,
BatchSize = 2000,
}| Key | Default | What it does |
|---|---|---|
IntervalMinutes | 15 | How often the clean-up runs. |
BatchSize | 2000 | Rows deleted per step, so it never locks a table. |
Run it now with recognition:prune (needs the settings level).
Deleted characters
ServerConfig.CharacterPrune = {
Enabled = true,
IntervalHours = 6,
PageSize = 200,
DeleteHints = true,
DeleteHintDelaySeconds = 10,
}| Key | Default | What it does |
|---|---|---|
Enabled | true | Remove data belonging to characters that no longer exist. |
IntervalHours | 6 | How often the sweep runs. |
PageSize | 200 | Characters checked per step. |
DeleteHints | true | A "delete character" request the script sees triggers an early check. |
DeleteHintDelaySeconds | 10 | How long after that hint to check. |
Frameworks with their own delete list (ESX, Qbox, 0R v3) purge our identity row themselves once you have done the install step. This job is the safety net for everything else, and it also removes memories, familiarity and introductions that point at an identity that is gone — on every framework.
Deleting one player's data
- Delete the character in your framework or character selector. Everything above then applies, automatically, within
IntervalHours. - To force it immediately, run
recognition:prunein the server console. - To wipe a character's recognition identity without deleting the character, use an identity reset:
recognition:resetidentity <id|charKey> <reason>That gives the character a new identity generation: everybody forgets them, their
familiarity is cleared, and the old memories are no longer reachable. It needs the
identity level and a written reason, and it is logged.
What goes to Discord
Controlled entirely by ServerConfig.Discord:
| Key | Default | Effect on privacy |
|---|---|---|
IncludeServerIds | true | Server ids in messages. |
IncludeNames | true | Character names in messages. |
IncludeCharKeys | true | Character keys in messages. |
IncludeLicenses | false | License identifiers. Off by default. |
Config.Admin.ShowLicenses is a separate switch for the in-game panel. Showing a
license to a logged-in admin inside the game is a different decision from publishing
it into Discord.
Who can see what
| Data | Who |
|---|---|
| Memories, familiarity, scans, the pair view | admins with view |
| Editing or deleting a memory | admins with edit, with a written reason |
| Exports to Discord | admins with export |
| Identity resets and implants | admins with identity, with a written reason |
| Proofs and the admin log | admins with view; both tamper-evident |
| Your own character's data, as an admin | nobody, while BlockSelfView is on |
Every admin read is logged when Config.Admin.LogViews is on (the default).
The salt
ServerConfig.SecretSalt = '' -- convar: recognition_secretCharacter voices, tattoo codes and the proof log all depend on it. Set it in
server.cfg with set before the first start and never change it. Left empty, it is
generated into the database, which is weaker and warned about at every boot.
Privacy checklist
IncludeLicenses = falseinServerConfig.Discord.- Webhooks point at private staff channels.
recognition_secretis asetconvar, notsetr, notconfig.lua.Config.Admin.RequireReason = true, so every write has a written reason.Config.Admin.BlockSelfView = trueandBlockSelfEdit = true.Config.Admin.LogViews = true.- Only the staff who need each level have that ACE.
- Retention numbers match what your server actually promises its players.