Skip to content

four inference fixes - #212

Merged
KotlinIsland merged 8 commits into
mainfrom
four-inference-fixes
Oct 22, 2026
Merged

KotlinIsland merged 8 commits into
mainfrom
four-inference-fixes

Conversation

@KotlinIsland

Copy link
Copy Markdown
Owner

No description provided.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

by ecosystem round-trip

base: e329ebcedfbca854067535c254c87bc07821f289 (merge base) → head: 212/merge

regressions: 1, changed: 269, improvements: 0, error changes: 0 (across 22881 files in 144 projects)

⚠️ 14 project(s) fail to round-trip on both base and head, so this check says nothing about them.

❌ regressions (built on base, now fails)

cloud-init —
build: killed: exceeded 11.7365GB memory budget

ℹ️ changed round-trip output

DateType — datetype/_by_runtime.py
--- base/datetype/_by_runtime.py
+++ head/datetype/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
Expression — expression/_by_runtime.py
--- base/expression/_by_runtime.py
+++ head/expression/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
Expression — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
PyGithub — github/_by_runtime.py
--- base/github/_by_runtime.py
+++ head/github/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
PyGithub — openapi/_by_runtime.py
--- base/openapi/_by_runtime.py
+++ head/openapi/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
PyGithub — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
PyWinCtl — _by_sourcemap.py
--- base/_by_sourcemap.py
+++ head/_by_sourcemap.py
@@ -25,5 +25,5 @@
     "/tmp/tmpl6t9xgns/PyWinCtl/build/pywinctl/__init__.py": {"by": "sha256:9167cb7e304b7689d2ba08ad30fc0c7e7a3c6b5bfb5a0e84116ba6b158083462", "py": "sha256:e05fee61d9bcbecf0cb8d6ddf164fb1218311bd06d3358a486b7122a40ec8768"},
     "/tmp/tmpl6t9xgns/PyWinCtl/build/pywinctl/_main.py": {"by": "sha256:35d9965aa48aa07fb0588d236205afb09e1f12827bbbec2d24cbfaa75548fbf4", "py": "sha256:56caef75215ee0223c7cab904462b1bbf1854d92f33b0312c557ac39534f1441"},
-    "/tmp/tmpl6t9xgns/PyWinCtl/build/pywinctl/_pywinctl_macos.py": {"by": "sha256:20b225329b7921e8289a68a54fda57951199ce81ab1dc0edc9ed03c6b360243d", "py": "sha256:ce1a97a57d27828b9feb025806249df6216db776e0f5898e9a874e9ffc45a6bd"},
+    "/tmp/tmpl6t9xgns/PyWinCtl/build/pywinctl/_pywinctl_macos.py": {"by": "sha256:20b225329b7921e8289a68a54fda57951199ce81ab1dc0edc9ed03c6b360243d", "py": "sha256:0b879c046f95edbdbc60f1ece7c95d4c5dfc92ee8e0fbe7528c5f612a9e0044c"},
     "/tmp/tmpl6t9xgns/PyWinCtl/build/tests/test_pywinctl.py": {"by": "sha256:67b142b215d2bb36c2b035d40d13689b09a38218ffe21432291b186b379719bb", "py": "sha256:ff8ddc44754d596c04a8378b9a6dc04ae98a1e1ae063eea2ca33dc3f2592bf46"},
     "/tmp/tmpl6t9xgns/PyWinCtl/build/typings/AppKit.pyi": {"by": "sha256:c44863b92a5d95c6a57177cd98cffcd5e2f256d4c335e99a550d9e3cfee26733", "py": "sha256:e903932d0cb45dec8c6e625408460380db5983727f5012e71665fe590bb6df79"},
