{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://git.add-ideas.de/add-ideas/govoplan/src/branch/main/docs/installed-composition-evidence.schema.json", "title": "GovOPlaN installed composition evidence", "type": "object", "additionalProperties": false, "required": [ "schema_version", "evidence_kind", "assessment_id", "assessment_release", "collected_at", "scope", "artifacts", "collection_issues" ], "properties": { "$schema": { "type": "string", "format": "uri-reference" }, "schema_version": { "const": "0.3.0" }, "evidence_kind": { "const": "govoplan.installed-composition" }, "assessment_id": { "$ref": "#/$defs/opaque_id" }, "assessment_release": { "$ref": "#/$defs/opaque_id" }, "collected_at": { "type": "string", "format": "date-time" }, "scope": { "const": "current-python-environment.govoplan-distributions" }, "artifacts": { "type": "array", "maxItems": 256, "items": { "$ref": "#/$defs/artifact" } }, "collection_issues": { "type": "array", "maxItems": 256, "items": { "$ref": "#/$defs/collection_issue" } } }, "$defs": { "opaque_id": { "type": "string", "minLength": 1, "maxLength": 160, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$" }, "package_name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" }, "version": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[A-Za-z0-9][A-Za-z0-9._+!-]*$" }, "artifact": { "type": "object", "additionalProperties": false, "required": [ "package_name", "package_version", "modules", "source_provenance", "record_integrity" ], "properties": { "package_name": { "$ref": "#/$defs/package_name" }, "package_version": { "$ref": "#/$defs/version" }, "modules": { "type": "array", "maxItems": 16, "items": { "$ref": "#/$defs/module" } }, "source_provenance": { "$ref": "#/$defs/source_provenance" }, "record_integrity": { "$ref": "#/$defs/record_integrity" } } }, "module": { "type": "object", "additionalProperties": false, "required": ["module_id", "manifest_version"], "properties": { "module_id": { "$ref": "#/$defs/opaque_id" }, "manifest_version": { "$ref": "#/$defs/version" } } }, "source_provenance": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": ["basis", "kind", "commit"], "properties": { "basis": { "const": "local-pep610-metadata" }, "kind": { "const": "vcs-commit" }, "commit": { "type": "string", "pattern": "^[0-9a-f]{40,64}$" } } }, { "type": "object", "additionalProperties": false, "required": ["basis", "kind", "sha256"], "properties": { "basis": { "const": "local-pep610-metadata" }, "kind": { "const": "archive" }, "sha256": { "$ref": "#/$defs/sha256" } } }, { "type": "object", "additionalProperties": false, "required": ["basis", "kind"], "properties": { "basis": { "const": "local-pep610-metadata" }, "kind": { "enum": [ "editable-local", "local-directory", "index-or-unknown", "malformed-direct-url" ] } } } ] }, "record_integrity": { "type": "object", "additionalProperties": false, "required": [ "status", "hashed_file_count", "permitted_unhashed_file_count", "generated_unhashed_file_count", "unverifiable_file_count", "missing_file_count", "mismatched_file_count" ], "properties": { "status": { "enum": [ "verified", "partial", "mismatch", "unavailable", "limit-exceeded" ] }, "hashed_file_count": { "$ref": "#/$defs/count" }, "permitted_unhashed_file_count": { "$ref": "#/$defs/count" }, "generated_unhashed_file_count": { "$ref": "#/$defs/count" }, "unverifiable_file_count": { "$ref": "#/$defs/count" }, "missing_file_count": { "$ref": "#/$defs/count" }, "mismatched_file_count": { "$ref": "#/$defs/count" } }, "allOf": [ { "if": { "properties": { "status": { "const": "verified" } } }, "then": { "properties": { "hashed_file_count": { "minimum": 1 }, "permitted_unhashed_file_count": { "minimum": 1 }, "unverifiable_file_count": { "const": 0 }, "missing_file_count": { "const": 0 }, "mismatched_file_count": { "const": 0 } } } }, { "if": { "properties": { "status": { "const": "partial" } } }, "then": { "properties": { "hashed_file_count": { "minimum": 1 }, "unverifiable_file_count": { "minimum": 1 }, "missing_file_count": { "const": 0 }, "mismatched_file_count": { "const": 0 } } } }, { "if": { "properties": { "status": { "const": "mismatch" } } }, "then": { "anyOf": [ { "properties": { "missing_file_count": { "minimum": 1 } } }, { "properties": { "mismatched_file_count": { "minimum": 1 } } } ] } }, { "if": { "properties": { "status": { "const": "unavailable" } } }, "then": { "properties": { "hashed_file_count": { "const": 0 }, "missing_file_count": { "const": 0 }, "mismatched_file_count": { "const": 0 } } } } ] }, "collection_issue": { "type": "object", "additionalProperties": false, "required": ["code", "package_name"], "properties": { "code": { "enum": [ "distribution-metadata-invalid", "duplicate-distribution", "module-entry-point-load-failed", "module-entry-point-invalid", "module-entry-point-limit-exceeded", "collection-limit-exceeded" ] }, "package_name": { "$ref": "#/$defs/package_name" } } }, "count": { "type": "integer", "minimum": 0, "maximum": 1000000 }, "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" } } }