{
	"_NOTE" : "THIS FILE MAY BE AUTOGENERATED / COPIED. ONLY MODIFY THE ORIGINAL FILE IN THE FOLDER /sharedData/ !",
	"valid_identifier_types" : [
		["program", "ProgramModel", "Program"],
		["symbol", "SymbolModel", "Symbol"],
		["rule", "RuleModel", "Rule"],
		["file", "FileObjectModel", "FileObject"],
		["tag", "TagModel", "Tag"],
		["message", "MessageModel", "Message"],
		["event", "EventModel", "Event"],
		["option", "OptionModel", "Option"]
	],
	"valid_event_types" : [
		["default"],
		["execute_rule"],
		["execute_option"],
		["present_options"],
		["mention_uncertainty"],
		["execute_program"],
		["wait_for_signal"],
		["user_command"]
	],
	"valid_user_command_event_subtypes" : [
		["initialize", "initialize"],
		["submit_data", "submit_data"],
		["change_parameters", "change_parameters"],
		["create_objects", "create_objects"]
	],
	"valid_object_creation_triggers" : [
		"out_of_queued_events",
		"chosen_by_priority",
		"system_generated_tag",
		"user_input",
		"created_by_program",
		"created_by_rule",
		"created_by_option",
		"displaying_list_of_options",
		"mention_uncertainty",
		"error_during_iteration",
		"global_feedback_request"
	],
	"valid_runtime_error_types" : [
		["program_timeout", "the program timed out"],
		["program_interrupted_from_outside", "the program was interrupted from the outside (by the user) before it could finish"],
		["program_docker_execution_failed", "the program encountered an unknown error and did not create an error file in the process"],
		["program_failed_with_error_file", "the program encountered an error and created an error file while doing so"],
		["program_result_parsing_failed", "the output of the program could not be parsed correctly"],
		["program_result_processing_failed", "the result of the program could be parsed locally, but an error occured while processing it on the server"],
		["rule_result_processing_failed", "a Rule attempted to do something illegal on the server."],
		["option_result_processing_failed", "an Option attempted to do something illegal on the server."],
		["user_input_processing_failed", "the User attempted to do something illegal on the server."],
		["file_copying_failed", "a File provided by a user was not copied correctly by a lod-executor."],
		["unexpected_error", "the server encountered an unexpected type of error. This is probably not the fault of the contributors but of the website's designers."]
	],
	"server_url" : "https://elody.com/",
	"debug_server_url" : "http://localhost:9905/",
	"docker_registry" : "elody.com:444",
	"default_local_exec_env_host" : "https://localhost",
	"default_local_exec_env_port" : 5555,
	"json_encoding" : "utf-8",
	"server_post_request_timeout" : 10,
	"lod_executor_exec_env_timeout" : 60,
	"new_program_default_max_execution_duration" : 360000.0,
	"time_limit_for_exec_env_steps_server_response" : 3.0,
	"execution_environment_keep_alive_interval" : 30,
	"persistent_model_caching_duration" : 10,
	"predefined_symbols" : [
		{
			"name" : "?scenario_start",
			"description" : "This Tag is created when a Scenario starts and signalled with weight 1."
		},
		{
			"name" : "?scenario_plan_tags",
			"description" : "This Tag is created when a Scenario starts, if that Scenario was based on a Plan.\nThis Tag is created targeting all of the tags that are created on startup as part of the Plan, as well as the [[symbol:!set_signal_weight]] tags on them, to indicate that they were created as part of the Plan. The weight of this Tag is the number of created tags, excluding [[symbol:!set_signal_weight]] tags."
		},
		{
			"name" : "?scenario_plan_user_trust",
			"description" : "These tags are created when a Scenario starts, if that Scenario was based on a Plan.\nFor each User who should be especially trusted or distrusted, one of these Tags is created. The comment is the ID of the user, the weight is 1 if the user should be trusted (all their Rules are treated as if they had a rating of 5 and moderator approval) and 0 if they should be distrusted (all their Rules are treated as having a rating of zero)."
		},
		{
			"name" : "?scenario_plan_rule_trust",
			"description" : "These tags are created when a Scenario starts, if that Scenario was based on a Plan.\nFor each Rule that should be especially trusted or distrusted, one of these Tags is created. The comment is the name of the Rule, the weight is 1 if the Rule should be trusted (it is treated as if it had a rating of 5 and moderator approval) and 0 if it should be distrusted (it is treated as having a rating of zero).\nNote about the name of the Rule: If a version is given, the trust/distrust is specific to that version. If no version is given, it applies to all versions of that Rule."
		},
		{
			"name" : "?scenario_plan_only_trust_explicitly",
			"description" : "This Tag is created when a Scenario starts, if that Scenario was based on a Plan.\nIf its weight is 1, Elody will distrust all Rules that aren't explicitly trusted using [[symbol:?scenario_plan_user_trust]] or [[symbol:?scenario_plan_rule_trust]], regardless of their rating."
		},
		{
			"name" : "!set_idle_message",
			"description" : "This Tag is used to overwrite the idle message Elody will display if there are no Rules or Options eligible to be used under the current parameter settings.\nTo do so, create a Tag with this symbol targeting a hidden Message.\nTarget this Tag with a [[symbol:!nullify]] Tag to deactivate it again. The last non-nullified !set_idle_message will be the active one."
		},
		{
			"name" : "!set_status_message",
			"description" : "This Tag is used to overwrite the status message Elody displays.\nTo do so, create a Tag with this symbol where the comment is the text you want to display.\nIf the comment is None, a default value is used instead that describes what the lod-executor is currently doing.\nTarget this Tag with a [[symbol:!nullify]] Tag to deactivate it again. The last non-nullified !set_status_message will be the active one."
		},
		{
			"name" : "!nullify",
			"description" : "This Tag is used to deactivate other tags when needed.\nIt does not have a meaning on its own, but nullifies/negates/deactivates/ends other tags.\nNote that this behavior is not recursive: You can't !nullify another !nullify tag."
		},
		{
			"name" : "!offer",
			"description" : "This Tag is used to mark a 'require_' Tag with an offer that may satisfy the requirement.\nThe first argument of an !offer Tag should always be the !require tag. The remaining arguments can be whatever is appropriate and should be documented in the description of the require_ symbol.\nThis is similar to [[symbol:!provide]], but where [[symbol:!provide]] means that the requirement has been met, this symbol just means that it might be able to meet it. Several offers may be made on a require_ Tag before one of them is chosen and used with [[symbol:!provide]]."
		},
		{
			"name" : "!provide",
			"description" : "This Tag is used to mark a 'require_' Tag with something that satisfies the requirement.\nThe first argument of an !offer Tag should always be the !require tag. The remaining arguments can be whatever is appropriate and should be documented in the description of the require_ symbol.\nSee also: [[symbol:!offer]]."
		},
		{
			"name" : "!task",
			"description" : "This Tag is DEPRECATED. It used to be used for tasks, but no longer has any effect."
		},
		{
			"name" : "?user_input_command_file",
			"description" : "A Tag with this symbol targeting a file is created whenever a user enters a text command."
		},
		{
			"name" : "?user_input_uploaded_file",
			"description" : "A Tag with this symbol targeting a file is created whenever a user uploads a file."
		},
		{
			"name" : "?user_input_command_keyword",
			"description" : "Tags with this Symbol are created along with ?user_input_command_file.\nThe comment of the Tag is a word that appeared in the entered text."
		},
		{
			"name" : "!set_signal_weight",
			"description" : "This Tag decides which symbols are considered active for the purpose of activating Rules.\nCreate a Tag with this symbol targeting another symbol to signal that symbol with a given weight and (optionally) comment.\nYou can also target another Tag instead of a symbol, in which case the symbol of that Tag is used instead.\nNewer instances of this Tag with the same comment overwrite older ones. Using [[symbol:!nullify]] on this Tag causes it to be ignored, but does not set the signal weight back to 0 if there are still other instances of this Tag with the same Symbol and comment as the deactivated one.\nNote about the way Rules work: Each dependency of a Rule is satisfied only if a signal exists that matches the dependency. The dependency matches if the Symbols are the same and the filter string of the dependency is either not required, or is equal to the comment of the !set_signal_weight Tag. The weight of an active dependency is the product of the !set_signal_weight Tag's weight and the dependencies weight. The weights default to 1.0 if they are not given."
		},
		{
			"name" : "!set_option_confidence",
			"description" : "Create a Tag with this symbol targeting an Option to set the confidence of that option to the weight of this Tag."
		},
		{
			"name" : "?set_priority_of_asking_for_input",
			"description" : "A Tag with this symbol targeting nothing is created to set the priority of waiting for user input in a 'default' event.\nAny Rules with a priority below this are ignored."
		},
		{
			"name" : "?set_priority_of_presenting_options",
			"description" : "A Tag with this symbol targeting nothing is created to set the priority of presenting options to the user in a 'default' event."
		},
		{
			"name" : "?set_options_display_threshold",
			"description" : "A Tag with this symbol targeting nothing is created to set the confidence an Option needs to reach in order to be presented to the user when Options are supposed to be used."
		},
		{
			"name" : "?set_options_execution_threshold",
			"description" : "A Tag with this symbol targeting nothing is created to set the confidence an Option needs to reach in order to be executed."
		},
		{
			"name" : "?set_rule_eligibility_min_ratings_count",
			"description" : "A Tag with this symbol with a specific weight targeting nothing is created to specify the minimum number of users that must have rated a Rule for that Rule to be eligible for execution."
		},
		{
			"name" : "?set_rule_eligibility_inherit_rating",
			"description" : "A Tag with this symbol targeting nothing, with comment either 'true' or 'false', is created to specify whether or not a Rule that would not have a large enough number of ratings is eligible for execution anyway if an earlier version of the same rule is eligible."
		},
		{
			"name" : "?set_rule_eligibility_requires_moderator_approval",
			"description" : "A Tag with this symbol targeting nothing, with comment either 'true' or 'false', is created to specify whether or not a Rule must have moderator approval for that Rule to be eligible for execution."
		},
		{
			"name" : "?set_rule_eligibility_always_allow_own_rules",
			"description" : "A Tag with this symbol targeting nothing, with comment either 'true' or 'false', is created to specify whether or not a Rule that was created by the owner of the current Scenario is always eligible for execution, even if it doesn't match some of the requirements."
		},
		{
			"name" : "?elody_decision_process",
			"description" : "A Tag with this symbol is generated whenever Elody chooses which Rule or Option to execute next.\nIt targets the Message that is generated to describe the decision process."
		},
		{
			"name" : "?rule_candidate",
			"description" : "When Elody decides what to do next, a Tag with this symbol targeting a Rule is created for each Rule who's dependencies are fulfilled and which is a candidate for being executed in this step.\nThe weight of the Tag is the priority of the rule."
		},
		{
			"name" : "?weight_of_options",
			"description" : "A Tag with this symbol targeting nothing is created along with the ?rule_candidate Tags.\nThe weight of this Tag is the weight of the Options and can be compared to the weight of the Tags."
		},
		{
			"name" : "?named_argument_list",
			"description" : "A variant of [[symbol:?named_argument]] that is applied to named arguments that can refer to a list of objects instead of a single object. The first argument of this Tag is the item that has a named argument, the remaining arguments of this Tag are the objects used as the argument, and the comment of this Tag is the name of the argument."
		},
		{
			"name" : "?named_argument",
			"description" : "A Tag with this symbol targeting two objects and having a comment is created whenever something with named arguments is executed.\nThe first argument of this Tag is the item that has a named argument, the second argument of this Tag is the named argument, and the comment of this Tag is the name of the argument. See also: [[symbol:?named_argument_list]]."
		},
		{
			"name" : "?rule_executed",
			"description" : "A Tag with this symbol targeting a Rule and a number of ?named_argument Tags is created whenever a Rule is executed.\nThe other objects are the arguments the rule was run with."
		},
		{
			"name" : "?elody_decision_process_considers_options",
			"description" : "When Elody decides what to do next and starts looking at the Options, a Tag with this symbol targeting an Option is created for each Option that is a candidate for being executed in this step if it can find suitable arguments and no other Rule or Option takes priority.\nThe weight of the Tag is the confidence of the Option."
		},
		{
			"name" : "?option_candidate",
			"description" : "When Elody decides what to do next and starts looking at the Options, a Tag with this symbol targeting an Option is created for each candidate Option.\nThe weight of the Tag is the weight of the Option."
		},
		{
			"name" : "?option_executed",
			"description" : "A Tag with this symbol targeting an Option and a number of ?named_argument Tags is created whenever an Option is executed.\nThe ?named_argument Tags denote the arguments the Option was run with. If the weight of this Tag is null, the Option was executed automatically. If the weight is an integer, the Option was manually selected by the user and the integer denotes which of the buttons of the Option was clicked."
		},
		{
			"name" : "?presented_option",
			"description" : "A Tag with this symbol targeting an Option and a number of ?named_argument Tags is automatically created when a group of Options is presented."
		},
		{
			"name" : "?present_options",
			"description" : "A Tag with this symbol targeting a number of ?presented_option Tags is automatically created when a group of Options is presented."
		},
		{
			"name" : "?selected_option",
			"description" : "A Tag with this symbol targeting an Option and a ?present_options Tag group is automatically created when an option is selected from a group of options."
		},
		{
			"name" : "!deactivate_rule_or_option",
			"description" : "Create a Tag with this symbol targeting a Rule or an Option to deactivate it and remove it from being listed in the Decision Process. A Rule or Option with this Tag is ignored when Elody chooses what to execute next.\nThis can be reversed by using [[symbol:!nullify]] on this Tag."
		},
		{
			"name" : "?deactivated_automatically",
			"description" : "This is created along with [[symbol:!deactivate_rule_or_option]], targeting both that Tag and the Rule/Option, when a Rule/Option deactivates itself because of a condition in its deactivate_if clause or because it has 'repeat' == 'never'."
		},
		{
			"name" : "?program_executed",
			"description" : "A Tag with this symbol targeting a Program and a number of other objects is created whenever a Program is executed.\nThe other objects are the arguments the Program was run with."
		},
		{
			"name" : "?program_execution_results",
			"description" : "A Tag with this symbol targeting a ?program_executed Tag and a number of file objects is created whenever a Program is done executing."
		},
		{
			"name" : "?event_failure",
			"description" : "A Tag with this symbol is created whenever an event failed to execute correctly."
		}
	]
}
