Comparing files attached in ChatGPT without weakening the download boundary
Removing a second upload screen made DocDiffAI simpler for the user. It also made file retrieval part of the security boundary.
How do you compare two documents directly in ChatGPT without sending someone through another upload screen?
DocDiffAI now accepts files attached in the conversation. The user adds an older document and a newer one, asks for a comparison, and stays in the same place.
That removes a step from the interface. It does not remove the file handoff. It moves the handoff into the app.
An attachment is still an untrusted download
A ChatGPT app does not receive a trusted local file. It receives a file reference that the app has to retrieve.
That download path can fail in ordinary ways. The file may be too large, the server may take too long, or the response may not contain the file type it claims to contain.
It also creates a network boundary. A URL supplied through the conversation cannot be allowed to reach private services or follow an unchecked chain of redirects.
DocDiffAI applies the following limits before a document reaches the comparison pipeline:
- 50 MB maximum file size
- HTTPS only
- no more than three redirects
- a 25-second deadline
- private network destinations blocked
- MIME type checked after download
The MIME check matters because a filename and a response header are claims. The downloaded bytes are the evidence.
The simpler interface needs the stricter boundary
The old handoff made the trust boundary visible. A person left ChatGPT, opened another upload screen, and selected the files again.
The new handoff feels like one action. Behind it, the app still has to retrieve, inspect, and reject unsafe input before parsing either document.
This is the trade I want in an AI product. Make the user’s job smaller. Keep the limits explicit in the system that takes over the work.
The pattern applies beyond document comparison
Any ChatGPT app that accepts an attached file inherits the same problem. It might read an invoice, summarize a report, inspect a spreadsheet, or extract details from a form.
The parser is only one boundary. The download happens first.
If the attachment path accepts any URL, follows redirects without a cap, trusts the declared content type, or can reach private network addresses, the clean interface is hiding a weak input path.
The user should get one less step because the app does more careful work, not because the boundary disappeared.