Skip to content

[Compliance] AI usage anonymization misses metadata-stored prompts #546

@2witstudios

Description

@2witstudios

Summary

The AI usage anonymization job targets ai_usage_logs.prompt/completion, but runtime writes store prompt/completion snippets under metadata, which can leave prompt-like content unredacted until full row purge.

Evidence

  • Runtime writer stores snippets in metadata, not dedicated columns:
    • /Users/jono/production/PageSpace/packages/lib/src/monitoring/ai-monitoring.ts:487
  • DB insert path does not set prompt/completion columns:
    • /Users/jono/production/PageSpace/packages/lib/src/logging/logger-database.ts:192
  • Anonymizer only nulls prompt and completion columns:
    • /Users/jono/production/PageSpace/packages/lib/src/logging/ai-usage-purge.ts:17
  • Cron explicitly intends 30-day anonymization before 90-day purge:
    • /Users/jono/production/PageSpace/apps/web/src/app/api/cron/purge-ai-usage-logs/route.ts:9

Why This Matters

The current 30-day anonymization step can be ineffective for data actually stored in metadata, causing retention behavior to diverge from policy intent.

Proposed Work

  1. Choose one canonical storage model for prompt/completion snippets (columns vs metadata).
  2. Update write path and purge/anonymization logic to align to that model.
  3. Ensure scrub covers all prompt/completion-bearing locations.
  4. Add tests proving anonymization removes prompt-like data at 30 days.

Acceptance Criteria

  • Prompt/completion snippets are stored and redacted consistently with documented policy.
  • 30-day anonymization demonstrably removes prompt/completion content from persisted records.
  • 90-day purge still removes rows as expected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions