Who Changed It/Docs/Core concepts

How events are classified: normal, strange, dangerous

Every event gets a base severity, and context can escalate it. Here is exactly which rules fire and why.

Why classify at all

A plain activity log has a discovery problem: on a real site it produces hundreds of rows a week, almost all of them boring, and the two that matter are indistinguishable from the rest until you already know what you are looking for. Classification is the plugin's answer. Every event is scored as it is recorded, and the reason for anything above normal is stored alongside the row in plain words.

There are three levels:

Stage one: base severity

Every event type has a starting severity. Most are normal; a few are dangerous the moment they happen regardless of who did it. Two examples of the latter are worth calling out because they explain the philosophy:

The full table of starting severities is in the event reference.

Stage two: rule overrides

Some events are only dangerous depending on what exactly changed. These rules replace the base severity outright:

Stage three: contextual heuristics

The remaining rules compare the event to recent history rather than to a fixed list. Each one that fires bumps the severity up a level and appends its reason:

Note that escalations stack: a login at 03:00 from an unseen IP fires two rules, so a normally-normal login lands on dangerous and emails you, with both reasons listed.

The IP-based heuristics depend on IP addresses actually being stored. If you set the privacy mode to hash or drop addresses, the new-IP and brute-force rules lose their input — a deliberate trade documented in retention, IPs and privacy.

Events that can never be muted

You can mute any event type you find noisy (see the settings reference), with three exceptions that audit the auditor itself: settings_changed, settings_reset and log_purged. If muting were allowed there, an attacker with admin access could silence the plugin and then wipe the log without leaving a trace of either action.

Families

Independently of severity, every event belongs to one of nine families — authentication, users, content, plugins, themes, core, settings, commerce, and a catch-all for events registered by other code. Families are what the log filter and the per-family retention windows operate on. Severity answers "how alarming is this?"; family answers "what part of the site is this about?".

Changing the classification

If a rule does not fit your site — a newsroom where 03:00 logins are normal, say — the base severity map is filterable. See hooks and filters for whochita_base_severity_map.