{ "tcpPort": 7777, "httpPort": 8080, "maxPacketSizeBytes": 1048576, "tickMs": 200, "positionBroadcastRateMs": 1000, "maxSpeedMps": 12.0, "movementValidationWindowSec": 5.0, "teleportThresholdMeters": 50.0, "cheatScoreWarnThreshold": 10, "cheatScoreRestrictThreshold": 25, "cheatScoreKickThreshold": 50, "killDistanceM": 10.0, "killCooldownMs": 30000, "meetingArrivalRadiusM": 15.0, "arrivalBaseMs": 30000, "arrivalSafetyMarginMs": 500, "allowedLateMs": 2000, "discussionPhaseMs": 30000, "votingPhaseMs": 45000, "emergencyMeetingCooldownMs": 60000, "maxEmergencyMeetingsPerPlayer": 1, "reportDistanceM": 5.0, "taskStartDistanceM": 3.0, "taskLeaveDebounceMs": 2000, "taskProgressKeepaliveMs": 5000, "snapshotEvents": 200, "snapshotIntervalMs": 300000, "walMaxSizeMb": 10, "dataPath": "data", "hostTimeoutMs": 15000, "reconnectWindowMs": 60000, "idleLobbyTtlMs": 3600000, "joinCodeTtlMs": 86400000, "maxPlayersPerLobby": 15, "joinRateLimitPerMinute": 10, "sessionKeySizeBytes": 32, "rsaKeySizeBits": 2048, "statsApiRateLimit": 100, "statsApiKey": null, "defaultImpostorCount": 1, "defaultTaskCount": 5, "defaultTiePolicy": "NoEject" }