python3.14-nixbot-tests
checks.x86_64-linux.nixbot-tests
· build #365
· raw
1tribuchet: building on jamie2Sourcing python-remove-tests-dir-hook3Sourcing python-catch-conflicts-hook.sh4Sourcing python-remove-bin-bytecode-hook.sh5Sourcing pypa-build-hook6Using pypaBuildPhase7Sourcing python-runtime-deps-check-hook8Using pythonRuntimeDepsCheckHook9Sourcing pypa-install-hook10Using pypaInstallPhase11Sourcing python-imports-check-hook.sh12Using pythonImportsCheckPhase13Sourcing python-namespaces-hook14Sourcing python-catch-conflicts-hook.sh15Sourcing pytest-check-hook16Using pytestCheckPhase
unpackPhase
17unpacking source archive /nix/store/zwm2z7xg8nrc0qyx19wga55yh56njhll-nixbot18source root is nixbot19setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "nixbot/pyproject.toml"configurePhase
20no configure script, doing nothingbuildPhase
21Executing pypaBuildPhase22Creating a wheel...23pypa build flags: --no-isolation --outdir dist/ --wheel24* Getting build dependencies for wheel...25* Building wheel...26Successfully built nixbot-0.0.1-py3-none-any.whl27Finished creating a wheel...28Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
29Executing pythonRuntimeDepsCheck30Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl31Finished executing pythonRuntimeDepsCheckinstallPhase
32Executing pypaInstallPhase33Successfully installed nixbot-0.0.1-py3-none-any.whl34Finished executing pypaInstallPhasepythonOutputDistPhase
35Executing pythonOutputDistPhase36Finished executing pythonOutputDistPhasefixupPhase
37shrinking RPATHs of ELF executables and libraries in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests38checking for references to /build/ in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests...39patching script interpreter paths in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests40stripping (with command strip and flags -S -p) in /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests/lib /nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests/bin41shrinking RPATHs of ELF executables and libraries in /nix/store/6vnx2h1wh6n7ffgywl6xsnwzlrkrlli0-python3.14-nixbot-tests-dist42checking for references to /build/ in /nix/store/6vnx2h1wh6n7ffgywl6xsnwzlrkrlli0-python3.14-nixbot-tests-dist...43patching script interpreter paths in /nix/store/6vnx2h1wh6n7ffgywl6xsnwzlrkrlli0-python3.14-nixbot-tests-dist44Rewriting #!/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14 to #!/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.645wrapping `/nix/store/k49ialkrapij5mnb8wgl2p0095x3yvv6-python3.14-nixbot-tests/bin/nixbot'...46Executing pythonRemoveTestsDir47Finished executing pythonRemoveTestsDirinstallCheckPhase
48no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
49Executing pythonImportsCheckPhasepytestCheckPhase
50Executing pytestCheckPhase51pytest flags: -m pytest --numprocesses=2452/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.53 warner(PytestBenchmarkWarning(text))54/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.55 warner(PytestBenchmarkWarning(text))56/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.57 warner(PytestBenchmarkWarning(text))58/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.59 warner(PytestBenchmarkWarning(text))60/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.61 warner(PytestBenchmarkWarning(text))62/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.63 warner(PytestBenchmarkWarning(text))64/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.65 warner(PytestBenchmarkWarning(text))66/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.67 warner(PytestBenchmarkWarning(text))68/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.69 warner(PytestBenchmarkWarning(text))70/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.71 warner(PytestBenchmarkWarning(text))72/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.73 warner(PytestBenchmarkWarning(text))74/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.75 warner(PytestBenchmarkWarning(text))76/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.77 warner(PytestBenchmarkWarning(text))78/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.79 warner(PytestBenchmarkWarning(text))80/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.81 warner(PytestBenchmarkWarning(text))82/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.83 warner(PytestBenchmarkWarning(text))84/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.85 warner(PytestBenchmarkWarning(text))86/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.87 warner(PytestBenchmarkWarning(text))88/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.89 warner(PytestBenchmarkWarning(text))90/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.91 warner(PytestBenchmarkWarning(text))92/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.93 warner(PytestBenchmarkWarning(text))94/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.95 warner(PytestBenchmarkWarning(text))96/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.97 warner(PytestBenchmarkWarning(text))98/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.99 warner(PytestBenchmarkWarning(text))100/nix/store/bw67hssv9ybvq4mg5kdzhxh36hg2rw53-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.101 warner(PytestBenchmarkWarning(text))102============================= test session starts ==============================103platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0104benchmark: 5.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)105rootdir: /build/nixbot106configfile: pyproject.toml107plugins: asyncio-1.4.0, timeout-2.4.0, xdist-3.8.0, benchmark-5.2.3, anyio-4.14.2108asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function109timeout: 60.0s110timeout method: signal111timeout func_only: False112created: 24/24 workers11324 workers [807 items]114115...........................................sssssssss.................... [ 8%]116..................................................................F..... [ 17%]117........................................................................ [ 26%]118........................................................................ [ 35%]119..........................................s.........................E.EE [ 44%]120EEEEEE.E.EEEEEEEEEEEEE.EEEE.EEE.E..EEEEEEEE..EEEEE.EEEEEEEEEEEEEEEE.EEE. [ 53%]121E.EEEEEEEE.EEEEE.E..EEEEEEEEE.EEE...E.EEEEEEE..E..E.EE....EEE.EEEEEEEEEE [ 62%]122EEEEEEEEEEEEE..EEE.EEEEEEEEE.EE..EEE.EEE.EsE.EEEEE..E..EE.E..E..E.EE.... [ 71%]123..........E....E.EEEEEEEEE....sEEEEEEEEEEE.E.EE.EEEEEEEEEEEEEEEEEEEEEEEE [ 80%]124EEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEE..E........EEEEEEEEEEEEEEEEEEEEEE [ 89%]125EEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEEEE..EEE.EEEEEEEE.EEEEEE.....EEEEE [ 98%]126EEEEEEEEE...... [100%]127==================================== ERRORS ====================================128_________________ ERROR at setup of test_migrations_idempotent _________________129[gw11] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14130131self = <Coroutine test_migrations_idempotent>132133 def setup(self) -> None:134 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"135 if runner_fixture_id not in self.fixturenames:136 self.fixturenames.append(runner_fixture_id)137 # When loop factories are configured, resolve the loop factory138 # fixture early so that a factory variant change cascades cache139 # invalidation before any async fixture checks its cache.140 hook_caller = self.config.hook.pytest_asyncio_loop_factories141 if hook_caller.get_hookimpls():142 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)143> return super().setup()144 ^^^^^^^^^^^^^^^145146/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 147_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 148/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup149 return (yield)150 ^^^^^151nixbot/tests/conftest.py:33: in postgres_dsn152 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:153 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^154/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__155 return next(self.gen)156 ^^^^^^^^^^^^^^157nixbot/tests/support.py:327: in ephemeral_postgres158 run_sync(apply_migrations(dsn))159nixbot/tests/support.py:285: in run_sync160 return executor.submit(asyncio.run, coro).result(timeout=120)161 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^162/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result163 return self.__get_result()164 ^^^^^^^^^^^^^^^^^^^165/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result166 raise self._exception167/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run168 result = ctx.run(self.task)169 ^^^^^^^^^^^^^^^^^^170/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run171 return fn(*args, **kwargs)172 ^^^^^^^^^^^^^^^^^^^173/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run174 return runner.run(main)175 ^^^^^^^^^^^^^^^^176/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run177 return self._loop.run_until_complete(task)178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^179/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete180 return future.result()181 ^^^^^^^^^^^^^^^182nixbot/migrations.py:99: in apply_migrations183 migrations = load_migrations()184 ^^^^^^^^^^^^^^^^^185_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 186187 def load_migrations() -> list[Migration]:188 """Load migration scripts shipped with the package, ordered by version."""189 migrations = []190 for entry in resources.files(__package__).joinpath("migrations").iterdir():191 m = _SCRIPT_RE.match(entry.name)192 if m is None:193 continue194 migrations.append(195 Migration(196 version=int(m.group(1)),197 name=m.group(2),198 sql=entry.read_text(),199 )200 )201 migrations.sort(key=lambda mig: mig.version)202 versions = [m.version for m in migrations]203 if len(set(versions)) != len(versions):204 msg = f"Duplicate migration versions: {versions}"205> raise MigrationError(msg)206E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]207208nixbot/migrations.py:67: MigrationError209_ ERROR at setup of test_replace_schedules_preserves_last_run_for_unchanged_spec _210[gw18] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14211212self = <Coroutine test_replace_schedules_preserves_last_run_for_unchanged_spec>213214 def setup(self) -> None:215 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"216 if runner_fixture_id not in self.fixturenames:217 self.fixturenames.append(runner_fixture_id)218 # When loop factories are configured, resolve the loop factory219 # fixture early so that a factory variant change cascades cache220 # invalidation before any async fixture checks its cache.221 hook_caller = self.config.hook.pytest_asyncio_loop_factories222 if hook_caller.get_hookimpls():223 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)224> return super().setup()225 ^^^^^^^^^^^^^^^226227/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 228_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup230 return (yield)231 ^^^^^232nixbot/tests/conftest.py:33: in postgres_dsn233 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:234 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^235/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__236 return next(self.gen)237 ^^^^^^^^^^^^^^238nixbot/tests/support.py:327: in ephemeral_postgres239 run_sync(apply_migrations(dsn))240nixbot/tests/support.py:285: in run_sync241 return executor.submit(asyncio.run, coro).result(timeout=120)242 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^243/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result244 return self.__get_result()245 ^^^^^^^^^^^^^^^^^^^246/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result247 raise self._exception248/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run249 result = ctx.run(self.task)250 ^^^^^^^^^^^^^^^^^^251/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run252 return fn(*args, **kwargs)253 ^^^^^^^^^^^^^^^^^^^254/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run255 return runner.run(main)256 ^^^^^^^^^^^^^^^^257/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run258 return self._loop.run_until_complete(task)259 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^260/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete261 return future.result()262 ^^^^^^^^^^^^^^^263nixbot/migrations.py:99: in apply_migrations264 migrations = load_migrations()265 ^^^^^^^^^^^^^^^^^266_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 267268 def load_migrations() -> list[Migration]:269 """Load migration scripts shipped with the package, ordered by version."""270 migrations = []271 for entry in resources.files(__package__).joinpath("migrations").iterdir():272 m = _SCRIPT_RE.match(entry.name)273 if m is None:274 continue275 migrations.append(276 Migration(277 version=int(m.group(1)),278 name=m.group(2),279 sql=entry.read_text(),280 )281 )282 migrations.sort(key=lambda mig: mig.version)283 versions = [m.version for m in migrations]284 if len(set(versions)) != len(versions):285 msg = f"Duplicate migration versions: {versions}"286> raise MigrationError(msg)287E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]288289nixbot/migrations.py:67: MigrationError290__________________ ERROR at setup of test_match_skip_and_run ___________________291[gw16] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14292293self = <Coroutine test_match_skip_and_run>294295 def setup(self) -> None:296 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"297 if runner_fixture_id not in self.fixturenames:298 self.fixturenames.append(runner_fixture_id)299 # When loop factories are configured, resolve the loop factory300 # fixture early so that a factory variant change cascades cache301 # invalidation before any async fixture checks its cache.302 hook_caller = self.config.hook.pytest_asyncio_loop_factories303 if hook_caller.get_hookimpls():304 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)305> return super().setup()306 ^^^^^^^^^^^^^^^307308/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 309_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 310/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup311 return (yield)312 ^^^^^313nixbot/tests/conftest.py:33: in postgres_dsn314 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:315 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^316/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__317 return next(self.gen)318 ^^^^^^^^^^^^^^319nixbot/tests/support.py:327: in ephemeral_postgres320 run_sync(apply_migrations(dsn))321nixbot/tests/support.py:285: in run_sync322 return executor.submit(asyncio.run, coro).result(timeout=120)323 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^324/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result325 return self.__get_result()326 ^^^^^^^^^^^^^^^^^^^327/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result328 raise self._exception329/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run330 result = ctx.run(self.task)331 ^^^^^^^^^^^^^^^^^^332/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run333 return fn(*args, **kwargs)334 ^^^^^^^^^^^^^^^^^^^335/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run336 return runner.run(main)337 ^^^^^^^^^^^^^^^^338/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run339 return self._loop.run_until_complete(task)340 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^341/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete342 return future.result()343 ^^^^^^^^^^^^^^^344nixbot/migrations.py:99: in apply_migrations345 migrations = load_migrations()346 ^^^^^^^^^^^^^^^^^347_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 348349 def load_migrations() -> list[Migration]:350 """Load migration scripts shipped with the package, ordered by version."""351 migrations = []352 for entry in resources.files(__package__).joinpath("migrations").iterdir():353 m = _SCRIPT_RE.match(entry.name)354 if m is None:355 continue356 migrations.append(357 Migration(358 version=int(m.group(1)),359 name=m.group(2),360 sql=entry.read_text(),361 )362 )363 migrations.sort(key=lambda mig: mig.version)364 versions = [m.version for m in migrations]365 if len(set(versions)) != len(versions):366 msg = f"Duplicate migration versions: {versions}"367> raise MigrationError(msg)368E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]369370nixbot/migrations.py:67: MigrationError371_________________ ERROR at setup of test_repo_list_and_toggle __________________372[gw15] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14373374fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>375request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>376377 @pytest.hookimpl(wrapper=True)378 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:379 if (380 fixturedef.argname == "event_loop_policy"381 and fixturedef.func.__module__ != __name__382 ):383 warnings.warn(384 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),385 )386 asyncio_mode = _get_asyncio_mode(request.config)387 if not _is_asyncio_fixture_function(fixturedef.func):388 if asyncio_mode == Mode.STRICT:389 # Ignore async fixtures without explicit asyncio mark in strict mode390 # This applies to pytest_trio fixtures, for example391 return (yield)392 if not _is_coroutine_or_asyncgen(fixturedef.func):393> return (yield)394 ^^^^^395396/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 397_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 398nixbot/tests/conftest.py:33: in postgres_dsn399 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:400 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^401/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__402 return next(self.gen)403 ^^^^^^^^^^^^^^404nixbot/tests/support.py:327: in ephemeral_postgres405 run_sync(apply_migrations(dsn))406nixbot/tests/support.py:285: in run_sync407 return executor.submit(asyncio.run, coro).result(timeout=120)408 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^409/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result410 return self.__get_result()411 ^^^^^^^^^^^^^^^^^^^412/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result413 raise self._exception414/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run415 result = ctx.run(self.task)416 ^^^^^^^^^^^^^^^^^^417/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run418 return fn(*args, **kwargs)419 ^^^^^^^^^^^^^^^^^^^420/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run421 return runner.run(main)422 ^^^^^^^^^^^^^^^^423/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run424 return self._loop.run_until_complete(task)425 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^426/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete427 return future.result()428 ^^^^^^^^^^^^^^^429nixbot/migrations.py:99: in apply_migrations430 migrations = load_migrations()431 ^^^^^^^^^^^^^^^^^432_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 433434 def load_migrations() -> list[Migration]:435 """Load migration scripts shipped with the package, ordered by version."""436 migrations = []437 for entry in resources.files(__package__).joinpath("migrations").iterdir():438 m = _SCRIPT_RE.match(entry.name)439 if m is None:440 continue441 migrations.append(442 Migration(443 version=int(m.group(1)),444 name=m.group(2),445 sql=entry.read_text(),446 )447 )448 migrations.sort(key=lambda mig: mig.version)449 versions = [m.version for m in migrations]450 if len(set(versions)) != len(versions):451 msg = f"Duplicate migration versions: {versions}"452> raise MigrationError(msg)453E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]454455nixbot/migrations.py:67: MigrationError456___________________ ERROR at setup of test_repos_and_builds ____________________457[gw6] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14458459fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>460request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>461462 @pytest.hookimpl(wrapper=True)463 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:464 if (465 fixturedef.argname == "event_loop_policy"466 and fixturedef.func.__module__ != __name__467 ):468 warnings.warn(469 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),470 )471 asyncio_mode = _get_asyncio_mode(request.config)472 if not _is_asyncio_fixture_function(fixturedef.func):473 if asyncio_mode == Mode.STRICT:474 # Ignore async fixtures without explicit asyncio mark in strict mode475 # This applies to pytest_trio fixtures, for example476 return (yield)477 if not _is_coroutine_or_asyncgen(fixturedef.func):478> return (yield)479 ^^^^^480481/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 482_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 483nixbot/tests/conftest.py:33: in postgres_dsn484 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:485 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^486/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__487 return next(self.gen)488 ^^^^^^^^^^^^^^489nixbot/tests/support.py:327: in ephemeral_postgres490 run_sync(apply_migrations(dsn))491nixbot/tests/support.py:285: in run_sync492 return executor.submit(asyncio.run, coro).result(timeout=120)493 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^494/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result495 return self.__get_result()496 ^^^^^^^^^^^^^^^^^^^497/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result498 raise self._exception499/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run500 result = ctx.run(self.task)501 ^^^^^^^^^^^^^^^^^^502/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run503 return fn(*args, **kwargs)504 ^^^^^^^^^^^^^^^^^^^505/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run506 return runner.run(main)507 ^^^^^^^^^^^^^^^^508/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run509 return self._loop.run_until_complete(task)510 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^511/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete512 return future.result()513 ^^^^^^^^^^^^^^^514nixbot/migrations.py:99: in apply_migrations515 migrations = load_migrations()516 ^^^^^^^^^^^^^^^^^517_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 518519 def load_migrations() -> list[Migration]:520 """Load migration scripts shipped with the package, ordered by version."""521 migrations = []522 for entry in resources.files(__package__).joinpath("migrations").iterdir():523 m = _SCRIPT_RE.match(entry.name)524 if m is None:525 continue526 migrations.append(527 Migration(528 version=int(m.group(1)),529 name=m.group(2),530 sql=entry.read_text(),531 )532 )533 migrations.sort(key=lambda mig: mig.version)534 versions = [m.version for m in migrations]535 if len(set(versions)) != len(versions):536 msg = f"Duplicate migration versions: {versions}"537> raise MigrationError(msg)538E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]539540nixbot/migrations.py:67: MigrationError541___________ ERROR at setup of test_resume_skips_terminal_attributes ____________542[gw17] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14543544self = <Coroutine test_resume_skips_terminal_attributes>545546 def setup(self) -> None:547 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"548 if runner_fixture_id not in self.fixturenames:549 self.fixturenames.append(runner_fixture_id)550 # When loop factories are configured, resolve the loop factory551 # fixture early so that a factory variant change cascades cache552 # invalidation before any async fixture checks its cache.553 hook_caller = self.config.hook.pytest_asyncio_loop_factories554 if hook_caller.get_hookimpls():555 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)556> return super().setup()557 ^^^^^^^^^^^^^^^558559/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 560_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 561/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup562 return (yield)563 ^^^^^564nixbot/tests/conftest.py:33: in postgres_dsn565 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:566 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^567/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__568 return next(self.gen)569 ^^^^^^^^^^^^^^570nixbot/tests/support.py:327: in ephemeral_postgres571 run_sync(apply_migrations(dsn))572nixbot/tests/support.py:285: in run_sync573 return executor.submit(asyncio.run, coro).result(timeout=120)574 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^575/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result576 return self.__get_result()577 ^^^^^^^^^^^^^^^^^^^578/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result579 raise self._exception580/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run581 result = ctx.run(self.task)582 ^^^^^^^^^^^^^^^^^^583/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run584 return fn(*args, **kwargs)585 ^^^^^^^^^^^^^^^^^^^586/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run587 return runner.run(main)588 ^^^^^^^^^^^^^^^^589/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run590 return self._loop.run_until_complete(task)591 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^592/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete593 return future.result()594 ^^^^^^^^^^^^^^^595nixbot/migrations.py:99: in apply_migrations596 migrations = load_migrations()597 ^^^^^^^^^^^^^^^^^598_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 599600 def load_migrations() -> list[Migration]:601 """Load migration scripts shipped with the package, ordered by version."""602 migrations = []603 for entry in resources.files(__package__).joinpath("migrations").iterdir():604 m = _SCRIPT_RE.match(entry.name)605 if m is None:606 continue607 migrations.append(608 Migration(609 version=int(m.group(1)),610 name=m.group(2),611 sql=entry.read_text(),612 )613 )614 migrations.sort(key=lambda mig: mig.version)615 versions = [m.version for m in migrations]616 if len(set(versions)) != len(versions):617 msg = f"Duplicate migration versions: {versions}"618> raise MigrationError(msg)619E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]620621nixbot/migrations.py:67: MigrationError622_________ ERROR at setup of test_project_store_sync_and_legacy_import __________623[gw5] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14624625self = <Coroutine test_project_store_sync_and_legacy_import>626627 def setup(self) -> None:628 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"629 if runner_fixture_id not in self.fixturenames:630 self.fixturenames.append(runner_fixture_id)631 # When loop factories are configured, resolve the loop factory632 # fixture early so that a factory variant change cascades cache633 # invalidation before any async fixture checks its cache.634 hook_caller = self.config.hook.pytest_asyncio_loop_factories635 if hook_caller.get_hookimpls():636 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)637> return super().setup()638 ^^^^^^^^^^^^^^^639640/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 641_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 642/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup643 return (yield)644 ^^^^^645nixbot/tests/conftest.py:33: in postgres_dsn646 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:647 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^648/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__649 return next(self.gen)650 ^^^^^^^^^^^^^^651nixbot/tests/support.py:327: in ephemeral_postgres652 run_sync(apply_migrations(dsn))653nixbot/tests/support.py:285: in run_sync654 return executor.submit(asyncio.run, coro).result(timeout=120)655 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^656/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result657 return self.__get_result()658 ^^^^^^^^^^^^^^^^^^^659/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result660 raise self._exception661/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run662 result = ctx.run(self.task)663 ^^^^^^^^^^^^^^^^^^664/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run665 return fn(*args, **kwargs)666 ^^^^^^^^^^^^^^^^^^^667/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run668 return runner.run(main)669 ^^^^^^^^^^^^^^^^670/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run671 return self._loop.run_until_complete(task)672 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^673/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete674 return future.result()675 ^^^^^^^^^^^^^^^676nixbot/migrations.py:99: in apply_migrations677 migrations = load_migrations()678 ^^^^^^^^^^^^^^^^^679_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 680681 def load_migrations() -> list[Migration]:682 """Load migration scripts shipped with the package, ordered by version."""683 migrations = []684 for entry in resources.files(__package__).joinpath("migrations").iterdir():685 m = _SCRIPT_RE.match(entry.name)686 if m is None:687 continue688 migrations.append(689 Migration(690 version=int(m.group(1)),691 name=m.group(2),692 sql=entry.read_text(),693 )694 )695 migrations.sort(key=lambda mig: mig.version)696 versions = [m.version for m in migrations]697 if len(set(versions)) != len(versions):698 msg = f"Duplicate migration versions: {versions}"699> raise MigrationError(msg)700E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]701702nixbot/migrations.py:67: MigrationError703____________ ERROR at setup of test_chunk_args_splits_on_byte_limit ____________704[gw22] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14705706fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>707request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>708709 @pytest.hookimpl(wrapper=True)710 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:711 if (712 fixturedef.argname == "event_loop_policy"713 and fixturedef.func.__module__ != __name__714 ):715 warnings.warn(716 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),717 )718 asyncio_mode = _get_asyncio_mode(request.config)719 if not _is_asyncio_fixture_function(fixturedef.func):720 if asyncio_mode == Mode.STRICT:721 # Ignore async fixtures without explicit asyncio mark in strict mode722 # This applies to pytest_trio fixtures, for example723 return (yield)724 if not _is_coroutine_or_asyncgen(fixturedef.func):725> return (yield)726 ^^^^^727728/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 729_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 730nixbot/tests/conftest.py:33: in postgres_dsn731 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:732 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^733/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__734 return next(self.gen)735 ^^^^^^^^^^^^^^736nixbot/tests/support.py:327: in ephemeral_postgres737 run_sync(apply_migrations(dsn))738nixbot/tests/support.py:285: in run_sync739 return executor.submit(asyncio.run, coro).result(timeout=120)740 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^741/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result742 return self.__get_result()743 ^^^^^^^^^^^^^^^^^^^744/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result745 raise self._exception746/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run747 result = ctx.run(self.task)748 ^^^^^^^^^^^^^^^^^^749/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run750 return fn(*args, **kwargs)751 ^^^^^^^^^^^^^^^^^^^752/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run753 return runner.run(main)754 ^^^^^^^^^^^^^^^^755/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run756 return self._loop.run_until_complete(task)757 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^758/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete759 return future.result()760 ^^^^^^^^^^^^^^^761nixbot/migrations.py:99: in apply_migrations762 migrations = load_migrations()763 ^^^^^^^^^^^^^^^^^764_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 765766 def load_migrations() -> list[Migration]:767 """Load migration scripts shipped with the package, ordered by version."""768 migrations = []769 for entry in resources.files(__package__).joinpath("migrations").iterdir():770 m = _SCRIPT_RE.match(entry.name)771 if m is None:772 continue773 migrations.append(774 Migration(775 version=int(m.group(1)),776 name=m.group(2),777 sql=entry.read_text(),778 )779 )780 migrations.sort(key=lambda mig: mig.version)781 versions = [m.version for m in migrations]782 if len(set(versions)) != len(versions):783 msg = f"Duplicate migration versions: {versions}"784> raise MigrationError(msg)785E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]786787nixbot/migrations.py:67: MigrationError788____________________ ERROR at setup of test_full_lifecycle _____________________789[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14790791self = <Coroutine test_full_lifecycle>792793 def setup(self) -> None:794 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"795 if runner_fixture_id not in self.fixturenames:796 self.fixturenames.append(runner_fixture_id)797 # When loop factories are configured, resolve the loop factory798 # fixture early so that a factory variant change cascades cache799 # invalidation before any async fixture checks its cache.800 hook_caller = self.config.hook.pytest_asyncio_loop_factories801 if hook_caller.get_hookimpls():802 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)803> return super().setup()804 ^^^^^^^^^^^^^^^805806/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 807_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 808/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup809 return (yield)810 ^^^^^811nixbot/tests/conftest.py:33: in postgres_dsn812 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:813 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^814/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__815 return next(self.gen)816 ^^^^^^^^^^^^^^817nixbot/tests/support.py:327: in ephemeral_postgres818 run_sync(apply_migrations(dsn))819nixbot/tests/support.py:285: in run_sync820 return executor.submit(asyncio.run, coro).result(timeout=120)821 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^822/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result823 return self.__get_result()824 ^^^^^^^^^^^^^^^^^^^825/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result826 raise self._exception827/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run828 result = ctx.run(self.task)829 ^^^^^^^^^^^^^^^^^^830/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run831 return fn(*args, **kwargs)832 ^^^^^^^^^^^^^^^^^^^833/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run834 return runner.run(main)835 ^^^^^^^^^^^^^^^^836/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run837 return self._loop.run_until_complete(task)838 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^839/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete840 return future.result()841 ^^^^^^^^^^^^^^^842nixbot/migrations.py:99: in apply_migrations843 migrations = load_migrations()844 ^^^^^^^^^^^^^^^^^845_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 846847 def load_migrations() -> list[Migration]:848 """Load migration scripts shipped with the package, ordered by version."""849 migrations = []850 for entry in resources.files(__package__).joinpath("migrations").iterdir():851 m = _SCRIPT_RE.match(entry.name)852 if m is None:853 continue854 migrations.append(855 Migration(856 version=int(m.group(1)),857 name=m.group(2),858 sql=entry.read_text(),859 )860 )861 migrations.sort(key=lambda mig: mig.version)862 versions = [m.version for m in migrations]863 if len(set(versions)) != len(versions):864 msg = f"Duplicate migration versions: {versions}"865> raise MigrationError(msg)866E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]867868nixbot/migrations.py:67: MigrationError869_______ ERROR at setup of test_scheduled_worktree_id_distinct_per_effect _______870[gw7] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14871872fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>873request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>874875 @pytest.hookimpl(wrapper=True)876 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:877 if (878 fixturedef.argname == "event_loop_policy"879 and fixturedef.func.__module__ != __name__880 ):881 warnings.warn(882 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),883 )884 asyncio_mode = _get_asyncio_mode(request.config)885 if not _is_asyncio_fixture_function(fixturedef.func):886 if asyncio_mode == Mode.STRICT:887 # Ignore async fixtures without explicit asyncio mark in strict mode888 # This applies to pytest_trio fixtures, for example889 return (yield)890 if not _is_coroutine_or_asyncgen(fixturedef.func):891> return (yield)892 ^^^^^893894/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 895_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 896nixbot/tests/conftest.py:33: in postgres_dsn897 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:898 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^899/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__900 return next(self.gen)901 ^^^^^^^^^^^^^^902nixbot/tests/support.py:327: in ephemeral_postgres903 run_sync(apply_migrations(dsn))904nixbot/tests/support.py:285: in run_sync905 return executor.submit(asyncio.run, coro).result(timeout=120)906 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^907/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result908 return self.__get_result()909 ^^^^^^^^^^^^^^^^^^^910/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result911 raise self._exception912/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run913 result = ctx.run(self.task)914 ^^^^^^^^^^^^^^^^^^915/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run916 return fn(*args, **kwargs)917 ^^^^^^^^^^^^^^^^^^^918/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run919 return runner.run(main)920 ^^^^^^^^^^^^^^^^921/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run922 return self._loop.run_until_complete(task)923 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^924/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete925 return future.result()926 ^^^^^^^^^^^^^^^927nixbot/migrations.py:99: in apply_migrations928 migrations = load_migrations()929 ^^^^^^^^^^^^^^^^^930_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 931932 def load_migrations() -> list[Migration]:933 """Load migration scripts shipped with the package, ordered by version."""934 migrations = []935 for entry in resources.files(__package__).joinpath("migrations").iterdir():936 m = _SCRIPT_RE.match(entry.name)937 if m is None:938 continue939 migrations.append(940 Migration(941 version=int(m.group(1)),942 name=m.group(2),943 sql=entry.read_text(),944 )945 )946 migrations.sort(key=lambda mig: mig.version)947 versions = [m.version for m in migrations]948 if len(set(versions)) != len(versions):949 msg = f"Duplicate migration versions: {versions}"950> raise MigrationError(msg)951E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]952953nixbot/migrations.py:67: MigrationError954___________________ ERROR at setup of test_html_error_pages ____________________955[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.14956957fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>958request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>959960 @pytest.hookimpl(wrapper=True)961 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:962 if (963 fixturedef.argname == "event_loop_policy"964 and fixturedef.func.__module__ != __name__965 ):966 warnings.warn(967 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),968 )969 asyncio_mode = _get_asyncio_mode(request.config)970 if not _is_asyncio_fixture_function(fixturedef.func):971 if asyncio_mode == Mode.STRICT:972 # Ignore async fixtures without explicit asyncio mark in strict mode973 # This applies to pytest_trio fixtures, for example974 return (yield)975 if not _is_coroutine_or_asyncgen(fixturedef.func):976> return (yield)977 ^^^^^978979/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 980_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 981nixbot/tests/conftest.py:33: in postgres_dsn982 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:983 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^984/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__985 return next(self.gen)986 ^^^^^^^^^^^^^^987nixbot/tests/support.py:327: in ephemeral_postgres988 run_sync(apply_migrations(dsn))989nixbot/tests/support.py:285: in run_sync990 return executor.submit(asyncio.run, coro).result(timeout=120)991 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^992/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result993 return self.__get_result()994 ^^^^^^^^^^^^^^^^^^^995/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result996 raise self._exception997/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run998 result = ctx.run(self.task)999 ^^^^^^^^^^^^^^^^^^1000/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1001 return fn(*args, **kwargs)1002 ^^^^^^^^^^^^^^^^^^^1003/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1004 return runner.run(main)1005 ^^^^^^^^^^^^^^^^1006/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1007 return self._loop.run_until_complete(task)1008 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1009/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1010 return future.result()1011 ^^^^^^^^^^^^^^^1012nixbot/migrations.py:99: in apply_migrations1013 migrations = load_migrations()1014 ^^^^^^^^^^^^^^^^^1015_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10161017 def load_migrations() -> list[Migration]:1018 """Load migration scripts shipped with the package, ordered by version."""1019 migrations = []1020 for entry in resources.files(__package__).joinpath("migrations").iterdir():1021 m = _SCRIPT_RE.match(entry.name)1022 if m is None:1023 continue1024 migrations.append(1025 Migration(1026 version=int(m.group(1)),1027 name=m.group(2),1028 sql=entry.read_text(),1029 )1030 )1031 migrations.sort(key=lambda mig: mig.version)1032 versions = [m.version for m in migrations]1033 if len(set(versions)) != len(versions):1034 msg = f"Duplicate migration versions: {versions}"1035> raise MigrationError(msg)1036E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]10371038nixbot/migrations.py:67: MigrationError1039_________________ ERROR at setup of test_finished_attrs_cursor _________________1040[gw6] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1410411042request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>1043tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')10441045 @pytest.fixture(scope="module")1046 def postgres_dsn(1047 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1048 ) -> Iterator[str]:1049 if shutil.which("initdb") is None:1050 pytest.skip("postgresql not available")1051 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1052> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1053 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^10541055nixbot/tests/conftest.py:33: 1056_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1057/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1058 return next(self.gen)1059 ^^^^^^^^^^^^^^1060nixbot/tests/support.py:327: in ephemeral_postgres1061 run_sync(apply_migrations(dsn))1062nixbot/tests/support.py:285: in run_sync1063 return executor.submit(asyncio.run, coro).result(timeout=120)1064 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1065/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1066 return self.__get_result()1067 ^^^^^^^^^^^^^^^^^^^1068/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1069 raise self._exception1070/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1071 result = ctx.run(self.task)1072 ^^^^^^^^^^^^^^^^^^1073/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1074 return fn(*args, **kwargs)1075 ^^^^^^^^^^^^^^^^^^^1076/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1077 return runner.run(main)1078 ^^^^^^^^^^^^^^^^1079/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1080 return self._loop.run_until_complete(task)1081 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1082/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1083 return future.result()1084 ^^^^^^^^^^^^^^^1085nixbot/migrations.py:99: in apply_migrations1086 migrations = load_migrations()1087 ^^^^^^^^^^^^^^^^^1088_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10891090 def load_migrations() -> list[Migration]:1091 """Load migration scripts shipped with the package, ordered by version."""1092 migrations = []1093 for entry in resources.files(__package__).joinpath("migrations").iterdir():1094 m = _SCRIPT_RE.match(entry.name)1095 if m is None:1096 continue1097 migrations.append(1098 Migration(1099 version=int(m.group(1)),1100 name=m.group(2),1101 sql=entry.read_text(),1102 )1103 )1104 migrations.sort(key=lambda mig: mig.version)1105 versions = [m.version for m in migrations]1106 if len(set(versions)) != len(versions):1107 msg = f"Duplicate migration versions: {versions}"1108> raise MigrationError(msg)1109E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]11101111nixbot/migrations.py:67: MigrationError1112__________________ ERROR at setup of test_build_list_and_view __________________1113[gw15] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1411141115request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>1116tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=<pluggy._tracing.TagT...96e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all')11171118 @pytest.fixture(scope="module")1119 def postgres_dsn(1120 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1121 ) -> Iterator[str]:1122 if shutil.which("initdb") is None:1123 pytest.skip("postgresql not available")1124 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1125> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1126 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^11271128nixbot/tests/conftest.py:33: 1129_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1130/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1131 return next(self.gen)1132 ^^^^^^^^^^^^^^1133nixbot/tests/support.py:327: in ephemeral_postgres1134 run_sync(apply_migrations(dsn))1135nixbot/tests/support.py:285: in run_sync1136 return executor.submit(asyncio.run, coro).result(timeout=120)1137 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1138/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1139 return self.__get_result()1140 ^^^^^^^^^^^^^^^^^^^1141/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1142 raise self._exception1143/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1144 result = ctx.run(self.task)1145 ^^^^^^^^^^^^^^^^^^1146/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1147 return fn(*args, **kwargs)1148 ^^^^^^^^^^^^^^^^^^^1149/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1150 return runner.run(main)1151 ^^^^^^^^^^^^^^^^1152/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1153 return self._loop.run_until_complete(task)1154 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1155/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1156 return future.result()1157 ^^^^^^^^^^^^^^^1158nixbot/migrations.py:99: in apply_migrations1159 migrations = load_migrations()1160 ^^^^^^^^^^^^^^^^^1161_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11621163 def load_migrations() -> list[Migration]:1164 """Load migration scripts shipped with the package, ordered by version."""1165 migrations = []1166 for entry in resources.files(__package__).joinpath("migrations").iterdir():1167 m = _SCRIPT_RE.match(entry.name)1168 if m is None:1169 continue1170 migrations.append(1171 Migration(1172 version=int(m.group(1)),1173 name=m.group(2),1174 sql=entry.read_text(),1175 )1176 )1177 migrations.sort(key=lambda mig: mig.version)1178 versions = [m.version for m in migrations]1179 if len(set(versions)) != len(versions):1180 msg = f"Duplicate migration versions: {versions}"1181> raise MigrationError(msg)1182E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]11831184nixbot/migrations.py:67: MigrationError1185__ ERROR at setup of test_replace_schedules_tolerates_duplicate_effect_names ___1186[gw18] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1411871188self = <Coroutine test_replace_schedules_tolerates_duplicate_effect_names>11891190 def setup(self) -> None:1191 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1192 if runner_fixture_id not in self.fixturenames:1193 self.fixturenames.append(runner_fixture_id)1194 # When loop factories are configured, resolve the loop factory1195 # fixture early so that a factory variant change cascades cache1196 # invalidation before any async fixture checks its cache.1197 hook_caller = self.config.hook.pytest_asyncio_loop_factories1198 if hook_caller.get_hookimpls():1199 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1200> return super().setup()1201 ^^^^^^^^^^^^^^^12021203/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1204_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1205nixbot/tests/conftest.py:33: in postgres_dsn1206 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1207 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1208/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1209 return next(self.gen)1210 ^^^^^^^^^^^^^^1211nixbot/tests/support.py:327: in ephemeral_postgres1212 run_sync(apply_migrations(dsn))1213nixbot/tests/support.py:285: in run_sync1214 return executor.submit(asyncio.run, coro).result(timeout=120)1215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1216/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1217 return self.__get_result()1218 ^^^^^^^^^^^^^^^^^^^1219/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1220 raise self._exception1221/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1222 result = ctx.run(self.task)1223 ^^^^^^^^^^^^^^^^^^1224/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1225 return fn(*args, **kwargs)1226 ^^^^^^^^^^^^^^^^^^^1227/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1228 return runner.run(main)1229 ^^^^^^^^^^^^^^^^1230/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1231 return self._loop.run_until_complete(task)1232 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1233/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1234 return future.result()1235 ^^^^^^^^^^^^^^^1236nixbot/migrations.py:99: in apply_migrations1237 migrations = load_migrations()1238 ^^^^^^^^^^^^^^^^^1239_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12401241 def load_migrations() -> list[Migration]:1242 """Load migration scripts shipped with the package, ordered by version."""1243 migrations = []1244 for entry in resources.files(__package__).joinpath("migrations").iterdir():1245 m = _SCRIPT_RE.match(entry.name)1246 if m is None:1247 continue1248 migrations.append(1249 Migration(1250 version=int(m.group(1)),1251 name=m.group(2),1252 sql=entry.read_text(),1253 )1254 )1255 migrations.sort(key=lambda mig: mig.version)1256 versions = [m.version for m in migrations]1257 if len(set(versions)) != len(versions):1258 msg = f"Duplicate migration versions: {versions}"1259> raise MigrationError(msg)1260E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]12611262nixbot/migrations.py:67: MigrationError1263___________ ERROR at setup of test_permission_denied_records_reason ____________1264[gw16] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1412651266self = <Coroutine test_permission_denied_records_reason>12671268 def setup(self) -> None:1269 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1270 if runner_fixture_id not in self.fixturenames:1271 self.fixturenames.append(runner_fixture_id)1272 # When loop factories are configured, resolve the loop factory1273 # fixture early so that a factory variant change cascades cache1274 # invalidation before any async fixture checks its cache.1275 hook_caller = self.config.hook.pytest_asyncio_loop_factories1276 if hook_caller.get_hookimpls():1277 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1278> return super().setup()1279 ^^^^^^^^^^^^^^^12801281/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1282_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1283nixbot/tests/conftest.py:33: in postgres_dsn1284 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1285 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1286/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1287 return next(self.gen)1288 ^^^^^^^^^^^^^^1289nixbot/tests/support.py:327: in ephemeral_postgres1290 run_sync(apply_migrations(dsn))1291nixbot/tests/support.py:285: in run_sync1292 return executor.submit(asyncio.run, coro).result(timeout=120)1293 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1294/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1295 return self.__get_result()1296 ^^^^^^^^^^^^^^^^^^^1297/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1298 raise self._exception1299/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1300 result = ctx.run(self.task)1301 ^^^^^^^^^^^^^^^^^^1302/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1303 return fn(*args, **kwargs)1304 ^^^^^^^^^^^^^^^^^^^1305/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1306 return runner.run(main)1307 ^^^^^^^^^^^^^^^^1308/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1309 return self._loop.run_until_complete(task)1310 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1311/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1312 return future.result()1313 ^^^^^^^^^^^^^^^1314nixbot/migrations.py:99: in apply_migrations1315 migrations = load_migrations()1316 ^^^^^^^^^^^^^^^^^1317_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13181319 def load_migrations() -> list[Migration]:1320 """Load migration scripts shipped with the package, ordered by version."""1321 migrations = []1322 for entry in resources.files(__package__).joinpath("migrations").iterdir():1323 m = _SCRIPT_RE.match(entry.name)1324 if m is None:1325 continue1326 migrations.append(1327 Migration(1328 version=int(m.group(1)),1329 name=m.group(2),1330 sql=entry.read_text(),1331 )1332 )1333 migrations.sort(key=lambda mig: mig.version)1334 versions = [m.version for m in migrations]1335 if len(set(versions)) != len(versions):1336 msg = f"Duplicate migration versions: {versions}"1337> raise MigrationError(msg)1338E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]13391340nixbot/migrations.py:67: MigrationError1341_________________ ERROR at setup of test_settle_already_built __________________1342[gw17] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1413431344self = <Coroutine test_settle_already_built>13451346 def setup(self) -> None:1347 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1348 if runner_fixture_id not in self.fixturenames:1349 self.fixturenames.append(runner_fixture_id)1350 # When loop factories are configured, resolve the loop factory1351 # fixture early so that a factory variant change cascades cache1352 # invalidation before any async fixture checks its cache.1353 hook_caller = self.config.hook.pytest_asyncio_loop_factories1354 if hook_caller.get_hookimpls():1355 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1356> return super().setup()1357 ^^^^^^^^^^^^^^^13581359/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1360_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1361nixbot/tests/conftest.py:33: in postgres_dsn1362 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1363 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1364/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1365 return next(self.gen)1366 ^^^^^^^^^^^^^^1367nixbot/tests/support.py:327: in ephemeral_postgres1368 run_sync(apply_migrations(dsn))1369nixbot/tests/support.py:285: in run_sync1370 return executor.submit(asyncio.run, coro).result(timeout=120)1371 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1372/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1373 return self.__get_result()1374 ^^^^^^^^^^^^^^^^^^^1375/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1376 raise self._exception1377/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1378 result = ctx.run(self.task)1379 ^^^^^^^^^^^^^^^^^^1380/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1381 return fn(*args, **kwargs)1382 ^^^^^^^^^^^^^^^^^^^1383/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1384 return runner.run(main)1385 ^^^^^^^^^^^^^^^^1386/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1387 return self._loop.run_until_complete(task)1388 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1389/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1390 return future.result()1391 ^^^^^^^^^^^^^^^1392nixbot/migrations.py:99: in apply_migrations1393 migrations = load_migrations()1394 ^^^^^^^^^^^^^^^^^1395_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13961397 def load_migrations() -> list[Migration]:1398 """Load migration scripts shipped with the package, ordered by version."""1399 migrations = []1400 for entry in resources.files(__package__).joinpath("migrations").iterdir():1401 m = _SCRIPT_RE.match(entry.name)1402 if m is None:1403 continue1404 migrations.append(1405 Migration(1406 version=int(m.group(1)),1407 name=m.group(2),1408 sql=entry.read_text(),1409 )1410 )1411 migrations.sort(key=lambda mig: mig.version)1412 versions = [m.version for m in migrations]1413 if len(set(versions)) != len(versions):1414 msg = f"Duplicate migration versions: {versions}"1415> raise MigrationError(msg)1416E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]14171418nixbot/migrations.py:67: MigrationError1419_____________ ERROR at setup of test_parse_path_info_both_formats ______________1420[gw22] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1414211422request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>1423tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw22'), _trace=<pluggy._tracing.TagT...96e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw22'), _retention_count=3, _retention_policy='all')14241425 @pytest.fixture(scope="module")1426 def postgres_dsn(1427 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1428 ) -> Iterator[str]:1429 if shutil.which("initdb") is None:1430 pytest.skip("postgresql not available")1431 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1432> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1433 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^14341435nixbot/tests/conftest.py:33: 1436_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1437/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1438 return next(self.gen)1439 ^^^^^^^^^^^^^^1440nixbot/tests/support.py:327: in ephemeral_postgres1441 run_sync(apply_migrations(dsn))1442nixbot/tests/support.py:285: in run_sync1443 return executor.submit(asyncio.run, coro).result(timeout=120)1444 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1445/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1446 return self.__get_result()1447 ^^^^^^^^^^^^^^^^^^^1448/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1449 raise self._exception1450/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1451 result = ctx.run(self.task)1452 ^^^^^^^^^^^^^^^^^^1453/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1454 return fn(*args, **kwargs)1455 ^^^^^^^^^^^^^^^^^^^1456/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1457 return runner.run(main)1458 ^^^^^^^^^^^^^^^^1459/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1460 return self._loop.run_until_complete(task)1461 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1462/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1463 return future.result()1464 ^^^^^^^^^^^^^^^1465nixbot/migrations.py:99: in apply_migrations1466 migrations = load_migrations()1467 ^^^^^^^^^^^^^^^^^1468_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14691470 def load_migrations() -> list[Migration]:1471 """Load migration scripts shipped with the package, ordered by version."""1472 migrations = []1473 for entry in resources.files(__package__).joinpath("migrations").iterdir():1474 m = _SCRIPT_RE.match(entry.name)1475 if m is None:1476 continue1477 migrations.append(1478 Migration(1479 version=int(m.group(1)),1480 name=m.group(2),1481 sql=entry.read_text(),1482 )1483 )1484 migrations.sort(key=lambda mig: mig.version)1485 versions = [m.version for m in migrations]1486 if len(set(versions)) != len(versions):1487 msg = f"Duplicate migration versions: {versions}"1488> raise MigrationError(msg)1489E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]14901491nixbot/migrations.py:67: MigrationError1492___________ ERROR at setup of test_failed_migration_error_not_masked ___________1493[gw11] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1414941495self = <Coroutine test_failed_migration_error_not_masked>14961497 def setup(self) -> None:1498 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1499 if runner_fixture_id not in self.fixturenames:1500 self.fixturenames.append(runner_fixture_id)1501 # When loop factories are configured, resolve the loop factory1502 # fixture early so that a factory variant change cascades cache1503 # invalidation before any async fixture checks its cache.1504 hook_caller = self.config.hook.pytest_asyncio_loop_factories1505 if hook_caller.get_hookimpls():1506 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1507> return super().setup()1508 ^^^^^^^^^^^^^^^15091510/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1511_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1512nixbot/tests/conftest.py:33: in postgres_dsn1513 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1514 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1515/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1516 return next(self.gen)1517 ^^^^^^^^^^^^^^1518nixbot/tests/support.py:327: in ephemeral_postgres1519 run_sync(apply_migrations(dsn))1520nixbot/tests/support.py:285: in run_sync1521 return executor.submit(asyncio.run, coro).result(timeout=120)1522 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1523/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1524 return self.__get_result()1525 ^^^^^^^^^^^^^^^^^^^1526/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1527 raise self._exception1528/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1529 result = ctx.run(self.task)1530 ^^^^^^^^^^^^^^^^^^1531/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1532 return fn(*args, **kwargs)1533 ^^^^^^^^^^^^^^^^^^^1534/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1535 return runner.run(main)1536 ^^^^^^^^^^^^^^^^1537/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1538 return self._loop.run_until_complete(task)1539 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1540/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1541 return future.result()1542 ^^^^^^^^^^^^^^^1543nixbot/migrations.py:99: in apply_migrations1544 migrations = load_migrations()1545 ^^^^^^^^^^^^^^^^^1546_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15471548 def load_migrations() -> list[Migration]:1549 """Load migration scripts shipped with the package, ordered by version."""1550 migrations = []1551 for entry in resources.files(__package__).joinpath("migrations").iterdir():1552 m = _SCRIPT_RE.match(entry.name)1553 if m is None:1554 continue1555 migrations.append(1556 Migration(1557 version=int(m.group(1)),1558 name=m.group(2),1559 sql=entry.read_text(),1560 )1561 )1562 migrations.sort(key=lambda mig: mig.version)1563 versions = [m.version for m in migrations]1564 if len(set(versions)) != len(versions):1565 msg = f"Duplicate migration versions: {versions}"1566> raise MigrationError(msg)1567E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]15681569nixbot/migrations.py:67: MigrationError1570______________ ERROR at setup of test_anonymous_sees_public_only _______________1571[gw13] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1415721573fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1574request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>15751576 @pytest.hookimpl(wrapper=True)1577 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1578 if (1579 fixturedef.argname == "event_loop_policy"1580 and fixturedef.func.__module__ != __name__1581 ):1582 warnings.warn(1583 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1584 )1585 asyncio_mode = _get_asyncio_mode(request.config)1586 if not _is_asyncio_fixture_function(fixturedef.func):1587 if asyncio_mode == Mode.STRICT:1588 # Ignore async fixtures without explicit asyncio mark in strict mode1589 # This applies to pytest_trio fixtures, for example1590 return (yield)1591 if not _is_coroutine_or_asyncgen(fixturedef.func):1592> return (yield)1593 ^^^^^15941595/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1596_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1597nixbot/tests/conftest.py:33: in postgres_dsn1598 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1599 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1600/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1601 return next(self.gen)1602 ^^^^^^^^^^^^^^1603nixbot/tests/support.py:327: in ephemeral_postgres1604 run_sync(apply_migrations(dsn))1605nixbot/tests/support.py:285: in run_sync1606 return executor.submit(asyncio.run, coro).result(timeout=120)1607 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1608/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1609 return self.__get_result()1610 ^^^^^^^^^^^^^^^^^^^1611/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1612 raise self._exception1613/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1614 result = ctx.run(self.task)1615 ^^^^^^^^^^^^^^^^^^1616/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1617 return fn(*args, **kwargs)1618 ^^^^^^^^^^^^^^^^^^^1619/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1620 return runner.run(main)1621 ^^^^^^^^^^^^^^^^1622/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1623 return self._loop.run_until_complete(task)1624 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1625/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1626 return future.result()1627 ^^^^^^^^^^^^^^^1628nixbot/migrations.py:99: in apply_migrations1629 migrations = load_migrations()1630 ^^^^^^^^^^^^^^^^^1631_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16321633 def load_migrations() -> list[Migration]:1634 """Load migration scripts shipped with the package, ordered by version."""1635 migrations = []1636 for entry in resources.files(__package__).joinpath("migrations").iterdir():1637 m = _SCRIPT_RE.match(entry.name)1638 if m is None:1639 continue1640 migrations.append(1641 Migration(1642 version=int(m.group(1)),1643 name=m.group(2),1644 sql=entry.read_text(),1645 )1646 )1647 migrations.sort(key=lambda mig: mig.version)1648 versions = [m.version for m in migrations]1649 if len(set(versions)) != len(versions):1650 msg = f"Duplicate migration versions: {versions}"1651> raise MigrationError(msg)1652E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]16531654nixbot/migrations.py:67: MigrationError1655______ ERROR at setup of test_legacy_import_runs_despite_pull_based_rows _______1656[gw5] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1416571658self = <Coroutine test_legacy_import_runs_despite_pull_based_rows>16591660 def setup(self) -> None:1661 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1662 if runner_fixture_id not in self.fixturenames:1663 self.fixturenames.append(runner_fixture_id)1664 # When loop factories are configured, resolve the loop factory1665 # fixture early so that a factory variant change cascades cache1666 # invalidation before any async fixture checks its cache.1667 hook_caller = self.config.hook.pytest_asyncio_loop_factories1668 if hook_caller.get_hookimpls():1669 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1670> return super().setup()1671 ^^^^^^^^^^^^^^^16721673/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1674_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1675nixbot/tests/conftest.py:33: in postgres_dsn1676 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1677 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1678/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1679 return next(self.gen)1680 ^^^^^^^^^^^^^^1681nixbot/tests/support.py:327: in ephemeral_postgres1682 run_sync(apply_migrations(dsn))1683nixbot/tests/support.py:285: in run_sync1684 return executor.submit(asyncio.run, coro).result(timeout=120)1685 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1686/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1687 return self.__get_result()1688 ^^^^^^^^^^^^^^^^^^^1689/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1690 raise self._exception1691/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1692 result = ctx.run(self.task)1693 ^^^^^^^^^^^^^^^^^^1694/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1695 return fn(*args, **kwargs)1696 ^^^^^^^^^^^^^^^^^^^1697/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1698 return runner.run(main)1699 ^^^^^^^^^^^^^^^^1700/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1701 return self._loop.run_until_complete(task)1702 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1703/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1704 return future.result()1705 ^^^^^^^^^^^^^^^1706nixbot/migrations.py:99: in apply_migrations1707 migrations = load_migrations()1708 ^^^^^^^^^^^^^^^^^1709_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17101711 def load_migrations() -> list[Migration]:1712 """Load migration scripts shipped with the package, ordered by version."""1713 migrations = []1714 for entry in resources.files(__package__).joinpath("migrations").iterdir():1715 m = _SCRIPT_RE.match(entry.name)1716 if m is None:1717 continue1718 migrations.append(1719 Migration(1720 version=int(m.group(1)),1721 name=m.group(2),1722 sql=entry.read_text(),1723 )1724 )1725 migrations.sort(key=lambda mig: mig.version)1726 versions = [m.version for m in migrations]1727 if len(set(versions)) != len(versions):1728 msg = f"Duplicate migration versions: {versions}"1729> raise MigrationError(msg)1730E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]17311732nixbot/migrations.py:67: MigrationError1733__________________ ERROR at setup of test_failure_aggregation __________________1734[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1417351736self = <Coroutine test_failure_aggregation>17371738 def setup(self) -> None:1739 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1740 if runner_fixture_id not in self.fixturenames:1741 self.fixturenames.append(runner_fixture_id)1742 # When loop factories are configured, resolve the loop factory1743 # fixture early so that a factory variant change cascades cache1744 # invalidation before any async fixture checks its cache.1745 hook_caller = self.config.hook.pytest_asyncio_loop_factories1746 if hook_caller.get_hookimpls():1747 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1748> return super().setup()1749 ^^^^^^^^^^^^^^^17501751/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1752_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1753nixbot/tests/conftest.py:33: in postgres_dsn1754 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1755 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1756/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1757 return next(self.gen)1758 ^^^^^^^^^^^^^^1759nixbot/tests/support.py:327: in ephemeral_postgres1760 run_sync(apply_migrations(dsn))1761nixbot/tests/support.py:285: in run_sync1762 return executor.submit(asyncio.run, coro).result(timeout=120)1763 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1764/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1765 return self.__get_result()1766 ^^^^^^^^^^^^^^^^^^^1767/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1768 raise self._exception1769/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1770 result = ctx.run(self.task)1771 ^^^^^^^^^^^^^^^^^^1772/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1773 return fn(*args, **kwargs)1774 ^^^^^^^^^^^^^^^^^^^1775/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1776 return runner.run(main)1777 ^^^^^^^^^^^^^^^^1778/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1779 return self._loop.run_until_complete(task)1780 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1781/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1782 return future.result()1783 ^^^^^^^^^^^^^^^1784nixbot/migrations.py:99: in apply_migrations1785 migrations = load_migrations()1786 ^^^^^^^^^^^^^^^^^1787_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17881789 def load_migrations() -> list[Migration]:1790 """Load migration scripts shipped with the package, ordered by version."""1791 migrations = []1792 for entry in resources.files(__package__).joinpath("migrations").iterdir():1793 m = _SCRIPT_RE.match(entry.name)1794 if m is None:1795 continue1796 migrations.append(1797 Migration(1798 version=int(m.group(1)),1799 name=m.group(2),1800 sql=entry.read_text(),1801 )1802 )1803 migrations.sort(key=lambda mig: mig.version)1804 versions = [m.version for m in migrations]1805 if len(set(versions)) != len(versions):1806 msg = f"Duplicate migration versions: {versions}"1807> raise MigrationError(msg)1808E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]18091810nixbot/migrations.py:67: MigrationError1811_______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______1812[gw7] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1418131814request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>1815tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')18161817 @pytest.fixture(scope="module")1818 def postgres_dsn(1819 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1820 ) -> Iterator[str]:1821 if shutil.which("initdb") is None:1822 pytest.skip("postgresql not available")1823 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1824> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1825 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^18261827nixbot/tests/conftest.py:33: 1828_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1829/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1830 return next(self.gen)1831 ^^^^^^^^^^^^^^1832nixbot/tests/support.py:327: in ephemeral_postgres1833 run_sync(apply_migrations(dsn))1834nixbot/tests/support.py:285: in run_sync1835 return executor.submit(asyncio.run, coro).result(timeout=120)1836 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1837/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1838 return self.__get_result()1839 ^^^^^^^^^^^^^^^^^^^1840/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1841 raise self._exception1842/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1843 result = ctx.run(self.task)1844 ^^^^^^^^^^^^^^^^^^1845/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1846 return fn(*args, **kwargs)1847 ^^^^^^^^^^^^^^^^^^^1848/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1849 return runner.run(main)1850 ^^^^^^^^^^^^^^^^1851/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1852 return self._loop.run_until_complete(task)1853 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1854/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1855 return future.result()1856 ^^^^^^^^^^^^^^^1857nixbot/migrations.py:99: in apply_migrations1858 migrations = load_migrations()1859 ^^^^^^^^^^^^^^^^^1860_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 18611862 def load_migrations() -> list[Migration]:1863 """Load migration scripts shipped with the package, ordered by version."""1864 migrations = []1865 for entry in resources.files(__package__).joinpath("migrations").iterdir():1866 m = _SCRIPT_RE.match(entry.name)1867 if m is None:1868 continue1869 migrations.append(1870 Migration(1871 version=int(m.group(1)),1872 name=m.group(2),1873 sql=entry.read_text(),1874 )1875 )1876 migrations.sort(key=lambda mig: mig.version)1877 versions = [m.version for m in migrations]1878 if len(set(versions)) != len(versions):1879 msg = f"Duplicate migration versions: {versions}"1880> raise MigrationError(msg)1881E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]18821883nixbot/migrations.py:67: MigrationError1884______________ ERROR at setup of test_api_strips_ansi_from_errors ______________1885[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1418861887request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1888tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')18891890 @pytest.fixture(scope="module")1891 def postgres_dsn(1892 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1893 ) -> Iterator[str]:1894 if shutil.which("initdb") is None:1895 pytest.skip("postgresql not available")1896 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1897> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1898 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^18991900nixbot/tests/conftest.py:33: 1901_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1902/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1903 return next(self.gen)1904 ^^^^^^^^^^^^^^1905nixbot/tests/support.py:327: in ephemeral_postgres1906 run_sync(apply_migrations(dsn))1907nixbot/tests/support.py:285: in run_sync1908 return executor.submit(asyncio.run, coro).result(timeout=120)1909 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1910/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1911 return self.__get_result()1912 ^^^^^^^^^^^^^^^^^^^1913/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1914 raise self._exception1915/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1916 result = ctx.run(self.task)1917 ^^^^^^^^^^^^^^^^^^1918/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1919 return fn(*args, **kwargs)1920 ^^^^^^^^^^^^^^^^^^^1921/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1922 return runner.run(main)1923 ^^^^^^^^^^^^^^^^1924/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1925 return self._loop.run_until_complete(task)1926 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1927/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1928 return future.result()1929 ^^^^^^^^^^^^^^^1930nixbot/migrations.py:99: in apply_migrations1931 migrations = load_migrations()1932 ^^^^^^^^^^^^^^^^^1933_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19341935 def load_migrations() -> list[Migration]:1936 """Load migration scripts shipped with the package, ordered by version."""1937 migrations = []1938 for entry in resources.files(__package__).joinpath("migrations").iterdir():1939 m = _SCRIPT_RE.match(entry.name)1940 if m is None:1941 continue1942 migrations.append(1943 Migration(1944 version=int(m.group(1)),1945 name=m.group(2),1946 sql=entry.read_text(),1947 )1948 )1949 migrations.sort(key=lambda mig: mig.version)1950 versions = [m.version for m in migrations]1951 if len(set(versions)) != len(versions):1952 msg = f"Duplicate migration versions: {versions}"1953> raise MigrationError(msg)1954E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]19551956nixbot/migrations.py:67: MigrationError1957_________________ ERROR at setup of test_build_restart_cancel __________________1958[gw15] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.1419591960request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>1961tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=<pluggy._tracing.TagT...96e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all')19621963 @pytest.fixture(scope="module")1964 def postgres_dsn(1965 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1966 ) -> Iterator[str]:1967 if shutil.which("initdb") is None:1968 pytest.skip("postgresql not available")1969 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1970> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1971 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^19721973nixbot/tests/conftest.py:33: 1974_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1975/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1976 return next(self.gen)1977 ^^^^^^^^^^^^^^1978nixbot/tests/support.py:327: in ephemeral_postgres1979 run_sync(apply_migrations(dsn))1980nixbot/tests/support.py:285: in run_sync1981 return executor.submit(asyncio.run, coro).result(timeout=120)1982 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1983/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1984 return self.__get_result()1985 ^^^^^^^^^^^^^^^^^^^1986/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1987 raise self._exception1988/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1989 result = ctx.run(self.task)1990 ^^^^^^^^^^^^^^^^^^1991/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1992 return fn(*args, **kwargs)1993 ^^^^^^^^^^^^^^^^^^^1994/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1995 return runner.run(main)1996 ^^^^^^^^^^^^^^^^1997/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1998 return self._loop.run_until_complete(task)1999 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2000/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_completeloading 21,667 hidden lines…
23668 migrations = []23669 for entry in resources.files(__package__).joinpath("migrations").iterdir():23670 m = _SCRIPT_RE.match(entry.name)23671 if m is None:23672 continue23673 migrations.append(23674 Migration(23675 version=int(m.group(1)),23676 name=m.group(2),23677 sql=entry.read_text(),23678 )23679 )23680 migrations.sort(key=lambda mig: mig.version)23681 versions = [m.version for m in migrations]23682 if len(set(versions)) != len(versions):23683 msg = f"Duplicate migration versions: {versions}"23684> raise MigrationError(msg)23685E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2368623687nixbot/migrations.py:67: MigrationError23688______ ERROR at setup of test_reuse_for_default_branch_push_runs_effects _______23689[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142369023691self = <Coroutine test_reuse_for_default_branch_push_runs_effects>2369223693 def setup(self) -> None:23694 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23695 if runner_fixture_id not in self.fixturenames:23696 self.fixturenames.append(runner_fixture_id)23697 # When loop factories are configured, resolve the loop factory23698 # fixture early so that a factory variant change cascades cache23699 # invalidation before any async fixture checks its cache.23700 hook_caller = self.config.hook.pytest_asyncio_loop_factories23701 if hook_caller.get_hookimpls():23702 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23703> return super().setup()23704 ^^^^^^^^^^^^^^^2370523706/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23707_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23708nixbot/tests/conftest.py:33: in postgres_dsn23709 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23710 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23711/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23712 return next(self.gen)23713 ^^^^^^^^^^^^^^23714nixbot/tests/support.py:327: in ephemeral_postgres23715 run_sync(apply_migrations(dsn))23716nixbot/tests/support.py:285: in run_sync23717 return executor.submit(asyncio.run, coro).result(timeout=120)23718 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23719/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23720 return self.__get_result()23721 ^^^^^^^^^^^^^^^^^^^23722/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23723 raise self._exception23724/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23725 result = ctx.run(self.task)23726 ^^^^^^^^^^^^^^^^^^23727/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23728 return fn(*args, **kwargs)23729 ^^^^^^^^^^^^^^^^^^^23730/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23731 return runner.run(main)23732 ^^^^^^^^^^^^^^^^23733/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23734 return self._loop.run_until_complete(task)23735 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23736/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23737 return future.result()23738 ^^^^^^^^^^^^^^^23739nixbot/migrations.py:99: in apply_migrations23740 migrations = load_migrations()23741 ^^^^^^^^^^^^^^^^^23742_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2374323744 def load_migrations() -> list[Migration]:23745 """Load migration scripts shipped with the package, ordered by version."""23746 migrations = []23747 for entry in resources.files(__package__).joinpath("migrations").iterdir():23748 m = _SCRIPT_RE.match(entry.name)23749 if m is None:23750 continue23751 migrations.append(23752 Migration(23753 version=int(m.group(1)),23754 name=m.group(2),23755 sql=entry.read_text(),23756 )23757 )23758 migrations.sort(key=lambda mig: mig.version)23759 versions = [m.version for m in migrations]23760 if len(set(versions)) != len(versions):23761 msg = f"Duplicate migration versions: {versions}"23762> raise MigrationError(msg)23763E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2376423765nixbot/migrations.py:67: MigrationError23766__________ ERROR at setup of test_event_broker_pushes_status_changes ___________23767[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142376823769request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23770tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2377123772 @pytest.fixture(scope="module")23773 def postgres_dsn(23774 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23775 ) -> Iterator[str]:23776 if shutil.which("initdb") is None:23777 pytest.skip("postgresql not available")23778 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23779> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23780 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2378123782nixbot/tests/conftest.py:33: 23783_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23784/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23785 return next(self.gen)23786 ^^^^^^^^^^^^^^23787nixbot/tests/support.py:327: in ephemeral_postgres23788 run_sync(apply_migrations(dsn))23789nixbot/tests/support.py:285: in run_sync23790 return executor.submit(asyncio.run, coro).result(timeout=120)23791 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23792/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23793 return self.__get_result()23794 ^^^^^^^^^^^^^^^^^^^23795/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23796 raise self._exception23797/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23798 result = ctx.run(self.task)23799 ^^^^^^^^^^^^^^^^^^23800/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23801 return fn(*args, **kwargs)23802 ^^^^^^^^^^^^^^^^^^^23803/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23804 return runner.run(main)23805 ^^^^^^^^^^^^^^^^23806/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23807 return self._loop.run_until_complete(task)23808 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23809/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23810 return future.result()23811 ^^^^^^^^^^^^^^^23812nixbot/migrations.py:99: in apply_migrations23813 migrations = load_migrations()23814 ^^^^^^^^^^^^^^^^^23815_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2381623817 def load_migrations() -> list[Migration]:23818 """Load migration scripts shipped with the package, ordered by version."""23819 migrations = []23820 for entry in resources.files(__package__).joinpath("migrations").iterdir():23821 m = _SCRIPT_RE.match(entry.name)23822 if m is None:23823 continue23824 migrations.append(23825 Migration(23826 version=int(m.group(1)),23827 name=m.group(2),23828 sql=entry.read_text(),23829 )23830 )23831 migrations.sort(key=lambda mig: mig.version)23832 versions = [m.version for m in migrations]23833 if len(set(versions)) != len(versions):23834 msg = f"Duplicate migration versions: {versions}"23835> raise MigrationError(msg)23836E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2383723838nixbot/migrations.py:67: MigrationError23839______ ERROR at setup of test_reuse_replays_effect_statuses_to_new_commit ______23840[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142384123842self = <Coroutine test_reuse_replays_effect_statuses_to_new_commit>2384323844 def setup(self) -> None:23845 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23846 if runner_fixture_id not in self.fixturenames:23847 self.fixturenames.append(runner_fixture_id)23848 # When loop factories are configured, resolve the loop factory23849 # fixture early so that a factory variant change cascades cache23850 # invalidation before any async fixture checks its cache.23851 hook_caller = self.config.hook.pytest_asyncio_loop_factories23852 if hook_caller.get_hookimpls():23853 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23854> return super().setup()23855 ^^^^^^^^^^^^^^^2385623857/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23858_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23859nixbot/tests/conftest.py:33: in postgres_dsn23860 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23861 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23862/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23863 return next(self.gen)23864 ^^^^^^^^^^^^^^23865nixbot/tests/support.py:327: in ephemeral_postgres23866 run_sync(apply_migrations(dsn))23867nixbot/tests/support.py:285: in run_sync23868 return executor.submit(asyncio.run, coro).result(timeout=120)23869 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23870/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23871 return self.__get_result()23872 ^^^^^^^^^^^^^^^^^^^23873/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23874 raise self._exception23875/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23876 result = ctx.run(self.task)23877 ^^^^^^^^^^^^^^^^^^23878/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23879 return fn(*args, **kwargs)23880 ^^^^^^^^^^^^^^^^^^^23881/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23882 return runner.run(main)23883 ^^^^^^^^^^^^^^^^23884/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23885 return self._loop.run_until_complete(task)23886 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23887/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23888 return future.result()23889 ^^^^^^^^^^^^^^^23890nixbot/migrations.py:99: in apply_migrations23891 migrations = load_migrations()23892 ^^^^^^^^^^^^^^^^^23893_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2389423895 def load_migrations() -> list[Migration]:23896 """Load migration scripts shipped with the package, ordered by version."""23897 migrations = []23898 for entry in resources.files(__package__).joinpath("migrations").iterdir():23899 m = _SCRIPT_RE.match(entry.name)23900 if m is None:23901 continue23902 migrations.append(23903 Migration(23904 version=int(m.group(1)),23905 name=m.group(2),23906 sql=entry.read_text(),23907 )23908 )23909 migrations.sort(key=lambda mig: mig.version)23910 versions = [m.version for m in migrations]23911 if len(set(versions)) != len(versions):23912 msg = f"Duplicate migration versions: {versions}"23913> raise MigrationError(msg)23914E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2391523916nixbot/migrations.py:67: MigrationError23917_____________ ERROR at setup of test_events_stream_coalesces_burst _____________23918[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142391923920request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23921tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2392223923 @pytest.fixture(scope="module")23924 def postgres_dsn(23925 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23926 ) -> Iterator[str]:23927 if shutil.which("initdb") is None:23928 pytest.skip("postgresql not available")23929 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23930> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23931 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2393223933nixbot/tests/conftest.py:33: 23934_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23935/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23936 return next(self.gen)23937 ^^^^^^^^^^^^^^23938nixbot/tests/support.py:327: in ephemeral_postgres23939 run_sync(apply_migrations(dsn))23940nixbot/tests/support.py:285: in run_sync23941 return executor.submit(asyncio.run, coro).result(timeout=120)23942 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23943/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23944 return self.__get_result()23945 ^^^^^^^^^^^^^^^^^^^23946/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23947 raise self._exception23948/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23949 result = ctx.run(self.task)23950 ^^^^^^^^^^^^^^^^^^23951/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23952 return fn(*args, **kwargs)23953 ^^^^^^^^^^^^^^^^^^^23954/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23955 return runner.run(main)23956 ^^^^^^^^^^^^^^^^23957/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23958 return self._loop.run_until_complete(task)23959 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23960/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23961 return future.result()23962 ^^^^^^^^^^^^^^^23963nixbot/migrations.py:99: in apply_migrations23964 migrations = load_migrations()23965 ^^^^^^^^^^^^^^^^^23966_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2396723968 def load_migrations() -> list[Migration]:23969 """Load migration scripts shipped with the package, ordered by version."""23970 migrations = []23971 for entry in resources.files(__package__).joinpath("migrations").iterdir():23972 m = _SCRIPT_RE.match(entry.name)23973 if m is None:23974 continue23975 migrations.append(23976 Migration(23977 version=int(m.group(1)),23978 name=m.group(2),23979 sql=entry.read_text(),23980 )23981 )23982 migrations.sort(key=lambda mig: mig.version)23983 versions = [m.version for m in migrations]23984 if len(set(versions)) != len(versions):23985 msg = f"Duplicate migration versions: {versions}"23986> raise MigrationError(msg)23987E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2398823989nixbot/migrations.py:67: MigrationError23990____ ERROR at setup of test_attach_to_already_terminal_build_replays_status ____23991[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142399223993self = <Coroutine test_attach_to_already_terminal_build_replays_status>2399423995 def setup(self) -> None:23996 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23997 if runner_fixture_id not in self.fixturenames:23998 self.fixturenames.append(runner_fixture_id)23999 # When loop factories are configured, resolve the loop factory24000 # fixture early so that a factory variant change cascades cache24001 # invalidation before any async fixture checks its cache.24002 hook_caller = self.config.hook.pytest_asyncio_loop_factories24003 if hook_caller.get_hookimpls():24004 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24005> return super().setup()24006 ^^^^^^^^^^^^^^^2400724008/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24009_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24010nixbot/tests/conftest.py:33: in postgres_dsn24011 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24012 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24013/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24014 return next(self.gen)24015 ^^^^^^^^^^^^^^24016nixbot/tests/support.py:327: in ephemeral_postgres24017 run_sync(apply_migrations(dsn))24018nixbot/tests/support.py:285: in run_sync24019 return executor.submit(asyncio.run, coro).result(timeout=120)24020 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24021/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24022 return self.__get_result()24023 ^^^^^^^^^^^^^^^^^^^24024/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24025 raise self._exception24026/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24027 result = ctx.run(self.task)24028 ^^^^^^^^^^^^^^^^^^24029/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24030 return fn(*args, **kwargs)24031 ^^^^^^^^^^^^^^^^^^^24032/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24033 return runner.run(main)24034 ^^^^^^^^^^^^^^^^24035/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24036 return self._loop.run_until_complete(task)24037 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24038/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24039 return future.result()24040 ^^^^^^^^^^^^^^^24041nixbot/migrations.py:99: in apply_migrations24042 migrations = load_migrations()24043 ^^^^^^^^^^^^^^^^^24044_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2404524046 def load_migrations() -> list[Migration]:24047 """Load migration scripts shipped with the package, ordered by version."""24048 migrations = []24049 for entry in resources.files(__package__).joinpath("migrations").iterdir():24050 m = _SCRIPT_RE.match(entry.name)24051 if m is None:24052 continue24053 migrations.append(24054 Migration(24055 version=int(m.group(1)),24056 name=m.group(2),24057 sql=entry.read_text(),24058 )24059 )24060 migrations.sort(key=lambda mig: mig.version)24061 versions = [m.version for m in migrations]24062 if len(set(versions)) != len(versions):24063 msg = f"Duplicate migration versions: {versions}"24064> raise MigrationError(msg)24065E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2406624067nixbot/migrations.py:67: MigrationError24068__________ ERROR at setup of test_events_stream_refreshes_visibility ___________24069[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142407024071request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24072tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2407324074 @pytest.fixture(scope="module")24075 def postgres_dsn(24076 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24077 ) -> Iterator[str]:24078 if shutil.which("initdb") is None:24079 pytest.skip("postgresql not available")24080 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24081> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24082 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2408324084nixbot/tests/conftest.py:33: 24085_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24086/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24087 return next(self.gen)24088 ^^^^^^^^^^^^^^24089nixbot/tests/support.py:327: in ephemeral_postgres24090 run_sync(apply_migrations(dsn))24091nixbot/tests/support.py:285: in run_sync24092 return executor.submit(asyncio.run, coro).result(timeout=120)24093 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24094/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24095 return self.__get_result()24096 ^^^^^^^^^^^^^^^^^^^24097/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24098 raise self._exception24099/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24100 result = ctx.run(self.task)24101 ^^^^^^^^^^^^^^^^^^24102/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24103 return fn(*args, **kwargs)24104 ^^^^^^^^^^^^^^^^^^^24105/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24106 return runner.run(main)24107 ^^^^^^^^^^^^^^^^24108/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24109 return self._loop.run_until_complete(task)24110 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24111/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24112 return future.result()24113 ^^^^^^^^^^^^^^^24114nixbot/migrations.py:99: in apply_migrations24115 migrations = load_migrations()24116 ^^^^^^^^^^^^^^^^^24117_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2411824119 def load_migrations() -> list[Migration]:24120 """Load migration scripts shipped with the package, ordered by version."""24121 migrations = []24122 for entry in resources.files(__package__).joinpath("migrations").iterdir():24123 m = _SCRIPT_RE.match(entry.name)24124 if m is None:24125 continue24126 migrations.append(24127 Migration(24128 version=int(m.group(1)),24129 name=m.group(2),24130 sql=entry.read_text(),24131 )24132 )24133 migrations.sort(key=lambda mig: mig.version)24134 versions = [m.version for m in migrations]24135 if len(set(versions)) != len(versions):24136 msg = f"Duplicate migration versions: {versions}"24137> raise MigrationError(msg)24138E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2413924140nixbot/migrations.py:67: MigrationError24141___________________ ERROR at setup of test_attribute_search ____________________24142[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142414324144request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24145tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2414624147 @pytest.fixture(scope="module")24148 def postgres_dsn(24149 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24150 ) -> Iterator[str]:24151 if shutil.which("initdb") is None:24152 pytest.skip("postgresql not available")24153 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24154> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24155 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2415624157nixbot/tests/conftest.py:33: 24158_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24159/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24160 return next(self.gen)24161 ^^^^^^^^^^^^^^24162nixbot/tests/support.py:327: in ephemeral_postgres24163 run_sync(apply_migrations(dsn))24164nixbot/tests/support.py:285: in run_sync24165 return executor.submit(asyncio.run, coro).result(timeout=120)24166 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24167/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24168 return self.__get_result()24169 ^^^^^^^^^^^^^^^^^^^24170/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24171 raise self._exception24172/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24173 result = ctx.run(self.task)24174 ^^^^^^^^^^^^^^^^^^24175/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24176 return fn(*args, **kwargs)24177 ^^^^^^^^^^^^^^^^^^^24178/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24179 return runner.run(main)24180 ^^^^^^^^^^^^^^^^24181/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24182 return self._loop.run_until_complete(task)24183 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24184/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24185 return future.result()24186 ^^^^^^^^^^^^^^^24187nixbot/migrations.py:99: in apply_migrations24188 migrations = load_migrations()24189 ^^^^^^^^^^^^^^^^^24190_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2419124192 def load_migrations() -> list[Migration]:24193 """Load migration scripts shipped with the package, ordered by version."""24194 migrations = []24195 for entry in resources.files(__package__).joinpath("migrations").iterdir():24196 m = _SCRIPT_RE.match(entry.name)24197 if m is None:24198 continue24199 migrations.append(24200 Migration(24201 version=int(m.group(1)),24202 name=m.group(2),24203 sql=entry.read_text(),24204 )24205 )24206 migrations.sort(key=lambda mig: mig.version)24207 versions = [m.version for m in migrations]24208 if len(set(versions)) != len(versions):24209 msg = f"Duplicate migration versions: {versions}"24210> raise MigrationError(msg)24211E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2421224213nixbot/migrations.py:67: MigrationError24214___ ERROR at setup of test_cancel_during_eval_resolves_linked_eval_contexts ____24215[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142421624217self = <Coroutine test_cancel_during_eval_resolves_linked_eval_contexts>2421824219 def setup(self) -> None:24220 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24221 if runner_fixture_id not in self.fixturenames:24222 self.fixturenames.append(runner_fixture_id)24223 # When loop factories are configured, resolve the loop factory24224 # fixture early so that a factory variant change cascades cache24225 # invalidation before any async fixture checks its cache.24226 hook_caller = self.config.hook.pytest_asyncio_loop_factories24227 if hook_caller.get_hookimpls():24228 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24229> return super().setup()24230 ^^^^^^^^^^^^^^^2423124232/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24233_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24234nixbot/tests/conftest.py:33: in postgres_dsn24235 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24236 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24237/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24238 return next(self.gen)24239 ^^^^^^^^^^^^^^24240nixbot/tests/support.py:327: in ephemeral_postgres24241 run_sync(apply_migrations(dsn))24242nixbot/tests/support.py:285: in run_sync24243 return executor.submit(asyncio.run, coro).result(timeout=120)24244 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24245/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24246 return self.__get_result()24247 ^^^^^^^^^^^^^^^^^^^24248/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24249 raise self._exception24250/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24251 result = ctx.run(self.task)24252 ^^^^^^^^^^^^^^^^^^24253/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24254 return fn(*args, **kwargs)24255 ^^^^^^^^^^^^^^^^^^^24256/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24257 return runner.run(main)24258 ^^^^^^^^^^^^^^^^24259/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24260 return self._loop.run_until_complete(task)24261 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24262/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24263 return future.result()24264 ^^^^^^^^^^^^^^^24265nixbot/migrations.py:99: in apply_migrations24266 migrations = load_migrations()24267 ^^^^^^^^^^^^^^^^^24268_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2426924270 def load_migrations() -> list[Migration]:24271 """Load migration scripts shipped with the package, ordered by version."""24272 migrations = []24273 for entry in resources.files(__package__).joinpath("migrations").iterdir():24274 m = _SCRIPT_RE.match(entry.name)24275 if m is None:24276 continue24277 migrations.append(24278 Migration(24279 version=int(m.group(1)),24280 name=m.group(2),24281 sql=entry.read_text(),24282 )24283 )24284 migrations.sort(key=lambda mig: mig.version)24285 versions = [m.version for m in migrations]24286 if len(set(versions)) != len(versions):24287 msg = f"Duplicate migration versions: {versions}"24288> raise MigrationError(msg)24289E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2429024291nixbot/migrations.py:67: MigrationError24292_______________ ERROR at setup of test_build_page_shows_effects ________________24293[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142429424295request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24296tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2429724298 @pytest.fixture(scope="module")24299 def postgres_dsn(24300 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24301 ) -> Iterator[str]:24302 if shutil.which("initdb") is None:24303 pytest.skip("postgresql not available")24304 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24305> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24306 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2430724308nixbot/tests/conftest.py:33: 24309_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24310/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24311 return next(self.gen)24312 ^^^^^^^^^^^^^^24313nixbot/tests/support.py:327: in ephemeral_postgres24314 run_sync(apply_migrations(dsn))24315nixbot/tests/support.py:285: in run_sync24316 return executor.submit(asyncio.run, coro).result(timeout=120)24317 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24318/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24319 return self.__get_result()24320 ^^^^^^^^^^^^^^^^^^^24321/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24322 raise self._exception24323/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24324 result = ctx.run(self.task)24325 ^^^^^^^^^^^^^^^^^^24326/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24327 return fn(*args, **kwargs)24328 ^^^^^^^^^^^^^^^^^^^24329/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24330 return runner.run(main)24331 ^^^^^^^^^^^^^^^^24332/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24333 return self._loop.run_until_complete(task)24334 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24335/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24336 return future.result()24337 ^^^^^^^^^^^^^^^24338nixbot/migrations.py:99: in apply_migrations24339 migrations = load_migrations()24340 ^^^^^^^^^^^^^^^^^24341_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2434224343 def load_migrations() -> list[Migration]:24344 """Load migration scripts shipped with the package, ordered by version."""24345 migrations = []24346 for entry in resources.files(__package__).joinpath("migrations").iterdir():24347 m = _SCRIPT_RE.match(entry.name)24348 if m is None:24349 continue24350 migrations.append(24351 Migration(24352 version=int(m.group(1)),24353 name=m.group(2),24354 sql=entry.read_text(),24355 )24356 )24357 migrations.sort(key=lambda mig: mig.version)24358 versions = [m.version for m in migrations]24359 if len(set(versions)) != len(versions):24360 msg = f"Duplicate migration versions: {versions}"24361> raise MigrationError(msg)24362E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2436324364nixbot/migrations.py:67: MigrationError24365____ ERROR at setup of test_effect_log_does_not_collide_with_attribute_log _____24366[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142436724368self = <Coroutine test_effect_log_does_not_collide_with_attribute_log>2436924370 def setup(self) -> None:24371 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24372 if runner_fixture_id not in self.fixturenames:24373 self.fixturenames.append(runner_fixture_id)24374 # When loop factories are configured, resolve the loop factory24375 # fixture early so that a factory variant change cascades cache24376 # invalidation before any async fixture checks its cache.24377 hook_caller = self.config.hook.pytest_asyncio_loop_factories24378 if hook_caller.get_hookimpls():24379 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24380> return super().setup()24381 ^^^^^^^^^^^^^^^2438224383/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24384_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24385nixbot/tests/conftest.py:33: in postgres_dsn24386 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24387 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24388/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24389 return next(self.gen)24390 ^^^^^^^^^^^^^^24391nixbot/tests/support.py:327: in ephemeral_postgres24392 run_sync(apply_migrations(dsn))24393nixbot/tests/support.py:285: in run_sync24394 return executor.submit(asyncio.run, coro).result(timeout=120)24395 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24396/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24397 return self.__get_result()24398 ^^^^^^^^^^^^^^^^^^^24399/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24400 raise self._exception24401/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24402 result = ctx.run(self.task)24403 ^^^^^^^^^^^^^^^^^^24404/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24405 return fn(*args, **kwargs)24406 ^^^^^^^^^^^^^^^^^^^24407/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24408 return runner.run(main)24409 ^^^^^^^^^^^^^^^^24410/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24411 return self._loop.run_until_complete(task)24412 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24413/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24414 return future.result()24415 ^^^^^^^^^^^^^^^24416nixbot/migrations.py:99: in apply_migrations24417 migrations = load_migrations()24418 ^^^^^^^^^^^^^^^^^24419_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2442024421 def load_migrations() -> list[Migration]:24422 """Load migration scripts shipped with the package, ordered by version."""24423 migrations = []24424 for entry in resources.files(__package__).joinpath("migrations").iterdir():24425 m = _SCRIPT_RE.match(entry.name)24426 if m is None:24427 continue24428 migrations.append(24429 Migration(24430 version=int(m.group(1)),24431 name=m.group(2),24432 sql=entry.read_text(),24433 )24434 )24435 migrations.sort(key=lambda mig: mig.version)24436 versions = [m.version for m in migrations]24437 if len(set(versions)) != len(versions):24438 msg = f"Duplicate migration versions: {versions}"24439> raise MigrationError(msg)24440E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2444124442nixbot/migrations.py:67: MigrationError24443____________ ERROR at setup of test_build_page_shows_event_effects _____________24444[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142444524446request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24447tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2444824449 @pytest.fixture(scope="module")24450 def postgres_dsn(24451 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24452 ) -> Iterator[str]:24453 if shutil.which("initdb") is None:24454 pytest.skip("postgresql not available")24455 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24456> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24457 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2445824459nixbot/tests/conftest.py:33: 24460_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24461/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24462 return next(self.gen)24463 ^^^^^^^^^^^^^^24464nixbot/tests/support.py:327: in ephemeral_postgres24465 run_sync(apply_migrations(dsn))24466nixbot/tests/support.py:285: in run_sync24467 return executor.submit(asyncio.run, coro).result(timeout=120)24468 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24469/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24470 return self.__get_result()24471 ^^^^^^^^^^^^^^^^^^^24472/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24473 raise self._exception24474/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24475 result = ctx.run(self.task)24476 ^^^^^^^^^^^^^^^^^^24477/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24478 return fn(*args, **kwargs)24479 ^^^^^^^^^^^^^^^^^^^24480/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24481 return runner.run(main)24482 ^^^^^^^^^^^^^^^^24483/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24484 return self._loop.run_until_complete(task)24485 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24486/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24487 return future.result()24488 ^^^^^^^^^^^^^^^24489nixbot/migrations.py:99: in apply_migrations24490 migrations = load_migrations()24491 ^^^^^^^^^^^^^^^^^24492_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2449324494 def load_migrations() -> list[Migration]:24495 """Load migration scripts shipped with the package, ordered by version."""24496 migrations = []24497 for entry in resources.files(__package__).joinpath("migrations").iterdir():24498 m = _SCRIPT_RE.match(entry.name)24499 if m is None:24500 continue24501 migrations.append(24502 Migration(24503 version=int(m.group(1)),24504 name=m.group(2),24505 sql=entry.read_text(),24506 )24507 )24508 migrations.sort(key=lambda mig: mig.version)24509 versions = [m.version for m in migrations]24510 if len(set(versions)) != len(versions):24511 msg = f"Duplicate migration versions: {versions}"24512> raise MigrationError(msg)24513E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2451424515nixbot/migrations.py:67: MigrationError24516__________ ERROR at setup of test_post_process_paths_are_forge_scoped __________24517[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142451824519self = <Coroutine test_post_process_paths_are_forge_scoped>2452024521 def setup(self) -> None:24522 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24523 if runner_fixture_id not in self.fixturenames:24524 self.fixturenames.append(runner_fixture_id)24525 # When loop factories are configured, resolve the loop factory24526 # fixture early so that a factory variant change cascades cache24527 # invalidation before any async fixture checks its cache.24528 hook_caller = self.config.hook.pytest_asyncio_loop_factories24529 if hook_caller.get_hookimpls():24530 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24531> return super().setup()24532 ^^^^^^^^^^^^^^^2453324534/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24535_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24536nixbot/tests/conftest.py:33: in postgres_dsn24537 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24538 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24539/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24540 return next(self.gen)24541 ^^^^^^^^^^^^^^24542nixbot/tests/support.py:327: in ephemeral_postgres24543 run_sync(apply_migrations(dsn))24544nixbot/tests/support.py:285: in run_sync24545 return executor.submit(asyncio.run, coro).result(timeout=120)24546 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24547/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24548 return self.__get_result()24549 ^^^^^^^^^^^^^^^^^^^24550/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24551 raise self._exception24552/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24553 result = ctx.run(self.task)24554 ^^^^^^^^^^^^^^^^^^24555/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24556 return fn(*args, **kwargs)24557 ^^^^^^^^^^^^^^^^^^^24558/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24559 return runner.run(main)24560 ^^^^^^^^^^^^^^^^24561/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24562 return self._loop.run_until_complete(task)24563 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24564/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24565 return future.result()24566 ^^^^^^^^^^^^^^^24567nixbot/migrations.py:99: in apply_migrations24568 migrations = load_migrations()24569 ^^^^^^^^^^^^^^^^^24570_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2457124572 def load_migrations() -> list[Migration]:24573 """Load migration scripts shipped with the package, ordered by version."""24574 migrations = []24575 for entry in resources.files(__package__).joinpath("migrations").iterdir():24576 m = _SCRIPT_RE.match(entry.name)24577 if m is None:24578 continue24579 migrations.append(24580 Migration(24581 version=int(m.group(1)),24582 name=m.group(2),24583 sql=entry.read_text(),24584 )24585 )24586 migrations.sort(key=lambda mig: mig.version)24587 versions = [m.version for m in migrations]24588 if len(set(versions)) != len(versions):24589 msg = f"Duplicate migration versions: {versions}"24590> raise MigrationError(msg)24591E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2459224593nixbot/migrations.py:67: MigrationError24594__________________ ERROR at setup of test_effect_log_raw_text __________________24595[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142459624597request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24598tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2459924600 @pytest.fixture(scope="module")24601 def postgres_dsn(24602 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24603 ) -> Iterator[str]:24604 if shutil.which("initdb") is None:24605 pytest.skip("postgresql not available")24606 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24607> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24608 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2460924610nixbot/tests/conftest.py:33: 24611_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24612/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24613 return next(self.gen)24614 ^^^^^^^^^^^^^^24615nixbot/tests/support.py:327: in ephemeral_postgres24616 run_sync(apply_migrations(dsn))24617nixbot/tests/support.py:285: in run_sync24618 return executor.submit(asyncio.run, coro).result(timeout=120)24619 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24620/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24621 return self.__get_result()24622 ^^^^^^^^^^^^^^^^^^^24623/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24624 raise self._exception24625/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24626 result = ctx.run(self.task)24627 ^^^^^^^^^^^^^^^^^^24628/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24629 return fn(*args, **kwargs)24630 ^^^^^^^^^^^^^^^^^^^24631/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24632 return runner.run(main)24633 ^^^^^^^^^^^^^^^^24634/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24635 return self._loop.run_until_complete(task)24636 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24637/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24638 return future.result()24639 ^^^^^^^^^^^^^^^24640nixbot/migrations.py:99: in apply_migrations24641 migrations = load_migrations()24642 ^^^^^^^^^^^^^^^^^24643_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2464424645 def load_migrations() -> list[Migration]:24646 """Load migration scripts shipped with the package, ordered by version."""24647 migrations = []24648 for entry in resources.files(__package__).joinpath("migrations").iterdir():24649 m = _SCRIPT_RE.match(entry.name)24650 if m is None:24651 continue24652 migrations.append(24653 Migration(24654 version=int(m.group(1)),24655 name=m.group(2),24656 sql=entry.read_text(),24657 )24658 )24659 migrations.sort(key=lambda mig: mig.version)24660 versions = [m.version for m in migrations]24661 if len(set(versions)) != len(versions):24662 msg = f"Duplicate migration versions: {versions}"24663> raise MigrationError(msg)24664E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2466524666nixbot/migrations.py:67: MigrationError24667_______ ERROR at setup of test_effects_phase_error_keeps_succeeded_build _______24668[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142466924670self = <Coroutine test_effects_phase_error_keeps_succeeded_build>2467124672 def setup(self) -> None:24673 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24674 if runner_fixture_id not in self.fixturenames:24675 self.fixturenames.append(runner_fixture_id)24676 # When loop factories are configured, resolve the loop factory24677 # fixture early so that a factory variant change cascades cache24678 # invalidation before any async fixture checks its cache.24679 hook_caller = self.config.hook.pytest_asyncio_loop_factories24680 if hook_caller.get_hookimpls():24681 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24682> return super().setup()24683 ^^^^^^^^^^^^^^^2468424685/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24686_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24687nixbot/tests/conftest.py:33: in postgres_dsn24688 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24689 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24690/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24691 return next(self.gen)24692 ^^^^^^^^^^^^^^24693nixbot/tests/support.py:327: in ephemeral_postgres24694 run_sync(apply_migrations(dsn))24695nixbot/tests/support.py:285: in run_sync24696 return executor.submit(asyncio.run, coro).result(timeout=120)24697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24698/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24699 return self.__get_result()24700 ^^^^^^^^^^^^^^^^^^^24701/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24702 raise self._exception24703/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24704 result = ctx.run(self.task)24705 ^^^^^^^^^^^^^^^^^^24706/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24707 return fn(*args, **kwargs)24708 ^^^^^^^^^^^^^^^^^^^24709/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24710 return runner.run(main)24711 ^^^^^^^^^^^^^^^^24712/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24713 return self._loop.run_until_complete(task)24714 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24715/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24716 return future.result()24717 ^^^^^^^^^^^^^^^24718nixbot/migrations.py:99: in apply_migrations24719 migrations = load_migrations()24720 ^^^^^^^^^^^^^^^^^24721_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2472224723 def load_migrations() -> list[Migration]:24724 """Load migration scripts shipped with the package, ordered by version."""24725 migrations = []24726 for entry in resources.files(__package__).joinpath("migrations").iterdir():24727 m = _SCRIPT_RE.match(entry.name)24728 if m is None:24729 continue24730 migrations.append(24731 Migration(24732 version=int(m.group(1)),24733 name=m.group(2),24734 sql=entry.read_text(),24735 )24736 )24737 migrations.sort(key=lambda mig: mig.version)24738 versions = [m.version for m in migrations]24739 if len(set(versions)) != len(versions):24740 msg = f"Duplicate migration versions: {versions}"24741> raise MigrationError(msg)24742E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2474324744nixbot/migrations.py:67: MigrationError24745_____________ ERROR at setup of test_effect_log_viewer_status_icon _____________24746[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142474724748request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24749tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2475024751 @pytest.fixture(scope="module")24752 def postgres_dsn(24753 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24754 ) -> Iterator[str]:24755 if shutil.which("initdb") is None:24756 pytest.skip("postgresql not available")24757 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24758> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24759 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2476024761nixbot/tests/conftest.py:33: 24762_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24763/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24764 return next(self.gen)24765 ^^^^^^^^^^^^^^24766nixbot/tests/support.py:327: in ephemeral_postgres24767 run_sync(apply_migrations(dsn))24768nixbot/tests/support.py:285: in run_sync24769 return executor.submit(asyncio.run, coro).result(timeout=120)24770 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24771/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24772 return self.__get_result()24773 ^^^^^^^^^^^^^^^^^^^24774/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24775 raise self._exception24776/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24777 result = ctx.run(self.task)24778 ^^^^^^^^^^^^^^^^^^24779/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24780 return fn(*args, **kwargs)24781 ^^^^^^^^^^^^^^^^^^^24782/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24783 return runner.run(main)24784 ^^^^^^^^^^^^^^^^24785/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24786 return self._loop.run_until_complete(task)24787 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24788/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24789 return future.result()24790 ^^^^^^^^^^^^^^^24791nixbot/migrations.py:99: in apply_migrations24792 migrations = load_migrations()24793 ^^^^^^^^^^^^^^^^^24794_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2479524796 def load_migrations() -> list[Migration]:24797 """Load migration scripts shipped with the package, ordered by version."""24798 migrations = []24799 for entry in resources.files(__package__).joinpath("migrations").iterdir():24800 m = _SCRIPT_RE.match(entry.name)24801 if m is None:24802 continue24803 migrations.append(24804 Migration(24805 version=int(m.group(1)),24806 name=m.group(2),24807 sql=entry.read_text(),24808 )24809 )24810 migrations.sort(key=lambda mig: mig.version)24811 versions = [m.version for m in migrations]24812 if len(set(versions)) != len(versions):24813 msg = f"Duplicate migration versions: {versions}"24814> raise MigrationError(msg)24815E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2481624817nixbot/migrations.py:67: MigrationError24818_____ ERROR at setup of test_reuse_post_process_error_still_reports_status _____24819[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142482024821self = <Coroutine test_reuse_post_process_error_still_reports_status>2482224823 def setup(self) -> None:24824 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24825 if runner_fixture_id not in self.fixturenames:24826 self.fixturenames.append(runner_fixture_id)24827 # When loop factories are configured, resolve the loop factory24828 # fixture early so that a factory variant change cascades cache24829 # invalidation before any async fixture checks its cache.24830 hook_caller = self.config.hook.pytest_asyncio_loop_factories24831 if hook_caller.get_hookimpls():24832 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24833> return super().setup()24834 ^^^^^^^^^^^^^^^2483524836/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24837_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24838nixbot/tests/conftest.py:33: in postgres_dsn24839 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24840 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24841/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24842 return next(self.gen)24843 ^^^^^^^^^^^^^^24844nixbot/tests/support.py:327: in ephemeral_postgres24845 run_sync(apply_migrations(dsn))24846nixbot/tests/support.py:285: in run_sync24847 return executor.submit(asyncio.run, coro).result(timeout=120)24848 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24849/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24850 return self.__get_result()24851 ^^^^^^^^^^^^^^^^^^^24852/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24853 raise self._exception24854/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24855 result = ctx.run(self.task)24856 ^^^^^^^^^^^^^^^^^^24857/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24858 return fn(*args, **kwargs)24859 ^^^^^^^^^^^^^^^^^^^24860/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24861 return runner.run(main)24862 ^^^^^^^^^^^^^^^^24863/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24864 return self._loop.run_until_complete(task)24865 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24866/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24867 return future.result()24868 ^^^^^^^^^^^^^^^24869nixbot/migrations.py:99: in apply_migrations24870 migrations = load_migrations()24871 ^^^^^^^^^^^^^^^^^24872_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2487324874 def load_migrations() -> list[Migration]:24875 """Load migration scripts shipped with the package, ordered by version."""24876 migrations = []24877 for entry in resources.files(__package__).joinpath("migrations").iterdir():24878 m = _SCRIPT_RE.match(entry.name)24879 if m is None:24880 continue24881 migrations.append(24882 Migration(24883 version=int(m.group(1)),24884 name=m.group(2),24885 sql=entry.read_text(),24886 )24887 )24888 migrations.sort(key=lambda mig: mig.version)24889 versions = [m.version for m in migrations]24890 if len(set(versions)) != len(versions):24891 msg = f"Duplicate migration versions: {versions}"24892> raise MigrationError(msg)24893E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2489424895nixbot/migrations.py:67: MigrationError24896__________ ERROR at setup of test_effect_changes_notify_build_events ___________24897[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142489824899request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24900tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2490124902 @pytest.fixture(scope="module")24903 def postgres_dsn(24904 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24905 ) -> Iterator[str]:24906 if shutil.which("initdb") is None:24907 pytest.skip("postgresql not available")24908 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24909> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24910 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2491124912nixbot/tests/conftest.py:33: 24913_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24914/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24915 return next(self.gen)24916 ^^^^^^^^^^^^^^24917nixbot/tests/support.py:327: in ephemeral_postgres24918 run_sync(apply_migrations(dsn))24919nixbot/tests/support.py:285: in run_sync24920 return executor.submit(asyncio.run, coro).result(timeout=120)24921 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24922/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24923 return self.__get_result()24924 ^^^^^^^^^^^^^^^^^^^24925/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24926 raise self._exception24927/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24928 result = ctx.run(self.task)24929 ^^^^^^^^^^^^^^^^^^24930/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24931 return fn(*args, **kwargs)24932 ^^^^^^^^^^^^^^^^^^^24933/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24934 return runner.run(main)24935 ^^^^^^^^^^^^^^^^24936/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24937 return self._loop.run_until_complete(task)24938 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24939/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24940 return future.result()24941 ^^^^^^^^^^^^^^^24942nixbot/migrations.py:99: in apply_migrations24943 migrations = load_migrations()24944 ^^^^^^^^^^^^^^^^^24945_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2494624947 def load_migrations() -> list[Migration]:24948 """Load migration scripts shipped with the package, ordered by version."""24949 migrations = []24950 for entry in resources.files(__package__).joinpath("migrations").iterdir():24951 m = _SCRIPT_RE.match(entry.name)24952 if m is None:24953 continue24954 migrations.append(24955 Migration(24956 version=int(m.group(1)),24957 name=m.group(2),24958 sql=entry.read_text(),24959 )24960 )24961 migrations.sort(key=lambda mig: mig.version)24962 versions = [m.version for m in migrations]24963 if len(set(versions)) != len(versions):24964 msg = f"Duplicate migration versions: {versions}"24965> raise MigrationError(msg)24966E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2496724968nixbot/migrations.py:67: MigrationError24969____ ERROR at setup of test_reuse_with_missing_output_still_post_processes _____24970[gw1] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142497124972self = <Coroutine test_reuse_with_missing_output_still_post_processes>2497324974 def setup(self) -> None:24975 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24976 if runner_fixture_id not in self.fixturenames:24977 self.fixturenames.append(runner_fixture_id)24978 # When loop factories are configured, resolve the loop factory24979 # fixture early so that a factory variant change cascades cache24980 # invalidation before any async fixture checks its cache.24981 hook_caller = self.config.hook.pytest_asyncio_loop_factories24982 if hook_caller.get_hookimpls():24983 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24984> return super().setup()24985 ^^^^^^^^^^^^^^^2498624987/nix/store/xkl7iml4680manap6smgqsnvk2r0rz5p-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24988_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24989nixbot/tests/conftest.py:33: in postgres_dsn24990 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24991 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24992/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24993 return next(self.gen)24994 ^^^^^^^^^^^^^^24995nixbot/tests/support.py:327: in ephemeral_postgres24996 run_sync(apply_migrations(dsn))24997nixbot/tests/support.py:285: in run_sync24998 return executor.submit(asyncio.run, coro).result(timeout=120)24999 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25000/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25001 return self.__get_result()25002 ^^^^^^^^^^^^^^^^^^^25003/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25004 raise self._exception25005/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25006 result = ctx.run(self.task)25007 ^^^^^^^^^^^^^^^^^^25008/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25009 return fn(*args, **kwargs)25010 ^^^^^^^^^^^^^^^^^^^25011/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25012 return runner.run(main)25013 ^^^^^^^^^^^^^^^^25014/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25015 return self._loop.run_until_complete(task)25016 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25017/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25018 return future.result()25019 ^^^^^^^^^^^^^^^25020nixbot/migrations.py:99: in apply_migrations25021 migrations = load_migrations()25022 ^^^^^^^^^^^^^^^^^25023_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2502425025 def load_migrations() -> list[Migration]:25026 """Load migration scripts shipped with the package, ordered by version."""25027 migrations = []25028 for entry in resources.files(__package__).joinpath("migrations").iterdir():25029 m = _SCRIPT_RE.match(entry.name)25030 if m is None:25031 continue25032 migrations.append(25033 Migration(25034 version=int(m.group(1)),25035 name=m.group(2),25036 sql=entry.read_text(),25037 )25038 )25039 migrations.sort(key=lambda mig: mig.version)25040 versions = [m.version for m in migrations]25041 if len(set(versions)) != len(versions):25042 msg = f"Duplicate migration versions: {versions}"25043> raise MigrationError(msg)25044E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2504525046nixbot/migrations.py:67: MigrationError25047___________________ ERROR at setup of test_effects_state_api ___________________25048[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142504925050request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25051tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2505225053 @pytest.fixture(scope="module")25054 def postgres_dsn(25055 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25056 ) -> Iterator[str]:25057 if shutil.which("initdb") is None:25058 pytest.skip("postgresql not available")25059 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25060> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25061 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2506225063nixbot/tests/conftest.py:33: 25064_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25065/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25066 return next(self.gen)25067 ^^^^^^^^^^^^^^25068nixbot/tests/support.py:327: in ephemeral_postgres25069 run_sync(apply_migrations(dsn))25070nixbot/tests/support.py:285: in run_sync25071 return executor.submit(asyncio.run, coro).result(timeout=120)25072 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25073/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25074 return self.__get_result()25075 ^^^^^^^^^^^^^^^^^^^25076/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25077 raise self._exception25078/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25079 result = ctx.run(self.task)25080 ^^^^^^^^^^^^^^^^^^25081/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25082 return fn(*args, **kwargs)25083 ^^^^^^^^^^^^^^^^^^^25084/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25085 return runner.run(main)25086 ^^^^^^^^^^^^^^^^25087/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25088 return self._loop.run_until_complete(task)25089 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25090/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25091 return future.result()25092 ^^^^^^^^^^^^^^^25093nixbot/migrations.py:99: in apply_migrations25094 migrations = load_migrations()25095 ^^^^^^^^^^^^^^^^^25096_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2509725098 def load_migrations() -> list[Migration]:25099 """Load migration scripts shipped with the package, ordered by version."""25100 migrations = []25101 for entry in resources.files(__package__).joinpath("migrations").iterdir():25102 m = _SCRIPT_RE.match(entry.name)25103 if m is None:25104 continue25105 migrations.append(25106 Migration(25107 version=int(m.group(1)),25108 name=m.group(2),25109 sql=entry.read_text(),25110 )25111 )25112 migrations.sort(key=lambda mig: mig.version)25113 versions = [m.version for m in migrations]25114 if len(set(versions)) != len(versions):25115 msg = f"Duplicate migration versions: {versions}"25116> raise MigrationError(msg)25117E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2511825119nixbot/migrations.py:67: MigrationError25120____________________ ERROR at setup of test_pr_comment_api _____________________25121[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142512225123request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25124tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2512525126 @pytest.fixture(scope="module")25127 def postgres_dsn(25128 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25129 ) -> Iterator[str]:25130 if shutil.which("initdb") is None:25131 pytest.skip("postgresql not available")25132 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25133> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25134 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2513525136nixbot/tests/conftest.py:33: 25137_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25138/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25139 return next(self.gen)25140 ^^^^^^^^^^^^^^25141nixbot/tests/support.py:327: in ephemeral_postgres25142 run_sync(apply_migrations(dsn))25143nixbot/tests/support.py:285: in run_sync25144 return executor.submit(asyncio.run, coro).result(timeout=120)25145 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25146/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25147 return self.__get_result()25148 ^^^^^^^^^^^^^^^^^^^25149/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25150 raise self._exception25151/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25152 result = ctx.run(self.task)25153 ^^^^^^^^^^^^^^^^^^25154/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25155 return fn(*args, **kwargs)25156 ^^^^^^^^^^^^^^^^^^^25157/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25158 return runner.run(main)25159 ^^^^^^^^^^^^^^^^25160/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25161 return self._loop.run_until_complete(task)25162 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25163/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25164 return future.result()25165 ^^^^^^^^^^^^^^^25166nixbot/migrations.py:99: in apply_migrations25167 migrations = load_migrations()25168 ^^^^^^^^^^^^^^^^^25169_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2517025171 def load_migrations() -> list[Migration]:25172 """Load migration scripts shipped with the package, ordered by version."""25173 migrations = []25174 for entry in resources.files(__package__).joinpath("migrations").iterdir():25175 m = _SCRIPT_RE.match(entry.name)25176 if m is None:25177 continue25178 migrations.append(25179 Migration(25180 version=int(m.group(1)),25181 name=m.group(2),25182 sql=entry.read_text(),25183 )25184 )25185 migrations.sort(key=lambda mig: mig.version)25186 versions = [m.version for m in migrations]25187 if len(set(versions)) != len(versions):25188 msg = f"Duplicate migration versions: {versions}"25189> raise MigrationError(msg)25190E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2519125192nixbot/migrations.py:67: MigrationError25193_________________ ERROR at setup of test_workload_identity_api _________________25194[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142519525196request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25197tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2519825199 @pytest.fixture(scope="module")25200 def postgres_dsn(25201 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25202 ) -> Iterator[str]:25203 if shutil.which("initdb") is None:25204 pytest.skip("postgresql not available")25205 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25206> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25207 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2520825209nixbot/tests/conftest.py:33: 25210_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25211/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25212 return next(self.gen)25213 ^^^^^^^^^^^^^^25214nixbot/tests/support.py:327: in ephemeral_postgres25215 run_sync(apply_migrations(dsn))25216nixbot/tests/support.py:285: in run_sync25217 return executor.submit(asyncio.run, coro).result(timeout=120)25218 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25219/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25220 return self.__get_result()25221 ^^^^^^^^^^^^^^^^^^^25222/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25223 raise self._exception25224/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25225 result = ctx.run(self.task)25226 ^^^^^^^^^^^^^^^^^^25227/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25228 return fn(*args, **kwargs)25229 ^^^^^^^^^^^^^^^^^^^25230/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25231 return runner.run(main)25232 ^^^^^^^^^^^^^^^^25233/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25234 return self._loop.run_until_complete(task)25235 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25236/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25237 return future.result()25238 ^^^^^^^^^^^^^^^25239nixbot/migrations.py:99: in apply_migrations25240 migrations = load_migrations()25241 ^^^^^^^^^^^^^^^^^25242_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2524325244 def load_migrations() -> list[Migration]:25245 """Load migration scripts shipped with the package, ordered by version."""25246 migrations = []25247 for entry in resources.files(__package__).joinpath("migrations").iterdir():25248 m = _SCRIPT_RE.match(entry.name)25249 if m is None:25250 continue25251 migrations.append(25252 Migration(25253 version=int(m.group(1)),25254 name=m.group(2),25255 sql=entry.read_text(),25256 )25257 )25258 migrations.sort(key=lambda mig: mig.version)25259 versions = [m.version for m in migrations]25260 if len(set(versions)) != len(versions):25261 msg = f"Duplicate migration versions: {versions}"25262> raise MigrationError(msg)25263E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2526425265nixbot/migrations.py:67: MigrationError25266_____________ ERROR at setup of test_logout_revokes_session_cookie _____________25267[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142526825269request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25270tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2527125272 @pytest.fixture(scope="module")25273 def postgres_dsn(25274 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25275 ) -> Iterator[str]:25276 if shutil.which("initdb") is None:25277 pytest.skip("postgresql not available")25278 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25279> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25280 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2528125282nixbot/tests/conftest.py:33: 25283_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25284/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25285 return next(self.gen)25286 ^^^^^^^^^^^^^^25287nixbot/tests/support.py:327: in ephemeral_postgres25288 run_sync(apply_migrations(dsn))25289nixbot/tests/support.py:285: in run_sync25290 return executor.submit(asyncio.run, coro).result(timeout=120)25291 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25292/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25293 return self.__get_result()25294 ^^^^^^^^^^^^^^^^^^^25295/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25296 raise self._exception25297/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25298 result = ctx.run(self.task)25299 ^^^^^^^^^^^^^^^^^^25300/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25301 return fn(*args, **kwargs)25302 ^^^^^^^^^^^^^^^^^^^25303/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25304 return runner.run(main)25305 ^^^^^^^^^^^^^^^^25306/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25307 return self._loop.run_until_complete(task)25308 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25309/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25310 return future.result()25311 ^^^^^^^^^^^^^^^25312nixbot/migrations.py:99: in apply_migrations25313 migrations = load_migrations()25314 ^^^^^^^^^^^^^^^^^25315_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2531625317 def load_migrations() -> list[Migration]:25318 """Load migration scripts shipped with the package, ordered by version."""25319 migrations = []25320 for entry in resources.files(__package__).joinpath("migrations").iterdir():25321 m = _SCRIPT_RE.match(entry.name)25322 if m is None:25323 continue25324 migrations.append(25325 Migration(25326 version=int(m.group(1)),25327 name=m.group(2),25328 sql=entry.read_text(),25329 )25330 )25331 migrations.sort(key=lambda mig: mig.version)25332 versions = [m.version for m in migrations]25333 if len(set(versions)) != len(versions):25334 msg = f"Duplicate migration versions: {versions}"25335> raise MigrationError(msg)25336E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2533725338nixbot/migrations.py:67: MigrationError25339______________ ERROR at setup of test_gitlab_nested_group_routes _______________25340[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142534125342request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25343tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2534425345 @pytest.fixture(scope="module")25346 def postgres_dsn(25347 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25348 ) -> Iterator[str]:25349 if shutil.which("initdb") is None:25350 pytest.skip("postgresql not available")25351 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25352> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25353 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2535425355nixbot/tests/conftest.py:33: 25356_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25357/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25358 return next(self.gen)25359 ^^^^^^^^^^^^^^25360nixbot/tests/support.py:327: in ephemeral_postgres25361 run_sync(apply_migrations(dsn))25362nixbot/tests/support.py:285: in run_sync25363 return executor.submit(asyncio.run, coro).result(timeout=120)25364 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25365/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25366 return self.__get_result()25367 ^^^^^^^^^^^^^^^^^^^25368/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25369 raise self._exception25370/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25371 result = ctx.run(self.task)25372 ^^^^^^^^^^^^^^^^^^25373/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25374 return fn(*args, **kwargs)25375 ^^^^^^^^^^^^^^^^^^^25376/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25377 return runner.run(main)25378 ^^^^^^^^^^^^^^^^25379/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25380 return self._loop.run_until_complete(task)25381 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25382/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25383 return future.result()25384 ^^^^^^^^^^^^^^^25385nixbot/migrations.py:99: in apply_migrations25386 migrations = load_migrations()25387 ^^^^^^^^^^^^^^^^^25388_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2538925390 def load_migrations() -> list[Migration]:25391 """Load migration scripts shipped with the package, ordered by version."""25392 migrations = []25393 for entry in resources.files(__package__).joinpath("migrations").iterdir():25394 m = _SCRIPT_RE.match(entry.name)25395 if m is None:25396 continue25397 migrations.append(25398 Migration(25399 version=int(m.group(1)),25400 name=m.group(2),25401 sql=entry.read_text(),25402 )25403 )25404 migrations.sort(key=lambda mig: mig.version)25405 versions = [m.version for m in migrations]25406 if len(set(versions)) != len(versions):25407 msg = f"Duplicate migration versions: {versions}"25408> raise MigrationError(msg)25409E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2541025411nixbot/migrations.py:67: MigrationError25412___________ ERROR at setup of test_scheduled_run_viewer_renders_ansi ___________25413[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142541425415request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25416tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2541725418 @pytest.fixture(scope="module")25419 def postgres_dsn(25420 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25421 ) -> Iterator[str]:25422 if shutil.which("initdb") is None:25423 pytest.skip("postgresql not available")25424 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25425> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25426 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2542725428nixbot/tests/conftest.py:33: 25429_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25430/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25431 return next(self.gen)25432 ^^^^^^^^^^^^^^25433nixbot/tests/support.py:327: in ephemeral_postgres25434 run_sync(apply_migrations(dsn))25435nixbot/tests/support.py:285: in run_sync25436 return executor.submit(asyncio.run, coro).result(timeout=120)25437 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25438/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25439 return self.__get_result()25440 ^^^^^^^^^^^^^^^^^^^25441/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25442 raise self._exception25443/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25444 result = ctx.run(self.task)25445 ^^^^^^^^^^^^^^^^^^25446/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25447 return fn(*args, **kwargs)25448 ^^^^^^^^^^^^^^^^^^^25449/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25450 return runner.run(main)25451 ^^^^^^^^^^^^^^^^25452/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25453 return self._loop.run_until_complete(task)25454 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25455/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25456 return future.result()25457 ^^^^^^^^^^^^^^^25458nixbot/migrations.py:99: in apply_migrations25459 migrations = load_migrations()25460 ^^^^^^^^^^^^^^^^^25461_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2546225463 def load_migrations() -> list[Migration]:25464 """Load migration scripts shipped with the package, ordered by version."""25465 migrations = []25466 for entry in resources.files(__package__).joinpath("migrations").iterdir():25467 m = _SCRIPT_RE.match(entry.name)25468 if m is None:25469 continue25470 migrations.append(25471 Migration(25472 version=int(m.group(1)),25473 name=m.group(2),25474 sql=entry.read_text(),25475 )25476 )25477 migrations.sort(key=lambda mig: mig.version)25478 versions = [m.version for m in migrations]25479 if len(set(versions)) != len(versions):25480 msg = f"Duplicate migration versions: {versions}"25481> raise MigrationError(msg)25482E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2548325484nixbot/migrations.py:67: MigrationError25485________ ERROR at setup of test_scheduled_run_viewer_cross_project_404 _________25486[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142548725488request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25489tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2549025491 @pytest.fixture(scope="module")25492 def postgres_dsn(25493 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25494 ) -> Iterator[str]:25495 if shutil.which("initdb") is None:25496 pytest.skip("postgresql not available")25497 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25498> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25499 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2550025501nixbot/tests/conftest.py:33: 25502_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25503/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25504 return next(self.gen)25505 ^^^^^^^^^^^^^^25506nixbot/tests/support.py:327: in ephemeral_postgres25507 run_sync(apply_migrations(dsn))25508nixbot/tests/support.py:285: in run_sync25509 return executor.submit(asyncio.run, coro).result(timeout=120)25510 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25511/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25512 return self.__get_result()25513 ^^^^^^^^^^^^^^^^^^^25514/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25515 raise self._exception25516/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25517 result = ctx.run(self.task)25518 ^^^^^^^^^^^^^^^^^^25519/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25520 return fn(*args, **kwargs)25521 ^^^^^^^^^^^^^^^^^^^25522/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25523 return runner.run(main)25524 ^^^^^^^^^^^^^^^^25525/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25526 return self._loop.run_until_complete(task)25527 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25528/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25529 return future.result()25530 ^^^^^^^^^^^^^^^25531nixbot/migrations.py:99: in apply_migrations25532 migrations = load_migrations()25533 ^^^^^^^^^^^^^^^^^25534_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2553525536 def load_migrations() -> list[Migration]:25537 """Load migration scripts shipped with the package, ordered by version."""25538 migrations = []25539 for entry in resources.files(__package__).joinpath("migrations").iterdir():25540 m = _SCRIPT_RE.match(entry.name)25541 if m is None:25542 continue25543 migrations.append(25544 Migration(25545 version=int(m.group(1)),25546 name=m.group(2),25547 sql=entry.read_text(),25548 )25549 )25550 migrations.sort(key=lambda mig: mig.version)25551 versions = [m.version for m in migrations]25552 if len(set(versions)) != len(versions):25553 msg = f"Duplicate migration versions: {versions}"25554> raise MigrationError(msg)25555E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2555625557nixbot/migrations.py:67: MigrationError25558_______ ERROR at setup of test_scheduled_run_log_unavailable_placeholder _______25559[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142556025561request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25562tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2556325564 @pytest.fixture(scope="module")25565 def postgres_dsn(25566 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25567 ) -> Iterator[str]:25568 if shutil.which("initdb") is None:25569 pytest.skip("postgresql not available")25570 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25571> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25572 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2557325574nixbot/tests/conftest.py:33: 25575_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25576/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25577 return next(self.gen)25578 ^^^^^^^^^^^^^^25579nixbot/tests/support.py:327: in ephemeral_postgres25580 run_sync(apply_migrations(dsn))25581nixbot/tests/support.py:285: in run_sync25582 return executor.submit(asyncio.run, coro).result(timeout=120)25583 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25584/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25585 return self.__get_result()25586 ^^^^^^^^^^^^^^^^^^^25587/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25588 raise self._exception25589/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25590 result = ctx.run(self.task)25591 ^^^^^^^^^^^^^^^^^^25592/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25593 return fn(*args, **kwargs)25594 ^^^^^^^^^^^^^^^^^^^25595/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25596 return runner.run(main)25597 ^^^^^^^^^^^^^^^^25598/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25599 return self._loop.run_until_complete(task)25600 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25601/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25602 return future.result()25603 ^^^^^^^^^^^^^^^25604nixbot/migrations.py:99: in apply_migrations25605 migrations = load_migrations()25606 ^^^^^^^^^^^^^^^^^25607_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2560825609 def load_migrations() -> list[Migration]:25610 """Load migration scripts shipped with the package, ordered by version."""25611 migrations = []25612 for entry in resources.files(__package__).joinpath("migrations").iterdir():25613 m = _SCRIPT_RE.match(entry.name)25614 if m is None:25615 continue25616 migrations.append(25617 Migration(25618 version=int(m.group(1)),25619 name=m.group(2),25620 sql=entry.read_text(),25621 )25622 )25623 migrations.sort(key=lambda mig: mig.version)25624 versions = [m.version for m in migrations]25625 if len(set(versions)) != len(versions):25626 msg = f"Duplicate migration versions: {versions}"25627> raise MigrationError(msg)25628E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2562925630nixbot/migrations.py:67: MigrationError25631________ ERROR at setup of test_scheduled_run_viewer_waiting_before_log ________25632[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142563325634request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25635tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2563625637 @pytest.fixture(scope="module")25638 def postgres_dsn(25639 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25640 ) -> Iterator[str]:25641 if shutil.which("initdb") is None:25642 pytest.skip("postgresql not available")25643 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25644> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2564625647nixbot/tests/conftest.py:33: 25648_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25649/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25650 return next(self.gen)25651 ^^^^^^^^^^^^^^25652nixbot/tests/support.py:327: in ephemeral_postgres25653 run_sync(apply_migrations(dsn))25654nixbot/tests/support.py:285: in run_sync25655 return executor.submit(asyncio.run, coro).result(timeout=120)25656 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25657/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25658 return self.__get_result()25659 ^^^^^^^^^^^^^^^^^^^25660/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25661 raise self._exception25662/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25663 result = ctx.run(self.task)25664 ^^^^^^^^^^^^^^^^^^25665/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25666 return fn(*args, **kwargs)25667 ^^^^^^^^^^^^^^^^^^^25668/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25669 return runner.run(main)25670 ^^^^^^^^^^^^^^^^25671/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25672 return self._loop.run_until_complete(task)25673 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25674/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25675 return future.result()25676 ^^^^^^^^^^^^^^^25677nixbot/migrations.py:99: in apply_migrations25678 migrations = load_migrations()25679 ^^^^^^^^^^^^^^^^^25680_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2568125682 def load_migrations() -> list[Migration]:25683 """Load migration scripts shipped with the package, ordered by version."""25684 migrations = []25685 for entry in resources.files(__package__).joinpath("migrations").iterdir():25686 m = _SCRIPT_RE.match(entry.name)25687 if m is None:25688 continue25689 migrations.append(25690 Migration(25691 version=int(m.group(1)),25692 name=m.group(2),25693 sql=entry.read_text(),25694 )25695 )25696 migrations.sort(key=lambda mig: mig.version)25697 versions = [m.version for m in migrations]25698 if len(set(versions)) != len(versions):25699 msg = f"Duplicate migration versions: {versions}"25700> raise MigrationError(msg)25701E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2570225703nixbot/migrations.py:67: MigrationError25704___________ ERROR at setup of test_scheduled_run_history_lists_runs ____________25705[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142570625707request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25708tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2570925710 @pytest.fixture(scope="module")25711 def postgres_dsn(25712 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25713 ) -> Iterator[str]:25714 if shutil.which("initdb") is None:25715 pytest.skip("postgresql not available")25716 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25717> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25718 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2571925720nixbot/tests/conftest.py:33: 25721_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25722/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25723 return next(self.gen)25724 ^^^^^^^^^^^^^^25725nixbot/tests/support.py:327: in ephemeral_postgres25726 run_sync(apply_migrations(dsn))25727nixbot/tests/support.py:285: in run_sync25728 return executor.submit(asyncio.run, coro).result(timeout=120)25729 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25730/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25731 return self.__get_result()25732 ^^^^^^^^^^^^^^^^^^^25733/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25734 raise self._exception25735/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25736 result = ctx.run(self.task)25737 ^^^^^^^^^^^^^^^^^^25738/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25739 return fn(*args, **kwargs)25740 ^^^^^^^^^^^^^^^^^^^25741/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25742 return runner.run(main)25743 ^^^^^^^^^^^^^^^^25744/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25745 return self._loop.run_until_complete(task)25746 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25747/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25748 return future.result()25749 ^^^^^^^^^^^^^^^25750nixbot/migrations.py:99: in apply_migrations25751 migrations = load_migrations()25752 ^^^^^^^^^^^^^^^^^25753_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2575425755 def load_migrations() -> list[Migration]:25756 """Load migration scripts shipped with the package, ordered by version."""25757 migrations = []25758 for entry in resources.files(__package__).joinpath("migrations").iterdir():25759 m = _SCRIPT_RE.match(entry.name)25760 if m is None:25761 continue25762 migrations.append(25763 Migration(25764 version=int(m.group(1)),25765 name=m.group(2),25766 sql=entry.read_text(),25767 )25768 )25769 migrations.sort(key=lambda mig: mig.version)25770 versions = [m.version for m in migrations]25771 if len(set(versions)) != len(versions):25772 msg = f"Duplicate migration versions: {versions}"25773> raise MigrationError(msg)25774E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2577525776nixbot/migrations.py:67: MigrationError25777__________ ERROR at setup of test_scheduled_run_history_special_chars __________25778[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142577925780request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25781tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2578225783 @pytest.fixture(scope="module")25784 def postgres_dsn(25785 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25786 ) -> Iterator[str]:25787 if shutil.which("initdb") is None:25788 pytest.skip("postgresql not available")25789 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25790> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25791 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2579225793nixbot/tests/conftest.py:33: 25794_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25795/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25796 return next(self.gen)25797 ^^^^^^^^^^^^^^25798nixbot/tests/support.py:327: in ephemeral_postgres25799 run_sync(apply_migrations(dsn))25800nixbot/tests/support.py:285: in run_sync25801 return executor.submit(asyncio.run, coro).result(timeout=120)25802 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25803/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25804 return self.__get_result()25805 ^^^^^^^^^^^^^^^^^^^25806/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25807 raise self._exception25808/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25809 result = ctx.run(self.task)25810 ^^^^^^^^^^^^^^^^^^25811/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25812 return fn(*args, **kwargs)25813 ^^^^^^^^^^^^^^^^^^^25814/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25815 return runner.run(main)25816 ^^^^^^^^^^^^^^^^25817/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25818 return self._loop.run_until_complete(task)25819 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25820/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25821 return future.result()25822 ^^^^^^^^^^^^^^^25823nixbot/migrations.py:99: in apply_migrations25824 migrations = load_migrations()25825 ^^^^^^^^^^^^^^^^^25826_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2582725828 def load_migrations() -> list[Migration]:25829 """Load migration scripts shipped with the package, ordered by version."""25830 migrations = []25831 for entry in resources.files(__package__).joinpath("migrations").iterdir():25832 m = _SCRIPT_RE.match(entry.name)25833 if m is None:25834 continue25835 migrations.append(25836 Migration(25837 version=int(m.group(1)),25838 name=m.group(2),25839 sql=entry.read_text(),25840 )25841 )25842 migrations.sort(key=lambda mig: mig.version)25843 versions = [m.version for m in migrations]25844 if len(set(versions)) != len(versions):25845 msg = f"Duplicate migration versions: {versions}"25846> raise MigrationError(msg)25847E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2584825849nixbot/migrations.py:67: MigrationError25850_________ ERROR at setup of test_scheduled_run_stream_replays_history __________25851[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142585225853request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25854tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2585525856 @pytest.fixture(scope="module")25857 def postgres_dsn(25858 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25859 ) -> Iterator[str]:25860 if shutil.which("initdb") is None:25861 pytest.skip("postgresql not available")25862 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25863> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25864 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2586525866nixbot/tests/conftest.py:33: 25867_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25868/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25869 return next(self.gen)25870 ^^^^^^^^^^^^^^25871nixbot/tests/support.py:327: in ephemeral_postgres25872 run_sync(apply_migrations(dsn))25873nixbot/tests/support.py:285: in run_sync25874 return executor.submit(asyncio.run, coro).result(timeout=120)25875 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25876/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25877 return self.__get_result()25878 ^^^^^^^^^^^^^^^^^^^25879/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25880 raise self._exception25881/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25882 result = ctx.run(self.task)25883 ^^^^^^^^^^^^^^^^^^25884/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25885 return fn(*args, **kwargs)25886 ^^^^^^^^^^^^^^^^^^^25887/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25888 return runner.run(main)25889 ^^^^^^^^^^^^^^^^25890/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25891 return self._loop.run_until_complete(task)25892 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25893/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25894 return future.result()25895 ^^^^^^^^^^^^^^^25896nixbot/migrations.py:99: in apply_migrations25897 migrations = load_migrations()25898 ^^^^^^^^^^^^^^^^^25899_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2590025901 def load_migrations() -> list[Migration]:25902 """Load migration scripts shipped with the package, ordered by version."""25903 migrations = []25904 for entry in resources.files(__package__).joinpath("migrations").iterdir():25905 m = _SCRIPT_RE.match(entry.name)25906 if m is None:25907 continue25908 migrations.append(25909 Migration(25910 version=int(m.group(1)),25911 name=m.group(2),25912 sql=entry.read_text(),25913 )25914 )25915 migrations.sort(key=lambda mig: mig.version)25916 versions = [m.version for m in migrations]25917 if len(set(versions)) != len(versions):25918 msg = f"Duplicate migration versions: {versions}"25919> raise MigrationError(msg)25920E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2592125922nixbot/migrations.py:67: MigrationError25923___________ ERROR at setup of test_scheduled_run_notify_build_events ___________25924[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142592525926request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25927tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2592825929 @pytest.fixture(scope="module")25930 def postgres_dsn(25931 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25932 ) -> Iterator[str]:25933 if shutil.which("initdb") is None:25934 pytest.skip("postgresql not available")25935 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25936> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25937 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2593825939nixbot/tests/conftest.py:33: 25940_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25941/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25942 return next(self.gen)25943 ^^^^^^^^^^^^^^25944nixbot/tests/support.py:327: in ephemeral_postgres25945 run_sync(apply_migrations(dsn))25946nixbot/tests/support.py:285: in run_sync25947 return executor.submit(asyncio.run, coro).result(timeout=120)25948 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25949/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25950 return self.__get_result()25951 ^^^^^^^^^^^^^^^^^^^25952/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25953 raise self._exception25954/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25955 result = ctx.run(self.task)25956 ^^^^^^^^^^^^^^^^^^25957/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25958 return fn(*args, **kwargs)25959 ^^^^^^^^^^^^^^^^^^^25960/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25961 return runner.run(main)25962 ^^^^^^^^^^^^^^^^25963/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25964 return self._loop.run_until_complete(task)25965 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25966/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25967 return future.result()25968 ^^^^^^^^^^^^^^^25969nixbot/migrations.py:99: in apply_migrations25970 migrations = load_migrations()25971 ^^^^^^^^^^^^^^^^^25972_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2597325974 def load_migrations() -> list[Migration]:25975 """Load migration scripts shipped with the package, ordered by version."""25976 migrations = []25977 for entry in resources.files(__package__).joinpath("migrations").iterdir():25978 m = _SCRIPT_RE.match(entry.name)25979 if m is None:25980 continue25981 migrations.append(25982 Migration(25983 version=int(m.group(1)),25984 name=m.group(2),25985 sql=entry.read_text(),25986 )25987 )25988 migrations.sort(key=lambda mig: mig.version)25989 versions = [m.version for m in migrations]25990 if len(set(versions)) != len(versions):25991 msg = f"Duplicate migration versions: {versions}"25992> raise MigrationError(msg)25993E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2599425995nixbot/migrations.py:67: MigrationError25996_________________ ERROR at setup of test_api_log_toc_and_text __________________25997[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142599825999request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26000tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2600126002 @pytest.fixture(scope="module")26003 def postgres_dsn(26004 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26005 ) -> Iterator[str]:26006 if shutil.which("initdb") is None:26007 pytest.skip("postgresql not available")26008 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26009> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26010 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2601126012nixbot/tests/conftest.py:33: 26013_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26014/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26015 return next(self.gen)26016 ^^^^^^^^^^^^^^26017nixbot/tests/support.py:327: in ephemeral_postgres26018 run_sync(apply_migrations(dsn))26019nixbot/tests/support.py:285: in run_sync26020 return executor.submit(asyncio.run, coro).result(timeout=120)26021 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26022/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26023 return self.__get_result()26024 ^^^^^^^^^^^^^^^^^^^26025/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26026 raise self._exception26027/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26028 result = ctx.run(self.task)26029 ^^^^^^^^^^^^^^^^^^26030/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26031 return fn(*args, **kwargs)26032 ^^^^^^^^^^^^^^^^^^^26033/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26034 return runner.run(main)26035 ^^^^^^^^^^^^^^^^26036/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26037 return self._loop.run_until_complete(task)26038 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26039/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26040 return future.result()26041 ^^^^^^^^^^^^^^^26042nixbot/migrations.py:99: in apply_migrations26043 migrations = load_migrations()26044 ^^^^^^^^^^^^^^^^^26045_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2604626047 def load_migrations() -> list[Migration]:26048 """Load migration scripts shipped with the package, ordered by version."""26049 migrations = []26050 for entry in resources.files(__package__).joinpath("migrations").iterdir():26051 m = _SCRIPT_RE.match(entry.name)26052 if m is None:26053 continue26054 migrations.append(26055 Migration(26056 version=int(m.group(1)),26057 name=m.group(2),26058 sql=entry.read_text(),26059 )26060 )26061 migrations.sort(key=lambda mig: mig.version)26062 versions = [m.version for m in migrations]26063 if len(set(versions)) != len(versions):26064 msg = f"Duplicate migration versions: {versions}"26065> raise MigrationError(msg)26066E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2606726068nixbot/migrations.py:67: MigrationError26069_____________ ERROR at setup of test_api_log_toc_flat_log_fallback _____________26070[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142607126072request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26073tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2607426075 @pytest.fixture(scope="module")26076 def postgres_dsn(26077 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26078 ) -> Iterator[str]:26079 if shutil.which("initdb") is None:26080 pytest.skip("postgresql not available")26081 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26082> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26083 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2608426085nixbot/tests/conftest.py:33: 26086_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26087/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26088 return next(self.gen)26089 ^^^^^^^^^^^^^^26090nixbot/tests/support.py:327: in ephemeral_postgres26091 run_sync(apply_migrations(dsn))26092nixbot/tests/support.py:285: in run_sync26093 return executor.submit(asyncio.run, coro).result(timeout=120)26094 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26095/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26096 return self.__get_result()26097 ^^^^^^^^^^^^^^^^^^^26098/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26099 raise self._exception26100/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26101 result = ctx.run(self.task)26102 ^^^^^^^^^^^^^^^^^^26103/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26104 return fn(*args, **kwargs)26105 ^^^^^^^^^^^^^^^^^^^26106/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26107 return runner.run(main)26108 ^^^^^^^^^^^^^^^^26109/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26110 return self._loop.run_until_complete(task)26111 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26112/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26113 return future.result()26114 ^^^^^^^^^^^^^^^26115nixbot/migrations.py:99: in apply_migrations26116 migrations = load_migrations()26117 ^^^^^^^^^^^^^^^^^26118_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2611926120 def load_migrations() -> list[Migration]:26121 """Load migration scripts shipped with the package, ordered by version."""26122 migrations = []26123 for entry in resources.files(__package__).joinpath("migrations").iterdir():26124 m = _SCRIPT_RE.match(entry.name)26125 if m is None:26126 continue26127 migrations.append(26128 Migration(26129 version=int(m.group(1)),26130 name=m.group(2),26131 sql=entry.read_text(),26132 )26133 )26134 migrations.sort(key=lambda mig: mig.version)26135 versions = [m.version for m in migrations]26136 if len(set(versions)) != len(versions):26137 msg = f"Duplicate migration versions: {versions}"26138> raise MigrationError(msg)26139E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2614026141nixbot/migrations.py:67: MigrationError26142__________________ ERROR at setup of test_api_log_stream_json __________________26143[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142614426145request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26146tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2614726148 @pytest.fixture(scope="module")26149 def postgres_dsn(26150 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26151 ) -> Iterator[str]:26152 if shutil.which("initdb") is None:26153 pytest.skip("postgresql not available")26154 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26155> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26156 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2615726158nixbot/tests/conftest.py:33: 26159_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26160/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26161 return next(self.gen)26162 ^^^^^^^^^^^^^^26163nixbot/tests/support.py:327: in ephemeral_postgres26164 run_sync(apply_migrations(dsn))26165nixbot/tests/support.py:285: in run_sync26166 return executor.submit(asyncio.run, coro).result(timeout=120)26167 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26168/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26169 return self.__get_result()26170 ^^^^^^^^^^^^^^^^^^^26171/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26172 raise self._exception26173/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26174 result = ctx.run(self.task)26175 ^^^^^^^^^^^^^^^^^^26176/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26177 return fn(*args, **kwargs)26178 ^^^^^^^^^^^^^^^^^^^26179/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26180 return runner.run(main)26181 ^^^^^^^^^^^^^^^^26182/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26183 return self._loop.run_until_complete(task)26184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26185/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26186 return future.result()26187 ^^^^^^^^^^^^^^^26188nixbot/migrations.py:99: in apply_migrations26189 migrations = load_migrations()26190 ^^^^^^^^^^^^^^^^^26191_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2619226193 def load_migrations() -> list[Migration]:26194 """Load migration scripts shipped with the package, ordered by version."""26195 migrations = []26196 for entry in resources.files(__package__).joinpath("migrations").iterdir():26197 m = _SCRIPT_RE.match(entry.name)26198 if m is None:26199 continue26200 migrations.append(26201 Migration(26202 version=int(m.group(1)),26203 name=m.group(2),26204 sql=entry.read_text(),26205 )26206 )26207 migrations.sort(key=lambda mig: mig.version)26208 versions = [m.version for m in migrations]26209 if len(set(versions)) != len(versions):26210 msg = f"Duplicate migration versions: {versions}"26211> raise MigrationError(msg)26212E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2621326214nixbot/migrations.py:67: MigrationError26215_______________ ERROR at setup of test_build_eval_stats_surface ________________26216[gw0] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142621726218request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>26219tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...496e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2622026221 @pytest.fixture(scope="module")26222 def postgres_dsn(26223 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory26224 ) -> Iterator[str]:26225 if shutil.which("initdb") is None:26226 pytest.skip("postgresql not available")26227 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")26228> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:26229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2623026231nixbot/tests/conftest.py:33: 26232_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 26233/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__26234 return next(self.gen)26235 ^^^^^^^^^^^^^^26236nixbot/tests/support.py:327: in ephemeral_postgres26237 run_sync(apply_migrations(dsn))26238nixbot/tests/support.py:285: in run_sync26239 return executor.submit(asyncio.run, coro).result(timeout=120)26240 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26241/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26242 return self.__get_result()26243 ^^^^^^^^^^^^^^^^^^^26244/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26245 raise self._exception26246/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26247 result = ctx.run(self.task)26248 ^^^^^^^^^^^^^^^^^^26249/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26250 return fn(*args, **kwargs)26251 ^^^^^^^^^^^^^^^^^^^26252/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26253 return runner.run(main)26254 ^^^^^^^^^^^^^^^^26255/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26256 return self._loop.run_until_complete(task)26257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26258/nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete26259 return future.result()26260 ^^^^^^^^^^^^^^^26261nixbot/migrations.py:99: in apply_migrations26262 migrations = load_migrations()26263 ^^^^^^^^^^^^^^^^^26264_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2626526266 def load_migrations() -> list[Migration]:26267 """Load migration scripts shipped with the package, ordered by version."""26268 migrations = []26269 for entry in resources.files(__package__).joinpath("migrations").iterdir():26270 m = _SCRIPT_RE.match(entry.name)26271 if m is None:26272 continue26273 migrations.append(26274 Migration(26275 version=int(m.group(1)),26276 name=m.group(2),26277 sql=entry.read_text(),26278 )26279 )26280 migrations.sort(key=lambda mig: mig.version)26281 versions = [m.version for m in migrations]26282 if len(set(versions)) != len(versions):26283 msg = f"Duplicate migration versions: {versions}"26284> raise MigrationError(msg)26285E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2628626287nixbot/migrations.py:67: MigrationError26288=================================== FAILURES ===================================26289_____________________________ test_load_migrations _____________________________26290[gw11] linux -- Python 3.14.6 /nix/store/gxzhl7aaiid7zp3y47jqqiq7zg5mqpwp-python3-3.14.6/bin/python3.142629126292 def test_load_migrations() -> None:26293> migrations = load_migrations()26294 ^^^^^^^^^^^^^^^^^2629526296nixbot/tests/test_db.py:33: 26297_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2629826299 def load_migrations() -> list[Migration]:26300 """Load migration scripts shipped with the package, ordered by version."""26301 migrations = []26302 for entry in resources.files(__package__).joinpath("migrations").iterdir():26303 m = _SCRIPT_RE.match(entry.name)26304 if m is None:26305 continue26306 migrations.append(26307 Migration(26308 version=int(m.group(1)),26309 name=m.group(2),26310 sql=entry.read_text(),26311 )26312 )26313 migrations.sort(key=lambda mig: mig.version)26314 versions = [m.version for m in migrations]26315 if len(set(versions)) != len(versions):26316 msg = f"Duplicate migration versions: {versions}"26317> raise MigrationError(msg)26318E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]2631926320nixbot/migrations.py:67: MigrationError26321=========================== short test summary info ============================26322FAILED nixbot/tests/test_db.py::test_load_migrations - nixbot.migrations.Migr...26323ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations...26324ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec26325ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migratio...26326ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations...26327ERROR nixbot/tests/test_cli_api.py::test_repos_and_builds - nixbot.migrations...26328ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - ...26329ERROR nixbot/tests/test_forge.py::test_project_store_sync_and_legacy_import26330ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nix...26331ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrati...26332ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect26333ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.Mig...26334ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migra...26335ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations....26336ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names26337ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - n...26338ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migra...26339ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot...26340ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbo...26341ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixb...26342ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows26343ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.mi...26344ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal26345ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.mig...26346ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations...26347ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migr...26348ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission26349ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.m...26350ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only26351ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrati...26352ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migratio...26353ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue26354ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.mig...26355ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrat...26356ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrat...26357ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationEr...26358ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrat...26359ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbo...26360ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - ni...26361ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - ...26362ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge26363ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.mig...26364ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid26365ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes26366ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - ...26367ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migra...26368ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema26369ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build26370ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.M...26371ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrat...26372ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbo...26373ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot....26374ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbo...26375ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixb...26376ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.Migrat...26377ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migra...26378ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - ...26379ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.Mi...26380ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.mi...26381ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations...26382ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.Migratio...26383ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone26384ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger26385ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired26386ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship26387ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot...26388ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows26389ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot....26390ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbo...26391ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - ...26392ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession26393ERROR nixbot/tests/e2e/test_browse.py::test_homepage_lists_project_and_recent_builds26394ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search26395ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.Mi...26396ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build26397ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.m...26398ERROR nixbot/tests/e2e/test_live.py::test_attribute_table_refreshes_while_building26399ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nix...26400ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nix...26401ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbo...26402ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.Migration...26403ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migra...26404ERROR nixbot/tests/e2e/test_browse.py::test_navigate_sidebar_to_failed_build26405ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos26406ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects26407ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds26408ERROR nixbot/tests/e2e/test_live.py::test_log_page_streams_live_output - nixb...26409ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migra...26410ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - ni...26411ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - n...26412ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - ...26413ERROR nixbot/tests/e2e/test_browse.py::test_build_prev_next_navigation - nixb...26414ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.m...26415ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue26416ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixb...26417ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base26418ERROR nixbot/tests/e2e/test_live.py::test_log_page_keeps_up_with_a_line_burst26419ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbo...26420ERROR nixbot/tests/test_cli.py::test_log_follow_finished_attr_falls_back_to_stored_log26421ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.mi...26422ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context26423ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - ...26424ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes26425ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - ni...26426ERROR nixbot/tests/e2e/test_browse.py::test_structured_log_viewer - nixbot.mi...26427ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - ni...26428ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - n...26429ERROR nixbot/tests/e2e/test_live.py::test_repeated_activity_keeps_one_card - ...26430ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message26431ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch26432ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot....26433ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.mig...26434ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.m...26435ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery26436ERROR nixbot/tests/e2e/test_browse.py::test_project_filter_form - nixbot.migr...26437ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver26438ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos26439ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings26440ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - ...26441ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.mi...26442ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migra...26443ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates26444ERROR nixbot/tests/e2e/test_browse.py::test_attribute_log_prev_next_navigation26445ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic26446ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects26447ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos26448ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbo...26449ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - n...26450ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nix...26451ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs26452ERROR nixbot/tests/e2e/test_browse.py::test_project_filter - nixbot.migration...26453ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up26454ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nix...26455ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrat...26456ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache26457ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.mi...26458ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded26459ERROR nixbot/tests/e2e/test_browse.py::test_activity_shows_running_build - ni...26460ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - ni...26461ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build26462ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrat...26463ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates26464ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migra...26465ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized26466ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrati...26467ERROR nixbot/tests/e2e/test_browse.py::test_activity_infinite_scroll - nixbot...26468ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names26469ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrat...26470ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot....26471ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.mig...26472ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings26473ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrat...26474ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - ...26475ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.Mi...26476ERROR nixbot/tests/e2e/test_browse.py::test_no_horizontal_overflow_on_mobile26477ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - ...26478ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project26479ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - ...26480ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns26481ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields26482ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.mi...26483ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop26484ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending26485ERROR nixbot/tests/e2e/test_browse.py::test_attribute_search_filters_groups26486ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups26487ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.Mig...26488ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - n...26489ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migr...26490ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - ...26491ERROR nixbot/tests/e2e/test_browse.py::test_groups_keep_identity_when_one_appears26492ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbo...26493ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery26494ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache26495ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates26496ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.Mig...26497ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request26498ERROR nixbot/tests/test_forge.py::test_register_repo_hook_500_with_403_in_body_raises26499ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - ...26500ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - n...26501ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migratio...26502ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty26503ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows26504ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history26505ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbo...26506ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification26507ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs26508ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migr...26509ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status26510ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes26511ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload26512ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrati...26513ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.Migrat...26514ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached26515ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns26516ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached26517ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates26518ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.m...26519ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nix...26520ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - ...26521ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata26522ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - n...26523ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs26524ERROR nixbot/tests/test_service.py::test_restart_while_unwinding_waits_then_runs26525ERROR nixbot/tests/test_control.py::test_token_creation_with_expiry - nixbot....26526ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixb...26527ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs26528ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running26529ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - n...26530ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.m...26531ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github]26532ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens26533ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status26534ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.M...26535ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab]26536ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.mi...26537ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot....26538ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.M...26539ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows26540ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds26541ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.m...26542ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows26543ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixb...26544ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at26545ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status26546ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot....26547ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build26548ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows26549ERROR nixbot/tests/test_orchestrator.py::test_stale_event_does_not_supersede_newer_build26550ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot...26551ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable26552ERROR nixbot/tests/test_db.py::test_failed_build_cache_scoped_per_project - n...26553ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.mi...26554ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_cleans_cancel_events26555ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery26556ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations....26557ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility26558ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.mi...26559ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - ...26560ERROR nixbot/tests/test_service.py::test_startup_reevaluates_interrupted_eval26561ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects26562ERROR nixbot/tests/test_control.py::test_webhook_secret_regeneration - nixbot...26563ERROR nixbot/tests/test_orchestrator.py::test_eval_netrc_withheld_from_pr_with_instance_wide_creds26564ERROR nixbot/tests/test_service.py::test_rerun_of_interrupted_eval_reevaluates26565ERROR nixbot/tests/test_web.py::test_legacy_redirect_404s_on_ambiguous_owner_name26566ERROR nixbot/tests/test_control.py::test_retry_after_parsing - nixbot.migrati...26567ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build26568ERROR nixbot/tests/test_service.py::test_rerun_resumes_building_rows_and_keeps_finished26569ERROR nixbot/tests/test_web.py::test_health_and_static - nixbot.migrations.Mi...26570ERROR nixbot/tests/test_control.py::test_work_retry_delay_honors_retry_after26571ERROR nixbot/tests/test_orchestrator.py::test_effects_run_after_default_branch_success26572ERROR nixbot/tests/test_web.py::test_404s - nixbot.migrations.MigrationError:...26573ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected26574ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.Mig...26575ERROR nixbot/tests/test_orchestrator.py::test_pr_worktree_config_cannot_grant_effects26576ERROR nixbot/tests/test_service.py::test_reeval_failure_marks_build_failed - ...26577ERROR nixbot/tests/test_web.py::test_log_viewer_and_raw - nixbot.migrations.M...26578ERROR nixbot/tests/test_control.py::test_effect_item_setup_failure_settles_row26579ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again26580ERROR nixbot/tests/test_service.py::test_gitlab_discovery_and_hook_registration26581ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrat...26582ERROR nixbot/tests/test_control.py::test_restart_attribute_posts_pending - ni...26583ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect26584ERROR nixbot/tests/test_web.py::test_structured_log_window_caps_huge_derivation26585ERROR nixbot/tests/test_control.py::test_recovery_reports_interrupted_effects26586ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.mi...26587ERROR nixbot/tests/test_service.py::test_health_serves_while_startup_blocks26588ERROR nixbot/tests/test_web.py::test_attr_named_dot_txt_not_shadowed_by_raw_route26589ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.Mi...26590ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - n...26591ERROR nixbot/tests/test_web.py::test_attr_names_with_special_characters - nix...26592ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migr...26593ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation26594ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - ...26595ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migra...26596ERROR nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure26597ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status26598ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot...26599ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbo...26600ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_settles_streamed_attributes26601ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbo...26602ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrati...26603ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot....26604ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbo...26605ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations...26606ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending26607ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending26608ERROR nixbot/tests/test_orchestrator.py::test_effect_crash_settles_the_row - ...26609ERROR nixbot/tests/test_web.py::test_queue_sorts_active_before_pending - nixb...26610ERROR nixbot/tests/test_orchestrator.py::test_concurrent_effects_use_independent_worktrees26611ERROR nixbot/tests/test_web.py::test_queue_position_is_global_and_skips_running26612ERROR nixbot/tests/test_orchestrator.py::test_locked_effect_gets_shared_dedup_key26613ERROR nixbot/tests/test_web.py::test_openapi_docs - nixbot.migrations.Migrati...26614ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migratio...26615ERROR nixbot/tests/test_orchestrator.py::test_effect_item_not_claimable_until_dep_settles26616ERROR nixbot/tests/test_web.py::test_drv_raw_serves_running_attribute - nixbo...26617ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent26618ERROR nixbot/tests/test_web.py::test_log_sse_stream_caps_history_backlog - ni...26619ERROR nixbot/tests/test_orchestrator.py::test_lock_serializes_builds_without_interleaving26620ERROR nixbot/tests/test_web.py::test_log_sse_stream_neutralizes_carriage_returns26621ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_cycle_fails_discovery26622ERROR nixbot/tests/test_web.py::test_api_builds_commit_filter - nixbot.migrat...26623ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status26624ERROR nixbot/tests/test_web.py::test_log_tail_param - nixbot.migrations.Migra...26625ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build26626ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build26627ERROR nixbot/tests/test_web.py::test_api_build_failures - nixbot.migrations.M...26628ERROR nixbot/tests/test_orchestrator.py::test_reuse_empty_succeeded_build_posts_eval_success26629ERROR nixbot/tests/test_web.py::test_api_build_failures_rejects_non_positive_tail26630ERROR nixbot/tests/test_orchestrator.py::test_stale_event_reusing_old_build_does_not_cancel_newer26631ERROR nixbot/tests/test_web.py::test_llms_txt - nixbot.migrations.MigrationEr...26632ERROR nixbot/tests/test_orchestrator.py::test_reuse_for_default_branch_push_runs_effects26633ERROR nixbot/tests/test_web.py::test_event_broker_pushes_status_changes - nix...26634ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit26635ERROR nixbot/tests/test_web.py::test_events_stream_coalesces_burst - nixbot.m...26636ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status26637ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nix...26638ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.Mig...26639ERROR nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts26640ERROR nixbot/tests/test_web.py::test_build_page_shows_effects - nixbot.migrat...26641ERROR nixbot/tests/test_orchestrator.py::test_effect_log_does_not_collide_with_attribute_log26642ERROR nixbot/tests/test_web.py::test_build_page_shows_event_effects - nixbot....26643ERROR nixbot/tests/test_orchestrator.py::test_post_process_paths_are_forge_scoped26644ERROR nixbot/tests/test_web.py::test_effect_log_raw_text - nixbot.migrations....26645ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build26646ERROR nixbot/tests/test_web.py::test_effect_log_viewer_status_icon - nixbot.m...26647ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status26648ERROR nixbot/tests/test_web.py::test_effect_changes_notify_build_events - nix...26649ERROR nixbot/tests/test_orchestrator.py::test_reuse_with_missing_output_still_post_processes26650ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.Mi...26651ERROR nixbot/tests/test_web.py::test_pr_comment_api - nixbot.migrations.Migra...26652ERROR nixbot/tests/test_web.py::test_workload_identity_api - nixbot.migration...26653ERROR nixbot/tests/test_web.py::test_logout_revokes_session_cookie - nixbot.m...26654ERROR nixbot/tests/test_web.py::test_gitlab_nested_group_routes - nixbot.migr...26655ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_renders_ansi - nixb...26656ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_40426657ERROR nixbot/tests/test_web.py::test_scheduled_run_log_unavailable_placeholder26658ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_waiting_before_log26659ERROR nixbot/tests/test_web.py::test_scheduled_run_history_lists_runs - nixbo...26660ERROR nixbot/tests/test_web.py::test_scheduled_run_history_special_chars - ni...26661ERROR nixbot/tests/test_web.py::test_scheduled_run_stream_replays_history - n...26662ERROR nixbot/tests/test_web.py::test_scheduled_run_notify_build_events - nixb...26663ERROR nixbot/tests/test_web.py::test_api_log_toc_and_text - nixbot.migrations...26664ERROR nixbot/tests/test_web.py::test_api_log_toc_flat_log_fallback - nixbot.m...26665ERROR nixbot/tests/test_web.py::test_api_log_stream_json - nixbot.migrations....26666ERROR nixbot/tests/test_web.py::test_build_eval_stats_surface - nixbot.migrat...26667============ 1 failed, 450 passed, 12 skipped, 344 errors in 12.17s ============