{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "fact-catalog.schema.json", "title": "Fact Catalog", "description": "Fact definitions — one file per fact category in global/knowledge/ (D-035).", "type": "object", "required": ["category", "facts"], "additionalProperties": false, "properties": { "category": { "type": "string", "description": "Fact category matching the filename" }, "facts": { "type": "array", "items": { "$ref": "#/$defs/fact" }, "minItems": 1 } }, "$defs": { "fact": { "type": "object", "required": ["fact_id", "description", "discoverable_by"], "additionalProperties": false, "properties": { "fact_id": { "type": "string", "pattern": "^[a-z][a-z0-9_-]*$", "description": "Stable unique fact identifier" }, "description": { "type": "string", "minLength": 1 }, "discoverable_by": { "type": "array", "items": { "type": "string", "enum": ["smuggler", "detective"] }, "minItems": 1, "uniqueItems": true, "description": "Which playable characters can discover this fact" }, "abstract": { "type": "boolean", "default": false, "description": "If true, fact cannot reach Direct confidence (only inferred)" }, "progression": { "type": "array", "items": { "$ref": "#/$defs/confidence_level" }, "description": "Confidence level descriptions in ascending order" } } }, "confidence_level": { "type": "object", "required": ["confidence", "text"], "additionalProperties": false, "properties": { "confidence": { "type": "string", "enum": ["suspects", "knows_of", "knows_details", "direct"] }, "text": { "type": "string", "description": "Player-facing description at this confidence level" } } } } }