)]}'
{
  "commit": "c4e86fc0394c92a9334ba2eb026c77c21db403be",
  "tree": "268a6df5c07ff6b909ebbd92e22c4114d1f956b8",
  "parents": [
    "17a00de2e298612201a8fe30790e9399204af1b9"
  ],
  "author": {
    "name": "Douglas Creager",
    "email": "dcreager@dcreager.net",
    "time": "Thu Aug 06 21:54:55 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Aug 06 21:54:55 2026 -0400"
  },
  "message": "[ty] Add helper extension methods for half-range and equality constraints (#27564)\n\nThe `ConstraintSet.range` extension method is used in mdtests to create\nspecific constraint sets for testing purposes. This is a simple (but\nlargish) refactoring that adds three additional constructors for certain\ncommon constraint shapes: lower-bound-only, upper-bound-only, and\nequality constraints.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "044d66affdae3a92633bf19fa7527bdaab18d6ad",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/regression/constraint_set_ordering.md",
      "new_id": "1ae6e2a0eff3e86d00e3b152b75c80f7bf5f4091",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/regression/constraint_set_ordering.md"
    },
    {
      "type": "modify",
      "old_id": "86ec59c3f77b72cb1195104433b82c91f09265bf",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/regression/derived_constraint_cycles.md",
      "new_id": "fc4f2052c3ba76d070db43be3db5e878a5373873",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/regression/derived_constraint_cycles.md"
    },
    {
      "type": "modify",
      "old_id": "ae66e75be48b5e76ae5821454f1a3803e11f0084",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/type_properties/constraints.md",
      "new_id": "3d18fd8600100951a31cecaea6432ce1b1c381f1",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/type_properties/constraints.md"
    },
    {
      "type": "modify",
      "old_id": "1cd7451c470db47da73278f22b5cc5ecb2524cd7",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/type_properties/implies_subtype_of.md",
      "new_id": "7ee22c47e062f512a1b78dc0defeedee99ee8708",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/type_properties/implies_subtype_of.md"
    },
    {
      "type": "modify",
      "old_id": "985d118c882b74b3b5543cbfaf82f136154e8e8a",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/type_properties/is_assignable_to.md",
      "new_id": "061f8285ca7310fab5589acf0495daa31f096261",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/type_properties/is_assignable_to.md"
    },
    {
      "type": "modify",
      "old_id": "f4d4c1a1d9b11ddf2318a4ce55c56270a4dd72b4",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/type_properties/quantification.md",
      "new_id": "f8d1cd2434f960ce60e32db25b17ef85ab4f0863",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/type_properties/quantification.md"
    },
    {
      "type": "modify",
      "old_id": "c220b1011685e9343f8dbcc9d5b9403fbd148e22",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/resources/mdtest/type_properties/satisfied_by_all_typevars.md",
      "new_id": "1c32e94e3304baf1756eaa0a533ee50913827e0d",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/resources/mdtest/type_properties/satisfied_by_all_typevars.md"
    },
    {
      "type": "modify",
      "old_id": "9cd5bf746eaf6f3a58a79f2103eb378a9090aea4",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/src/types.rs",
      "new_id": "b270f59447141d9ed0e667ae19427dfeb9a556d8",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/src/types.rs"
    },
    {
      "type": "modify",
      "old_id": "e6633f2adf7275fbcb39187f56c52a49b7ab9be9",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/src/types/call/bind.rs",
      "new_id": "a0de38ac55592682d3dd54f591d91e98be44d36c",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/src/types/call/bind.rs"
    },
    {
      "type": "modify",
      "old_id": "bd7087f3fdcf04579746e8b6bd67d47a0021ebff",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/src/types/display.rs",
      "new_id": "61fbae463683940682621e60a7224eaa7a0cb7e5",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/src/types/display.rs"
    },
    {
      "type": "modify",
      "old_id": "a622228b70778db9a25be542bcaf3da9c4013d39",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/src/types/method.rs",
      "new_id": "3e1454889c9d0f9557a8a1fd7006e3f4c073f225",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/src/types/method.rs"
    },
    {
      "type": "modify",
      "old_id": "a7c7b79a7c8598d996766e9fab8a350e07f0e26d",
      "old_mode": 33188,
      "old_path": "crates/ty_python_semantic/src/types/relation.rs",
      "new_id": "d5b140a0e610e2bcfa75c2ca7e052f01de1e906a",
      "new_mode": 33188,
      "new_path": "crates/ty_python_semantic/src/types/relation.rs"
    },
    {
      "type": "modify",
      "old_id": "d269f415fffc92d204faeb2d24aa662fc68bbd71",
      "old_mode": 33188,
      "old_path": "crates/ty_vendored/ty_extensions/_internal.pyi",
      "new_id": "a6f6fe762eb7b8b5eccf35c7cf8655f1f6e953a4",
      "new_mode": 33188,
      "new_path": "crates/ty_vendored/ty_extensions/_internal.pyi"
    }
  ]
}
