feat(media): add scoped attachment policies and excluded-media purge - #620
feat(media): add scoped attachment policies and excluded-media purge#620salmonumbrella wants to merge 1 commit into
Conversation
roborev: Combined Review (
|
a7f6add to
49119c5
Compare
roborev: Combined Review (
|
49119c5 to
3aa954e
Compare
roborev: Combined Review (
|
3aa954e to
e96ed81
Compare
roborev: Combined Review (
|
Add a provider-neutral attachment policy (media on/off, per-item size cap, conversation scope, participant limit) with per-account overrides for Beeper, Slack, Discord, and Teams. Importers persist typed download outcomes so policy-excluded media is distinguishable from failed downloads, backfills honor the active policy and retry only eligible items, and the new purge-excluded-media command removes already-stored media that the current policy excludes. Fixes kenn-io#618 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
e96ed81 to
83a9076
Compare
roborev: Combined Review (
|
What changed
media,max_media_mb,media_scope(all,direct,none), andmedia_max_participants, with per-account overrides throughaccounts_config(Beeper account IDs, Slack team IDs, Teams emails) and the existing Discordguildsmap.pending,stored,skipped, orfailed, plus a skip reason — so a deliberate policy skip is distinguishable from a failed download, and backfills retry only eligible items.purge-excluded-media, which removes already-stored media that current policy excludes.--dry-runpreviews occurrence, blob, and logical byte counts; deletion requires--yesor interactive confirmation.Why
Attachment capture is all-or-nothing per provider, so archiving a busy chat network means storing every meme and forwarded video from large public rooms in order to keep the direct-message media that actually matters.
--no-mediaon a manual run cannot express an ongoing policy because the daemon scheduler reads config, and it writes no marker, so a deliberate skip is indistinguishable from an attachment that was never seen.Usage
Closes #618