> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suchi.page/llms.txt
> Use this file to discover all available pages before exploring further.

# Pipeline versions

> How Suchi identifies outdated processing results and offers controlled rescans.

Every document records the processing revision that successfully completed for
OCR, content extraction, and optional LLM classification:

* `pipeline_version_ocr`
* `pipeline_version_content`
* `pipeline_version_llm`

The binary carries the current revision for each pipeline. Maintainers bump a
revision when code, a prompt, an output schema, or another processing contract
changes enough that older results may be worth regenerating.

## Version zero

Version `0` means the pipeline has never completed successfully for that
document. A failed LLM request therefore remains at `0`. A valid
low-confidence response is still a completed classification: Suchi adds the
`needs-review` tag and records the current LLM revision without applying its
uncertain metadata.

A later successful classification at or above the configured threshold clears
an earlier classifier-owned `needs-review` assignment if the new result does not
request that tag. It does not remove manual, rule-assigned, imported, or legacy
tags without recorded classifier ownership. A changed title alone does not
establish confidence; failed requests and low-confidence results retain the tag.

This distinction matters when the LLM is first enabled. Existing version-zero
documents are not automatically presented as outdated LLM results because
they have no prior LLM result to upgrade. Select the documents in **Documents**
and use **Rescan** when you want to classify them.

## Automatic proposals

On boot, Suchi compares stored revisions with the binary's current revisions.
Detection, eligibility and documentless approval runs are scoped independently to
each filing system. Global pipeline/OCR/LLM configuration does not make a proposal
or `--system S02` rescan apply to another system.
When previously processed results are older, it opens one admin approval per
affected pipeline and system.

For LLM classification, automatic proposals only include documents with a
successful earlier revision (`pipeline_version_llm >= 1`). Enabling the LLM or
changing its endpoint, model, key, timeout, threshold, or egress setting does
not create a proposal. Those configuration changes require an explicit
selected rescan.

Password-protected PDFs waiting for decryption are also excluded. A rescan
cannot advance them while the password gate is closed; supplying a password
already re-enqueues the document through the current pipeline.

The proposal in **Approvals** names the improved processing step and matching
document count, without displaying internal revision numbers. Its actions are:

* **Rescan all N**: enqueue every matching document.
* **Try 20 first**: enqueue up to 20 random matches. This only appears when
  more than 20 documents match.
* **Dismiss**: close this proposal without enqueuing work.

The underlying approval choices remain `approve_all`, `approve_sample`, and
`dismiss`; the web app presents human labels. Rescans use the same durable
`post-ingest` path as new uploads, so a process interruption does not lose the
work.

Dismissed proposals stay closed for that pipeline's target revision across
restarts. Startup honors saved dismissals and closes duplicate proposals left
by older builds; explicitly approved work still runs. A later code revision
can create a new proposal, and other pipelines are unaffected.
If another rescan brings the matching count to zero,
the detector cancels the obsolete open proposal on the next boot.

## Explicit rescans

Camera-image fixes correct EXIF orientation and the page density of image-derived
PDFs, and retry difficult QR codes when local ZBar is available. They retain
content revision `2`; existing revision-2 documents need an explicit selected rescan.
OCR revision `2` adds one sparse-text retry for empty pages and a
confidence-filtered sparse supplement for raster images in the lightweight
engine. The existing approval path offers older OCR results for rescan.
Original images remain available even when an earlier
installation stored invalid derived bytes or skipped conversion. Select affected
images in Documents and choose **Rescan**, or accept the relevant proposal, to
regenerate their archive and indexed text from the immutable original. Upgrading
alone does not repair previously processed images.

Use the Documents selection controls for ordinary operator-driven rescans. The
CLI provides narrower filters and dry runs:

```sh theme={null}
suchi rescan --stale llm --dry-run
suchi rescan --stale llm --jd 20 --sample 5 --yes
suchi rescan --stale ocr --estimate
```

Unlike automatic LLM upgrade proposals, `--stale llm` includes version-zero
documents. This is intentional because the command is an explicit operator
decision.

## Failures

Exhausted or terminal jobs appear under **Dead jobs — needs attention** in
**Approvals**. Correct the underlying problem, then choose **Retry** to reset
the same durable row and run it again. Choose **Dismiss** when the failure was
expected or no longer needs attention. Both actions are administrator-only and
audited; dismissing a job does not delete its document.

Related pages: [LLM classifier](/llm-classifier), [Approvals](/approvals),
[CLI](/cli), and [Automations](/automations).
