{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://neon-sprawl.local/schemas/faction-def.json", "title": "FactionDef", "description": "Single faction row for catalogs (e.g. content/factions/*_factions.json). IDs are stable forever—rename display in displayName only. See docs/decomposition/modules/E7_M3_FactionReputationLedger.md.", "type": "object", "additionalProperties": false, "required": ["id", "displayName", "minStanding", "maxStanding", "neutralStanding"], "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9_]*$", "description": "Immutable faction key for standing, gates, telemetry, and reputation grants." }, "displayName": { "type": "string", "minLength": 1, "description": "Player-facing label; safe to change without migrating character data." }, "minStanding": { "type": "integer", "description": "Lowest standing value after clamp on apply." }, "maxStanding": { "type": "integer", "description": "Highest standing value after clamp on apply." }, "neutralStanding": { "type": "integer", "description": "Default standing for new players when no snapshot exists." } } }