# Python runtime requirements for the design-system toolchain
#   design/tools/sources/linter.py     (agnostic XML <-> XSD validator)
#   design/tools/sources/checker.py    (manifest determinism rules + XSD pass
#                                       + ruff lint of design/tools/sources)
#   design/tools/sources/generate.py   (tokens/themes -> gluestack config)
#   design/tools/sources/docgen.py     (documentation site generator)
#   design/tools/sources/xmleditor.py  (visual XSD-driven XML block editor:
#                                       tkinter GUI + headless CLI)
#
# All tools require Python 3.8+.
#
# In CI the tooling is installed on a pinned interpreter (3.12) with
# `pip install --only-binary=:all:`. Wheels are mandatory here: `lxml < 6` has
# no wheel for the newest CPython, and building it from source needs the
# libxml2/libxslt development headers that the runners do not provide. Pinning
# the interpreter in the workflows keeps this a fast, deterministic install.
# Third-party dependencies:
#   lxml    ElementTree / XMLSchema backend — used by every tool
#   ruff    Python linter — run automatically by checker.py --check
#           (i.e. by npm run design:check / design:pipeline)
#
# tkinter (the XML editor's GUI) ships with the standard library; headless
# CLI modes of xmleditor.py do not need it. On minimal Linux images install
# it with your package manager (e.g. apt install python3-tk).
#
# Install with:
#   python3 -m pip install -r design/tools/requirements.txt
# or
#   pip install -r design/tools/requirements.txt

lxml>=4.7,<6
# Floor at 0.16.9: EXE001 (shebang without the executable bit) only exists on
# POSIX, so a Windows developer must run the same linter version as CI to see
# what CI sees. Bump this floor whenever a newer ruff adds a rule.
ruff>=0.16.9,<1
