# How to Tell Review from Rubber-Stamping in Pre-Labelled Data

Source: https://www.potatoannotator.com/docs/guides/detecting-rubber-stamped-prelabels

**Pre-labelling makes annotators faster and rubber-stamping frictionless, and no measure computed from the annotations themselves can tell the two apart.** The geometry is identical, and inter-annotator agreement goes *up*, because annotators who all accept the same model output are unanimous by construction.

The only place the difference appears is in the timing.

## Why quality measures fail here

Suppose a model pre-labels every image and three annotators accept nearly everything.

- **Agreement** rises, because they all record the model's output.
- **Gold-standard accuracy** rises wherever the model is right, which is most of the time.
- **Adjudication volume** falls, because there is nothing to adjudicate.

Every dashboard looks better. The dataset is now a record of a model agreeing with itself, and its errors are systematic rather than random — which is the worst kind, because they will not average out across annotators.

This is not hypothetical for 2026 workflows. One-click auto-labelling is becoming the default across the industry, and the reliability literature has no measure for it, because chance-corrected agreement was designed for independent judgements and these are not independent.

## What to record

Timing, at the level of the individual accept:

| Signal | What it tells you |
|---|---|
| **AI-accept latency** | Time from suggestion rendered to accepted. The single most useful number. |
| Time per shape | Whether a drawn annotation took a plausible amount of time |
| Revision count | Whether anything was corrected after being placed |
| Stroke dynamics | Whether a mask was painted or accepted whole |
| Zoom behaviour | Whether the annotator ever looked closely |

You do not need coordinates for any of this, and you should not collect them. A process record that cannot reconstruct the annotation is much easier to justify to an ethics board, and it answers the question just as well.

## Reading the numbers

> A human cannot inspect a mask boundary and decide in 300 ms. Once, maybe, if the object was obvious. As a **median across many items**, it is not fast expertise.

Read a distribution, never a threshold on one item. Three rules that hold up:

1. **Compare each annotator to the project, not to a constant.** An easy corpus really is fast. Percentile calibration within your own project is the only defensible baseline.
2. **Look for runs.** Twenty consecutive sub-500 ms accepts is a much stronger signal than twenty scattered ones.
3. **Split by whether a suggestion was present.** An annotator's own drawing speed is the natural control for their accept speed.

## What this does not do

It does not detect fraud, and it does not classify an annotator. A flag is a prompt to look, not a finding.

Base rates matter and are easy to forget: in a corpus where 80% of items really are trivial, fast will usually be correct, and a rule tuned to catch rubber-stamping will mostly catch competence. That is why the thresholds belong to your project rather than to a shipped model.

## Doing it in Potato

```yaml
annotation_telemetry:
  enabled: true
  fidelity: events
  idle_ms: 120000
```

For free-text answers the equivalent is [keystroke logging](/docs/features/keystroke-logging), which distinguishes composed from transcribed from pasted text. It captures on `beforeinput` rather than `keydown`, because paste, drop, IME, dictation and autofill all change a field without firing a keydown — so a keydown-only logger is blind to exactly the cases it exists to catch.

Neither ships a pre-trained classifier. There is no labelled corpus of rubber-stamping, and fitted coefficients presented as validated would be fabricated validation.

## Ethics

Annotators see a recording notice, and disclosure defaults to on. This is the line between a research instrument and surveillance, and it is worth being explicit in your consent language about what is recorded (timing and process), what is not (content and coordinates), how long it is kept, and what it will be used for.

See [keystroke logging ethics](/docs/features/keystroke-logging-ethics) for sample consent language and the retention questions.

## Further reading

- [Drawing telemetry](/docs/measurement/drawing-telemetry)
- [Keystroke logging](/docs/features/keystroke-logging)
- [Gold standards and attention checks](/docs/guides/gold-standards-and-attention-checks)
- [LLM pre-annotation](/docs/guides/llm-pre-annotation)