PyWinCtl — pywinctl/_by_runtime.py
--- base/pywinctl/_by_runtime.py
+++ head/pywinctl/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
PyWinCtl — pywinctl/_pywinctl_macos.py
--- base/pywinctl/_pywinctl_macos.py
+++ head/pywinctl/_pywinctl_macos.py
@@ -1325,5 +1325,5 @@
         return bool(self._winTitle and self._winTitle in _getAppWindowsTitles(self._app))
 
-    isVisible = visible  # isVisible is an alias for the visible property.
+    isVisible: property = visible  # isVisible is an alias for the visible property.
 
     @property
Tanjun — examples/_by_runtime.py
--- base/examples/_by_runtime.py
+++ head/examples/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
Tanjun — tanjun/_by_runtime.py
--- base/tanjun/_by_runtime.py
+++ head/tanjun/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
Tanjun — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aiohttp — aiohttp/_by_runtime.py
--- base/aiohttp/_by_runtime.py
+++ head/aiohttp/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aiohttp-devtools — aiohttp_devtools/_by_runtime.py
--- base/aiohttp_devtools/_by_runtime.py
+++ head/aiohttp_devtools/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aiohttp-devtools — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aioredis — aioredis/_by_runtime.py
--- base/aioredis/_by_runtime.py
+++ head/aioredis/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aioredis — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aiortc — aiortc/_by_runtime.py
--- base/aiortc/_by_runtime.py
+++ head/aiortc/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
aiortc — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
alectryon — alectryon/_by_runtime.py
--- base/alectryon/_by_runtime.py
+++ head/alectryon/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
altair — altair/_by_runtime.py
--- base/altair/_by_runtime.py
+++ head/altair/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
altair — tools/_by_runtime.py
--- base/tools/_by_runtime.py
+++ head/tools/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
antidote — antidote/_by_runtime.py
--- base/antidote/_by_runtime.py
+++ head/antidote/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
antidote — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
anyio — anyio/_by_runtime.py
--- base/anyio/_by_runtime.py
+++ head/anyio/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
anyio — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
archinstall — archinstall/_by_runtime.py
--- base/archinstall/_by_runtime.py
+++ head/archinstall/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
archinstall — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
artigraph — arti/_by_runtime.py
--- base/arti/_by_runtime.py
+++ head/arti/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
artigraph — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
arviz — arviz/_by_runtime.py
--- base/arviz/_by_runtime.py
+++ head/arviz/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
arviz — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
async-utils — async_utils/_by_runtime.py
--- base/async_utils/_by_runtime.py
+++ head/async_utils/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
asynq — asynq/_by_runtime.py
--- base/asynq/_by_runtime.py
+++ head/asynq/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
asynq — examples/_by_runtime.py
--- base/examples/_by_runtime.py
+++ head/examples/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
attrs — attr/_by_runtime.py
--- base/attr/_by_runtime.py
+++ head/attr/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
attrs — attrs/_by_runtime.py
--- base/attrs/_by_runtime.py
+++ head/attrs/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
attrs — tests/_by_runtime.py
--- base/tests/_by_runtime.py
+++ head/tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
attrs — typing_tests/_by_runtime.py
--- base/typing_tests/_by_runtime.py
+++ head/typing_tests/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
bandersnatch — bandersnatch/_by_runtime.py
--- base/bandersnatch/_by_runtime.py
+++ head/bandersnatch/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
bandersnatch — bandersnatch_filter_plugins/_by_runtime.py
--- base/bandersnatch_filter_plugins/_by_runtime.py
+++ head/bandersnatch_filter_plugins/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
bandersnatch — bandersnatch_storage_plugins/_by_runtime.py
--- base/bandersnatch_storage_plugins/_by_runtime.py
+++ head/bandersnatch_storage_plugins/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
beartype — _by_sourcemap.py
--- base/_by_sourcemap.py
+++ head/_by_sourcemap.py
@@ -1278,5 +1278,5 @@
     "/tmp/tmp4blt67dl/beartype/build/beartype/_util/cache/func/utilcacheproperty.py": {"by": "sha256:56d690cee910f07165449add3f348b9c01e5a5ab65c4936e843721c0083d4ed5", "py": "sha256:e9fe0fc739a15a86578d168a6dc94121cd454594c9324c3388ee45d07b8db104"},
     "/tmp/tmp4blt67dl/beartype/build/beartype/_util/cache/maplike/__init__.py": {"by": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "py": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},
