Retention classes and the review queue

Tag records with a retention class (e.g. "Tax records — 7 years"). The review queue surfaces eligible records for human disposal.

Updated 2026-04-25

Define record categories at /retention. Each class has a slug, a display name, a retention term in years, and a disposition mode (review or dispose-with-review). Assign a class to a document via the dropdown on the document page.

When a document's elapsed time crosses createdAt + retain_for_years, it appears in /retention/review. Two actions per row:

- Defer N years — pushes the eligibility date out with a captured reason. A common pattern for "we still need this — check again in 2027". - Dispose — soft-deletes the document (calls tombstoneDocument), captures a reason for the audit log.

Held documents stay listed in the queue with a "Held · N" badge so admins can see them, but the dispose button is disabled until the hold releases. Auto-tombstoning (without a human in the loop) is intentionally not enabled in v0 — see our stack-decisions doc for the rationale.

**Disposal countdown per class.** /retention now surfaces "Next eligible disposal: YYYY-MM-DD (in X mo)" on every retention class with at least one live doc bound. Computed as min(documents.createdAt) + retainForYears years. Tone-coded — red within 30 days (urgent), amber within 180 days (heads-up), gray further out. Suppressed for empty classes (no docs to dispose). Includes a tail note distinguishing the disposition mode — review classes land on /retention/review for human confirmation; auto-tombstone classes are tombstoned by the daily cron. Closes the at-a-glance "what's coming up?" question for compliance officers.