Your message dated Sun, 11 Jan 2026 15:18:35 +0000
with message-id <[email protected]>
and subject line Bug#1123335: fixed in rich 13.9.4-1.1
has caused the Debian Bug report #1123335,
regarding rich: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i
python{version} -p "3.14 3.13" returned exit code 13
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
1123335: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1123335
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: src:rich
Version: 13.9.4-1
Severity: serious
Tags: ftbfs forky sid
Dear maintainer:
During a rebuild of all packages in unstable, this package failed to build.
Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:
https://people.debian.org/~sanvila/build-logs/202512/
About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.
If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.
If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:rich, so that this is still
visible in the BTS web page for this package.
Thanks.
--------------------------------------------------------------------------------
[...]
debian/rules clean
dh clean --with python3 --buildsystem=pybuild
dh_auto_clean -O--buildsystem=pybuild
dh_autoreconf_clean -O--buildsystem=pybuild
dh_clean -O--buildsystem=pybuild
debian/rules binary
dh binary --with python3 --buildsystem=pybuild
dh_update_autotools_config -O--buildsystem=pybuild
dh_autoreconf -O--buildsystem=pybuild
dh_auto_configure -O--buildsystem=pybuild
dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:131: Building wheel for python3.14 with "build"
module
I: pybuild base:317: python3.14 -m build --skip-dependency-check --no-isolation
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_rich
* Building wheel...
The "poetry.dev-dependencies" section is deprecated and will be removed in a
future version. Use "poetry.group.dev.dependencies" instead.
Successfully built rich-13.9.4-py3-none-any.whl
I: pybuild plugin_pyproject:155: Unpacking wheel built for python3.14 with
"installer" module
I: pybuild plugin_pyproject:131: Building wheel for python3.13 with "build"
module
I: pybuild base:317: python3.13 -m build --skip-dependency-check --no-isolation
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_rich
* Building wheel...
The "poetry.dev-dependencies" section is deprecated and will be removed in a
future version. Use "poetry.group.dev.dependencies" instead.
Successfully built rich-13.9.4-py3-none-any.whl
I: pybuild plugin_pyproject:155: Unpacking wheel built for python3.13 with
"installer" module
debian/rules override_dh_auto_test
make[1]: Entering directory '/<<PKGBUILDDIR>>'
PYBUILD_SYSTEM=custom PYBUILD_TEST_ARGS="PYTHONPATH=/<<PKGBUILDDIR>>
{interpreter} -m pytest" dh_auto_test
I: pybuild base:317: PYTHONPATH=/<<PKGBUILDDIR>> python3.14 -m pytest
============================= test session starts ==============================
platform linux -- Python 3.14.2, pytest-9.0.2, pluggy-1.6.0
rootdir: /<<PKGBUILDDIR>>
configfile: pyproject.toml
testpaths: tests
plugins: typeguard-4.4.4
collected 874 items
tests/test_align.py ................ [ 1%]
tests/test_ansi.py ....................... [ 4%]
tests/test_bar.py ....... [ 5%]
tests/test_block_bar.py .... [ 5%]
tests/test_box.py ........ [ 6%]
tests/test_card.py . [ 6%]
tests/test_cells.py ........ [ 7%]
tests/test_color.py ................. [ 9%]
tests/test_color_triplet.py ... [ 9%]
tests/test_columns.py . [ 10%]
tests/test_columns_align.py . [ 10%]
tests/test_console.py .................................................. [ 15%]
................................................ [ 21%]
tests/test_constrain.py . [ 21%]
tests/test_containers.py .... [ 21%]
tests/test_control.py ....... [ 22%]
tests/test_emoji.py ...... [ 23%]
tests/test_file_proxy.py ... [ 23%]
tests/test_filesize.py .. [ 24%]
tests/test_getfileno.py ... [ 24%]
tests/test_highlighter.py .............................................. [ 29%]
..................................... [ 33%]
tests/test_inspect.py ...F....FFF.................................. [ 39%]
tests/test_json.py . [ 39%]
tests/test_jupyter.py ... [ 39%]
tests/test_layout.py ...... [ 40%]
tests/test_live.py .......... [ 41%]
tests/test_live_render.py .... [ 41%]
tests/test_log.py ... [ 42%]
tests/test_logging.py .... [ 42%]
tests/test_markdown.py ....... [ 43%]
tests/test_markdown_no_hyperlinks.py . [ 43%]
tests/test_markup.py ..................... [ 45%]
tests/test_measure.py .... [ 46%]
tests/test_null_file.py . [ 46%]
tests/test_padding.py ..... [ 47%]
tests/test_palette.py . [ 47%]
tests/test_panel.py ........... [ 48%]
tests/test_pick.py . [ 48%]
tests/test_pretty.py ............................................F...... [ 54%]
. [ 54%]
tests/test_progress.py ...................................... [ 58%]
tests/test_prompt.py ....... [ 59%]
tests/test_protocol.py ...... [ 60%]
tests/test_ratio.py ....... [ 61%]
tests/test_repr.py ........ [ 62%]
tests/test_rich_print.py ....... [ 62%]
tests/test_rule.py ................ [ 64%]
tests/test_rule_in_table.py .... [ 65%]
tests/test_screen.py . [ 65%]
tests/test_segment.py .................................................. [ 70%]
......... [ 71%]
tests/test_spinner.py ..... [ 72%]
tests/test_stack.py . [ 72%]
tests/test_status.py .. [ 72%]
tests/test_style.py ........................... [ 75%]
tests/test_styled.py . [ 76%]
tests/test_syntax.py ........................ [ 78%]
tests/test_table.py .................... [ 81%]
tests/test_text.py ..................................................... [ 87%]
.............................F.......................... [ 93%]
tests/test_theme.py ..... [ 94%]
tests/test_tools.py .... [ 94%]
tests/test_traceback.py ...................s. [ 97%]
tests/test_tree.py .....s.s. [ 98%]
tests/test_windows_renderer.py sssssssssssssssss [100%]
=================================== FAILURES ===================================
________________ test_inspect_builtin_function_except_python311 ________________
@skip_py313
@skip_py312
@skip_py311
@skip_pypy3
def test_inspect_builtin_function_except_python311():
# Pre-3.11 Python versions - print builtin has no signature available
expected = (
"âââââââââââ <built-in function print>
ââââââââââââ®\n"
"â def print(...) â\n"
"â â\n"
"â print(value, ..., sep=' ', end='\\n', â\n"
"â file=sys.stdout, flush=False) â\n"
"â â\n"
"â 29 attribute(s) not shown. Run â\n"
"â inspect(inspect) for options. â\n"
"â°âââââââââââââââââââââââââââââââââââââââââââââââââ¯\n"
)
> assert render(print) == expected
E AssertionError: assert 'âââââââââââ
...âââââââââââ¯\n' == 'âââââââââââ
...âââââââââââ¯\n'
E
E Skipping 53 identical leading characters in diff, use -v to show
E - def print(...) â
E + def print(*args, sep=' ', end='\n', file=None, â
E + â flush=False): â
E â â
E - â print(value, ..., sep=' ', end='\n', â...
E
E ...Full output truncated (10 lines hidden), use '-vv' to show
tests/test_inspect.py:159: AssertionError
___________ test_inspect_integer_with_methods_python38_and_python39 ____________
@skip_py310
@skip_py311
@skip_py312
@skip_py313
def test_inspect_integer_with_methods_python38_and_python39():
expected = (
"âââââââââââââââââ <class 'int'>
ââââââââââââââââââ®\n"
"â int([x]) -> integer â\n"
"â int(x, base=10) -> integer â\n"
"â â\n"
"â denominator = 1 â\n"
"â imag = 0 â\n"
"â numerator = 1 â\n"
"â real = 1 â\n"
"â as_integer_ratio = def as_integer_ratio(): â\n"
"â Return integer ratio. â\n"
"â bit_length = def bit_length(): Number of â\n"
"â bits necessary to represent â\n"
"â self in binary. â\n"
"â conjugate = def conjugate(...) Returns â\n"
"â self, the complex conjugate â\n"
"â of any int. â\n"
"â from_bytes = def from_bytes(bytes, â\n"
"â byteorder, *, â\n"
"â signed=False): Return the â\n"
"â integer represented by the â\n"
"â given array of bytes. â\n"
"â to_bytes = def to_bytes(length, â\n"
"â byteorder, *, â\n"
"â signed=False): Return an â\n"
"â array of bytes representing â\n"
"â an integer. â\n"
"â°âââââââââââââââââââââââââââââââââââââââââââââââââ¯\n"
)
> assert render(1, methods=True) == expected
E AssertionError: assert
'ââââââââââââ...âââââââââââ¯\n' ==
'ââââââââââââ...âââââââââââ¯\n'
E
E Skipping 477 identical leading characters in diff, use -v to show
E - Return integer ratio. â
E + Return a pair of integers, â
E + â whose ratio is equal to the â
E + â original int. â
E + â bit_count = def bit_count(): Number of â...
E
E ...Full output truncated (36 lines hidden), use '-vv' to show
tests/test_inspect.py:252: AssertionError
_______________ test_inspect_integer_with_methods_python310only ________________
@skip_py38
@skip_py39
@skip_py311
@skip_py312
@skip_py313
def test_inspect_integer_with_methods_python310only():
expected = (
"âââââââââââââââââ <class 'int'>
ââââââââââââââââââ®\n"
"â int([x]) -> integer â\n"
"â int(x, base=10) -> integer â\n"
"â â\n"
"â denominator = 1 â\n"
"â imag = 0 â\n"
"â numerator = 1 â\n"
"â real = 1 â\n"
"â as_integer_ratio = def as_integer_ratio(): â\n"
"â Return integer ratio. â\n"
"â bit_count = def bit_count(): Number of â\n"
"â ones in the binary â\n"
"â representation of the â\n"
"â absolute value of self. â\n"
"â bit_length = def bit_length(): Number of â\n"
"â bits necessary to represent â\n"
"â self in binary. â\n"
"â conjugate = def conjugate(...) Returns â\n"
"â self, the complex conjugate â\n"
"â of any int. â\n"
"â from_bytes = def from_bytes(bytes, â\n"
"â byteorder, *, â\n"
"â signed=False): Return the â\n"
"â integer represented by the â\n"
"â given array of bytes. â\n"
"â to_bytes = def to_bytes(length, â\n"
"â byteorder, *, â\n"
"â signed=False): Return an â\n"
"â array of bytes representing â\n"
"â an integer. â\n"
"â°âââââââââââââââââââââââââââââââââââââââââââââââââ¯\n"
)
> assert render(1, methods=True) == expected
E AssertionError: assert
'ââââââââââââ...âââââââââââ¯\n' ==
'ââââââââââââ...âââââââââââ¯\n'
E
E Skipping 477 identical leading characters in diff, use -v to show
E - Return integer ratio. â
E + Return a pair of integers, â
E + â whose ratio is equal to the â
E + â original int. â
E â bit_count = def bit_count(): Number of â...
E
E ...Full output truncated (36 lines hidden), use '-vv' to show
tests/test_inspect.py:294: AssertionError
_________________ test_inspect_integer_with_methods_python311 __________________
@skip_py38
@skip_py39
@skip_py310
@skip_py312
@skip_py313
def test_inspect_integer_with_methods_python311():
# to_bytes and from_bytes methods on int had minor signature change -
# they now, as of 3.11, have default values for all of their parameters
expected = (
"âââââââââââââââââ <class 'int'>
ââââââââââââââââââ®\n"
"â int([x]) -> integer â\n"
"â int(x, base=10) -> integer â\n"
"â â\n"
"â denominator = 1 â\n"
"â imag = 0 â\n"
"â numerator = 1 â\n"
"â real = 1 â\n"
"â as_integer_ratio = def as_integer_ratio(): â\n"
"â Return integer ratio. â\n"
"â bit_count = def bit_count(): Number of â\n"
"â ones in the binary â\n"
"â representation of the â\n"
"â absolute value of self. â\n"
"â bit_length = def bit_length(): Number of â\n"
"â bits necessary to represent â\n"
"â self in binary. â\n"
"â conjugate = def conjugate(...) Returns â\n"
"â self, the complex conjugate â\n"
"â of any int. â\n"
"â from_bytes = def from_bytes(bytes, â\n"
"â byteorder='big', *, â\n"
"â signed=False): Return the â\n"
"â integer represented by the â\n"
"â given array of bytes. â\n"
"â to_bytes = def to_bytes(length=1, â\n"
"â byteorder='big', *, â\n"
"â signed=False): Return an â\n"
"â array of bytes representing â\n"
"â an integer. â\n"
"â°âââââââââââââââââââââââââââââââââââââââââââââââââ¯\n"
)
> assert render(1, methods=True) == expected
E AssertionError: assert
'ââââââââââââ...âââââââââââ¯\n' ==
'ââââââââââââ...âââââââââââ¯\n'
E
E Skipping 477 identical leading characters in diff, use -v to show
E - Return integer ratio. â
E + Return a pair of integers, â
E + â whose ratio is equal to the â
E + â original int. â
E â bit_count = def bit_count(): Number of â...
E
E ...Full output truncated (27 lines hidden), use '-vv' to show
tests/test_inspect.py:338: AssertionError
______________________________ test_attrs_broken _______________________________
@skip_py310
@skip_py311
@skip_py312
@skip_py313
def test_attrs_broken() -> None:
@attr.define
class Foo:
bar: int
foo = Foo(1)
del foo.bar
result = pretty_repr(foo)
print(repr(result))
expected = "Foo(bar=AttributeError('bar'))"
> assert result == expected
E assert 'Foo(\n ba... \'bar\'")\n)' == "Foo(bar=Attr...Error('bar'))"
E
E - Foo(bar=AttributeError('bar'))
E + Foo(
E +
bar=AttributeError("'tests.test_pretty.test_attrs_broken.<locals>.Foo' object
has no attribute 'bar'")
E + )
tests/test_pretty.py:652: AssertionError
----------------------------- Captured stdout call -----------------------------
'Foo(\n
bar=AttributeError("\'tests.test_pretty.test_attrs_broken.<locals>.Foo\' object
has no attribute \'bar\'")\n)'
______________________________ test_assemble_meta ______________________________
def test_assemble_meta():
text = Text.assemble("foo", ("bar", "bold"), meta={"foo": "bar"})
assert str(text) == "foobar"
> assert text._spans == [Span(3, 6, "bold"), Span(0, 6,
> Style(meta={"foo": "bar"}))]
E AssertionError: assert [Span(3, 6, '...oo': 'bar'}))] == [Span(3, 6,
'...oo': 'bar'}))]
E
E At index 1 diff: Span(0, 6, Style(meta={'foo': 'bar'})) != Span(0, 6,
Style(meta={'foo': 'bar'}))
E Use -v to get more diff
tests/test_text.py:846: AssertionError
=========================== short test summary info ============================
FAILED tests/test_inspect.py::test_inspect_builtin_function_except_python311
FAILED
tests/test_inspect.py::test_inspect_integer_with_methods_python38_and_python39
FAILED tests/test_inspect.py::test_inspect_integer_with_methods_python310only
FAILED tests/test_inspect.py::test_inspect_integer_with_methods_python311 - A...
FAILED tests/test_pretty.py::test_attrs_broken - assert 'Foo(\n ba... \'ba...
FAILED tests/test_text.py::test_assemble_meta - AssertionError: assert [Span(...
================== 6 failed, 848 passed, 20 skipped in 4.19s ===================
E: pybuild pybuild:389: test: plugin custom failed with: exit code=1:
PYTHONPATH=/<<PKGBUILDDIR>> python3.14 -m pytest
I: pybuild base:317: PYTHONPATH=/<<PKGBUILDDIR>> python3.13 -m pytest
============================= test session starts ==============================
platform linux -- Python 3.13.11, pytest-9.0.2, pluggy-1.6.0
rootdir: /<<PKGBUILDDIR>>
configfile: pyproject.toml
testpaths: tests
plugins: typeguard-4.4.4
collected 874 items
tests/test_align.py ................ [ 1%]
tests/test_ansi.py ....................... [ 4%]
tests/test_bar.py ....... [ 5%]
tests/test_block_bar.py .... [ 5%]
tests/test_box.py ........ [ 6%]
tests/test_card.py . [ 6%]
tests/test_cells.py ........ [ 7%]
tests/test_color.py ................. [ 9%]
tests/test_color_triplet.py ... [ 9%]
tests/test_columns.py . [ 10%]
tests/test_columns_align.py . [ 10%]
tests/test_console.py .................................................. [ 15%]
................................................ [ 21%]
tests/test_constrain.py . [ 21%]
tests/test_containers.py .... [ 21%]
tests/test_control.py ....... [ 22%]
tests/test_emoji.py ...... [ 23%]
tests/test_file_proxy.py ... [ 23%]
tests/test_filesize.py .. [ 24%]
tests/test_getfileno.py ... [ 24%]
tests/test_highlighter.py .............................................. [ 29%]
..................................... [ 33%]
tests/test_inspect.py ...s....sss.................................. [ 39%]
tests/test_json.py . [ 39%]
tests/test_jupyter.py ... [ 39%]
tests/test_layout.py ...... [ 40%]
tests/test_live.py .......... [ 41%]
tests/test_live_render.py .... [ 41%]
tests/test_log.py ... [ 42%]
tests/test_logging.py .... [ 42%]
tests/test_markdown.py ....... [ 43%]
tests/test_markdown_no_hyperlinks.py . [ 43%]
tests/test_markup.py ..................... [ 45%]
tests/test_measure.py .... [ 46%]
tests/test_null_file.py . [ 46%]
tests/test_padding.py ..... [ 47%]
tests/test_palette.py . [ 47%]
tests/test_panel.py ........... [ 48%]
tests/test_pick.py . [ 48%]
tests/test_pretty.py ............................................s...... [ 54%]
. [ 54%]
tests/test_progress.py ...................................... [ 58%]
tests/test_prompt.py ....... [ 59%]
tests/test_protocol.py ...... [ 60%]
tests/test_ratio.py ....... [ 61%]
tests/test_repr.py ........ [ 62%]
tests/test_rich_print.py ....... [ 62%]
tests/test_rule.py ................ [ 64%]
tests/test_rule_in_table.py .... [ 65%]
tests/test_screen.py . [ 65%]
tests/test_segment.py .................................................. [ 70%]
......... [ 71%]
tests/test_spinner.py ..... [ 72%]
tests/test_stack.py . [ 72%]
tests/test_status.py .. [ 72%]
tests/test_style.py ........................... [ 75%]
tests/test_styled.py . [ 76%]
tests/test_syntax.py ........................ [ 78%]
tests/test_table.py .................... [ 81%]
tests/test_text.py ..................................................... [ 87%]
........................................................ [ 93%]
tests/test_theme.py ..... [ 94%]
tests/test_tools.py .... [ 94%]
tests/test_traceback.py ...................s. [ 97%]
tests/test_tree.py .....s.s. [ 98%]
tests/test_windows_renderer.py sssssssssssssssss [100%]
======================= 849 passed, 25 skipped in 4.20s ========================
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14
3.13" returned exit code 13
make[1]: *** [debian/rules:9: override_dh_auto_test] Error 25
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:6: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
--- End Message ---
--- Begin Message ---
Source: rich
Source-Version: 13.9.4-1.1
Done: Colin Watson <[email protected]>
We believe that the bug you reported is fixed in the latest version of
rich, which is due to be installed in the Debian FTP archive.
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Colin Watson <[email protected]> (supplier of updated rich package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Format: 1.8
Date: Fri, 09 Jan 2026 14:44:48 +0000
Source: rich
Architecture: source
Version: 13.9.4-1.1
Distribution: unstable
Urgency: medium
Maintainer: Sandro Tosi <[email protected]>
Changed-By: Colin Watson <[email protected]>
Closes: 1123335
Changes:
rich (13.9.4-1.1) unstable; urgency=medium
.
* Non-maintainer upload.
* Fix tests for Python 3.14 (closes: #1123335).
* Fix tests for Pygments 2.19.
Checksums-Sha1:
ba6644149b4e9c12e3c829bdbb9e6a362245bf64 2205 rich_13.9.4-1.1.dsc
030bce23a0b45007b0882028d899e2908433c527 6452 rich_13.9.4-1.1.debian.tar.xz
Checksums-Sha256:
29faebb1a436710db178814d70a0231f87d3a08d5083817297bc01cff7917376 2205
rich_13.9.4-1.1.dsc
cf1505f67e398f429f56e22a0b0c4d711b4d23fd3f0b20bb9ce5facc64135596 6452
rich_13.9.4-1.1.debian.tar.xz
Files:
49179dba41fdb3992efdb2a3fbbcef37 2205 python optional rich_13.9.4-1.1.dsc
6c555dc7c9375081d323384df2020356 6452 python optional
rich_13.9.4-1.1.debian.tar.xz
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEErApP8SYRtvzPAcEROTWH2X2GUAsFAmlhFVkACgkQOTWH2X2G
UAv0OBAAusFqVlS+hhc9jNN0NghGXhRCYrqLgIjG3NW6zBDMBiptAckuD8mNVqvQ
PTo7RGpFAqI9Y8SCrh5CchsOiEnX4Yg2/NcQRJCp2bSKcMPQrIOTJlsXJgxu/Khp
9aXNd7RR7XsktfzyKakWuj/i7ay2enQ1GGR7DQiW9wCeRxhI1F1JtfGFCinLqhCK
d0nfaCK7Ulk+zJ6/RLeVx00sJCAJwHVwk0WpRow9WqvdgYRsM+o7574tN9ql9ST0
4vMlgC2T08kens1FLXrRXVDiPQw13C2gw4J8FF/6Vur7XzPl2n7OYXk6y6xe4M7i
BeXA12/wXO1/QSPx8W8DKmB/pNXjiDJ3oerSwvdXGZtUQpRd+6ArxgUMBqgIfOeX
jeCS90K8+6nGj168eAG8Fr0Ln9DkwTTQ3NHFZ2p+CVlLv/gBYgbfXrveQLFgU9ZF
ea2caELUzY0x4NJqRlZ4BMI71FGogri61tpQw+PWTRcNewqxBZ42y0weg6t4t8qI
i9XGAWNYFkLmfq77h4eQ3Jv/ZFeWX8JUxy1isAol5NAzt7rqdzx7/Io/frwfP6ya
woYpGXJTa5ydVf3fRnmu6lsL1XrCzaOTa+J+uveq9cCIzl7ipqRp9/0yLHIqj0ZY
YKUMoWzyx/ja9JAAhv5fYb8+kqLTibpwlloLxRd6rlGAm+sLTc0=
=5fLt
-----END PGP SIGNATURE-----
pgpgsYBpnQiXV.pgp
Description: PGP signature
--- End Message ---