{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://neon-sprawl.local/schemas/encounter-def.json", "title": "EncounterDef", "description": "Single encounter template row for catalogs (e.g. content/encounters/*_encounters.json). IDs are stable forever—rename display in displayName only. See docs/decomposition/modules/E5_M3_EncounterAndRewardTables.md.", "type": "object", "additionalProperties": false, "required": [ "id", "displayName", "completionCriteria", "requiredNpcInstanceIds", "rewardTableId" ], "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9_]*$", "description": "Immutable encounter key for progress tracking and completion events." }, "displayName": { "type": "string", "minLength": 1, "description": "Player-facing label; safe to change without migrating character data." }, "completionCriteria": { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "type": "string", "description": "Prototype Slice 3: defeat all listed NPC instances.", "enum": ["defeat_all_targets"] } } }, "requiredNpcInstanceIds": { "type": "array", "minItems": 3, "maxItems": 3, "uniqueItems": true, "items": { "type": "string", "pattern": "^[a-z][a-z0-9_]*$" }, "description": "NPC instance ids from server PrototypeNpcRegistry (CI cross-ref set gate)." }, "rewardTableId": { "type": "string", "pattern": "^[a-z][a-z0-9_]*$", "description": "RewardTable id granted once on encounter complete." } } }