{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://hermes.bstein.dev/contracts/hux/v1/citation.schema.json", "title": "HUX sources, passages, citations, research notebook", "description": "Research model (HUX-08). A source is where evidence came from; a passage is the exact excerpt; a citation ties a claim in a message to passages with an explicit support verdict; a notebook collects them per research question with assumptions and unresolved questions kept visible.", "$defs": { "source": { "type": "object", "additionalProperties": false, "required": ["schema", "id", "kind", "title", "classification", "retrieved_at"], "properties": { "schema": {"const": "hux.source.v1"}, "id": {"$ref": "common.schema.json#/$defs/id"}, "kind": {"type": "string", "enum": ["web", "document", "artifact", "memory", "tool_output", "dataset"]}, "uri": {"type": "string", "maxLength": 2000}, "title": {"type": "string", "minLength": 1, "maxLength": 300}, "publisher": {"type": "string", "maxLength": 200}, "published_at": {"$ref": "common.schema.json#/$defs/timestamp"}, "retrieved_at": {"$ref": "common.schema.json#/$defs/timestamp"}, "classification": {"type": "string", "enum": ["primary", "secondary", "unknown"]}, "content_hash": {"$ref": "common.schema.json#/$defs/sha256"}, "provenance": {"$ref": "common.schema.json#/$defs/provenance"} } }, "passage": { "type": "object", "additionalProperties": false, "required": ["schema", "id", "source_id", "text", "hash"], "properties": { "schema": {"const": "hux.passage.v1"}, "id": {"$ref": "common.schema.json#/$defs/id"}, "source_id": {"$ref": "common.schema.json#/$defs/id"}, "text": {"type": "string", "minLength": 1, "maxLength": 4000}, "hash": {"$ref": "common.schema.json#/$defs/sha256"}, "locator": { "type": "object", "additionalProperties": false, "properties": { "page": {"type": "integer", "minimum": 1}, "selector": {"type": "string", "maxLength": 500}, "line_start": {"type": "integer", "minimum": 1}, "line_end": {"type": "integer", "minimum": 1}, "char_start": {"type": "integer", "minimum": 0}, "char_end": {"type": "integer", "minimum": 0} } } } }, "citation": { "type": "object", "additionalProperties": false, "required": ["schema", "id", "message_id", "claim", "passage_ids", "support"], "properties": { "schema": {"const": "hux.citation.v1"}, "id": {"$ref": "common.schema.json#/$defs/id"}, "message_id": {"type": "string", "minLength": 1, "maxLength": 120}, "claim": {"type": "string", "minLength": 1, "maxLength": 1000}, "passage_ids": {"type": "array", "minItems": 1, "maxItems": 32, "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}}, "support": {"type": "string", "enum": ["supports", "partially_supports", "contradicts", "unverified"]}, "note": {"type": "string", "maxLength": 500} } }, "notebook": { "type": "object", "additionalProperties": false, "required": ["schema", "id", "conversation_id", "question", "status", "source_ids", "passage_ids", "citation_ids", "assumptions", "unresolved_questions", "updated_at"], "properties": { "schema": {"const": "hux.research_notebook.v1"}, "id": {"$ref": "common.schema.json#/$defs/id"}, "conversation_id": {"$ref": "common.schema.json#/$defs/id"}, "question": {"type": "string", "minLength": 1, "maxLength": 1000}, "status": {"type": "string", "enum": ["open", "answered", "abandoned"]}, "source_ids": {"type": "array", "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}}, "passage_ids": {"type": "array", "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}}, "citation_ids": {"type": "array", "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}}, "assumptions": {"type": "array", "maxItems": 64, "items": {"type": "string", "minLength": 1, "maxLength": 500}}, "unresolved_questions": {"type": "array", "maxItems": 64, "items": {"type": "string", "minLength": 1, "maxLength": 500}}, "updated_at": {"$ref": "common.schema.json#/$defs/timestamp"} } } }, "oneOf": [ {"$ref": "#/$defs/source"}, {"$ref": "#/$defs/passage"}, {"$ref": "#/$defs/citation"}, {"$ref": "#/$defs/notebook"} ] }