diff --git a/cassiopeia/core/patch.py b/cassiopeia/core/patch.py
index 7963694..9ba9f76 100644
--- a/cassiopeia/core/patch.py
+++ b/cassiopeia/core/patch.py
@@ -146,7 +146,7 @@ class Patch(object):
         return self.name == other.name
 
     def __lt__(self, other: "Patch") -> bool:
-        if self.major < other.major or (self.major == other.major and self.minor < other.minor):
+        if int(self.major) < int(other.major) or (self.major == other.major and int(self.minor) < int(other.minor)):
             return True
         else:
             return False

Patch comparison bug
The bug is simply that this line `cass.Patch.from_str("9.9")<cass.Patch.from_str("9.10")` returns false.
This is because the major and minor properties are strings and not integers, so the comparison `"9"<"10"` is false.
diff --git a/test/test_patches.py b/test/test_patches.py
index 921a390..39efe24 100644
--- a/test/test_patches.py
+++ b/test/test_patches.py
@@ -16,3 +16,9 @@ def test_unknown_patch_raises():
 def test_season_start_end_using_patches():
     assert Season.season_7.start(Region.north_america) == Patch.from_str("7.1", region=Region.north_america).start
     assert Season.season_8.end(Region.north_america) == None
+
+
+def test_patch_relational_operators():
+    assert Patch.from_str("9.9", region="NA") < Patch.from_str("9.10", region="NA")
+    assert Patch.from_str("8.20", region="NA") > Patch.from_str("8.11", region="NA")
+    assert Patch.from_str("8.20", region="NA") > Patch.from_str("8.3", region="NA")

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
arrow==1.2.3
attrs==22.2.0
-e git+https://github.com/meraki-analytics/cassiopeia.git@df3317bfb75e86011b217689fb36a6dee83ef659#egg=cassiopeia
certifi==2021.5.30
charset-normalizer==2.0.12
datapipelines==1.0.7
decorator==4.4.2
flake8==5.0.4
idna==3.10
importlib-metadata==4.2.0
iniconfig==1.1.1
mccabe==0.7.0
merakicommons==1.0.10
networkx==2.5.1
packaging==21.3
Pillow==8.4.0
pluggy==1.0.0
py==1.11.0
pycodestyle==2.9.1
pyflakes==2.5.0
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.9.0.post0
requests==2.27.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: cassiopeia
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - arrow==1.2.3
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - datapipelines==1.0.7
      - decorator==4.4.2
      - flake8==5.0.4
      - idna==3.10
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - mccabe==0.7.0
      - merakicommons==1.0.10
      - networkx==2.5.1
      - packaging==21.3
      - pillow==8.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.9.0.post0
      - requests==2.27.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/cassiopeia

test/test_patches.py::test_patch_relational_operators
test/test_patches.py::test_known_patches test/test_patches.py::test_season_start_end_using_patches
test/test_patches.py::test_unknown_patch_raises
cassiopeia/core/patch.py
cassiopeia/core/patch.py