30
CodeDev system / System reference

CodeDev privacy and inquiry retention

How the implemented Privacy Request flow, inquiry closure timestamp, retention window, dry-run purge, permanent purge, and backup limitations work.

codedevprivacyretentionleaddata

01Public privacy surfaces

CodeDev exposes /privacy, /terms, and /faq. The contact form also supports a Privacy Request inquiry type. An optional privacy-contact address can be configured in site settings; otherwise the public privacy notice directs the requester to the contact form.

02Inquiry lifecycle

Lead.closed_at is recorded when an inquiry enters the closed state and cleared when it is reopened. INQUIRY_RETENTION_DAYS controls how long a closed inquiry remains eligible to stay in the live database before the retention command may permanently delete it.

bashRetention operations
# Dry run: inspect what is eligible
python -m flask --app manage.py privacy-retention

# Explicit enforcement
python -m flask --app manage.py privacy-retention --confirm
  • The default configured window is 730 days after closure unless the operator changes it.
  • Production accepts a bounded 30-3650 day configuration.
  • Deletion is bounded per command invocation and can be repeated until no eligible rows remain.
  • The retention audit entry records aggregate count/window information instead of inquiry PII.