diff --git a/docs/api-stability.md b/docs/api-stability.md index 3b2ad5c..6a36637 100644 --- a/docs/api-stability.md +++ b/docs/api-stability.md @@ -49,8 +49,8 @@ that need a frozen API should pin a minor release (for example, `~=0.4.0`). The core package requires Python `>=3.10` and currently tests CPython 3.10 through 3.14 on Linux, macOS, and Windows. The core runtime dependency is -Click `>=8.1,<8.5`; the compatibility suite covers the 8.1, 8.2, 8.3, and -8.4 lines on Python 3.10 and 3.14. YAML configuration and YAML output are provided by the +Click `>=8.1,<8.6`; the compatibility suite covers the 8.1, 8.2, 8.3, 8.4, +and 8.5 lines on Python 3.10 and 3.14. YAML configuration and YAML output are provided by the optional `base-cli[yaml]` extra, which supplies PyYAML `>=6.0,<7`. Other optional integrations are independently versioned and constrained in `pyproject.toml`: Typer `>=0.12,<0.28`, Rich `>=13.7,<15`, and OpenTelemetry API `>=1.24,<2`. The diff --git a/docs/platform-support.md b/docs/platform-support.md index 677b6ac..5c87c01 100644 --- a/docs/platform-support.md +++ b/docs/platform-support.md @@ -36,8 +36,8 @@ filesystem. ## Dependency support -The core runtime dependency contract is Click `>=8.1,<8.5`, tested across the -8.1 through 8.4 lines. YAML configuration +The core runtime dependency contract is Click `>=8.1,<8.6`, tested across the +8.1 through 8.5 lines. YAML configuration and YAML output use the optional `base-cli[yaml]` extra, which supplies PyYAML `>=6.0,<7`. The lower bound is the oldest supported line; the upper bound prevents an unreviewed major release from entering a production install. The diff --git a/tests/test_dependency_documentation.py b/tests/test_dependency_documentation.py new file mode 100644 index 0000000..903d299 --- /dev/null +++ b/tests/test_dependency_documentation.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +import re +import unittest +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + + +class DependencyDocumentationTests(unittest.TestCase): + def test_click_window_is_consistent_across_metadata_and_public_docs(self) -> None: + metadata = (ROOT / "pyproject.toml").read_text(encoding="utf-8") + documents = "\n".join( + (ROOT / path).read_text(encoding="utf-8") + for path in ( + "docs/dependency-support.md", + "docs/platform-support.md", + "docs/api-stability.md", + "docs/compatibility-dashboard.md", + ) + ) + self.assertIn('"click>=8.1,<8.6"', metadata) + self.assertRegex(documents, re.compile(r"Click `>=8\.1,<8\.6`")) + self.assertIn("8.1, 8.2, 8.3, 8.4, 8.5", documents) + self.assertNotIn("Click `>=8.1,<8.5`", documents) + + +if __name__ == "__main__": + unittest.main()