Quick Start
Unpack the archive for your operating system from the download page. The executable, example manifests and reference are included. UnGathered needs no service to run alongside it. This example creates a new, deliberately incomplete document pack:
mkdir -p collection/products/widget
printf 'Specification placeholder\n' > collection/products/widget/specification.pdf
./ungathered --manifest examples/manufacturing.json --root collection
The filenames illustrate document roles; that placeholder is not a real PDF. The scan should return exit 1 and report the missing drawing.pdf and inspection.csv. The rule also checks that the specification is a nonempty regular file. It does not parse PDF contents or decide whether the specification is adequate.
To save a report, choose a new path outside the input root:
./ungathered --manifest examples/manufacturing.json --root collection \
--format html --output collection-report.html
The output parent must exist and the output file must be new. Text is the default format; JSON and HTML include the checks that passed as well as the gaps. A report with no declared gaps or operational errors exits 0. Declared gaps exit 1. Invalid input or operational errors exit 2. An unreadable directory is therefore different from a missing inspection record.
For article assets, the bundled examples/publishing.json selects articles/*.md, requires images/{stem}.jpg and looks for a Photo credit: line followed by text in the article. The paths are relative to the scan root. If the selected article is articles/cafe.md, its expected image is images/cafe.jpg. This is an explicit filename convention; it does not infer a featured-image URL from frontmatter.
Each collection needs at least one selected item by default. Leave that safeguard in place unless an empty collection is intentional. A scan only knows the items selected by its anchor pattern, so an entire missing product folder cannot be inferred from a roster the manifest never declared. The reference explains variables, minimum item counts and content-read limits.