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.
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.