io.atcr.hold.scan
Vulnerability scan results for a container manifest. Stored in the hold's embedded PDS. Record key is deterministic: the manifest digest hex without the 'sha256:' prefix, so re-scans upsert the existing record.
Details · record, key any
| Kind | record |
|---|---|
| Record key | any |
| Authority | hold.atcr.io |
| Indexed |
Record
record · key anyProperties
Count of critical severity vulnerabilities
minimum: 0
Count of high severity vulnerabilities
minimum: 0
Count of low severity vulnerabilities
minimum: 0
AT-URI of the scanned manifest (e.g., at://did:plc:xyz/io.atcr.manifest/abc123...)
Count of medium severity vulnerabilities
minimum: 0
reason
stringOptional human-readable explanation for non-ok status (e.g. 'unscannable artifact type application/vnd.cncf.helm.config.v1+json').
maxLength: 256
Repository name (e.g., myapp)
maxLength: 256
sbomBlob
blobSBOM blob (SPDX JSON format) uploaded to the hold's blob storage
accept: application/spdx+json
RFC3339 timestamp of when the scan completed
Version of the scanner that produced this result (e.g., atcr-scanner-v1.0.0)
maxLength: 64
status
stringOutcome of the scan attempt. 'ok' (or omitted, for back-compat) means the scanner produced an SBOM. 'failed' means the scanner ran but errored. 'skipped' means the scanner intentionally bypassed this artifact type (e.g. helm charts).
maxLength: 32knownValues: ok | failed | skipped
Total vulnerability count
minimum: 0
DID of the image owner
vulnReportBlob
blobGrype vulnerability report blob (JSON) with full CVE details
accept: application/vnd.atcr.vulnerabilities+json
Similar lexicons
semantic matchLexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
io.atcr.hold.subscribeScanJobs
subscriptionSubscribe to vulnerability scan jobs via WebSocket. Scanners connect to receive pending scan jobs and send back results. Authenticated via shared secret (query parameter or X-Scanner-Secret header).