feat: auto-archive inactive chats with audit trail (#24642)

Adds a background job in `dbpurge` that periodically archives chats
inactive beyond a configurable threshold. Each archived root chat gets a
background audit entry tagged `chat_auto_archive`. Disabled by default.

* New `AutoArchiveInactiveChats` SQL query with LATERAL last-activity
subquery and partial index on archive candidates
* `site_configs`-backed `auto_archive_days` setting with admin-only PUT,
any-authenticated-user GET
* Cascade archive via `root_chat_id`; pinned chats and active threads
exempt
* Root-only audit dispatch on detached context, matching manual archive
(`patchChat`) behavior
* 11 subtests covering disabled no-op, boundary, deleted messages, child
activity, pinned exemption, multi-owner, idempotency, and batch
pagination

PR #24643 adds per-owner digest notifications.
PR #24704 adds the requisite UI controls.

> 🤖
This commit is contained in:
Cian Johnston
2026-04-24 14:18:28 +01:00
committed by GitHub
parent 346b46228f
commit a876287d36
26 changed files with 1504 additions and 46 deletions
+3
View File
@@ -226,6 +226,9 @@ coderd_authz_prepare_authorize_duration_seconds 0
# HELP coderd_build_info Describes the current build/version of the Coder server. Value is always 1.
# TYPE coderd_build_info gauge
coderd_build_info{version="",revision=""} 0
# HELP coderd_chat_auto_archive_records_archived_total Total number of chats archived by the auto-archive job (counting both roots and cascaded children).
# TYPE coderd_chat_auto_archive_records_archived_total counter
coderd_chat_auto_archive_records_archived_total 0
# HELP coderd_chatd_chats Number of chats being processed, by state.
# TYPE coderd_chatd_chats gauge
coderd_chatd_chats{state=""} 0