You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/standard.md
+27-2Lines changed: 27 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,8 +100,9 @@ environment, generated code).
100
100
101
101
## 6. Python versions
102
102
103
-
There is no floor policy. A repo sets `requires-python` to what its code needs and may raise it
104
-
without a recorded reason.
103
+
There is no floor policy for Python itself. A repo sets `requires-python` to what its code needs
104
+
and may raise it without a recorded reason. A dependency floor is a separate obligation, carried by
105
+
section 7.
105
106
106
107
The obligation is at the other end: **the test matrix always includes the newest stable CPython
107
108
minor and that minor's free-threaded build** (`3.14` and `3.14t` today). The matrix is every minor
@@ -126,9 +127,33 @@ Both call the repo's own reusable `_checks.yml`, which has these jobs:
126
127
|---|---|
127
128
|`lint`|`just install lint-ci` on the repo's floor Python |
128
129
|`pytest`|`just install` then `just test-ci` on every matrix entry, `fail-fast: false`|
130
+
|`floors`| every direct dependency resolved at its declared floor, wheel-only, on every matrix entry, then the suite or an import |
129
131
|`links`|[lychee](https://github.com/lycheeverse/lychee-action) with `--offline`, remapping this repo's `blob/main` URLs to the checkout, so it fails only on a relative link or file path the diff broke |
130
132
|`docs`|`just docs-build` (`mkdocs build --strict`), only for repos with a docs site |
131
133
134
+
A declared dependency floor is a claim that the package installs and works against that version,
135
+
and `floors` is the only job that tests it: `pytest` resolves every dependency at its newest, so
136
+
the bottom of each declared range otherwise ships unexercised. It rots there. `compose2pod` shipped
137
+
a PyYAML floor that could not install on 3.14
138
+
([compose2pod#126](https://github.com/modern-python/compose2pod/issues/126)), and
139
+
`faststream-outbox` shipped a `pydantic>=2` floor that no `cp313` wheel satisfies below pydantic
0 commit comments