{
  "export_version": 1,
  "documentation_path": "/poker/equity/capabilities",
  "stamp": {
    "grammarVersion": "3.2",
    "aliasInterpretationVersion": 2,
    "engineVersion": "0.1.49",
    "engineAbi": 7,
    "categorySemver": 1,
    "kehr": {
      "plo4": {
        "path": "public/data/plo4-canonical-equity.kehr",
        "sha256": "777bef98d4f0528f15dd80e33eaa9b16ef7cd9fb222d9c99819974d985dfed24"
      },
      "plo5": {
        "path": "public/data/plo5-canonical-equity.kehr",
        "sha256": "d812ff26823c0238ba9d4ea64660a69143337b29be89e5dcbbd7aabd2b203a48"
      },
      "plo6": {
        "path": "public/data/plo6-canonical-equity.kehr",
        "sha256": "e7d889f725064fe1cff60200e7421dc64072c84338e08a1e72ad593107b704bc"
      }
    },
    "nlheRankingProvenance": {
      "path": "public/data/nlhe-hand-rankings.json",
      "sha256": "85e19e21c4e64a494100e44ca7618442fe2af5cec09bdad0f4c6ca5417f57277",
      "version": "1",
      "variant": "nlhe",
      "alpha": 0.85,
      "beta": 0.15,
      "samplesPerClass": 50000
    }
  },
  "rows": [
    {
      "id": "asks-nlhe",
      "feature": "basics",
      "syntax": "AsKs",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aa-nlhe",
      "feature": "basics",
      "syntax": "AA",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aa-plo4",
      "feature": "basics",
      "syntax": "AA",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aa-plo5",
      "feature": "basics",
      "syntax": "AA",
      "variant": "plo5",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "aa-plo6",
      "feature": "basics",
      "syntax": "AA",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "aks-nlhe",
      "feature": "basics",
      "syntax": "AKs",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aaa-plo4",
      "feature": "basics",
      "syntax": "AAA",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.basics"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aa4-plo4",
      "feature": "wildcard-families",
      "syntax": "AA**",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.wildcard_families"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aa6-plo6",
      "feature": "over-cap",
      "syntax": "AA****",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.over_cap"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "kkss-plo4",
      "feature": "qualifiers",
      "syntax": "KK:ss",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.qualifiers"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "qqr-plo4",
      "feature": "qualifiers",
      "syntax": "QQ:r",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.qualifiers"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "brkt-plo4",
      "feature": "brackets",
      "syntax": "[AKQ]J",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.brackets"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "jt98plus-plo4",
      "feature": "rundowns",
      "syntax": "JT98+",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rundowns"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "jt98plus-plo6",
      "feature": "rundowns",
      "syntax": "JT98+",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rundowns"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "verdict": true,
      "outcome_label": "computes (structural_union)"
    },
    {
      "id": "p20-plo4",
      "feature": "percentiles",
      "syntax": "20%",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "verdict": true,
      "outcome_label": "computes (percentile_band)"
    },
    {
      "id": "p20-plo5",
      "feature": "percentiles",
      "syntax": "20%",
      "variant": "plo5",
      "expected": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "verdict": true,
      "outcome_label": "computes (percentile_band)"
    },
    {
      "id": "p20-plo6",
      "feature": "percentiles",
      "syntax": "20%",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "verdict": true,
      "outcome_label": "computes (percentile_band)"
    },
    {
      "id": "p20aa-plo4",
      "feature": "intersections",
      "syntax": "20%:AA",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.intersections"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "aa6kk6-plo6",
      "feature": "intersections",
      "syntax": "AA****:KK****",
      "variant": "plo6",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.intersections"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "rr-plo4",
      "feature": "rank-variables",
      "syntax": "RR",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rr-plo5",
      "feature": "rank-variables",
      "syntax": "RR",
      "variant": "plo5",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rr-plo6",
      "feature": "rank-variables",
      "syntax": "RR",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rroo-plo4",
      "feature": "rank-variables",
      "syntax": "RROO",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rron-plo4",
      "feature": "rank-variables",
      "syntax": "RRON",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rronp-plo5",
      "feature": "rank-variables",
      "syntax": "RRONP",
      "variant": "plo5",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "axaykxky-plo4",
      "feature": "suit-variables",
      "syntax": "AxAyKxKy",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.suit_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "guard-rr-short-pad-plo4",
      "feature": "rank-variables",
      "syntax": "RR",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "guard-aks-flush-nlhe",
      "feature": "board-categories",
      "syntax": "AKs:flush+",
      "variant": "nlhe",
      "board": [
        "Qs",
        "9s",
        "4s"
      ],
      "expected": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.board_categories"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "verdict": true,
      "outcome_label": "computes (board_category_filter)"
    },
    {
      "id": "guard-pct-flush-nlhe",
      "feature": "board-categories",
      "syntax": "20%:flush+",
      "variant": "nlhe",
      "board": [
        "Qs",
        "9s",
        "4s"
      ],
      "expected": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.board_categories"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "verdict": true,
      "outcome_label": "computes (board_category_filter)"
    },
    {
      "id": "guard-aa6-exact-plo6",
      "feature": "wildcard-families",
      "syntax": "AA****",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.wildcard_families"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "guard-aa-kk-intersection-plo4",
      "feature": "intersections",
      "syntax": "AA**:KK**",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.intersections"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "aakk-nlhe",
      "feature": "hole-size",
      "syntax": "AAKK",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "akqj-nlhe",
      "feature": "hole-size",
      "syntax": "AKQJ",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aaa-nlhe",
      "feature": "hole-size",
      "syntax": "AAA",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aakkflush-nlhe",
      "feature": "hole-size",
      "syntax": "AAKK:flush+",
      "variant": "nlhe",
      "board": [
        "Qs",
        "9s",
        "4s"
      ],
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "sbrkt-nlhe",
      "feature": "brackets",
      "syntax": "[A]K",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "nlhe_brackets_unsupported"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.brackets"
      },
      "actual": {
        "type": "diagnostic",
        "code": "nlhe_brackets_unsupported"
      },
      "verdict": true,
      "outcome_label": "nlhe_brackets_unsupported"
    },
    {
      "id": "sbrkt-excl-nlhe",
      "feature": "brackets",
      "syntax": "AA![A]K",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "nlhe_brackets_unsupported"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.brackets"
      },
      "actual": {
        "type": "diagnostic",
        "code": "nlhe_brackets_unsupported"
      },
      "verdict": true,
      "outcome_label": "nlhe_brackets_unsupported"
    },
    {
      "id": "aa4-nlhe",
      "feature": "wildcard-families",
      "syntax": "AA**",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "nlhe_family_too_many_slots"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.wildcard_families"
      },
      "actual": {
        "type": "diagnostic",
        "code": "nlhe_family_too_many_slots"
      },
      "verdict": true,
      "outcome_label": "nlhe_family_too_many_slots"
    },
    {
      "id": "aa6-nlhe",
      "feature": "wildcard-families",
      "syntax": "AA****",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "nlhe_family_too_many_slots"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.wildcard_families"
      },
      "actual": {
        "type": "diagnostic",
        "code": "nlhe_family_too_many_slots"
      },
      "verdict": true,
      "outcome_label": "nlhe_family_too_many_slots"
    },
    {
      "id": "rr-nlhe",
      "feature": "rank-variables",
      "syntax": "RR",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "rank_vars_unsupported_for_nlhe"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_vars_unsupported_for_nlhe"
      },
      "verdict": true,
      "outcome_label": "rank_vars_unsupported_for_nlhe"
    },
    {
      "id": "brkt-nlhe",
      "feature": "brackets",
      "syntax": "[AKQ]J",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "nlhe_brackets_unsupported"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.brackets"
      },
      "actual": {
        "type": "diagnostic",
        "code": "nlhe_brackets_unsupported"
      },
      "verdict": true,
      "outcome_label": "nlhe_brackets_unsupported"
    },
    {
      "id": "rronp-plo4",
      "feature": "hole-size",
      "syntax": "RRONP",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "p20aa3-plo4",
      "feature": "hole-size",
      "syntax": "20%:AA***",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "p20aa4-plo4",
      "feature": "hole-size",
      "syntax": "20%:AA****",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "p20asks-plo4",
      "feature": "hole-size",
      "syntax": "20%:AsKs",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aa6ak6-plo6",
      "feature": "intersections",
      "syntax": "AA****:AK****",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.intersections"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "aaaa6kkkk6-plo6",
      "feature": "intersections",
      "syntax": "AAAA**:KKKK**",
      "variant": "plo6",
      "expected": {
        "type": "diagnostic",
        "code": "intersection_provably_empty"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.intersections"
      },
      "actual": {
        "type": "diagnostic",
        "code": "intersection_provably_empty"
      },
      "verdict": true,
      "outcome_label": "intersection_provably_empty"
    },
    {
      "id": "p20-nlhe",
      "feature": "percentiles",
      "syntax": "20%",
      "variant": "nlhe",
      "expected": {
        "type": "pending_asset",
        "asset": "nlhe_ranking_table"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "pending_asset",
        "asset": "nlhe_ranking_table"
      },
      "verdict": true,
      "outcome_label": "needs nlhe_ranking_table"
    },
    {
      "id": "p25dec-nlhe",
      "feature": "percentiles",
      "syntax": "2.5%",
      "variant": "nlhe",
      "expected": {
        "type": "pending_asset",
        "asset": "nlhe_ranking_table"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "pending_asset",
        "asset": "nlhe_ranking_table"
      },
      "verdict": true,
      "outcome_label": "needs nlhe_ranking_table"
    },
    {
      "id": "p20aa-nlhe",
      "feature": "intersections",
      "syntax": "20%:AA",
      "variant": "nlhe",
      "expected": {
        "type": "pending_asset",
        "asset": "nlhe_ranking_table"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.intersections"
      },
      "actual": {
        "type": "pending_asset",
        "asset": "nlhe_ranking_table"
      },
      "verdict": true,
      "outcome_label": "needs nlhe_ranking_table"
    },
    {
      "id": "dollartpot-plo4",
      "feature": "macros",
      "syntax": "$tpot",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "macro_undefined"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.macros"
      },
      "actual": {
        "type": "diagnostic",
        "code": "macro_undefined"
      },
      "verdict": true,
      "outcome_label": "macro_undefined"
    },
    {
      "id": "asks-plo4",
      "feature": "hole-size",
      "syntax": "AsKs",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aks-plo4",
      "feature": "hole-size",
      "syntax": "AKs",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aks-plo5",
      "feature": "hole-size",
      "syntax": "AKs",
      "variant": "plo5",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aks-plo6",
      "feature": "hole-size",
      "syntax": "AKs",
      "variant": "plo6",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "ako-plo4",
      "feature": "hole-size",
      "syntax": "AKo",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "22plus-plo4",
      "feature": "hole-size",
      "syntax": "22+",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "22plus-plo5",
      "feature": "hole-size",
      "syntax": "22+",
      "variant": "plo5",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "a5splus-plo4",
      "feature": "hole-size",
      "syntax": "A5s+",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "2299-plo4",
      "feature": "hole-size",
      "syntax": "22-99",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aa6-plo4",
      "feature": "hole-size",
      "syntax": "AA****",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aa6-plo5",
      "feature": "hole-size",
      "syntax": "AA****",
      "variant": "plo5",
      "expected": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "hole_size_mismatch"
      },
      "verdict": true,
      "outcome_label": "hole_size_mismatch"
    },
    {
      "id": "aa7-plo6",
      "feature": "hole-size",
      "syntax": "AA*****",
      "variant": "plo6",
      "expected": {
        "type": "diagnostic",
        "code": "pattern_too_long"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.hole_size"
      },
      "actual": {
        "type": "diagnostic",
        "code": "pattern_too_long"
      },
      "verdict": true,
      "outcome_label": "pattern_too_long"
    },
    {
      "id": "p2555-nlhe",
      "feature": "percentiles",
      "syntax": "2.555%",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "percentile_too_many_decimals"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "diagnostic",
        "code": "percentile_too_many_decimals"
      },
      "verdict": true,
      "outcome_label": "percentile_too_many_decimals"
    },
    {
      "id": "axaykxky-nlhe",
      "feature": "suit-variables",
      "syntax": "AxAyKxKy",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "suit_vars_unsupported_for_nlhe"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.suit_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "suit_vars_unsupported_for_nlhe"
      },
      "verdict": true,
      "outcome_label": "suit_vars_unsupported_for_nlhe"
    },
    {
      "id": "dollar0g-plo4",
      "feature": "qualifiers",
      "syntax": "$0g",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.qualifiers"
      },
      "actual": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "verdict": true,
      "outcome_label": "qualifier_requires_atom"
    },
    {
      "id": "dollards-plo4",
      "feature": "qualifiers",
      "syntax": "$ds",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.qualifiers"
      },
      "actual": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "verdict": true,
      "outcome_label": "qualifier_requires_atom"
    },
    {
      "id": "ts-bare-plo4",
      "feature": "qualifiers",
      "syntax": "ts",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.qualifiers"
      },
      "actual": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "verdict": true,
      "outcome_label": "qualifier_requires_atom"
    },
    {
      "id": "rr-lc-nlhe",
      "feature": "rank-variables",
      "syntax": "rr",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "verdict": true,
      "outcome_label": "rank_var_case_mismatch"
    },
    {
      "id": "p20rr-plo4",
      "feature": "rank-variables",
      "syntax": "20%:RR",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "p20rr-nlhe",
      "feature": "rank-variables",
      "syntax": "20%:RR",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "rank_vars_unsupported_for_nlhe"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_vars_unsupported_for_nlhe"
      },
      "verdict": true,
      "outcome_label": "rank_vars_unsupported_for_nlhe"
    },
    {
      "id": "p20rrlc-plo4",
      "feature": "rank-variables",
      "syntax": "20%:rr",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "verdict": true,
      "outcome_label": "rank_var_case_mismatch"
    },
    {
      "id": "p20rro9lc-plo4",
      "feature": "rank-variables",
      "syntax": "20%:rro9",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "verdict": true,
      "outcome_label": "rank_var_case_mismatch"
    },
    {
      "id": "p20rxry-plo4",
      "feature": "suit-variables",
      "syntax": "20%:RxRy",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.suit_variables"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "p20rxrylc-plo4",
      "feature": "suit-variables",
      "syntax": "20%:rxry",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.suit_variables"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_var_case_mismatch"
      },
      "verdict": true,
      "outcome_label": "rank_var_case_mismatch"
    },
    {
      "id": "dollartp-plo4",
      "feature": "aliases",
      "syntax": "$tp",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "verdict": true,
      "outcome_label": "alias_dialect_collision"
    },
    {
      "id": "colon-dollartp-plo4",
      "feature": "aliases",
      "syntax": ":$TP",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "verdict": true,
      "outcome_label": "alias_dialect_collision"
    },
    {
      "id": "dollarm-plo4",
      "feature": "aliases",
      "syntax": "$M",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "verdict": true,
      "outcome_label": "alias_dialect_collision"
    },
    {
      "id": "dollarmp-plo4",
      "feature": "aliases",
      "syntax": "$MP",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "verdict": true,
      "outcome_label": "alias_dialect_collision"
    },
    {
      "id": "dollarbp-plo4",
      "feature": "aliases",
      "syntax": "$BP",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "diagnostic",
        "code": "alias_dialect_collision"
      },
      "verdict": true,
      "outcome_label": "alias_dialect_collision"
    },
    {
      "id": "decimal-percentile-plo4",
      "feature": "percentiles",
      "syntax": "2.5%",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "verdict": true,
      "outcome_label": "computes (percentile_band)"
    },
    {
      "id": "percentile-band-plo4",
      "feature": "percentiles",
      "syntax": "10-20%",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentiles"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "verdict": true,
      "outcome_label": "computes (percentile_band)"
    },
    {
      "id": "balanced-percentile-plo4",
      "feature": "percentile-modes",
      "syntax": "20%",
      "variant": "plo4",
      "mode": "balanced",
      "expected": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentile_modes"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "percentile_band"
      },
      "verdict": true,
      "outcome_label": "computes (percentile_band)"
    },
    {
      "id": "balanced-structural-intersection-plo4",
      "feature": "percentile-modes",
      "syntax": "20%:AA",
      "variant": "plo4",
      "mode": "balanced",
      "expected": {
        "type": "diagnostic",
        "code": "structural_predicate_balanced_mode_unsupported"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.percentile_modes"
      },
      "actual": {
        "type": "diagnostic",
        "code": "structural_predicate_balanced_mode_unsupported"
      },
      "verdict": true,
      "outcome_label": "structural_predicate_balanced_mode_unsupported"
    },
    {
      "id": "board-category-plo4",
      "feature": "board-categories",
      "syntax": "AA**:flush+",
      "variant": "plo4",
      "board": [
        "Qs",
        "9s",
        "4s"
      ],
      "expected": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.board_categories"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "verdict": true,
      "outcome_label": "computes (board_category_filter)"
    },
    {
      "id": "gap-class-plo4",
      "feature": "gap-classes",
      "syntax": "RRO9:1g",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.gap_classes"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "shape-vector-plo6",
      "feature": "shape-vectors",
      "syntax": "AA****:2-2-1-1",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.shape_vectors"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "ace-wildcard-family-nlhe",
      "feature": "wildcard-families",
      "syntax": "A*",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.wildcard_families"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "any-wildcard-family-nlhe",
      "feature": "wildcard-families",
      "syntax": "**",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.wildcard_families"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "active-alias-ds-plo4",
      "feature": "aliases",
      "syntax": "AA**:$ds",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "active-alias-fd-plo4",
      "feature": "aliases",
      "syntax": "AA**:$FD",
      "variant": "plo4",
      "board": [
        "Qs",
        "9s",
        "4s"
      ],
      "expected": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.aliases"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "board_category_filter"
      },
      "verdict": true,
      "outcome_label": "computes (board_category_filter)"
    },
    {
      "id": "macro-undefined-plo4",
      "feature": "macros",
      "syntax": "$premium",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "macro_undefined"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.macros"
      },
      "actual": {
        "type": "diagnostic",
        "code": "macro_undefined"
      },
      "verdict": true,
      "outcome_label": "macro_undefined"
    },
    {
      "id": "weighted-union-nlhe",
      "feature": "weights",
      "syntax": "AA@75,KK@25",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.weights"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "exclude-pairs-nlhe",
      "feature": "excludes",
      "syntax": "22+!QQ",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.excludes"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "union-pairs-nlhe",
      "feature": "unions",
      "syntax": "AA,KK,QQ",
      "variant": "nlhe",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.unions"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "valid-empty-intersection-nlhe",
      "feature": "range-shapes",
      "syntax": "AA:AK",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "materialization_empty"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.range_shapes"
      },
      "actual": {
        "type": "diagnostic",
        "code": "materialization_empty"
      },
      "verdict": true,
      "outcome_label": "materialization_empty"
    },
    {
      "id": "grouped-qualifier-plo4",
      "feature": "groups",
      "syntax": "(AA**,KK**):ds",
      "variant": "plo4",
      "expected": {
        "type": "ready_combo"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.groups"
      },
      "actual": {
        "type": "ready_combo"
      },
      "verdict": true,
      "outcome_label": "computes (combo list)"
    },
    {
      "id": "over-cap-structural-plo6",
      "feature": "over-cap",
      "syntax": "KK****",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.over_cap"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-single-plo4",
      "feature": "rank-structure",
      "syntax": "**:singlepaired",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-single-plo5",
      "feature": "rank-structure",
      "syntax": "**:singlepaired",
      "variant": "plo5",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-single-plo6",
      "feature": "rank-structure",
      "syntax": "**:singlepaired",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-notrips-plo4",
      "feature": "rank-structure",
      "syntax": "**:notrips",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "verdict": true,
      "outcome_label": "computes (structural_union)"
    },
    {
      "id": "rs-notrips-plo6",
      "feature": "rank-structure",
      "syntax": "**:notrips",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "verdict": true,
      "outcome_label": "computes (structural_union)"
    },
    {
      "id": "rs-pct-plo6",
      "feature": "rank-structure",
      "syntax": "20%:doublepaired",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-alias-np-plo4",
      "feature": "rank-structure",
      "syntax": "**$np",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-alias-nt-plo6",
      "feature": "rank-structure",
      "syntax": "**$nt",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_union"
      },
      "verdict": true,
      "outcome_label": "computes (structural_union)"
    },
    {
      "id": "rs-bare-alias-plo4",
      "feature": "rank-structure",
      "syntax": "$op",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "diagnostic",
        "code": "qualifier_requires_atom"
      },
      "verdict": true,
      "outcome_label": "qualifier_requires_atom"
    },
    {
      "id": "rs-conflict-plo4",
      "feature": "rank-structure",
      "syntax": "AA**:unpaired",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "rank_structure_conflicts_with_pattern"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_structure_conflicts_with_pattern"
      },
      "verdict": true,
      "outcome_label": "rank_structure_conflicts_with_pattern"
    },
    {
      "id": "rs-infeasible-plo4",
      "feature": "rank-structure",
      "syntax": "**:triplepaired",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "rank_structure_impossible_for_variant"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_structure_impossible_for_variant"
      },
      "verdict": true,
      "outcome_label": "rank_structure_impossible_for_variant"
    },
    {
      "id": "rs-nlhe",
      "feature": "rank-structure",
      "syntax": "**:singlepaired",
      "variant": "nlhe",
      "expected": {
        "type": "diagnostic",
        "code": "rank_structure_unsupported_for_nlhe"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_structure_unsupported_for_nlhe"
      },
      "verdict": true,
      "outcome_label": "rank_structure_unsupported_for_nlhe"
    },
    {
      "id": "rs-dup-plo4",
      "feature": "rank-structure",
      "syntax": "**:unpaired:singlepaired",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "duplicate_qualifier"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "diagnostic",
        "code": "duplicate_qualifier"
      },
      "verdict": true,
      "outcome_label": "duplicate_qualifier"
    },
    {
      "id": "rs-unpaired-plo6",
      "feature": "rank-structure",
      "syntax": "**:unpaired",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-double-plo4",
      "feature": "rank-structure",
      "syntax": "**:doublepaired",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-triple-plo6",
      "feature": "rank-structure",
      "syntax": "**:triplepaired",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-pinned-double-plo4",
      "feature": "rank-structure",
      "syntax": "AA**:doublepaired",
      "variant": "plo4",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-alias-op-plo6",
      "feature": "rank-structure",
      "syntax": "**$op",
      "variant": "plo6",
      "expected": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "ready_spec",
        "specKind": "structural_predicate"
      },
      "verdict": true,
      "outcome_label": "computes (structural_predicate)"
    },
    {
      "id": "rs-fixed-suits-plo4",
      "feature": "rank-structure",
      "syntax": "AsAd**:singlepaired",
      "variant": "plo4",
      "expected": {
        "type": "diagnostic",
        "code": "rank_structure_unsupported_composition"
      },
      "i18n": {
        "labelKey": "poker.range.syntax.capability.feature.rank_structure"
      },
      "actual": {
        "type": "diagnostic",
        "code": "rank_structure_unsupported_composition"
      },
      "verdict": true,
      "outcome_label": "rank_structure_unsupported_composition"
    }
  ]
}