-    "/tmp/tmp4blt67dl/beartype/build/beartype/_util/cache/maplike/utilcachemaplru.py": {"by": "sha256:47acc8ab1278a117975dfb4a45f1d52ea2548e45689b26f5952ca6aea9d08345", "py": "sha256:51d85b5552f684a056a25edfad143e144340b4d714fc5603800b4a1d8e66cbb5"},
+    "/tmp/tmp4blt67dl/beartype/build/beartype/_util/cache/maplike/utilcachemaplru.py": {"by": "sha256:47acc8ab1278a117975dfb4a45f1d52ea2548e45689b26f5952ca6aea9d08345", "py": "sha256:f7d1c03a8a3025ec65cd6f683c72e5d9b729368950fed90c46e5f38ef89e44c9"},
... 1756 characters elided ...
     "/tmp/tmp4blt67dl/beartype/build/beartype/door/_cls/pep/pep484/doorpep484typevar.py": {"by": "sha256:8e5ea4c15cc550deafb448533b4cb5df8621c41aca01cf0b3e0387647c552752", "py": "sha256:e24eb96ce1f89902e688797f7198be227f36008db55273d2a8fc79758c62d82c"},
beartype — beartype/_by_runtime.py
--- base/beartype/_by_runtime.py
+++ head/beartype/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
beartype — beartype/_util/cache/maplike/utilcachemaplru.py
--- base/beartype/_util/cache/maplike/utilcachemaplru.py
+++ head/beartype/_util/cache/maplike/utilcachemaplru.py
@@ -37,5 +37,5 @@
 
 # ....................{ CLASSES                            }....................
