{
  "ql": "nql1",
  "errors": {
    "query_too_long": "This query is longer than 4 KiB as written in canonical form. Shorten it or split it into saved views.",
    "unexpected_character": "This character cannot appear here. Quote values that contain it.",
    "unexpected_end": "The query ends too early. Add a filter here.",
    "unterminated_string": "This quoted value has no closing \".",
    "invalid_string": "Use JSON escapes inside quotes: \\\" \\\\ \\n \\t \\uXXXX.",
    "missing_operator": "Join filters with AND or OR. nql1 never assumes AND.",
    "keyword_case": "Write AND, OR, NOT, TO, ANY and ALL in capitals. To search for the word itself, quote it: \"and\".",
    "unexpected_keyword": "This word is reserved here. Quote it to search for the word itself.",
    "unbalanced_parenthesis": "This ) has no matching (.",
    "unclosed_group": "This ( has no matching ).",
    "empty_group": "Parentheses need a filter inside.",
    "expected_filter": "Start a filter with a field name, for example class:Crack.",
    "unknown_relation": "Only label(...), source(...) and task(...) group filters on one related record.",
    "nested_relation": "A label, source or task block cannot contain another block in nql1.",
    "relation_space": "Remove the space: write label(...), source(...) or task(...) with ( right after the name.",
    "expected_colon": "Follow the field with : and a value, for example class:Crack. nql1 has no free-text search.",
    "whitespace_in_predicate": "Remove the space: write field:value with nothing between them.",
    "invalid_field": "Field names are words joined by dots, with bracketed keys for anything else: meta[\"Inspection protocol\"].",
    "reserved_field": "This word cannot start a field name. Use a bracketed key instead.",
    "empty_field_key": "A bracketed key needs at least one character.",
    "expected_value": "Add a value after the operator.",
    "invalid_value": "Quote values that contain spaces or punctuation: \"like this\".",
    "invalid_comparator": "Use one of = != > >= < <=.",
    "comparator_with_set": "A comparator takes one value, not ANY(...) or ALL(...). To exclude several values, write NOT field:ANY(a, b).",
    "invalid_number": "Write numbers without leading zeros or exponents, for example 0.12 or 48.",
    "invalid_date": "Use a real calendar day as YYYY-MM-DD, for example 2026-09-01.",
    "date_out_of_range": "Use a day from 1583-01-01 to 9999-12-31.",
    "invalid_relative_date": "Write relative dates as now, now-7d, now+2h or now-7d/d.",
    "relative_date_out_of_range": "This relative date lands outside 1583-01-01 to 9999-12-31. Use a smaller offset.",
    "unsupported_time_unit": "Use m, h, d or w. Calendar months and years are not in nql1.",
    "null_literal": "nql1 has no null. Use NOT has:field to find records without a value.",
    "invalid_prefix": "Only a trailing * after a plain word is a wildcard, for example blade*.",
    "prefix_too_short": "A prefix needs at least three characters before the *.",
    "invalid_range": "Write ranges as [low TO high]. Use { or } to leave a bound out.",
    "range_unbounded": "A range needs at least one bound. Use has:field to find any value.",
    "range_kind_mismatch": "Both bounds of a range need the same kind of value.",
    "invalid_set": "Write ANY(a, b) or ALL(a, b) with at least one value and no trailing comma.",
    "depth_exceeded": "This query nests too deeply. Use at most 8 levels.",
    "predicates_exceeded": "This query has too many filters. Use at most 32.",
    "relations_exceeded": "This query has too many label, source or task blocks. Use at most 8.",
    "set_values_exceeded": "This query lists too many values. Use at most 32 across ANY and ALL.",
    "or_branches_exceeded": "This query has too many OR alternatives. Use at most 8.",
    "invalid_ast": "This query tree does not match the nql1 contract.",
    "data_too_large": "This query data is too large to check. Send a smaller tree.",
    "sparse_array": "This query data has an array with a missing entry. Send every entry.",
    "non_plain_data": "This query data must be plain JSON values: objects, arrays, strings, numbers, true, false and null.",
    "invalid_envelope": "This query envelope does not match the nql1 contract.",
    "calendar_day_not_contiguous": "In this time zone the clocks went back over midnight, so this day is two separate periods. Use timestamps instead.",
    "time_zone_unavailable": "This time zone is not available here. Use a zone from the nql1 list."
  }
}
