"""What a backup carries. Every table Steward defines is named here as kept or left out, and tests/core/test_backup_contents.py fails on one that is neither, so a new table is a decision someone makes in this file. The operator's ruling (System 180 "Backup & Restore", 2026-10-15): a backup is for system recovery. It carries settings and keys, what would otherwise have to be set up again, and no logs or history: not the audit log, not alert history, not metrics. Left-out tables come back with their structure and no rows, and fill again as Steward runs. A table that is in neither list (an external plugin's) is backed up whole: a table nobody thought about is kept, never lost. """ from __future__ import annotations # What would otherwise have to be set up again. KEPT: frozenset[str] = frozenset({ "app_settings", "users", "api_tokens", "hosts", "host_agent_registrations", # A group's maintenance cadence (#5768): configuration. "host_maintenance_plans", "monitors", "alert_rules", "maintenance_windows", "ansible_targets", "ansible_groups", "ansible_target_groups", "ansible_schedules", "dashboards", "dashboard_widgets", "dashboard_share_tokens", "snmp_devices", "prometheus_targets", "prometheus_widget_templates", # Names given to network clients by hand (UniFi's alias column). "unifi_known_clients", }) # Rows that are measurements, logs, history or in-flight work: left out. EXCLUDED: frozenset[str] = frozenset({ # Logs and history (the 2026-10-15 ruling): a recovery doesn't need them. "audit_events", "alert_events", # Live state: each rule starts inactive, and alert_reconcile gives a # restored rule its state row within a minute (ensure_rule_states). "alert_states", # Metric anomalies and their reviews (#5740): history of the metrics. "metric_anomalies", "metric_anomaly_spans", # A pending invite is in flight, not setup; it can be sent again. "user_invites", "plugin_metrics", "plugin_metric_latest", "plugin_metrics_hourly", # Learned from the metrics above, so relearned once they fill again. "metric_norms", "monitor_results", # A host's downtime as its agent reported it: history, like the metrics. "host_downtime", # Maintenance jobs (#5767): run history, like ansible_runs. "host_maintenance_jobs", "host_maintenance_runs", "email_outbox", "email_outbox_events", "password_resets", # Run history; its logs live on disk, not in the database. "ansible_runs", "docker_containers", "docker_disk_usage", "docker_events", "docker_host_status", "docker_images", "docker_logs", "docker_swarm_nodes", "docker_swarm_services", "traefik_access_summaries", "traefik_certs", "traefik_global_stats", "traefik_metrics", "traefik_status_codes", "unifi_alarms", "unifi_client_snapshots", "unifi_devices", "unifi_dpi_snapshots", "unifi_events", "unifi_fw_rules", "unifi_networks", "unifi_port_forwards", "unifi_speedtest_results", "unifi_wan_stats", "unifi_wlan_stats", })