Skip to content

feat(consent): per-sensitivity audio retention (restricted_audio_days)#356

Merged
silverstein merged 2 commits into
mainfrom
feat/retention-sensitivity
Jun 25, 2026
Merged

feat(consent): per-sensitivity audio retention (restricted_audio_days)#356
silverstein merged 2 commits into
mainfrom
feat/retention-sensitivity

Conversation

@silverstein

Copy link
Copy Markdown
Owner

Summary

Wave 2 of the consent layer (bead minutes-3yub.3). Restricted meetings carry sensitive content, so their audio is held on a tighter retention window than normal recordings. This pairs with the agent-layer exclusion from #350: a sensitivity: restricted meeting is both excluded from agent surfaces and kept on disk for less time.

The bead's "audit first" prerequisite is satisfied by the existing docs/plans/retention-audit-2026-06-10.md.

What changed

  • config: new retention.restricted_audio_days (default 7) with a compiled default and doc comment. Normal successful audio stays at 30 days, failed/needs-review at 90.
  • retention engine (retention.rs): new RetentionAudioClass::Restricted. A meeting marked sensitivity: restricted classifies as Restricted and uses restricted_audio_days. Sensitivity takes precedence over the successful/failed classification (sensitive audio is held tightly even if transcription succeeded). An explicit audio_retention: pinned still wins (operator intent).
  • CLI: minutes storage and minutes cleanup policy summaries now show the restricted window.
  • docs: CONFIG.md retention table and a note explaining precedence and the 0 setting.

Safety / behavior

No change to the deletion model: nothing is deleted automatically. minutes cleanup is preview-only; deletion requires explicit minutes cleanup --apply (or enabling auto_cleanup, which defaults off). restricted_audio_days only changes which audio is flagged a delete-candidate and when. Set it to 0 to make restricted audio delete-eligible the day after recording.

Note that the no-capture sensitive-meeting flow (from minutes-3yub.2) records no audio at all; restricted_audio_days governs the case where a captured meeting is marked restricted.

Tests

  • restricted_audio_uses_tighter_window_than_successful: a 10-day-old restricted recording is a delete-candidate (7-day window) while the same age would be kept as a normal recording (30-day window).
  • pinned_restricted_audio_is_kept: explicit pin overrides the restricted window.
  • 803 core tests pass; cargo clippy --all --no-default-features -- -D warnings clean; cargo fmt clean; site/lib/release.ts test count synced (1221).

Wave 2 of the consent layer (bead minutes-3yub.3). Restricted meetings carry
sensitive content, so their audio is held on a tighter retention window than
normal recordings.

- config: new `retention.restricted_audio_days` (default 7) with a compiled
  default and doc comment. Normal successful audio stays at 30 days.
- retention engine: new `RetentionAudioClass::Restricted`. A meeting marked
  `sensitivity: restricted` classifies as Restricted and uses
  `restricted_audio_days`; sensitivity takes precedence over the
  successful/failed classification. An explicit `audio_retention: pinned`
  still wins (operator intent). As before, nothing is deleted unless the user
  runs `minutes cleanup --apply` or enables auto_cleanup.
- CLI: `minutes storage` / `minutes cleanup` policy summaries now show the
  restricted window.
- docs: CONFIG.md retention table + note.

Audit prerequisite (bead "audit first") is satisfied by the existing
docs/plans/retention-audit-2026-06-10.md.

Tests: restricted audio becomes a delete-candidate on the tight window while a
same-age normal recording is kept; pinned-restricted audio is kept. 803 core
tests pass; clippy -D warnings + fmt clean.
@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
useminutes.app Ready Ready Preview, Comment Jun 25, 2026 3:46am

@silverstein silverstein merged commit 6432500 into main Jun 25, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant