70 lines
3.0 KiB
JSON
70 lines
3.0 KiB
JSON
|
|
{
|
||
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
|
|
"$id": "https://hermes.bstein.dev/contracts/hux/v1/artifact.schema.json",
|
||
|
|
"title": "HUX artifact",
|
||
|
|
"description": "Typed, versioned output (HUX-04). Content lives behind content_ref; versions are immutable and diffable; lineage records what an artifact was derived from; promotion copies a version into a project.",
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["schema", "id", "owner", "type", "title", "current_version", "versions", "sensitivity", "created_at", "updated_at"],
|
||
|
|
"properties": {
|
||
|
|
"schema": {"const": "hux.artifact.v1"},
|
||
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"owner": {"$ref": "common.schema.json#/$defs/user_ref"},
|
||
|
|
"conversation_id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"project_id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"type": {"type": "string", "enum": ["markdown", "code", "html", "svg", "image", "json", "csv", "document", "audio"]},
|
||
|
|
"language": {"type": "string", "maxLength": 40},
|
||
|
|
"title": {"type": "string", "minLength": 1, "maxLength": 200},
|
||
|
|
"current_version": {"type": "integer", "minimum": 1},
|
||
|
|
"versions": {
|
||
|
|
"type": "array",
|
||
|
|
"minItems": 1,
|
||
|
|
"items": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["version", "created_at", "created_by", "content_ref"],
|
||
|
|
"properties": {
|
||
|
|
"version": {"type": "integer", "minimum": 1},
|
||
|
|
"created_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
||
|
|
"created_by": {"$ref": "common.schema.json#/$defs/actor"},
|
||
|
|
"message_id": {"type": "string", "maxLength": 120},
|
||
|
|
"content_ref": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["hash", "bytes", "mime"],
|
||
|
|
"properties": {
|
||
|
|
"hash": {"$ref": "common.schema.json#/$defs/sha256"},
|
||
|
|
"bytes": {"type": "integer", "minimum": 0},
|
||
|
|
"mime": {"type": "string", "maxLength": 120}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"diff_from": {"type": "integer", "minimum": 1},
|
||
|
|
"lineage": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["artifact_id", "version"],
|
||
|
|
"properties": {
|
||
|
|
"artifact_id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"version": {"type": "integer", "minimum": 1}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"note": {"type": "string", "maxLength": 200}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"promotion": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["project_id", "version", "at"],
|
||
|
|
"properties": {
|
||
|
|
"project_id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"version": {"type": "integer", "minimum": 1},
|
||
|
|
"at": {"$ref": "common.schema.json#/$defs/timestamp"}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"sensitivity": {"$ref": "common.schema.json#/$defs/sensitivity"},
|
||
|
|
"created_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
||
|
|
"updated_at": {"$ref": "common.schema.json#/$defs/timestamp"}
|
||
|
|
}
|
||
|
|
}
|