This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch sbp
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
The following commit(s) were added to refs/heads/sbp by this push:
new c78b269 Add documentation for users about checks
c78b269 is described below
commit c78b2691fd2547eca3376af08d0937c5520d9abc
Author: Sean B. Palmer <[email protected]>
AuthorDate: Fri Jan 30 20:03:18 2026 +0000
Add documentation for users about checks
---
atr/docs/check-ignores.md | 4 +-
atr/docs/checks.md | 115 +++++++++++++++++++++++++++++++++++++++++
atr/docs/index.md | 5 +-
atr/docs/license-checks.md | 6 +--
atr/docs/running-the-server.md | 2 +-
atr/docs/signing-artifacts.md | 2 +-
atr/docs/user-guide.md | 5 +-
7 files changed, 128 insertions(+), 11 deletions(-)
diff --git a/atr/docs/check-ignores.md b/atr/docs/check-ignores.md
index 36d8e27..9ca0eb6 100644
--- a/atr/docs/check-ignores.md
+++ b/atr/docs/check-ignores.md
@@ -1,8 +1,8 @@
-# 2.4. Check ignores
+# 2.5. Check ignores
**Up**: `2.` [User guide](user-guide)
-**Prev**: `2.3.` [License checks](license-checks)
+**Prev**: `2.4.` [License checks](license-checks)
**Next**: `3.1.` [Running the server](running-the-server)
diff --git a/atr/docs/checks.md b/atr/docs/checks.md
new file mode 100644
index 0000000..b469644
--- /dev/null
+++ b/atr/docs/checks.md
@@ -0,0 +1,115 @@
+# 2.3. Checks
+
+**Up**: `2.` [User guide](user-guide)
+
+**Prev**: `2.2.` [Signing artifacts](signing-artifacts)
+
+**Next**: `2.4.` [License checks](license-checks)
+
+**Sections**:
+
+* [Overview](#overview)
+* [How ATR selects checks](#how-atr-selects-checks)
+* [Understanding check results and
ignores](#understanding-check-results-and-ignores)
+* [Individual checks](#individual-checks)
+* [SBOM checks](#sbom-checks)
+* [Check caching and reruns](#check-caching-and-reruns)
+* [Project policy inputs](#project-policy-inputs)
+
+## Overview
+
+ATR runs automated checks on release artifacts so that you can validate
compliance and completeness before a vote. The checks focus on signatures,
hashes, archive layout, licensing, and software bill of materials (SBOM)
content. This document explains what ATR checks, when those checks run, and how
to interpret results.
+
+Checks are recorded against the release revision that you upload, and the
results remain visible to reviewers and voters. The checks run in the
background and appear in the checks view for the revision as they complete.
+
+## How ATR selects checks
+
+When you create or update a draft revision, ATR scans the files in the
revision directory and schedules checks based on file suffix and project
policy. A signature file with the `.asc` suffix triggers signature
verification. A checksum file with the `.sha256` or `.sha512` suffix triggers
hash verification. Archive files with the `.tar.gz`, `.tgz`, or `.zip` suffix
trigger archive integrity, archive structure, and license checks. Files with
the `.cdx.json` suffix trigger SBOM analysis. AT [...]
+
+Project policy tells ATR which artifacts are source artifacts and which are
binary artifacts, and it supplies exclusion patterns for license related
checks. Project policy also controls the license check mode for source
artifacts. You can choose lightweight checks, Apache RAT, or both for source
artifacts. Binary artifacts are not scanned by RAT, and always rely on the
lightweight checks.
+
+## Understanding check results and ignores
+
+Each check result has a status of success, warning, failure, or exception.
Success indicates that the check completed without issues. Warning indicates a
potential policy concern that needs review. Failure indicates a clear problem
such as a missing file, invalid signature, or invalid license. Exception
indicates that the check could not complete due to some unexpected internal ATR
error.
+
+If certain checks are producing false positives, or outcomes that you'd like
to ignore for reasons particular to your project, then you can ignore them
using special rules. Please try to minimise the use of such rules. If you would
like checks to change for all projects, you can file an ATR issue.
+
+Ignore rules match on the checker key and other fields. Only warning, failure,
and exception results can be ignored. Each check section below names the exact
checker key that ATR records for that check.
+
+You can [read more about check ignores](check-ignores).
+
+## Individual checks
+
+### Path and naming checks
+
+ATR validates the file layout of the revision against ASF release rules. For
each artifact it expects a matching signature file with the `.asc` suffix and
at least one checksum file with the `.sha256` or `.sha512` suffix. It verifies
that metadata files correspond to an existing artifact and warns when a
metadata suffix is recommended against by policy. It rejects `.md5` checksums
and `.sig` signature files and warns about `.sha1` and `.sha`. It rejects
dotfiles except for those under th [...]
+
+This check records separate checker keys for errors, warnings, and success.
Use `atr.tasks.checks.paths.check_errors` for failures and
`atr.tasks.checks.paths.check_warnings` for warnings when you configure ignores.
+
+(Success results use `atr.tasks.checks.paths.check_success` but are not
eligible for ignores.)
+
+### Hash verification
+
+For each `.sha256` or `.sha512` file, ATR computes the hash of the referenced
artifact and compares it with the expected value. It supports files that
contain just the hash as well as files that include a filename and hash on the
same line. If the suffix does not indicate `sha256` or `sha512`, the check
fails.
+
+The checker key is `atr.tasks.checks.hashing.check`.
+
+### Signature verification
+
+For each `.asc` signature file, ATR verifies the signature against the
matching artifact using the public keys stored for the release committee. The
signature is accepted only when it verifies and when the signing key is
associated with an ASF UID or matches the committee private email address
pattern of `private@`[_committee name_]`.apache.org`. If no suitable key is
found or the signature does not match the artifact, the check fails.
+
+The checker key is `atr.tasks.checks.signature.check`.
+
+### Archive integrity checks
+
+ATR checks that each `.tar.gz`, `.tgz`, or `.zip` archive can be read in full.
For tar based archives it reads all members using the tar reader. For zip
archives it lists members and verifies that the zip structure is valid.
Archives that are corrupted or contain too many members fail this check.
+
+The checker key for tar based archives is `atr.tasks.checks.targz.integrity`,
and the checker key for zip archives is `atr.tasks.checks.zipformat.integrity`.
+
+### Archive structure checks
+
+ATR expects each archive to contain exactly one root directory. The expected
root name is derived from the archive filename base, without extension. When
the archive filename base ends with the suffix `source` or `src`, ATR accepts a
root directory that either includes that suffix or omits it. When the archive
filename base has no such suffix, the root directory must match the base. If
the root does not match, ATR records a warning so that you can review project
conventions. Structure ch [...]
+
+ATR also recognizes `npm pack` archives. When the root directory is named
package, ATR looks for a file named `package.json` and validates that it
contains a name and version. If the file is present and valid, ATR treats this
layout as acceptable. If the package name and version do not match the archive
filename base, ATR records a warning.
+
+The checker key for tar based structure checks is
`atr.tasks.checks.targz.structure`. The checker key for zip structure checks is
`atr.tasks.checks.zipformat.structure`.
+
+### License files in archives
+
+ATR checks for `LICENSE` and `NOTICE` files at the top level of the root
directory each archive. It requires exactly one of each. The `LICENSE` content
must match the Apache License text with only whitespace differences. The
`NOTICE` file must be valid UTF-8 text and must include a product line, an ASF
copyright statement, and the standard ASF attribution line. For podling
projects ATR also requires a `DISCLAIMER` or `DISCLAIMER-WIP` file at the same
level. These lightweight license chec [...]
+
+The checker key is `atr.tasks.checks.license.files`.
+
+You can [read more about license checks](license-checks).
+
+### License headers in source files
+
+ATR performs a lightweight scan of source files inside each archive to verify
Apache License headers. It inspects the first four kilobytes of each file with
a recognized source file suffix and checks for the standard Apache License
header text. Files with generated file suffixes such as `.bundle.js`,
`.chunk.js`, `.css.map`, `.js.map`, `.min.css`, `.min.js`, and `.min.map` are
treated as generated and are skipped. Files that include generated markers such
as `Generated By JJTree` or `Gen [...]
+
+The checker key is `atr.tasks.checks.license.headers`.
+
+You can [read more about license checks](license-checks).
+
+### Apache RAT license scan
+
+ATR can run Apache RAT on source archives unless your project policy selects
lightweight mode only. RAT runs in a temporary extraction directory, uses
standard exclusions for common SCM and IDE files, and always excludes known
generated file patterns. If the archive includes a RAT excludes file with the
standard name `.rat-excludes`, ATR uses it as the exclusion file and sets the
scan root to the directory that contains it. ATR records an error if more than
one such file is present or if [...]
+
+The checker key is `atr.tasks.checks.rat.check`.
+
+You can [read more about license checks](license-checks).
+
+## SBOM checks
+
+ATR recognizes CycloneDX SBOM files with the `.cdx.json` suffix. When you
upload such a file, ATR runs a special scoring tool check that evaluates NTIA
2021 conformance, CycloneDX validation results, license signals, and
vulnerability data derived from the SBOM. If a previous release exists, ATR
compares current and prior license and vulnerability information and records
that context with the result. ATR also provides additional SBOM tasks that you
can run from the interface: you can ask [...]
+
+SBOM tasks record task results rather than check results, so there is no
checker key to use in ignore rules for SBOM tasks. The results are presented
separately from regular checks, on their own page.
+
+## Check caching and reruns
+
+To save time, ATR will sometimes reuse results from a prior revision when a
file has not changed. The system computes a content hash and copies earlier
results so that the same check does not run again.
+
+_For debugging only_, if you need a fresh run, place a file named
`.atr-no-cache` in the revision root. When that file is present, ATR does not
reuse cached results for that revision. We may remove this functionality.
+
+## Project policy inputs
+
+Several checks depend on project policy. You can define which paths are
considered source artifacts and which are considered binary artifacts, and you
can define exclusion patterns for the RAT scan and for the lightweight license
header check. These settings affect which checks run and which files are
skipped. If no policy pattern matches a file, ATR treats it as a source
artifact for the purpose of the lightweight and RAT license checks.
diff --git a/atr/docs/index.md b/atr/docs/index.md
index 85556b9..b8d49fc 100644
--- a/atr/docs/index.md
+++ b/atr/docs/index.md
@@ -10,8 +10,9 @@ NOTE: This documentation is a work in progress.
* `2.` [User guide](user-guide)
* `2.1.` [Components](components)
* `2.2.` [Signing artifacts](signing-artifacts)
- * `2.3.` [License checks](license-checks)
- * `2.4.` [Check ignores](check-ignores)
+ * `2.3.` [Checks](checks)
+ * `2.4.` [License checks](license-checks)
+ * `2.5.` [Check ignores](check-ignores)
* `3.` [Developer guide](developer-guide)
* `3.1.` [Running the server](running-the-server)
* `3.2.` [Overview of the code](overview-of-the-code)
diff --git a/atr/docs/license-checks.md b/atr/docs/license-checks.md
index 77df4bf..276388d 100644
--- a/atr/docs/license-checks.md
+++ b/atr/docs/license-checks.md
@@ -1,10 +1,10 @@
-# 2.3. License checks
+# 2.4. License checks
**Up**: `2.` [User guide](user-guide)
-**Prev**: `2.2.` [Signing artifacts](signing-artifacts)
+**Prev**: `2.3.` [Checks](checks)
-**Next**: `2.4.` [Check ignores](check-ignores)
+**Next**: `2.5.` [Check ignores](check-ignores)
**Sections**:
diff --git a/atr/docs/running-the-server.md b/atr/docs/running-the-server.md
index 73d15aa..9b50270 100644
--- a/atr/docs/running-the-server.md
+++ b/atr/docs/running-the-server.md
@@ -2,7 +2,7 @@
**Up**: `3.` [Developer guide](developer-guide)
-**Prev**: `2.4.` [Check ignores](check-ignores)
+**Prev**: `2.5.` [Check ignores](check-ignores)
**Next**: `3.2.` [Overview of the code](overview-of-the-code)
diff --git a/atr/docs/signing-artifacts.md b/atr/docs/signing-artifacts.md
index d7be3a2..52a9d54 100644
--- a/atr/docs/signing-artifacts.md
+++ b/atr/docs/signing-artifacts.md
@@ -4,7 +4,7 @@
**Prev**: `2.1.` [Components](components)
-**Next**: `2.3.` [License checks](license-checks)
+**Next**: `2.3.` [Checks](checks)
**Sections**:
diff --git a/atr/docs/user-guide.md b/atr/docs/user-guide.md
index 00f3a38..b8d6157 100644
--- a/atr/docs/user-guide.md
+++ b/atr/docs/user-guide.md
@@ -10,8 +10,9 @@
* `2.1.` [Components](components)
* `2.2.` [Signing artifacts](signing-artifacts)
-* `2.3.` [License checks](license-checks)
-* `2.4.` [Check ignores](check-ignores)
+* `2.3.` [Checks](checks)
+* `2.4.` [License checks](license-checks)
+* `2.5.` [Check ignores](check-ignores)
**Sections**:
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]