Unit 12.03: What you tell the user you do with their text
The privacy notice is a set of factual claims about your system, and each one is checkable against the code.
Six claims, all verifiable
What you send, where, how long you keep it, and whether it trains anything.
The code prints the notice.
import json
notice = {
"what_we_send": "your message and the policy documents it matched",
"where": "a third-party model provider, named in our subprocessor list",
"retained_by_us": "30 days, redacted",
"used_for_training": False,
"how_to_delete": "any request, via support, within 30 days",
"what_we_keep_longer": "request counts and latency, with no message content",
}
print(json.dumps(notice, indent=2))
print("\nevery line is a fact about your system, checkable against the code")
# `used_for_training` is the question users actually ask, and the answer
# depends on your provider's terms rather than your intentions. Read them, then
# write this -- and check it again when you change provider.
used_for_training is the question users actually ask, and the answer depends on your provider's terms rather than your intentions. Read them before writing this, and check again when you change provider.
how_to_delete has to correspond to a mechanism that exists. A stated deletion path with no implementation is worse than none.
The mistake this prevents
The mistake is writing the notice from what you intend rather than from what the system does. Every line should be traceable to code or to a contract, and the ones that are not will be wrong within a release.
Takeaway
Write the privacy notice from the code and the provider's terms, not from intentions. Every claim should be checkable, especially the deletion path.
