On Sat, Dec 06, 2025 at 09:27:50PM +0500, Andrey Rakhmatullin wrote:
The build segfaults during tests, but only on amd64 and i386:
Current thread 0xf7b49700 [python3.14] (most recent call first):
File "/build/reproducible-path/python-
memray-1.17.0+dfsg/.pybuild/cpython3_3.14_memray/build/tests/unit/test_reader.py",
line 30 in test_rejects_different_header_magic
https://buildd.debian.org/status/fetch.php?pkg=python-
memray&arch=i386&ver=1.17.0%2Bdfsg-1%2Bb1&stamp=1765038158&raw=0
In case anyone else thinks to try this, I tried upgrading to the latest
upstream version (1.19.1) and still got a segfault in the same place.
I tried valgrind, but the output makes very little sense to me as the
first thing that goes wrong is a crash in unwinding. I guess something
has corrupted the stack in a way that's gone unnoticed by valgrind?
# valgrind /usr/bin/python3.14 -m pytest
--ignore=tests/integration/test_main.py
--ignore=tests/integration/test_native_tracking.py -v
tests/unit/test_reader.py::test_rejects_different_header_magic
==902== Memcheck, a memory error detector
==902== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==902== Using Valgrind-3.25.1 and LibVEX; rerun with -h for copyright info
==902== Command: /usr/bin/python3.14 -m pytest
--ignore=tests/integration/test_main.py
--ignore=tests/integration/test_native_tracking.py -v
tests/unit/test_reader.py::test_rejects_different_header_magic
==902==
=============================================================================
test session starts
==============================================================================
platform linux -- Python 3.14.2, pytest-8.4.2, pluggy-1.6.0 --
/usr/bin/python3.14
cachedir: .pytest_cache
rootdir:
/build/reproducible-path/python-memray-1.19.1+dfsg/.pybuild/cpython3_3.14_memray/build
configfile: pyproject.toml
plugins: typeguard-4.4.4, cov-5.0.0
collected 1 item
tests/unit/test_reader.py::test_rejects_different_header_magic ==902== Syscall
param write(buf) points to unaddressable byte(s)
==902== at 0x4AC8219: syscall (syscall.S:38)
==902== by 0x8E4EAB9: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E4FFF1: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E55322: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E55C92: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E50BA6: _ULx86_64_step (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E4F620: _Unwind_RaiseException (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8F2D3EA: __cxa_throw (in
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.34)
==902== by 0x8D41F42: UnknownInlinedFun (record_reader.cpp:73)
==902== by 0x8D41F42:
memray::api::RecordReader::RecordReader(std::unique_ptr<memray::io::Source,
std::default_delete<memray::io::Source> >, bool, bool) [clone .cold]
(record_reader.cpp:151)
==902== by 0x8D65B5A: UnknownInlinedFun (stl_construct.h:133)
==902== by 0x8D65B5A: UnknownInlinedFun (alloc_traits.h:805)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:606)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:969)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:1719)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:463)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:1008)
==902== by 0x8D65B5A:
__pyx_pf_6memray_7_memray_10FileReader___cinit__(__pyx_obj_6memray_7_memray_FileReader*,
_object*, bool, int) [clone .lto_priv.0] (_memray.cpp:25723)
==902== by 0x8D90014: UnknownInlinedFun (_memray.cpp:25361)
==902== by 0x8D90014: __pyx_tp_new_6memray_7_memray_FileReader(_typeobject*,
_object*, _object*) [clone .lto_priv.0] (_memray.cpp:43329)
==902== by 0x526F50: UnknownInlinedFun (typeobject.c:2309)
==902== by 0x526F50: _PyObject_MakeTpCall (call.c:242)
==902== Address 0x1ffeffd000 is on thread 1's stack
==902== 856 bytes below stack pointer
==902==
==902== Syscall param write(buf) points to uninitialised byte(s)
==902== at 0x4AC8219: syscall (syscall.S:38)
==902== by 0x8E4EAB9: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E4FFF1: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E5574C: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E55C92: ??? (in /usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E50BA6: _ULx86_64_step (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8E4F620: _Unwind_RaiseException (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8F2D3EA: __cxa_throw (in
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.34)
==902== by 0x8D41F42: UnknownInlinedFun (record_reader.cpp:73)
==902== by 0x8D41F42:
memray::api::RecordReader::RecordReader(std::unique_ptr<memray::io::Source,
std::default_delete<memray::io::Source> >, bool, bool) [clone .cold]
(record_reader.cpp:151)
==902== by 0x8D65B5A: UnknownInlinedFun (stl_construct.h:133)
==902== by 0x8D65B5A: UnknownInlinedFun (alloc_traits.h:805)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:606)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:969)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:1719)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:463)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:1008)
==902== by 0x8D65B5A:
__pyx_pf_6memray_7_memray_10FileReader___cinit__(__pyx_obj_6memray_7_memray_FileReader*,
_object*, bool, int) [clone .lto_priv.0] (_memray.cpp:25723)
==902== by 0x8D90014: UnknownInlinedFun (_memray.cpp:25361)
==902== by 0x8D90014: __pyx_tp_new_6memray_7_memray_FileReader(_typeobject*,
_object*, _object*) [clone .lto_priv.0] (_memray.cpp:43329)
==902== by 0x526F50: UnknownInlinedFun (typeobject.c:2309)
==902== by 0x526F50: _PyObject_MakeTpCall (call.c:242)
==902== Address 0x1ffeffe000 is on thread 1's stack
==902== in frame #6, created by _Unwind_RaiseException (???:)
==902==
==902== Conditional jump or move depends on uninitialised value(s)
==902== at 0x8C06EBA: ??? (in /usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902== by 0x8C0717A: __gcc_personality_v0 (in
/usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902== by 0x8E4F73F: _Unwind_RaiseException (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8F2D3EA: __cxa_throw (in
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.34)
==902== by 0x8D41F42: UnknownInlinedFun (record_reader.cpp:73)
==902== by 0x8D41F42:
memray::api::RecordReader::RecordReader(std::unique_ptr<memray::io::Source,
std::default_delete<memray::io::Source> >, bool, bool) [clone .cold]
(record_reader.cpp:151)
==902== by 0x8D65B5A: UnknownInlinedFun (stl_construct.h:133)
==902== by 0x8D65B5A: UnknownInlinedFun (alloc_traits.h:805)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:606)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:969)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:1719)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:463)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:1008)
==902== by 0x8D65B5A:
__pyx_pf_6memray_7_memray_10FileReader___cinit__(__pyx_obj_6memray_7_memray_FileReader*,
_object*, bool, int) [clone .lto_priv.0] (_memray.cpp:25723)
==902== by 0x8D90014: UnknownInlinedFun (_memray.cpp:25361)
==902== by 0x8D90014: __pyx_tp_new_6memray_7_memray_FileReader(_typeobject*,
_object*, _object*) [clone .lto_priv.0] (_memray.cpp:43329)
==902== by 0x526F50: UnknownInlinedFun (typeobject.c:2309)
==902== by 0x526F50: _PyObject_MakeTpCall (call.c:242)
==902== by 0x548756: _PyEval_EvalFrameDefault (generated_cases.c.h:1619)
==902== by 0x583943: UnknownInlinedFun (pycore_ceval.h:121)
==902== by 0x583943: UnknownInlinedFun (ceval.c:2083)
==902== by 0x583943: _PyFunction_Vectorcall (call.c:413)
==902== by 0x52E8BD: _PyObject_VectorcallDictTstate (call.c:146)
==902== by 0x626AFE: UnknownInlinedFun (call.c:504)
==902== by 0x626AFE: UnknownInlinedFun (typeobject.c:2937)
==902== by 0x626AFE: slot_tp_call.lto_priv.0 (typeobject.c:10244)
==902==
==902== Use of uninitialised value of size 8
==902== at 0x8C06EF0: ??? (in /usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902== by 0x8C0717A: __gcc_personality_v0 (in
/usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902== by 0x8E4F73F: _Unwind_RaiseException (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8F2D3EA: __cxa_throw (in
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.34)
==902== by 0x8D41F42: UnknownInlinedFun (record_reader.cpp:73)
==902== by 0x8D41F42:
memray::api::RecordReader::RecordReader(std::unique_ptr<memray::io::Source,
std::default_delete<memray::io::Source> >, bool, bool) [clone .cold]
(record_reader.cpp:151)
==902== by 0x8D65B5A: UnknownInlinedFun (stl_construct.h:133)
==902== by 0x8D65B5A: UnknownInlinedFun (alloc_traits.h:805)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:606)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:969)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:1719)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:463)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:1008)
==902== by 0x8D65B5A:
__pyx_pf_6memray_7_memray_10FileReader___cinit__(__pyx_obj_6memray_7_memray_FileReader*,
_object*, bool, int) [clone .lto_priv.0] (_memray.cpp:25723)
==902== by 0x8D90014: UnknownInlinedFun (_memray.cpp:25361)
==902== by 0x8D90014: __pyx_tp_new_6memray_7_memray_FileReader(_typeobject*,
_object*, _object*) [clone .lto_priv.0] (_memray.cpp:43329)
==902== by 0x526F50: UnknownInlinedFun (typeobject.c:2309)
==902== by 0x526F50: _PyObject_MakeTpCall (call.c:242)
==902== by 0x548756: _PyEval_EvalFrameDefault (generated_cases.c.h:1619)
==902== by 0x583943: UnknownInlinedFun (pycore_ceval.h:121)
==902== by 0x583943: UnknownInlinedFun (ceval.c:2083)
==902== by 0x583943: _PyFunction_Vectorcall (call.c:413)
==902== by 0x52E8BD: _PyObject_VectorcallDictTstate (call.c:146)
==902== by 0x626AFE: UnknownInlinedFun (call.c:504)
==902== by 0x626AFE: UnknownInlinedFun (typeobject.c:2937)
==902== by 0x626AFE: slot_tp_call.lto_priv.0 (typeobject.c:10244)
==902==
==902== Invalid read of size 8
==902== at 0x8C06EF0: ??? (in /usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902== by 0x8C0717A: __gcc_personality_v0 (in
/usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902== by 0x8E4F73F: _Unwind_RaiseException (in
/usr/lib/x86_64-linux-gnu/libunwind.so.8.1.0)
==902== by 0x8F2D3EA: __cxa_throw (in
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.34)
==902== by 0x8D41F42: UnknownInlinedFun (record_reader.cpp:73)
==902== by 0x8D41F42:
memray::api::RecordReader::RecordReader(std::unique_ptr<memray::io::Source,
std::default_delete<memray::io::Source> >, bool, bool) [clone .cold]
(record_reader.cpp:151)
==902== by 0x8D65B5A: UnknownInlinedFun (stl_construct.h:133)
==902== by 0x8D65B5A: UnknownInlinedFun (alloc_traits.h:805)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:606)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:969)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr_base.h:1719)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:463)
==902== by 0x8D65B5A: UnknownInlinedFun (shared_ptr.h:1008)
==902== by 0x8D65B5A:
__pyx_pf_6memray_7_memray_10FileReader___cinit__(__pyx_obj_6memray_7_memray_FileReader*,
_object*, bool, int) [clone .lto_priv.0] (_memray.cpp:25723)
==902== by 0x8D90014: UnknownInlinedFun (_memray.cpp:25361)
==902== by 0x8D90014: __pyx_tp_new_6memray_7_memray_FileReader(_typeobject*,
_object*, _object*) [clone .lto_priv.0] (_memray.cpp:43329)
==902== by 0x526F50: UnknownInlinedFun (typeobject.c:2309)
==902== by 0x526F50: _PyObject_MakeTpCall (call.c:242)
==902== by 0x548756: _PyEval_EvalFrameDefault (generated_cases.c.h:1619)
==902== by 0x583943: UnknownInlinedFun (pycore_ceval.h:121)
==902== by 0x583943: UnknownInlinedFun (ceval.c:2083)
==902== by 0x583943: _PyFunction_Vectorcall (call.c:413)
==902== by 0x52E8BD: _PyObject_VectorcallDictTstate (call.c:146)
==902== by 0x626AFE: UnknownInlinedFun (call.c:504)
==902== by 0x626AFE: UnknownInlinedFun (typeobject.c:2937)
==902== by 0x626AFE: slot_tp_call.lto_priv.0 (typeobject.c:10244)
==902== Address 0x550344000000000 is not stack'd, malloc'd or (recently) free'd
==902==
Fatal Python error: Segmentation fault
Current thread 0x0000000004bdd780 [memcheck-amd64-] (most recent call first):
File
"/build/reproducible-path/python-memray-1.19.1+dfsg/.pybuild/cpython3_3.14_memray/build/tests/unit/test_reader.py",
line 30 in test_rejects_different_header_magic
File "/usr/lib/python3/dist-packages/_pytest/python.py", line 157 in
pytest_pyfunc_call
File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line 121 in
_multicall
File "/usr/lib/python3/dist-packages/pluggy/_manager.py", line 120 in
_hookexec
File "/usr/lib/python3/dist-packages/pluggy/_hooks.py", line 512 in __call__
File "/usr/lib/python3/dist-packages/_pytest/python.py", line 1671 in runtest
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 178 in
pytest_runtest_call
File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line 121 in
_multicall
File "/usr/lib/python3/dist-packages/pluggy/_manager.py", line 120 in
_hookexec
File "/usr/lib/python3/dist-packages/pluggy/_hooks.py", line 512 in __call__
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 246 in <lambda>
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 344 in from_call
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 245 in
call_and_report
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 136 in
runtestprotocol
File "/usr/lib/python3/dist-packages/_pytest/runner.py", line 117 in
pytest_runtest_protocol
File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line 121 in
_multicall
File "/usr/lib/python3/dist-packages/pluggy/_manager.py", line 120 in
_hookexec
File "/usr/lib/python3/dist-packages/pluggy/_hooks.py", line 512 in __call__
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 367 in
pytest_runtestloop
File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line 121 in
_multicall
File "/usr/lib/python3/dist-packages/pluggy/_manager.py", line 120 in
_hookexec
File "/usr/lib/python3/dist-packages/pluggy/_hooks.py", line 512 in __call__
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 343 in _main
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 289 in
wrap_session
File "/usr/lib/python3/dist-packages/_pytest/main.py", line 336 in
pytest_cmdline_main
File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line 121 in
_multicall
File "/usr/lib/python3/dist-packages/pluggy/_manager.py", line 120 in
_hookexec
File "/usr/lib/python3/dist-packages/pluggy/_hooks.py", line 512 in __call__
File "/usr/lib/python3/dist-packages/_pytest/config/__init__.py", line 175 in
main
File "/usr/lib/python3/dist-packages/_pytest/config/__init__.py", line 201 in
console_main
File "/usr/lib/python3/dist-packages/pytest/__main__.py", line 9 in <module>
File "<frozen runpy>", line 88 in _run_code
File "<frozen runpy>", line 198 in _run_module_as_main
Current thread's C stack trace (most recent call first):
Binary file "/usr/bin/python3.14", at _Py_DumpStack+0x4a [0x472522]
Binary file "/usr/bin/python3.14" [0x4fc6c7]
Binary file "/usr/lib/x86_64-linux-gnu/libc.so.6", at +0x40590 [0x49f9590]
Binary file "/usr/lib/x86_64-linux-gnu/libgcc_s.so.1", at +0x25ef0 [0x8c06ef0]
Binary file "/usr/lib/x86_64-linux-gnu/libgcc_s.so.1", at
__gcc_personality_v0+0x18b [0x8c0717b]
Binary file "/usr/lib/x86_64-linux-gnu/libunwind.so.8", at
__libunwind_Unwind_RaiseException+0x1c0 [0x8e4f740]
Binary file "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at __cxa_throw+0x3b
[0x8f2d3eb]
Binary file
"/build/reproducible-path/python-memray-1.19.1+dfsg/.pybuild/cpython3_3.14_memray/build/memray/_memray.cpython-314-x86_64-linux-gnu.so",
at +0x33f43 [0x8d41f43]
Binary file
"/build/reproducible-path/python-memray-1.19.1+dfsg/.pybuild/cpython3_3.14_memray/build/memray/_memray.cpython-314-x86_64-linux-gnu.so",
at +0x57b5b [0x8d65b5b]
Binary file
"/build/reproducible-path/python-memray-1.19.1+dfsg/.pybuild/cpython3_3.14_memray/build/memray/_memray.cpython-314-x86_64-linux-gnu.so",
at +0x82015 [0x8d90015]
Binary file "/usr/bin/python3.14", at _PyObject_MakeTpCall+0x241 [0x526f51]
Binary file "/usr/bin/python3.14", at _PyEval_EvalFrameDefault+0x3607
[0x548757]
Binary file "/usr/bin/python3.14" [0x583944]
Binary file "/usr/bin/python3.14" [0x52e8be]
Binary file "/usr/bin/python3.14" [0x626aff]
Binary file "/usr/bin/python3.14", at _PyObject_MakeTpCall+0x36c [0x52707c]
Binary file "/usr/bin/python3.14", at _PyEval_EvalFrameDefault+0x10a51
[0x555ba1]
Binary file "/usr/bin/python3.14" [0x583944]
Binary file "/usr/bin/python3.14" [0x52e8be]
Binary file "/usr/bin/python3.14" [0x626aff]
Binary file "/usr/bin/python3.14" [0x68a579]
Binary file "/usr/bin/python3.14", at _PyEval_EvalFrameDefault+0x4a2c
[0x549b7c]
Binary file "/usr/bin/python3.14" [0x583944]
Binary file "/usr/bin/python3.14" [0x52e8be]
Binary file "/usr/bin/python3.14" [0x626aff]
Binary file "/usr/bin/python3.14", at _PyObject_MakeTpCall+0x36c [0x52707c]
Binary file "/usr/bin/python3.14", at _PyEval_EvalFrameDefault+0x10a51
[0x555ba1]
Binary file "/usr/bin/python3.14" [0x583944]
Binary file "/usr/bin/python3.14" [0x52e8be]
Binary file "/usr/bin/python3.14" [0x626aff]
Binary file "/usr/bin/python3.14", at _PyObject_MakeTpCall+0x36c [0x52707c]
Binary file "/usr/bin/python3.14", at _PyEval_EvalFrameDefault+0x10a51
[0x555ba1]
<truncated rest of calls>
Extension modules: memray._memray, memray._test_utils (total: 2)
==902==
==902== Process terminating with default action of signal 11 (SIGSEGV): dumping
core
==902== at 0x4A4E69C: __pthread_kill_implementation (pthread_kill.c:44)
==902== by 0x49F9461: raise (raise.c:26)
==902== by 0x49F958F: ??? (in /usr/lib/x86_64-linux-gnu/libc.so.6)
==902== by 0x8C06EEF: ??? (in /usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==902==
==902== HEAP SUMMARY:
==902== in use at exit: 11,218,965 bytes in 13,136 blocks
==902== total heap usage: 43,194 allocs, 30,058 frees, 146,394,650 bytes
allocated
==902==
==902== LEAK SUMMARY:
==902== definitely lost: 0 bytes in 0 blocks
==902== indirectly lost: 0 bytes in 0 blocks
==902== possibly lost: 21,544 bytes in 24 blocks
==902== still reachable: 11,197,389 bytes in 13,111 blocks
==902== of which reachable via heuristic:
==902== stdstring : 113 bytes in 1 blocks
==902== suppressed: 32 bytes in 1 blocks
==902== Rerun with --leak-check=full to see details of leaked memory
==902==
==902== Use --track-origins=yes to see where uninitialised values come from
==902== For lists of detected and suppressed errors, rerun with: -s
==902== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
Segmentation fault (core dumped) valgrind /usr/bin/python3.14 -m pytest
--ignore=tests/integration/test_main.py
--ignore=tests/integration/test_native_tracking.py -v
tests/unit/test_reader.py::test_rejects_different_header_magic
--
Colin Watson (he/him) [[email protected]]