JSON Schema (draft 2020-12) for content validation: district, location, npc-profile, dialogue-pool, monologue-pool, triangle, routine, and fact-catalog. NPC schema uses if/then conditional for FRIEND pattern validation. Implements ticket #386. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
2.1 KiB
JSON
74 lines
2.1 KiB
JSON
{
|
|
"$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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|