NODEDC_MISSION_CORE/schemas/session-manifest.schema.json

115 lines
3.6 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.dcserve.ru/SILVER/NDC_xgrids-k1-connector/schemas/session-manifest.schema.json",
"$comment": "The legacy v1 schema identifier is intentionally immutable after the repository rename to NODEDC_MISSION_CORE.",
"title": "K1 laboratory session manifest",
"type": "object",
"additionalProperties": false,
"required": [
"schema_version",
"session_id",
"experiment",
"tool",
"host",
"device",
"network",
"timeline",
"artifacts",
"decision"
],
"properties": {
"schema_version": { "const": 1 },
"session_id": {
"type": "string",
"pattern": "^[0-9]{8}T[0-9]{6}Z_[a-z0-9_-]+$"
},
"experiment": { "type": "string", "minLength": 1 },
"tool": {
"type": "object",
"additionalProperties": false,
"required": ["version", "git_commit"],
"properties": {
"version": { "type": "string" },
"git_commit": { "type": "string" }
}
},
"host": {
"type": "object",
"additionalProperties": false,
"required": ["macos_version", "machine", "python_version"],
"properties": {
"macos_version": { "type": "string" },
"machine": { "type": "string" },
"python_version": { "type": "string" },
"wifi_interface": { "type": ["string", "null"] },
"vpn_active": { "type": "boolean" }
}
},
"device": {
"type": "object",
"additionalProperties": false,
"required": ["model", "activation_state", "firmware"],
"properties": {
"model": { "type": "string" },
"serial_suffix": { "type": ["string", "null"], "maxLength": 8 },
"activation_state": {
"enum": ["unknown", "active", "activation_lock", "fault"]
},
"firmware": { "type": ["string", "null"] }
}
},
"network": {
"type": "object",
"additionalProperties": false,
"required": ["topology", "k1_address_redacted"],
"properties": {
"topology": {
"enum": ["unknown", "current_lan", "device_ap", "direct"]
},
"k1_address_redacted": { "type": ["string", "null"] }
}
},
"timeline": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["event", "monotonic_seconds"],
"properties": {
"event": { "type": "string", "minLength": 1 },
"monotonic_seconds": { "type": "number", "minimum": 0 },
"utc": { "type": ["string", "null"], "format": "date-time" },
"note": { "type": ["string", "null"] }
}
}
},
"artifacts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["path", "size_bytes", "sha256", "classification"],
"properties": {
"path": { "type": "string", "minLength": 1 },
"size_bytes": { "type": "integer", "minimum": 0 },
"sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
"classification": {
"enum": ["public", "redacted", "sensitive", "secret"]
}
}
}
},
"decision": {
"type": "object",
"additionalProperties": false,
"required": ["status", "gate", "reason"],
"properties": {
"status": { "enum": ["GO", "PAUSE", "BLOCKED"] },
"gate": { "type": "string", "minLength": 1 },
"reason": { "type": "string", "minLength": 1 },
"next_smallest_experiment": { "type": ["string", "null"] }
}
}
}
}