Privacy

Debugging pipelines capture inputs

When inference fails, some systems save the failing input for engineers, and that path is rarely covered by the retention promise.

2 min readPrivacy

Software fails, and when it does, the people who maintain it want to know why. The most direct way to find out is to save whatever caused the failure - the exact input, the exact state - so it can be reproduced later on a developer's machine rather than guessed at from a stack trace alone. For an image-scoring pipeline, the input that caused the crash is the photo.

Why this path exists separately from normal storage

A retention policy typically describes the main flow: photo uploaded, processed, stored for some period, deleted. Error handling is usually built by a different part of the engineering effort, often later, often by someone optimising for "how do we debug the next weird failure" rather than "does this respect the deletion promise we already published." The result is a second, informal storage path - error-tracking tools, crash-report services, a "failed jobs" queue - that can retain the triggering image indefinitely, on its own schedule, outside whatever the privacy policy says about the primary flow.

This is not usually malicious. It is what happens when a debugging feature gets built without anyone routing it back through the same review the main storage path went through, and it is common enough across software generally that assuming it does not happen here would be optimistic rather than informed.

What increases and decreases the risk

Pipelines that fail rarely and fail loudly - a clear error, an alert, a developer looking at it same-day - tend to have a thin capture surface, because there is little failing input accumulating anywhere. Pipelines that route errors automatically into a third-party crash-reporting service, the kind that snapshots the full request for later analysis, have a wider one, because that service now holds a copy of the image under its own retention terms, layered on top of the same subprocessor question that applies to inference APIs generally.

What to look for

A policy that explicitly addresses "failed or errored uploads" alongside successful ones has thought this through. Rate Cock states that failed inference does not persist the input image beyond the immediate retry window, which is the specific commitment this gap usually needs and rarely gets. The same question is worth asking of any pipeline handling this kind of file, including what Measure My Cock's method captures when a measurement attempt fails partway through, how Penis Rater's tools handle a scoring error, and how a human reviewer on Rate Penis documents a review that had to be redone. What server logs separately record about the same failed request is the adjacent piece of this picture, since a crash and a log line about it are two different capture paths with two different retention clocks.

Read next

Full archive