{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://stellaops.local/airgap/manifest.schema.json", "title": "Offline Kit Manifest", "type": "object", "additionalProperties": false, "required": [ "schemaVersion", "bundleId", "tenant", "environment", "createdAt", "stalenessWindowHours", "replayPolicy", "tools", "feeds", "policies", "chunks", "hashes" ], "properties": { "schemaVersion": { "type": "string", "pattern": "^1\\.\\d+\\.\\d+$" }, "bundleId": { "type": "string", "pattern": "^offline-kit:[A-Za-z0-9._:-]+$" }, "tenant": { "type": "string", "minLength": 1 }, "environment": { "type": "string", "enum": ["prod", "stage", "dev", "test"] }, "createdAt": { "type": "string", "format": "date-time" }, "stalenessWindowHours": { "type": "integer", "minimum": 0 }, "replayPolicy": { "type": "string", "enum": ["hash-only", "full-recompute", "policy-freeze"] }, "tools": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["name", "version", "sha256"], "properties": { "name": { "type": "string" }, "version": { "type": "string" }, "sha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" } } }, "uniqueItems": true }, "feeds": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["name", "snapshot", "sha256"], "properties": { "name": { "type": "string" }, "snapshot": { "type": "string" }, "sha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" }, "stalenessHours": { "type": "integer", "minimum": 0 } } }, "uniqueItems": true }, "policies": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["name", "version", "sha256"], "properties": { "name": { "type": "string" }, "version": { "type": "string" }, "sha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" } } }, "uniqueItems": true }, "chunks": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["path", "sha256", "size"], "properties": { "path": { "type": "string" }, "sha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" }, "size": { "type": "integer", "minimum": 0 }, "kind": { "type": "string", "enum": ["advisory", "sbom", "vex", "policy", "graph", "tooling", "other"] } } }, "uniqueItems": true }, "avScan": { "type": "object", "additionalProperties": false, "required": ["status"], "properties": { "status": { "type": "string", "enum": ["not_run", "clean", "findings"] }, "scanner": { "type": "string" }, "scanAt": { "type": "string", "format": "date-time" }, "reportPath": { "type": "string" }, "reportSha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" } } }, "hashes": { "type": "object", "additionalProperties": false, "required": ["manifestSha256", "bundleSha256"], "properties": { "manifestSha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" }, "bundleSha256": { "type": "string", "pattern": "^[A-Fa-f0-9]{64}$" } } }, "signatures": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["type", "keyId", "signature"], "properties": { "type": { "type": "string", "enum": ["dsse", "jws-detached"] }, "keyId": { "type": "string" }, "signature": { "type": "string" }, "envelopeDigest": { "type": "string", "pattern": "^sha256:[A-Fa-f0-9]{64}$" } } } } } }