-class CacheLruStrong(dict):
+class CacheLruStrong(dict[Hashable, object]):
     '''\
 **Thread-safe strong Least Recently Used (LRU) cache** (i.e., mapping
beartype — beartype/door/_cls/pep/pep484/doorpep484any.py
--- base/beartype/door/_cls/pep/pep484/doorpep484any.py
+++ head/beartype/door/_cls/pep/pep484/doorpep484any.py
@@ -20,5 +20,5 @@
 
 # ....................{ SUBCLASSES                         }....................
-class AnyTypeHint(TypeHint):
+class AnyTypeHint(TypeHint[type]):
     '''\
 **Any type hint wrapper** (i.e., high-level object encapsulating the
beartype — beartype_test/_by_runtime.py
--- base/beartype_test/_by_runtime.py
+++ head/beartype_test/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
bidict — bidict/_by_runtime.py
--- base/bidict/_by_runtime.py
+++ head/bidict/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
black — black/_by_runtime.py
--- base/black/_by_runtime.py
+++ head/black/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field
black — blackd/_by_runtime.py
--- base/blackd/_by_runtime.py
+++ head/blackd/_by_runtime.py
@@ -397,4 +397,9 @@
 # stays byte-identical to what python would have reported
 #
+# the author's text keeps the whitespace before the `=`, conversion, format spec or
+# `}` that ends the field, which is what python reports from 3.14.8 on. 3.14.0 to
+# 3.14.7 dropped it (python/cpython#154719), so there it is dropped here too, or a
+# lowered field would report different text from an untouched field beside it
+#
 # the import is made here rather than at the top of the file because this module is
 # shared with runtimes that have no `string.templatelib`. only a t-string can reach
@@ -402,5 +407,7 @@
 def _by_template(_t, _exprs):
     from string.templatelib import Interpolation, Template
-
+    from sys import version_info
+
+    _drops_trailing_space = version_info < (3, 14, 8)
     _strings = _t.strings
     _parts = []
@@ -408,4 +415,6 @@
         _parts.append(_strings[_index])
         _expr = _exprs[_index]
+        if _expr is not None and _drops_trailing_space:
+            _expr = _expr.rstrip()
         _parts.append(
             _field

249 finding(s) omitted to fit GitHub's 65536-character comment limit. Every finding, with nothing elided, is in the roundtrip-report.md artifact of this run.

… end of the field, as python 3.14.8 does, and drop it at runtime on 3.14.0 to 3.14.7, which did not
@github-actions

Copy link
Copy Markdown
Contributor

ecosystem check

Linter (stable)

ℹ️ ecosystem check encountered linter errors. (no lint changes; 1 project error)

apache/airflow (error)

ruff check --no-cache --exit-zero --no-fix --output-format concise --no-preview --select ALL

warning: `incorrect-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible. Ignoring `incorrect-blank-line-before-class`.
warning: `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible. Ignoring `multi-line-summary-second-line`.
ruff failed
  Cause: Failed to parse /home/runner/work/_temp/ruff-ecosystem-checkouts/apache:airflow/task-sdk/pyproject.toml
  Cause: TOML parse error at line 200, column 37
    |
200 | [tool.ruff.lint.flake8-tidy-imports.extend-banned-api]
    |                                     ^^^^^^^^^^^^^^^^^
unknown field `extend-banned-api`, expected one of `ban-relative-imports`, `banned-api`, `banned-module-level-imports`, `require-lazy`, `ban-lazy`

Linter (preview)

ℹ️ ecosystem check encountered linter errors. (no lint changes; 1 project error)

apache/airflow (error)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview --select ALL

warning: `incorrect-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible. Ignoring `incorrect-blank-line-before-class`.
warning: `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible. Ignoring `multi-line-summary-second-line`.
ruff failed
  Cause: Failed to parse /home/runner/work/_temp/ruff-ecosystem-checkouts/apache:airflow/task-sdk/pyproject.toml
  Cause: TOML parse error at line 200, column 37
    |
200 | [tool.ruff.lint.flake8-tidy-imports.extend-banned-api]
    |                                     ^^^^^^^^^^^^^^^^^
unknown field `extend-banned-api`, expected one of `ban-relative-imports`, `banned-api`, `banned-module-level-imports`, `require-lazy`, `ban-lazy`

Formatter (stable)

ℹ️ ecosystem check encountered format errors. (no format changes; 1 project error)

apache/airflow (error)

ruff failed
  Cause: Failed to parse /home/runner/work/_temp/ruff-ecosystem-checkouts/apache:airflow/task-sdk/pyproject.toml
  Cause: TOML parse error at line 200, column 37
    |
200 | [tool.ruff.lint.flake8-tidy-imports.extend-banned-api]
    |                                     ^^^^^^^^^^^^^^^^^
unknown field `extend-banned-api`, expected one of `ban-relative-imports`, `banned-api`, `banned-module-level-imports`, `require-lazy`, `ban-lazy`

Formatter (preview)

ℹ️ ecosystem check encountered format errors. (no format changes; 1 project error)

apache/airflow (error)

ruff format --preview

ruff failed
  Cause: Failed to parse /home/runner/work/_temp/ruff-ecosystem-checkouts/apache:airflow/task-sdk/pyproject.toml
  Cause: TOML parse error at line 200, column 37
    |
200 | [tool.ruff.lint.flake8-tidy-imports.extend-banned-api]
    |                                     ^^^^^^^^^^^^^^^^^
unknown field `extend-banned-api`, expected one of `ban-relative-imports`, `banned-api`, `banned-module-level-imports`, `require-lazy`, `ban-lazy`

@KotlinIsland
KotlinIsland merged commit d7eb92a into main Oct 22, 2026
61 of 68 checks passed
@KotlinIsland
KotlinIsland deleted the four-inference-fixes branch October 22, 2026 15:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant