full diff

io.atcr.hold.scan

From
bafyreidqtmx2ivfrmj5cfki2zej5fgjqux4svdv3rrkv2evs5f2jdld5yi indexed 2026-09-06 01:26 UTC View this version
To
bafyreibp4c3t62qubqcymdudsyhh2x6cuzjoko7wvozuxwuvtv3lhs4yhm indexed 2026-03-19 20:28 UTC View this version

Compatibility

breaking 4 breaking changes, 0 non-breaking changes.

Breaking changes (4)
  • RemovedVertex RemovedVertex { vertex_id: "io.atcr.hold.scan:body.reason" }
  • RemovedVertex RemovedVertex { vertex_id: "io.atcr.hold.scan:body.status" }
  • RemovedEdge RemovedEdge { src: "io.atcr.hold.scan:body", tgt: "io.atcr.hold.scan:body.reason", kind: "prop", name: Some("reason") }
  • RemovedEdge RemovedEdge { src: "io.atcr.hold.scan:body", tgt: "io.atcr.hold.scan:body.status", kind: "prop", name: Some("status") }

Migration guidance

Removed

  • RemovedVertex { vertex_id: "io.atcr.hold.scan:body.reason" }
  • RemovedVertex { vertex_id: "io.atcr.hold.scan:body.status" }

Notes

  • Breaking: RemovedEdge { src: "io.atcr.hold.scan:body", tgt: "io.atcr.hold.scan:body.reason", kind: "prop", name: Some("reason") }
  • Breaking: RemovedEdge { src: "io.atcr.hold.scan:body", tgt: "io.atcr.hold.scan:body.status", kind: "prop", name: Some("status") }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "main": {
55 "description": "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.",
66 "key": "any",
77 "record": {
88 "properties": {
99 "critical": {
1010 "description": "Count of critical severity vulnerabilities",
1111 "minimum": 0,
1212 "type": "integer"
1313 },
1414 "high": {
1515 "description": "Count of high severity vulnerabilities",
1616 "minimum": 0,
1717 "type": "integer"
1818 },
1919 "low": {
2020 "description": "Count of low severity vulnerabilities",
2121 "minimum": 0,
2222 "type": "integer"
2323 },
2424 "manifest": {
2525 "description": "AT-URI of the scanned manifest (e.g., at://did:plc:xyz/io.atcr.manifest/abc123...)",
2626 "format": "at-uri",
2727 "type": "string"
2828 },
2929 "medium": {
3030 "description": "Count of medium severity vulnerabilities",
3131 "minimum": 0,
3232 "type": "integer"
3333 },
34 "reason": {
35 "description": "Optional human-readable explanation for non-ok status (e.g. 'unscannable artifact type application/vnd.cncf.helm.config.v1+json').",
36 "maxLength": 256,
37 "type": "string"
38 },
3934 "repository": {
4035 "description": "Repository name (e.g., myapp)",
4136 "maxLength": 256,
4237 "type": "string"
4338 },
4439 "sbomBlob": {
4540 "accept": [
4641 "application/spdx+json"
4742 ],
4843 "description": "SBOM blob (SPDX JSON format) uploaded to the hold's blob storage",
4944 "type": "blob"
5045 },
5146 "scannedAt": {
5247 "description": "RFC3339 timestamp of when the scan completed",
5348 "format": "datetime",
5449 "type": "string"
5550 },
5651 "scannerVersion": {
5752 "description": "Version of the scanner that produced this result (e.g., atcr-scanner-v1.0.0)",
5853 "maxLength": 64,
59 "type": "string"
60 },
61 "status": {
62 "description": "Outcome 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).",
63 "knownValues": [
64 "ok",
65 "failed",
66 "skipped"
67 ],
68 "maxLength": 32,
6954 "type": "string"
7055 },
7156 "total": {
7257 "description": "Total vulnerability count",
7358 "minimum": 0,
7459 "type": "integer"
7560 },
7661 "userDid": {
7762 "description": "DID of the image owner",
7863 "format": "did",
7964 "type": "string"
8065 },
8166 "vulnReportBlob": {
8267 "accept": [
8368 "application/vnd.atcr.vulnerabilities+json"
8469 ],
8570 "description": "Grype vulnerability report blob (JSON) with full CVE details",
8671 "type": "blob"
8772 }
8873 },
8974 "required": [
9075 "manifest",
9176 "repository",
9277 "userDid",
9378 "critical",
9479 "high",
9580 "medium",
9681 "low",
9782 "total",
9883 "scannerVersion",
9984 "scannedAt"
10085 ],
10186 "type": "object"
10287 },
10388 "type": "record"
10489 }
10590 },
10691 "id": "io.atcr.hold.scan",
10792 "lexicon": 1
10893}