python3.14-nixbot-tests
checks.aarch64-linux.nixbot-tests
· build #365
· raw
1tribuchet: building on eliza2Sourcing 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/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests38checking for references to /build/ in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests...39patching script interpreter paths in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests40stripping (with command strip and flags -S -p) in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests/lib /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests/bin41shrinking RPATHs of ELF executables and libraries in /nix/store/c7cgpgx5l8qkmqdl3l2206vmzwysyyqm-python3.14-nixbot-tests-dist42checking for references to /build/ in /nix/store/c7cgpgx5l8qkmqdl3l2206vmzwysyyqm-python3.14-nixbot-tests-dist...43patching script interpreter paths in /nix/store/c7cgpgx5l8qkmqdl3l2206vmzwysyyqm-python3.14-nixbot-tests-dist44Rewriting #!/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 to #!/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.645wrapping `/nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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/2xp5r99cnys85h806mpdw43bz48y05ds-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........................................................................ [ 17%]117.........................................................F.............. [ 26%]118........................................................................ [ 35%]119.....................................s.............................EEEEE [ 44%]120EEEE..EE.EEEEE.EE.EEE.EEEEEEEE.E...EEEEEEEEE.EE.E..EEE.E.EEEEEEEEE..EEEE [ 53%]121EEEE.EEEEEEEEEE.E.EEE.EE..EEEEEEEE..EEE.E.EEE.E.EEE...EEE..E..EE.E..E... [ 62%]122EE.E...............E..E.....E.EEEEEEEEEE..EEEE.EEEEEEEEEEEEEEEEEEEE.EEEE [ 71%]123Es.EEEE.EEEE.EEE.E...sE.EEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEE.EEEE [ 80%]124EEEEEEEEEEEEEEEEE.E.EEEEEEEEEEEEEEEEE..E........EEEEE.EEEEEEEE...E.E.EEE [ 89%]125EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEE.E.....EEE [ 98%]126EEEEEEEEEEEEEEE [100%]127==================================== ERRORS ====================================128_________ ERROR at setup of test_project_store_sync_and_legacy_import __________129[gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14130131self = <Coroutine test_project_store_sync_and_legacy_import>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/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 147_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 148/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result163 return self.__get_result()164 ^^^^^^^^^^^^^^^^^^^165/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result166 raise self._exception167/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run168 result = ctx.run(self.task)169 ^^^^^^^^^^^^^^^^^^170/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run171 return fn(*args, **kwargs)172 ^^^^^^^^^^^^^^^^^^^173/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run174 return runner.run(main)175 ^^^^^^^^^^^^^^^^176/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run177 return self._loop.run_until_complete(task)178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^179/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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_match_skip_and_run ___________________210[gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14211212self = <Coroutine test_match_skip_and_run>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/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 228_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result244 return self.__get_result()245 ^^^^^^^^^^^^^^^^^^^246/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result247 raise self._exception248/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run249 result = ctx.run(self.task)250 ^^^^^^^^^^^^^^^^^^251/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run252 return fn(*args, **kwargs)253 ^^^^^^^^^^^^^^^^^^^254/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run255 return runner.run(main)256 ^^^^^^^^^^^^^^^^257/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run258 return self._loop.run_until_complete(task)259 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^260/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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_migrations_idempotent _________________291[gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14292293self = <Coroutine test_migrations_idempotent>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/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 309_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 310/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result325 return self.__get_result()326 ^^^^^^^^^^^^^^^^^^^327/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result328 raise self._exception329/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run330 result = ctx.run(self.task)331 ^^^^^^^^^^^^^^^^^^332/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run333 return fn(*args, **kwargs)334 ^^^^^^^^^^^^^^^^^^^335/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run336 return runner.run(main)337 ^^^^^^^^^^^^^^^^338/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run339 return self._loop.run_until_complete(task)340 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^341/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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_anonymous_sees_public_only _______________372[gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14373374fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>375request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>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/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result410 return self.__get_result()411 ^^^^^^^^^^^^^^^^^^^412/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result413 raise self._exception414/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run415 result = ctx.run(self.task)416 ^^^^^^^^^^^^^^^^^^417/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run418 return fn(*args, **kwargs)419 ^^^^^^^^^^^^^^^^^^^420/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run421 return runner.run(main)422 ^^^^^^^^^^^^^^^^423/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run424 return self._loop.run_until_complete(task)425 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^426/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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_control_buttons_hidden_without_permission _______457[gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14458459fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>460request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>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/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result495 return self.__get_result()496 ^^^^^^^^^^^^^^^^^^^497/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result498 raise self._exception499/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run500 result = ctx.run(self.task)501 ^^^^^^^^^^^^^^^^^^502/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run503 return fn(*args, **kwargs)504 ^^^^^^^^^^^^^^^^^^^505/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run506 return runner.run(main)507 ^^^^^^^^^^^^^^^^508/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run509 return self._loop.run_until_complete(task)510 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^511/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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_scheduled_worktree_id_distinct_per_effect _______542[gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14543544fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>545request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>546547 @pytest.hookimpl(wrapper=True)548 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:549 if (550 fixturedef.argname == "event_loop_policy"551 and fixturedef.func.__module__ != __name__552 ):553 warnings.warn(554 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),555 )556 asyncio_mode = _get_asyncio_mode(request.config)557 if not _is_asyncio_fixture_function(fixturedef.func):558 if asyncio_mode == Mode.STRICT:559 # Ignore async fixtures without explicit asyncio mark in strict mode560 # This applies to pytest_trio fixtures, for example561 return (yield)562 if not _is_coroutine_or_asyncgen(fixturedef.func):563> return (yield)564 ^^^^^565566/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 567_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 568nixbot/tests/conftest.py:33: in postgres_dsn569 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:570 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^571/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__572 return next(self.gen)573 ^^^^^^^^^^^^^^574nixbot/tests/support.py:327: in ephemeral_postgres575 run_sync(apply_migrations(dsn))576nixbot/tests/support.py:285: in run_sync577 return executor.submit(asyncio.run, coro).result(timeout=120)578 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^579/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result580 return self.__get_result()581 ^^^^^^^^^^^^^^^^^^^582/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result583 raise self._exception584/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run585 result = ctx.run(self.task)586 ^^^^^^^^^^^^^^^^^^587/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run588 return fn(*args, **kwargs)589 ^^^^^^^^^^^^^^^^^^^590/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run591 return runner.run(main)592 ^^^^^^^^^^^^^^^^593/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run594 return self._loop.run_until_complete(task)595 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^596/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete597 return future.result()598 ^^^^^^^^^^^^^^^599nixbot/migrations.py:99: in apply_migrations600 migrations = load_migrations()601 ^^^^^^^^^^^^^^^^^602_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 603604 def load_migrations() -> list[Migration]:605 """Load migration scripts shipped with the package, ordered by version."""606 migrations = []607 for entry in resources.files(__package__).joinpath("migrations").iterdir():608 m = _SCRIPT_RE.match(entry.name)609 if m is None:610 continue611 migrations.append(612 Migration(613 version=int(m.group(1)),614 name=m.group(2),615 sql=entry.read_text(),616 )617 )618 migrations.sort(key=lambda mig: mig.version)619 versions = [m.version for m in migrations]620 if len(set(versions)) != len(versions):621 msg = f"Duplicate migration versions: {versions}"622> raise MigrationError(msg)623E 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]624625nixbot/migrations.py:67: MigrationError626___________ ERROR at setup of test_resume_skips_terminal_attributes ____________627[gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14628629self = <Coroutine test_resume_skips_terminal_attributes>630631 def setup(self) -> None:632 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"633 if runner_fixture_id not in self.fixturenames:634 self.fixturenames.append(runner_fixture_id)635 # When loop factories are configured, resolve the loop factory636 # fixture early so that a factory variant change cascades cache637 # invalidation before any async fixture checks its cache.638 hook_caller = self.config.hook.pytest_asyncio_loop_factories639 if hook_caller.get_hookimpls():640 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)641> return super().setup()642 ^^^^^^^^^^^^^^^643644/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 645_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 646/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup647 return (yield)648 ^^^^^649nixbot/tests/conftest.py:33: in postgres_dsn650 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:651 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^652/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__653 return next(self.gen)654 ^^^^^^^^^^^^^^655nixbot/tests/support.py:327: in ephemeral_postgres656 run_sync(apply_migrations(dsn))657nixbot/tests/support.py:285: in run_sync658 return executor.submit(asyncio.run, coro).result(timeout=120)659 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^660/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result661 return self.__get_result()662 ^^^^^^^^^^^^^^^^^^^663/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result664 raise self._exception665/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run666 result = ctx.run(self.task)667 ^^^^^^^^^^^^^^^^^^668/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run669 return fn(*args, **kwargs)670 ^^^^^^^^^^^^^^^^^^^671/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run672 return runner.run(main)673 ^^^^^^^^^^^^^^^^674/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run675 return self._loop.run_until_complete(task)676 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^677/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete678 return future.result()679 ^^^^^^^^^^^^^^^680nixbot/migrations.py:99: in apply_migrations681 migrations = load_migrations()682 ^^^^^^^^^^^^^^^^^683_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 684685 def load_migrations() -> list[Migration]:686 """Load migration scripts shipped with the package, ordered by version."""687 migrations = []688 for entry in resources.files(__package__).joinpath("migrations").iterdir():689 m = _SCRIPT_RE.match(entry.name)690 if m is None:691 continue692 migrations.append(693 Migration(694 version=int(m.group(1)),695 name=m.group(2),696 sql=entry.read_text(),697 )698 )699 migrations.sort(key=lambda mig: mig.version)700 versions = [m.version for m in migrations]701 if len(set(versions)) != len(versions):702 msg = f"Duplicate migration versions: {versions}"703> raise MigrationError(msg)704E 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]705706nixbot/migrations.py:67: MigrationError707___________________ ERROR at setup of test_html_error_pages ____________________708[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14709710fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>711request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>712713 @pytest.hookimpl(wrapper=True)714 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:715 if (716 fixturedef.argname == "event_loop_policy"717 and fixturedef.func.__module__ != __name__718 ):719 warnings.warn(720 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),721 )722 asyncio_mode = _get_asyncio_mode(request.config)723 if not _is_asyncio_fixture_function(fixturedef.func):724 if asyncio_mode == Mode.STRICT:725 # Ignore async fixtures without explicit asyncio mark in strict mode726 # This applies to pytest_trio fixtures, for example727 return (yield)728 if not _is_coroutine_or_asyncgen(fixturedef.func):729> return (yield)730 ^^^^^731732/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 733_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 734nixbot/tests/conftest.py:33: in postgres_dsn735 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:736 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^737/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__738 return next(self.gen)739 ^^^^^^^^^^^^^^740nixbot/tests/support.py:327: in ephemeral_postgres741 run_sync(apply_migrations(dsn))742nixbot/tests/support.py:285: in run_sync743 return executor.submit(asyncio.run, coro).result(timeout=120)744 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^745/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result746 return self.__get_result()747 ^^^^^^^^^^^^^^^^^^^748/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result749 raise self._exception750/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run751 result = ctx.run(self.task)752 ^^^^^^^^^^^^^^^^^^753/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run754 return fn(*args, **kwargs)755 ^^^^^^^^^^^^^^^^^^^756/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run757 return runner.run(main)758 ^^^^^^^^^^^^^^^^759/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run760 return self._loop.run_until_complete(task)761 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^762/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete763 return future.result()764 ^^^^^^^^^^^^^^^765nixbot/migrations.py:99: in apply_migrations766 migrations = load_migrations()767 ^^^^^^^^^^^^^^^^^768_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 769770 def load_migrations() -> list[Migration]:771 """Load migration scripts shipped with the package, ordered by version."""772 migrations = []773 for entry in resources.files(__package__).joinpath("migrations").iterdir():774 m = _SCRIPT_RE.match(entry.name)775 if m is None:776 continue777 migrations.append(778 Migration(779 version=int(m.group(1)),780 name=m.group(2),781 sql=entry.read_text(),782 )783 )784 migrations.sort(key=lambda mig: mig.version)785 versions = [m.version for m in migrations]786 if len(set(versions)) != len(versions):787 msg = f"Duplicate migration versions: {versions}"788> raise MigrationError(msg)789E 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]790791nixbot/migrations.py:67: MigrationError792____________________ ERROR at setup of test_full_lifecycle _____________________793[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14794795self = <Coroutine test_full_lifecycle>796797 def setup(self) -> None:798 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"799 if runner_fixture_id not in self.fixturenames:800 self.fixturenames.append(runner_fixture_id)801 # When loop factories are configured, resolve the loop factory802 # fixture early so that a factory variant change cascades cache803 # invalidation before any async fixture checks its cache.804 hook_caller = self.config.hook.pytest_asyncio_loop_factories805 if hook_caller.get_hookimpls():806 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)807> return super().setup()808 ^^^^^^^^^^^^^^^809810/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 811_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 812/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup813 return (yield)814 ^^^^^815nixbot/tests/conftest.py:33: in postgres_dsn816 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:817 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^818/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__819 return next(self.gen)820 ^^^^^^^^^^^^^^821nixbot/tests/support.py:327: in ephemeral_postgres822 run_sync(apply_migrations(dsn))823nixbot/tests/support.py:285: in run_sync824 return executor.submit(asyncio.run, coro).result(timeout=120)825 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^826/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result827 return self.__get_result()828 ^^^^^^^^^^^^^^^^^^^829/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result830 raise self._exception831/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run832 result = ctx.run(self.task)833 ^^^^^^^^^^^^^^^^^^834/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run835 return fn(*args, **kwargs)836 ^^^^^^^^^^^^^^^^^^^837/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run838 return runner.run(main)839 ^^^^^^^^^^^^^^^^840/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run841 return self._loop.run_until_complete(task)842 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^843/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete844 return future.result()845 ^^^^^^^^^^^^^^^846nixbot/migrations.py:99: in apply_migrations847 migrations = load_migrations()848 ^^^^^^^^^^^^^^^^^849_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 850851 def load_migrations() -> list[Migration]:852 """Load migration scripts shipped with the package, ordered by version."""853 migrations = []854 for entry in resources.files(__package__).joinpath("migrations").iterdir():855 m = _SCRIPT_RE.match(entry.name)856 if m is None:857 continue858 migrations.append(859 Migration(860 version=int(m.group(1)),861 name=m.group(2),862 sql=entry.read_text(),863 )864 )865 migrations.sort(key=lambda mig: mig.version)866 versions = [m.version for m in migrations]867 if len(set(versions)) != len(versions):868 msg = f"Duplicate migration versions: {versions}"869> raise MigrationError(msg)870E 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]871872nixbot/migrations.py:67: MigrationError873___________ ERROR at setup of test_permission_denied_records_reason ____________874[gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14875876self = <Coroutine test_permission_denied_records_reason>877878 def setup(self) -> None:879 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"880 if runner_fixture_id not in self.fixturenames:881 self.fixturenames.append(runner_fixture_id)882 # When loop factories are configured, resolve the loop factory883 # fixture early so that a factory variant change cascades cache884 # invalidation before any async fixture checks its cache.885 hook_caller = self.config.hook.pytest_asyncio_loop_factories886 if hook_caller.get_hookimpls():887 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)888> return super().setup()889 ^^^^^^^^^^^^^^^890891/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 892_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 893nixbot/tests/conftest.py:33: in postgres_dsn894 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:895 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^896/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__897 return next(self.gen)898 ^^^^^^^^^^^^^^899nixbot/tests/support.py:327: in ephemeral_postgres900 run_sync(apply_migrations(dsn))901nixbot/tests/support.py:285: in run_sync902 return executor.submit(asyncio.run, coro).result(timeout=120)903 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^904/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result905 return self.__get_result()906 ^^^^^^^^^^^^^^^^^^^907/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result908 raise self._exception909/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run910 result = ctx.run(self.task)911 ^^^^^^^^^^^^^^^^^^912/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run913 return fn(*args, **kwargs)914 ^^^^^^^^^^^^^^^^^^^915/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run916 return runner.run(main)917 ^^^^^^^^^^^^^^^^918/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run919 return self._loop.run_until_complete(task)920 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^921/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete922 return future.result()923 ^^^^^^^^^^^^^^^924nixbot/migrations.py:99: in apply_migrations925 migrations = load_migrations()926 ^^^^^^^^^^^^^^^^^927_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 928929 def load_migrations() -> list[Migration]:930 """Load migration scripts shipped with the package, ordered by version."""931 migrations = []932 for entry in resources.files(__package__).joinpath("migrations").iterdir():933 m = _SCRIPT_RE.match(entry.name)934 if m is None:935 continue936 migrations.append(937 Migration(938 version=int(m.group(1)),939 name=m.group(2),940 sql=entry.read_text(),941 )942 )943 migrations.sort(key=lambda mig: mig.version)944 versions = [m.version for m in migrations]945 if len(set(versions)) != len(versions):946 msg = f"Duplicate migration versions: {versions}"947> raise MigrationError(msg)948E 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]949950nixbot/migrations.py:67: MigrationError951______ ERROR at setup of test_legacy_import_runs_despite_pull_based_rows _______952[gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14953954self = <Coroutine test_legacy_import_runs_despite_pull_based_rows>955956 def setup(self) -> None:957 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"958 if runner_fixture_id not in self.fixturenames:959 self.fixturenames.append(runner_fixture_id)960 # When loop factories are configured, resolve the loop factory961 # fixture early so that a factory variant change cascades cache962 # invalidation before any async fixture checks its cache.963 hook_caller = self.config.hook.pytest_asyncio_loop_factories964 if hook_caller.get_hookimpls():965 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)966> return super().setup()967 ^^^^^^^^^^^^^^^968969/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 970_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 971nixbot/tests/conftest.py:33: in postgres_dsn972 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:973 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^974/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__975 return next(self.gen)976 ^^^^^^^^^^^^^^977nixbot/tests/support.py:327: in ephemeral_postgres978 run_sync(apply_migrations(dsn))979nixbot/tests/support.py:285: in run_sync980 return executor.submit(asyncio.run, coro).result(timeout=120)981 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^982/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result983 return self.__get_result()984 ^^^^^^^^^^^^^^^^^^^985/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result986 raise self._exception987/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run988 result = ctx.run(self.task)989 ^^^^^^^^^^^^^^^^^^990/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run991 return fn(*args, **kwargs)992 ^^^^^^^^^^^^^^^^^^^993/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run994 return runner.run(main)995 ^^^^^^^^^^^^^^^^996/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run997 return self._loop.run_until_complete(task)998 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^999/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1000 return future.result()1001 ^^^^^^^^^^^^^^^1002nixbot/migrations.py:99: in apply_migrations1003 migrations = load_migrations()1004 ^^^^^^^^^^^^^^^^^1005_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10061007 def load_migrations() -> list[Migration]:1008 """Load migration scripts shipped with the package, ordered by version."""1009 migrations = []1010 for entry in resources.files(__package__).joinpath("migrations").iterdir():1011 m = _SCRIPT_RE.match(entry.name)1012 if m is None:1013 continue1014 migrations.append(1015 Migration(1016 version=int(m.group(1)),1017 name=m.group(2),1018 sql=entry.read_text(),1019 )1020 )1021 migrations.sort(key=lambda mig: mig.version)1022 versions = [m.version for m in migrations]1023 if len(set(versions)) != len(versions):1024 msg = f"Duplicate migration versions: {versions}"1025> raise MigrationError(msg)1026E 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]10271028nixbot/migrations.py:67: MigrationError1029_____________ ERROR at setup of test_admin_can_restart_and_cancel ______________1030[gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1410311032request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1033tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')10341035 @pytest.fixture(scope="module")1036 def postgres_dsn(1037 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1038 ) -> Iterator[str]:1039 if shutil.which("initdb") is None:1040 pytest.skip("postgresql not available")1041 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1042> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1043 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^10441045nixbot/tests/conftest.py:33: 1046_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1047/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1048 return next(self.gen)1049 ^^^^^^^^^^^^^^1050nixbot/tests/support.py:327: in ephemeral_postgres1051 run_sync(apply_migrations(dsn))1052nixbot/tests/support.py:285: in run_sync1053 return executor.submit(asyncio.run, coro).result(timeout=120)1054 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1055/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1056 return self.__get_result()1057 ^^^^^^^^^^^^^^^^^^^1058/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1059 raise self._exception1060/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1061 result = ctx.run(self.task)1062 ^^^^^^^^^^^^^^^^^^1063/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1064 return fn(*args, **kwargs)1065 ^^^^^^^^^^^^^^^^^^^1066/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1067 return runner.run(main)1068 ^^^^^^^^^^^^^^^^1069/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1070 return self._loop.run_until_complete(task)1071 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1072/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1073 return future.result()1074 ^^^^^^^^^^^^^^^1075nixbot/migrations.py:99: in apply_migrations1076 migrations = load_migrations()1077 ^^^^^^^^^^^^^^^^^1078_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10791080 def load_migrations() -> list[Migration]:1081 """Load migration scripts shipped with the package, ordered by version."""1082 migrations = []1083 for entry in resources.files(__package__).joinpath("migrations").iterdir():1084 m = _SCRIPT_RE.match(entry.name)1085 if m is None:1086 continue1087 migrations.append(1088 Migration(1089 version=int(m.group(1)),1090 name=m.group(2),1091 sql=entry.read_text(),1092 )1093 )1094 migrations.sort(key=lambda mig: mig.version)1095 versions = [m.version for m in migrations]1096 if len(set(versions)) != len(versions):1097 msg = f"Duplicate migration versions: {versions}"1098> raise MigrationError(msg)1099E 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]11001101nixbot/migrations.py:67: MigrationError1102__________ ERROR at setup of test_unauthorized_user_sees_public_only ___________1103[gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1411041105request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>1106tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=<pluggy._tracing.TagT...d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all')11071108 @pytest.fixture(scope="module")1109 def postgres_dsn(1110 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1111 ) -> Iterator[str]:1112 if shutil.which("initdb") is None:1113 pytest.skip("postgresql not available")1114 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1115> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1116 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^11171118nixbot/tests/conftest.py:33: 1119_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1120/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1121 return next(self.gen)1122 ^^^^^^^^^^^^^^1123nixbot/tests/support.py:327: in ephemeral_postgres1124 run_sync(apply_migrations(dsn))1125nixbot/tests/support.py:285: in run_sync1126 return executor.submit(asyncio.run, coro).result(timeout=120)1127 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1128/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1129 return self.__get_result()1130 ^^^^^^^^^^^^^^^^^^^1131/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1132 raise self._exception1133/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1134 result = ctx.run(self.task)1135 ^^^^^^^^^^^^^^^^^^1136/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1137 return fn(*args, **kwargs)1138 ^^^^^^^^^^^^^^^^^^^1139/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1140 return runner.run(main)1141 ^^^^^^^^^^^^^^^^1142/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1143 return self._loop.run_until_complete(task)1144 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1145/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1146 return future.result()1147 ^^^^^^^^^^^^^^^1148nixbot/migrations.py:99: in apply_migrations1149 migrations = load_migrations()1150 ^^^^^^^^^^^^^^^^^1151_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11521153 def load_migrations() -> list[Migration]:1154 """Load migration scripts shipped with the package, ordered by version."""1155 migrations = []1156 for entry in resources.files(__package__).joinpath("migrations").iterdir():1157 m = _SCRIPT_RE.match(entry.name)1158 if m is None:1159 continue1160 migrations.append(1161 Migration(1162 version=int(m.group(1)),1163 name=m.group(2),1164 sql=entry.read_text(),1165 )1166 )1167 migrations.sort(key=lambda mig: mig.version)1168 versions = [m.version for m in migrations]1169 if len(set(versions)) != len(versions):1170 msg = f"Duplicate migration versions: {versions}"1171> raise MigrationError(msg)1172E 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]11731174nixbot/migrations.py:67: MigrationError1175____________ ERROR at setup of test_chunk_args_splits_on_byte_limit ____________1176[gw22] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1411771178fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1179request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>11801181 @pytest.hookimpl(wrapper=True)1182 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1183 if (1184 fixturedef.argname == "event_loop_policy"1185 and fixturedef.func.__module__ != __name__1186 ):1187 warnings.warn(1188 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1189 )1190 asyncio_mode = _get_asyncio_mode(request.config)1191 if not _is_asyncio_fixture_function(fixturedef.func):1192 if asyncio_mode == Mode.STRICT:1193 # Ignore async fixtures without explicit asyncio mark in strict mode1194 # This applies to pytest_trio fixtures, for example1195 return (yield)1196 if not _is_coroutine_or_asyncgen(fixturedef.func):1197> return (yield)1198 ^^^^^11991200/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1201_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1202nixbot/tests/conftest.py:33: in postgres_dsn1203 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1204 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1205/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1206 return next(self.gen)1207 ^^^^^^^^^^^^^^1208nixbot/tests/support.py:327: in ephemeral_postgres1209 run_sync(apply_migrations(dsn))1210nixbot/tests/support.py:285: in run_sync1211 return executor.submit(asyncio.run, coro).result(timeout=120)1212 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1213/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1214 return self.__get_result()1215 ^^^^^^^^^^^^^^^^^^^1216/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1217 raise self._exception1218/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1219 result = ctx.run(self.task)1220 ^^^^^^^^^^^^^^^^^^1221/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1222 return fn(*args, **kwargs)1223 ^^^^^^^^^^^^^^^^^^^1224/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1225 return runner.run(main)1226 ^^^^^^^^^^^^^^^^1227/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1228 return self._loop.run_until_complete(task)1229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1230/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1231 return future.result()1232 ^^^^^^^^^^^^^^^1233nixbot/migrations.py:99: in apply_migrations1234 migrations = load_migrations()1235 ^^^^^^^^^^^^^^^^^1236_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12371238 def load_migrations() -> list[Migration]:1239 """Load migration scripts shipped with the package, ordered by version."""1240 migrations = []1241 for entry in resources.files(__package__).joinpath("migrations").iterdir():1242 m = _SCRIPT_RE.match(entry.name)1243 if m is None:1244 continue1245 migrations.append(1246 Migration(1247 version=int(m.group(1)),1248 name=m.group(2),1249 sql=entry.read_text(),1250 )1251 )1252 migrations.sort(key=lambda mig: mig.version)1253 versions = [m.version for m in migrations]1254 if len(set(versions)) != len(versions):1255 msg = f"Duplicate migration versions: {versions}"1256> raise MigrationError(msg)1257E 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]12581259nixbot/migrations.py:67: MigrationError1260_______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______1261[gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1412621263request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>1264tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')12651266 @pytest.fixture(scope="module")1267 def postgres_dsn(1268 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1269 ) -> Iterator[str]:1270 if shutil.which("initdb") is None:1271 pytest.skip("postgresql not available")1272 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1273> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1274 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^12751276nixbot/tests/conftest.py:33: 1277_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1278/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1279 return next(self.gen)1280 ^^^^^^^^^^^^^^1281nixbot/tests/support.py:327: in ephemeral_postgres1282 run_sync(apply_migrations(dsn))1283nixbot/tests/support.py:285: in run_sync1284 return executor.submit(asyncio.run, coro).result(timeout=120)1285 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1286/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1287 return self.__get_result()1288 ^^^^^^^^^^^^^^^^^^^1289/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1290 raise self._exception1291/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1292 result = ctx.run(self.task)1293 ^^^^^^^^^^^^^^^^^^1294/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1295 return fn(*args, **kwargs)1296 ^^^^^^^^^^^^^^^^^^^1297/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1298 return runner.run(main)1299 ^^^^^^^^^^^^^^^^1300/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1301 return self._loop.run_until_complete(task)1302 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1303/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1304 return future.result()1305 ^^^^^^^^^^^^^^^1306nixbot/migrations.py:99: in apply_migrations1307 migrations = load_migrations()1308 ^^^^^^^^^^^^^^^^^1309_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13101311 def load_migrations() -> list[Migration]:1312 """Load migration scripts shipped with the package, ordered by version."""1313 migrations = []1314 for entry in resources.files(__package__).joinpath("migrations").iterdir():1315 m = _SCRIPT_RE.match(entry.name)1316 if m is None:1317 continue1318 migrations.append(1319 Migration(1320 version=int(m.group(1)),1321 name=m.group(2),1322 sql=entry.read_text(),1323 )1324 )1325 migrations.sort(key=lambda mig: mig.version)1326 versions = [m.version for m in migrations]1327 if len(set(versions)) != len(versions):1328 msg = f"Duplicate migration versions: {versions}"1329> raise MigrationError(msg)1330E 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]13311332nixbot/migrations.py:67: MigrationError1333___________ ERROR at setup of test_failed_migration_error_not_masked ___________1334[gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1413351336self = <Coroutine test_failed_migration_error_not_masked>13371338 def setup(self) -> None:1339 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1340 if runner_fixture_id not in self.fixturenames:1341 self.fixturenames.append(runner_fixture_id)1342 # When loop factories are configured, resolve the loop factory1343 # fixture early so that a factory variant change cascades cache1344 # invalidation before any async fixture checks its cache.1345 hook_caller = self.config.hook.pytest_asyncio_loop_factories1346 if hook_caller.get_hookimpls():1347 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1348> return super().setup()1349 ^^^^^^^^^^^^^^^13501351/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1352_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1353nixbot/tests/conftest.py:33: in postgres_dsn1354 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1355 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1356/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1357 return next(self.gen)1358 ^^^^^^^^^^^^^^1359nixbot/tests/support.py:327: in ephemeral_postgres1360 run_sync(apply_migrations(dsn))1361nixbot/tests/support.py:285: in run_sync1362 return executor.submit(asyncio.run, coro).result(timeout=120)1363 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1364/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1365 return self.__get_result()1366 ^^^^^^^^^^^^^^^^^^^1367/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1368 raise self._exception1369/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1370 result = ctx.run(self.task)1371 ^^^^^^^^^^^^^^^^^^1372/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1373 return fn(*args, **kwargs)1374 ^^^^^^^^^^^^^^^^^^^1375/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1376 return runner.run(main)1377 ^^^^^^^^^^^^^^^^1378/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1379 return self._loop.run_until_complete(task)1380 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1381/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1382 return future.result()1383 ^^^^^^^^^^^^^^^1384nixbot/migrations.py:99: in apply_migrations1385 migrations = load_migrations()1386 ^^^^^^^^^^^^^^^^^1387_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13881389 def load_migrations() -> list[Migration]:1390 """Load migration scripts shipped with the package, ordered by version."""1391 migrations = []1392 for entry in resources.files(__package__).joinpath("migrations").iterdir():1393 m = _SCRIPT_RE.match(entry.name)1394 if m is None:1395 continue1396 migrations.append(1397 Migration(1398 version=int(m.group(1)),1399 name=m.group(2),1400 sql=entry.read_text(),1401 )1402 )1403 migrations.sort(key=lambda mig: mig.version)1404 versions = [m.version for m in migrations]1405 if len(set(versions)) != len(versions):1406 msg = f"Duplicate migration versions: {versions}"1407> raise MigrationError(msg)1408E 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]14091410nixbot/migrations.py:67: MigrationError1411______________ ERROR at setup of test_api_strips_ansi_from_errors ______________1412[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1414131414request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1415tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')14161417 @pytest.fixture(scope="module")1418 def postgres_dsn(1419 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1420 ) -> Iterator[str]:1421 if shutil.which("initdb") is None:1422 pytest.skip("postgresql not available")1423 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1424> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1425 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^14261427nixbot/tests/conftest.py:33: 1428_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1429/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1430 return next(self.gen)1431 ^^^^^^^^^^^^^^1432nixbot/tests/support.py:327: in ephemeral_postgres1433 run_sync(apply_migrations(dsn))1434nixbot/tests/support.py:285: in run_sync1435 return executor.submit(asyncio.run, coro).result(timeout=120)1436 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1437/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1438 return self.__get_result()1439 ^^^^^^^^^^^^^^^^^^^1440/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1441 raise self._exception1442/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1443 result = ctx.run(self.task)1444 ^^^^^^^^^^^^^^^^^^1445/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1446 return fn(*args, **kwargs)1447 ^^^^^^^^^^^^^^^^^^^1448/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1449 return runner.run(main)1450 ^^^^^^^^^^^^^^^^1451/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1452 return self._loop.run_until_complete(task)1453 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1454/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1455 return future.result()1456 ^^^^^^^^^^^^^^^1457nixbot/migrations.py:99: in apply_migrations1458 migrations = load_migrations()1459 ^^^^^^^^^^^^^^^^^1460_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14611462 def load_migrations() -> list[Migration]:1463 """Load migration scripts shipped with the package, ordered by version."""1464 migrations = []1465 for entry in resources.files(__package__).joinpath("migrations").iterdir():1466 m = _SCRIPT_RE.match(entry.name)1467 if m is None:1468 continue1469 migrations.append(1470 Migration(1471 version=int(m.group(1)),1472 name=m.group(2),1473 sql=entry.read_text(),1474 )1475 )1476 migrations.sort(key=lambda mig: mig.version)1477 versions = [m.version for m in migrations]1478 if len(set(versions)) != len(versions):1479 msg = f"Duplicate migration versions: {versions}"1480> raise MigrationError(msg)1481E 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]14821483nixbot/migrations.py:67: MigrationError1484_________________ ERROR at setup of test_repo_list_and_toggle __________________1485[gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1414861487fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1488request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>14891490 @pytest.hookimpl(wrapper=True)1491 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1492 if (1493 fixturedef.argname == "event_loop_policy"1494 and fixturedef.func.__module__ != __name__1495 ):1496 warnings.warn(1497 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1498 )1499 asyncio_mode = _get_asyncio_mode(request.config)1500 if not _is_asyncio_fixture_function(fixturedef.func):1501 if asyncio_mode == Mode.STRICT:1502 # Ignore async fixtures without explicit asyncio mark in strict mode1503 # This applies to pytest_trio fixtures, for example1504 return (yield)1505 if not _is_coroutine_or_asyncgen(fixturedef.func):1506> return (yield)1507 ^^^^^15081509/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1510_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1511nixbot/tests/conftest.py:33: in postgres_dsn1512 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1513 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1514/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1515 return next(self.gen)1516 ^^^^^^^^^^^^^^1517nixbot/tests/support.py:327: in ephemeral_postgres1518 run_sync(apply_migrations(dsn))1519nixbot/tests/support.py:285: in run_sync1520 return executor.submit(asyncio.run, coro).result(timeout=120)1521 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1522/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1523 return self.__get_result()1524 ^^^^^^^^^^^^^^^^^^^1525/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1526 raise self._exception1527/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1528 result = ctx.run(self.task)1529 ^^^^^^^^^^^^^^^^^^1530/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1531 return fn(*args, **kwargs)1532 ^^^^^^^^^^^^^^^^^^^1533/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1534 return runner.run(main)1535 ^^^^^^^^^^^^^^^^1536/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1537 return self._loop.run_until_complete(task)1538 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1539/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1540 return future.result()1541 ^^^^^^^^^^^^^^^1542nixbot/migrations.py:99: in apply_migrations1543 migrations = load_migrations()1544 ^^^^^^^^^^^^^^^^^1545_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15461547 def load_migrations() -> list[Migration]:1548 """Load migration scripts shipped with the package, ordered by version."""1549 migrations = []1550 for entry in resources.files(__package__).joinpath("migrations").iterdir():1551 m = _SCRIPT_RE.match(entry.name)1552 if m is None:1553 continue1554 migrations.append(1555 Migration(1556 version=int(m.group(1)),1557 name=m.group(2),1558 sql=entry.read_text(),1559 )1560 )1561 migrations.sort(key=lambda mig: mig.version)1562 versions = [m.version for m in migrations]1563 if len(set(versions)) != len(versions):1564 msg = f"Duplicate migration versions: {versions}"1565> raise MigrationError(msg)1566E 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]15671568nixbot/migrations.py:67: MigrationError1569_________________ ERROR at setup of test_settle_already_built __________________1570[gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1415711572self = <Coroutine test_settle_already_built>15731574 def setup(self) -> None:1575 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1576 if runner_fixture_id not in self.fixturenames:1577 self.fixturenames.append(runner_fixture_id)1578 # When loop factories are configured, resolve the loop factory1579 # fixture early so that a factory variant change cascades cache1580 # invalidation before any async fixture checks its cache.1581 hook_caller = self.config.hook.pytest_asyncio_loop_factories1582 if hook_caller.get_hookimpls():1583 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1584> return super().setup()1585 ^^^^^^^^^^^^^^^15861587/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1588_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1589nixbot/tests/conftest.py:33: in postgres_dsn1590 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1591 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1592/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1593 return next(self.gen)1594 ^^^^^^^^^^^^^^1595nixbot/tests/support.py:327: in ephemeral_postgres1596 run_sync(apply_migrations(dsn))1597nixbot/tests/support.py:285: in run_sync1598 return executor.submit(asyncio.run, coro).result(timeout=120)1599 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1600/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1601 return self.__get_result()1602 ^^^^^^^^^^^^^^^^^^^1603/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1604 raise self._exception1605/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1606 result = ctx.run(self.task)1607 ^^^^^^^^^^^^^^^^^^1608/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1609 return fn(*args, **kwargs)1610 ^^^^^^^^^^^^^^^^^^^1611/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1612 return runner.run(main)1613 ^^^^^^^^^^^^^^^^1614/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1615 return self._loop.run_until_complete(task)1616 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1617/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1618 return future.result()1619 ^^^^^^^^^^^^^^^1620nixbot/migrations.py:99: in apply_migrations1621 migrations = load_migrations()1622 ^^^^^^^^^^^^^^^^^1623_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16241625 def load_migrations() -> list[Migration]:1626 """Load migration scripts shipped with the package, ordered by version."""1627 migrations = []1628 for entry in resources.files(__package__).joinpath("migrations").iterdir():1629 m = _SCRIPT_RE.match(entry.name)1630 if m is None:1631 continue1632 migrations.append(1633 Migration(1634 version=int(m.group(1)),1635 name=m.group(2),1636 sql=entry.read_text(),1637 )1638 )1639 migrations.sort(key=lambda mig: mig.version)1640 versions = [m.version for m in migrations]1641 if len(set(versions)) != len(versions):1642 msg = f"Duplicate migration versions: {versions}"1643> raise MigrationError(msg)1644E 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]16451646nixbot/migrations.py:67: MigrationError1647_ ERROR at setup of test_replace_schedules_preserves_last_run_for_unchanged_spec _1648[gw23] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1416491650self = <Coroutine test_replace_schedules_preserves_last_run_for_unchanged_spec>16511652 def setup(self) -> None:1653 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1654 if runner_fixture_id not in self.fixturenames:1655 self.fixturenames.append(runner_fixture_id)1656 # When loop factories are configured, resolve the loop factory1657 # fixture early so that a factory variant change cascades cache1658 # invalidation before any async fixture checks its cache.1659 hook_caller = self.config.hook.pytest_asyncio_loop_factories1660 if hook_caller.get_hookimpls():1661 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1662> return super().setup()1663 ^^^^^^^^^^^^^^^16641665/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1666_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1667/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup1668 return (yield)1669 ^^^^^1670nixbot/tests/conftest.py:33: in postgres_dsn1671 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1672 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1673/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1674 return next(self.gen)1675 ^^^^^^^^^^^^^^1676nixbot/tests/support.py:327: in ephemeral_postgres1677 run_sync(apply_migrations(dsn))1678nixbot/tests/support.py:285: in run_sync1679 return executor.submit(asyncio.run, coro).result(timeout=120)1680 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1681/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1682 return self.__get_result()1683 ^^^^^^^^^^^^^^^^^^^1684/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1685 raise self._exception1686/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1687 result = ctx.run(self.task)1688 ^^^^^^^^^^^^^^^^^^1689/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1690 return fn(*args, **kwargs)1691 ^^^^^^^^^^^^^^^^^^^1692/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1693 return runner.run(main)1694 ^^^^^^^^^^^^^^^^1695/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1696 return self._loop.run_until_complete(task)1697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1698/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1699 return future.result()1700 ^^^^^^^^^^^^^^^1701nixbot/migrations.py:99: in apply_migrations1702 migrations = load_migrations()1703 ^^^^^^^^^^^^^^^^^1704_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17051706 def load_migrations() -> list[Migration]:1707 """Load migration scripts shipped with the package, ordered by version."""1708 migrations = []1709 for entry in resources.files(__package__).joinpath("migrations").iterdir():1710 m = _SCRIPT_RE.match(entry.name)1711 if m is None:1712 continue1713 migrations.append(1714 Migration(1715 version=int(m.group(1)),1716 name=m.group(2),1717 sql=entry.read_text(),1718 )1719 )1720 migrations.sort(key=lambda mig: mig.version)1721 versions = [m.version for m in migrations]1722 if len(set(versions)) != len(versions):1723 msg = f"Duplicate migration versions: {versions}"1724> raise MigrationError(msg)1725E 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]17261727nixbot/migrations.py:67: MigrationError1728__________________ ERROR at setup of test_failure_aggregation __________________1729[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1417301731self = <Coroutine test_failure_aggregation>17321733 def setup(self) -> None:1734 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1735 if runner_fixture_id not in self.fixturenames:1736 self.fixturenames.append(runner_fixture_id)1737 # When loop factories are configured, resolve the loop factory1738 # fixture early so that a factory variant change cascades cache1739 # invalidation before any async fixture checks its cache.1740 hook_caller = self.config.hook.pytest_asyncio_loop_factories1741 if hook_caller.get_hookimpls():1742 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1743> return super().setup()1744 ^^^^^^^^^^^^^^^17451746/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1747_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1748nixbot/tests/conftest.py:33: in postgres_dsn1749 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1750 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1751/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1752 return next(self.gen)1753 ^^^^^^^^^^^^^^1754nixbot/tests/support.py:327: in ephemeral_postgres1755 run_sync(apply_migrations(dsn))1756nixbot/tests/support.py:285: in run_sync1757 return executor.submit(asyncio.run, coro).result(timeout=120)1758 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1759/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1760 return self.__get_result()1761 ^^^^^^^^^^^^^^^^^^^1762/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1763 raise self._exception1764/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1765 result = ctx.run(self.task)1766 ^^^^^^^^^^^^^^^^^^1767/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1768 return fn(*args, **kwargs)1769 ^^^^^^^^^^^^^^^^^^^1770/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1771 return runner.run(main)1772 ^^^^^^^^^^^^^^^^1773/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1774 return self._loop.run_until_complete(task)1775 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1776/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1777 return future.result()1778 ^^^^^^^^^^^^^^^1779nixbot/migrations.py:99: in apply_migrations1780 migrations = load_migrations()1781 ^^^^^^^^^^^^^^^^^1782_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17831784 def load_migrations() -> list[Migration]:1785 """Load migration scripts shipped with the package, ordered by version."""1786 migrations = []1787 for entry in resources.files(__package__).joinpath("migrations").iterdir():1788 m = _SCRIPT_RE.match(entry.name)1789 if m is None:1790 continue1791 migrations.append(1792 Migration(1793 version=int(m.group(1)),1794 name=m.group(2),1795 sql=entry.read_text(),1796 )1797 )1798 migrations.sort(key=lambda mig: mig.version)1799 versions = [m.version for m in migrations]1800 if len(set(versions)) != len(versions):1801 msg = f"Duplicate migration versions: {versions}"1802> raise MigrationError(msg)1803E 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]18041805nixbot/migrations.py:67: MigrationError1806_____________ ERROR at setup of test_pr_author_can_control_own_pr ______________1807[gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1418081809request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1810tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')18111812 @pytest.fixture(scope="module")1813 def postgres_dsn(1814 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1815 ) -> Iterator[str]:1816 if shutil.which("initdb") is None:1817 pytest.skip("postgresql not available")1818 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1819> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1820 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^18211822nixbot/tests/conftest.py:33: 1823_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1824/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1825 return next(self.gen)1826 ^^^^^^^^^^^^^^1827nixbot/tests/support.py:327: in ephemeral_postgres1828 run_sync(apply_migrations(dsn))1829nixbot/tests/support.py:285: in run_sync1830 return executor.submit(asyncio.run, coro).result(timeout=120)1831 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1832/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1833 return self.__get_result()1834 ^^^^^^^^^^^^^^^^^^^1835/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1836 raise self._exception1837/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1838 result = ctx.run(self.task)1839 ^^^^^^^^^^^^^^^^^^1840/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1841 return fn(*args, **kwargs)1842 ^^^^^^^^^^^^^^^^^^^1843/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1844 return runner.run(main)1845 ^^^^^^^^^^^^^^^^1846/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1847 return self._loop.run_until_complete(task)1848 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1849/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1850 return future.result()1851 ^^^^^^^^^^^^^^^1852nixbot/migrations.py:99: in apply_migrations1853 migrations = load_migrations()1854 ^^^^^^^^^^^^^^^^^1855_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 18561857 def load_migrations() -> list[Migration]:1858 """Load migration scripts shipped with the package, ordered by version."""1859 migrations = []1860 for entry in resources.files(__package__).joinpath("migrations").iterdir():1861 m = _SCRIPT_RE.match(entry.name)1862 if m is None:1863 continue1864 migrations.append(1865 Migration(1866 version=int(m.group(1)),1867 name=m.group(2),1868 sql=entry.read_text(),1869 )1870 )1871 migrations.sort(key=lambda mig: mig.version)1872 versions = [m.version for m in migrations]1873 if len(set(versions)) != len(versions):1874 msg = f"Duplicate migration versions: {versions}"1875> raise MigrationError(msg)1876E 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]18771878nixbot/migrations.py:67: MigrationError1879_____________ ERROR at setup of test_authorized_user_sees_private ______________1880[gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1418811882request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>1883tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=<pluggy._tracing.TagT...d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all')18841885 @pytest.fixture(scope="module")1886 def postgres_dsn(1887 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1888 ) -> Iterator[str]:1889 if shutil.which("initdb") is None:1890 pytest.skip("postgresql not available")1891 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1892> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1893 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^18941895nixbot/tests/conftest.py:33: 1896_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1897/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1898 return next(self.gen)1899 ^^^^^^^^^^^^^^1900nixbot/tests/support.py:327: in ephemeral_postgres1901 run_sync(apply_migrations(dsn))1902nixbot/tests/support.py:285: in run_sync1903 return executor.submit(asyncio.run, coro).result(timeout=120)1904 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1905/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1906 return self.__get_result()1907 ^^^^^^^^^^^^^^^^^^^1908/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1909 raise self._exception1910/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1911 result = ctx.run(self.task)1912 ^^^^^^^^^^^^^^^^^^1913/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1914 return fn(*args, **kwargs)1915 ^^^^^^^^^^^^^^^^^^^1916/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1917 return runner.run(main)1918 ^^^^^^^^^^^^^^^^1919/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1920 return self._loop.run_until_complete(task)1921 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1922/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1923 return future.result()1924 ^^^^^^^^^^^^^^^1925nixbot/migrations.py:99: in apply_migrations1926 migrations = load_migrations()1927 ^^^^^^^^^^^^^^^^^1928_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19291930 def load_migrations() -> list[Migration]:1931 """Load migration scripts shipped with the package, ordered by version."""1932 migrations = []1933 for entry in resources.files(__package__).joinpath("migrations").iterdir():1934 m = _SCRIPT_RE.match(entry.name)1935 if m is None:1936 continue1937 migrations.append(1938 Migration(1939 version=int(m.group(1)),1940 name=m.group(2),1941 sql=entry.read_text(),1942 )1943 )1944 migrations.sort(key=lambda mig: mig.version)1945 versions = [m.version for m in migrations]1946 if len(set(versions)) != len(versions):1947 msg = f"Duplicate migration versions: {versions}"1948> raise MigrationError(msg)1949E 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]19501951nixbot/migrations.py:67: MigrationError1952_________ ERROR at setup of test_legacy_import_scopes_topics_per_forge _________1953[gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1419541955self = <Coroutine test_legacy_import_scopes_topics_per_forge>19561957 def setup(self) -> None:1958 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1959 if runner_fixture_id not in self.fixturenames:1960 self.fixturenames.append(runner_fixture_id)1961 # When loop factories are configured, resolve the loop factory1962 # fixture early so that a factory variant change cascades cache1963 # invalidation before any async fixture checks its cache.1964 hook_caller = self.config.hook.pytest_asyncio_loop_factories1965 if hook_caller.get_hookimpls():1966 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1967> return super().setup()1968 ^^^^^^^^^^^^^^^19691970/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1971_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1972nixbot/tests/conftest.py:33: in postgres_dsn1973 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1974 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1975/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1984 return self.__get_result()1985 ^^^^^^^^^^^^^^^^^^^1986/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1987 raise self._exception1988/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1989 result = ctx.run(self.task)1990 ^^^^^^^^^^^^^^^^^^1991/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1992 return fn(*args, **kwargs)1993 ^^^^^^^^^^^^^^^^^^^1994/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1995 return runner.run(main)1996 ^^^^^^^^^^^^^^^^1997/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1998 return self._loop.run_until_complete(task)1999 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2000/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_completeloading 21,667 hidden lines…
23668 msg = f"Duplicate migration versions: {versions}"23669> raise MigrationError(msg)23670E 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]2367123672nixbot/migrations.py:67: MigrationError23673_______ ERROR at setup of test_unexpected_eval_path_error_settles_build ________23674[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142367523676self = <Coroutine test_unexpected_eval_path_error_settles_build>2367723678 def setup(self) -> None:23679 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23680 if runner_fixture_id not in self.fixturenames:23681 self.fixturenames.append(runner_fixture_id)23682 # When loop factories are configured, resolve the loop factory23683 # fixture early so that a factory variant change cascades cache23684 # invalidation before any async fixture checks its cache.23685 hook_caller = self.config.hook.pytest_asyncio_loop_factories23686 if hook_caller.get_hookimpls():23687 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23688> return super().setup()23689 ^^^^^^^^^^^^^^^2369023691/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23692_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23693nixbot/tests/conftest.py:33: in postgres_dsn23694 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23695 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23696/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23697 return next(self.gen)23698 ^^^^^^^^^^^^^^23699nixbot/tests/support.py:327: in ephemeral_postgres23700 run_sync(apply_migrations(dsn))23701nixbot/tests/support.py:285: in run_sync23702 return executor.submit(asyncio.run, coro).result(timeout=120)23703 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23704/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23705 return self.__get_result()23706 ^^^^^^^^^^^^^^^^^^^23707/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23708 raise self._exception23709/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23710 result = ctx.run(self.task)23711 ^^^^^^^^^^^^^^^^^^23712/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23713 return fn(*args, **kwargs)23714 ^^^^^^^^^^^^^^^^^^^23715/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23716 return runner.run(main)23717 ^^^^^^^^^^^^^^^^23718/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23719 return self._loop.run_until_complete(task)23720 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23721/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23722 return future.result()23723 ^^^^^^^^^^^^^^^23724nixbot/migrations.py:99: in apply_migrations23725 migrations = load_migrations()23726 ^^^^^^^^^^^^^^^^^23727_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2372823729 def load_migrations() -> list[Migration]:23730 """Load migration scripts shipped with the package, ordered by version."""23731 migrations = []23732 for entry in resources.files(__package__).joinpath("migrations").iterdir():23733 m = _SCRIPT_RE.match(entry.name)23734 if m is None:23735 continue23736 migrations.append(23737 Migration(23738 version=int(m.group(1)),23739 name=m.group(2),23740 sql=entry.read_text(),23741 )23742 )23743 migrations.sort(key=lambda mig: mig.version)23744 versions = [m.version for m in migrations]23745 if len(set(versions)) != len(versions):23746 msg = f"Duplicate migration versions: {versions}"23747> raise MigrationError(msg)23748E 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]2374923750nixbot/migrations.py:67: MigrationError23751___________________ ERROR at setup of test_attribute_search ____________________23752[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142375323754request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23755tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2375623757 @pytest.fixture(scope="module")23758 def postgres_dsn(23759 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23760 ) -> Iterator[str]:23761 if shutil.which("initdb") is None:23762 pytest.skip("postgresql not available")23763 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23764> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23765 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2376623767nixbot/tests/conftest.py:33: 23768_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23769/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23770 return next(self.gen)23771 ^^^^^^^^^^^^^^23772nixbot/tests/support.py:327: in ephemeral_postgres23773 run_sync(apply_migrations(dsn))23774nixbot/tests/support.py:285: in run_sync23775 return executor.submit(asyncio.run, coro).result(timeout=120)23776 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23777/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23778 return self.__get_result()23779 ^^^^^^^^^^^^^^^^^^^23780/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23781 raise self._exception23782/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23783 result = ctx.run(self.task)23784 ^^^^^^^^^^^^^^^^^^23785/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23786 return fn(*args, **kwargs)23787 ^^^^^^^^^^^^^^^^^^^23788/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23789 return runner.run(main)23790 ^^^^^^^^^^^^^^^^23791/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23792 return self._loop.run_until_complete(task)23793 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23794/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23795 return future.result()23796 ^^^^^^^^^^^^^^^23797nixbot/migrations.py:99: in apply_migrations23798 migrations = load_migrations()23799 ^^^^^^^^^^^^^^^^^23800_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2380123802 def load_migrations() -> list[Migration]:23803 """Load migration scripts shipped with the package, ordered by version."""23804 migrations = []23805 for entry in resources.files(__package__).joinpath("migrations").iterdir():23806 m = _SCRIPT_RE.match(entry.name)23807 if m is None:23808 continue23809 migrations.append(23810 Migration(23811 version=int(m.group(1)),23812 name=m.group(2),23813 sql=entry.read_text(),23814 )23815 )23816 migrations.sort(key=lambda mig: mig.version)23817 versions = [m.version for m in migrations]23818 if len(set(versions)) != len(versions):23819 msg = f"Duplicate migration versions: {versions}"23820> raise MigrationError(msg)23821E 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]2382223823nixbot/migrations.py:67: MigrationError23824_______________ ERROR at setup of test_build_page_shows_effects ________________23825[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142382623827request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23828tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2382923830 @pytest.fixture(scope="module")23831 def postgres_dsn(23832 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23833 ) -> Iterator[str]:23834 if shutil.which("initdb") is None:23835 pytest.skip("postgresql not available")23836 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23837> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23838 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2383923840nixbot/tests/conftest.py:33: 23841_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23842/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23843 return next(self.gen)23844 ^^^^^^^^^^^^^^23845nixbot/tests/support.py:327: in ephemeral_postgres23846 run_sync(apply_migrations(dsn))23847nixbot/tests/support.py:285: in run_sync23848 return executor.submit(asyncio.run, coro).result(timeout=120)23849 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23850/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23851 return self.__get_result()23852 ^^^^^^^^^^^^^^^^^^^23853/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23854 raise self._exception23855/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23856 result = ctx.run(self.task)23857 ^^^^^^^^^^^^^^^^^^23858/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23859 return fn(*args, **kwargs)23860 ^^^^^^^^^^^^^^^^^^^23861/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23862 return runner.run(main)23863 ^^^^^^^^^^^^^^^^23864/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23865 return self._loop.run_until_complete(task)23866 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23867/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23868 return future.result()23869 ^^^^^^^^^^^^^^^23870nixbot/migrations.py:99: in apply_migrations23871 migrations = load_migrations()23872 ^^^^^^^^^^^^^^^^^23873_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2387423875 def load_migrations() -> list[Migration]:23876 """Load migration scripts shipped with the package, ordered by version."""23877 migrations = []23878 for entry in resources.files(__package__).joinpath("migrations").iterdir():23879 m = _SCRIPT_RE.match(entry.name)23880 if m is None:23881 continue23882 migrations.append(23883 Migration(23884 version=int(m.group(1)),23885 name=m.group(2),23886 sql=entry.read_text(),23887 )23888 )23889 migrations.sort(key=lambda mig: mig.version)23890 versions = [m.version for m in migrations]23891 if len(set(versions)) != len(versions):23892 msg = f"Duplicate migration versions: {versions}"23893> raise MigrationError(msg)23894E 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]2389523896nixbot/migrations.py:67: MigrationError23897____ ERROR at setup of test_reuse_empty_succeeded_build_posts_eval_success _____23898[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142389923900self = <Coroutine test_reuse_empty_succeeded_build_posts_eval_success>2390123902 def setup(self) -> None:23903 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23904 if runner_fixture_id not in self.fixturenames:23905 self.fixturenames.append(runner_fixture_id)23906 # When loop factories are configured, resolve the loop factory23907 # fixture early so that a factory variant change cascades cache23908 # invalidation before any async fixture checks its cache.23909 hook_caller = self.config.hook.pytest_asyncio_loop_factories23910 if hook_caller.get_hookimpls():23911 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23912> return super().setup()23913 ^^^^^^^^^^^^^^^2391423915/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23916_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23917nixbot/tests/conftest.py:33: in postgres_dsn23918 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23919 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23920/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23921 return next(self.gen)23922 ^^^^^^^^^^^^^^23923nixbot/tests/support.py:327: in ephemeral_postgres23924 run_sync(apply_migrations(dsn))23925nixbot/tests/support.py:285: in run_sync23926 return executor.submit(asyncio.run, coro).result(timeout=120)23927 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23928/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23929 return self.__get_result()23930 ^^^^^^^^^^^^^^^^^^^23931/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23932 raise self._exception23933/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23934 result = ctx.run(self.task)23935 ^^^^^^^^^^^^^^^^^^23936/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23937 return fn(*args, **kwargs)23938 ^^^^^^^^^^^^^^^^^^^23939/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23940 return runner.run(main)23941 ^^^^^^^^^^^^^^^^23942/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23943 return self._loop.run_until_complete(task)23944 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23945/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23946 return future.result()23947 ^^^^^^^^^^^^^^^23948nixbot/migrations.py:99: in apply_migrations23949 migrations = load_migrations()23950 ^^^^^^^^^^^^^^^^^23951_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2395223953 def load_migrations() -> list[Migration]:23954 """Load migration scripts shipped with the package, ordered by version."""23955 migrations = []23956 for entry in resources.files(__package__).joinpath("migrations").iterdir():23957 m = _SCRIPT_RE.match(entry.name)23958 if m is None:23959 continue23960 migrations.append(23961 Migration(23962 version=int(m.group(1)),23963 name=m.group(2),23964 sql=entry.read_text(),23965 )23966 )23967 migrations.sort(key=lambda mig: mig.version)23968 versions = [m.version for m in migrations]23969 if len(set(versions)) != len(versions):23970 msg = f"Duplicate migration versions: {versions}"23971> raise MigrationError(msg)23972E 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]2397323974nixbot/migrations.py:67: MigrationError23975____________ ERROR at setup of test_build_page_shows_event_effects _____________23976[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142397723978request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23979tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2398023981 @pytest.fixture(scope="module")23982 def postgres_dsn(23983 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23984 ) -> Iterator[str]:23985 if shutil.which("initdb") is None:23986 pytest.skip("postgresql not available")23987 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23988> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23989 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2399023991nixbot/tests/conftest.py:33: 23992_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23993/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23994 return next(self.gen)23995 ^^^^^^^^^^^^^^23996nixbot/tests/support.py:327: in ephemeral_postgres23997 run_sync(apply_migrations(dsn))23998nixbot/tests/support.py:285: in run_sync23999 return executor.submit(asyncio.run, coro).result(timeout=120)24000 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24001/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24002 return self.__get_result()24003 ^^^^^^^^^^^^^^^^^^^24004/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24005 raise self._exception24006/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24007 result = ctx.run(self.task)24008 ^^^^^^^^^^^^^^^^^^24009/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24010 return fn(*args, **kwargs)24011 ^^^^^^^^^^^^^^^^^^^24012/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24013 return runner.run(main)24014 ^^^^^^^^^^^^^^^^24015/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24016 return self._loop.run_until_complete(task)24017 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24018/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24019 return future.result()24020 ^^^^^^^^^^^^^^^24021nixbot/migrations.py:99: in apply_migrations24022 migrations = load_migrations()24023 ^^^^^^^^^^^^^^^^^24024_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2402524026 def load_migrations() -> list[Migration]:24027 """Load migration scripts shipped with the package, ordered by version."""24028 migrations = []24029 for entry in resources.files(__package__).joinpath("migrations").iterdir():24030 m = _SCRIPT_RE.match(entry.name)24031 if m is None:24032 continue24033 migrations.append(24034 Migration(24035 version=int(m.group(1)),24036 name=m.group(2),24037 sql=entry.read_text(),24038 )24039 )24040 migrations.sort(key=lambda mig: mig.version)24041 versions = [m.version for m in migrations]24042 if len(set(versions)) != len(versions):24043 msg = f"Duplicate migration versions: {versions}"24044> raise MigrationError(msg)24045E 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]2404624047nixbot/migrations.py:67: MigrationError24048__ ERROR at setup of test_stale_event_reusing_old_build_does_not_cancel_newer __24049[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142405024051self = <Coroutine test_stale_event_reusing_old_build_does_not_cancel_newer>2405224053 def setup(self) -> None:24054 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24055 if runner_fixture_id not in self.fixturenames:24056 self.fixturenames.append(runner_fixture_id)24057 # When loop factories are configured, resolve the loop factory24058 # fixture early so that a factory variant change cascades cache24059 # invalidation before any async fixture checks its cache.24060 hook_caller = self.config.hook.pytest_asyncio_loop_factories24061 if hook_caller.get_hookimpls():24062 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24063> return super().setup()24064 ^^^^^^^^^^^^^^^2406524066/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24067_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24068nixbot/tests/conftest.py:33: in postgres_dsn24069 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24070 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24071/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24072 return next(self.gen)24073 ^^^^^^^^^^^^^^24074nixbot/tests/support.py:327: in ephemeral_postgres24075 run_sync(apply_migrations(dsn))24076nixbot/tests/support.py:285: in run_sync24077 return executor.submit(asyncio.run, coro).result(timeout=120)24078 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24079/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24080 return self.__get_result()24081 ^^^^^^^^^^^^^^^^^^^24082/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24083 raise self._exception24084/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24085 result = ctx.run(self.task)24086 ^^^^^^^^^^^^^^^^^^24087/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24088 return fn(*args, **kwargs)24089 ^^^^^^^^^^^^^^^^^^^24090/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24091 return runner.run(main)24092 ^^^^^^^^^^^^^^^^24093/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24094 return self._loop.run_until_complete(task)24095 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24096/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24097 return future.result()24098 ^^^^^^^^^^^^^^^24099nixbot/migrations.py:99: in apply_migrations24100 migrations = load_migrations()24101 ^^^^^^^^^^^^^^^^^24102_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2410324104 def load_migrations() -> list[Migration]:24105 """Load migration scripts shipped with the package, ordered by version."""24106 migrations = []24107 for entry in resources.files(__package__).joinpath("migrations").iterdir():24108 m = _SCRIPT_RE.match(entry.name)24109 if m is None:24110 continue24111 migrations.append(24112 Migration(24113 version=int(m.group(1)),24114 name=m.group(2),24115 sql=entry.read_text(),24116 )24117 )24118 migrations.sort(key=lambda mig: mig.version)24119 versions = [m.version for m in migrations]24120 if len(set(versions)) != len(versions):24121 msg = f"Duplicate migration versions: {versions}"24122> raise MigrationError(msg)24123E 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]2412424125nixbot/migrations.py:67: MigrationError24126__________________ ERROR at setup of test_effect_log_raw_text __________________24127[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142412824129request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24130tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2413124132 @pytest.fixture(scope="module")24133 def postgres_dsn(24134 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24135 ) -> Iterator[str]:24136 if shutil.which("initdb") is None:24137 pytest.skip("postgresql not available")24138 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24139> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24140 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2414124142nixbot/tests/conftest.py:33: 24143_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24144/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24145 return next(self.gen)24146 ^^^^^^^^^^^^^^24147nixbot/tests/support.py:327: in ephemeral_postgres24148 run_sync(apply_migrations(dsn))24149nixbot/tests/support.py:285: in run_sync24150 return executor.submit(asyncio.run, coro).result(timeout=120)24151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24152/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24153 return self.__get_result()24154 ^^^^^^^^^^^^^^^^^^^24155/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24156 raise self._exception24157/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24158 result = ctx.run(self.task)24159 ^^^^^^^^^^^^^^^^^^24160/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24161 return fn(*args, **kwargs)24162 ^^^^^^^^^^^^^^^^^^^24163/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24164 return runner.run(main)24165 ^^^^^^^^^^^^^^^^24166/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24167 return self._loop.run_until_complete(task)24168 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24169/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24170 return future.result()24171 ^^^^^^^^^^^^^^^24172nixbot/migrations.py:99: in apply_migrations24173 migrations = load_migrations()24174 ^^^^^^^^^^^^^^^^^24175_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2417624177 def load_migrations() -> list[Migration]:24178 """Load migration scripts shipped with the package, ordered by version."""24179 migrations = []24180 for entry in resources.files(__package__).joinpath("migrations").iterdir():24181 m = _SCRIPT_RE.match(entry.name)24182 if m is None:24183 continue24184 migrations.append(24185 Migration(24186 version=int(m.group(1)),24187 name=m.group(2),24188 sql=entry.read_text(),24189 )24190 )24191 migrations.sort(key=lambda mig: mig.version)24192 versions = [m.version for m in migrations]24193 if len(set(versions)) != len(versions):24194 msg = f"Duplicate migration versions: {versions}"24195> raise MigrationError(msg)24196E 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]2419724198nixbot/migrations.py:67: MigrationError24199______ ERROR at setup of test_reuse_for_default_branch_push_runs_effects _______24200[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142420124202self = <Coroutine test_reuse_for_default_branch_push_runs_effects>2420324204 def setup(self) -> None:24205 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24206 if runner_fixture_id not in self.fixturenames:24207 self.fixturenames.append(runner_fixture_id)24208 # When loop factories are configured, resolve the loop factory24209 # fixture early so that a factory variant change cascades cache24210 # invalidation before any async fixture checks its cache.24211 hook_caller = self.config.hook.pytest_asyncio_loop_factories24212 if hook_caller.get_hookimpls():24213 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24214> return super().setup()24215 ^^^^^^^^^^^^^^^2421624217/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24218_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24219nixbot/tests/conftest.py:33: in postgres_dsn24220 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24221 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24222/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24223 return next(self.gen)24224 ^^^^^^^^^^^^^^24225nixbot/tests/support.py:327: in ephemeral_postgres24226 run_sync(apply_migrations(dsn))24227nixbot/tests/support.py:285: in run_sync24228 return executor.submit(asyncio.run, coro).result(timeout=120)24229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24230/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24231 return self.__get_result()24232 ^^^^^^^^^^^^^^^^^^^24233/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24234 raise self._exception24235/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24236 result = ctx.run(self.task)24237 ^^^^^^^^^^^^^^^^^^24238/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24239 return fn(*args, **kwargs)24240 ^^^^^^^^^^^^^^^^^^^24241/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24242 return runner.run(main)24243 ^^^^^^^^^^^^^^^^24244/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24245 return self._loop.run_until_complete(task)24246 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24247/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24248 return future.result()24249 ^^^^^^^^^^^^^^^24250nixbot/migrations.py:99: in apply_migrations24251 migrations = load_migrations()24252 ^^^^^^^^^^^^^^^^^24253_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2425424255 def load_migrations() -> list[Migration]:24256 """Load migration scripts shipped with the package, ordered by version."""24257 migrations = []24258 for entry in resources.files(__package__).joinpath("migrations").iterdir():24259 m = _SCRIPT_RE.match(entry.name)24260 if m is None:24261 continue24262 migrations.append(24263 Migration(24264 version=int(m.group(1)),24265 name=m.group(2),24266 sql=entry.read_text(),24267 )24268 )24269 migrations.sort(key=lambda mig: mig.version)24270 versions = [m.version for m in migrations]24271 if len(set(versions)) != len(versions):24272 msg = f"Duplicate migration versions: {versions}"24273> raise MigrationError(msg)24274E 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]2427524276nixbot/migrations.py:67: MigrationError24277_____________ ERROR at setup of test_effect_log_viewer_status_icon _____________24278[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142427924280request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24281tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2428224283 @pytest.fixture(scope="module")24284 def postgres_dsn(24285 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24286 ) -> Iterator[str]:24287 if shutil.which("initdb") is None:24288 pytest.skip("postgresql not available")24289 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24290> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24291 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2429224293nixbot/tests/conftest.py:33: 24294_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24295/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24296 return next(self.gen)24297 ^^^^^^^^^^^^^^24298nixbot/tests/support.py:327: in ephemeral_postgres24299 run_sync(apply_migrations(dsn))24300nixbot/tests/support.py:285: in run_sync24301 return executor.submit(asyncio.run, coro).result(timeout=120)24302 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24303/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24304 return self.__get_result()24305 ^^^^^^^^^^^^^^^^^^^24306/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24307 raise self._exception24308/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24309 result = ctx.run(self.task)24310 ^^^^^^^^^^^^^^^^^^24311/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24312 return fn(*args, **kwargs)24313 ^^^^^^^^^^^^^^^^^^^24314/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24315 return runner.run(main)24316 ^^^^^^^^^^^^^^^^24317/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24318 return self._loop.run_until_complete(task)24319 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24320/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24321 return future.result()24322 ^^^^^^^^^^^^^^^24323nixbot/migrations.py:99: in apply_migrations24324 migrations = load_migrations()24325 ^^^^^^^^^^^^^^^^^24326_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2432724328 def load_migrations() -> list[Migration]:24329 """Load migration scripts shipped with the package, ordered by version."""24330 migrations = []24331 for entry in resources.files(__package__).joinpath("migrations").iterdir():24332 m = _SCRIPT_RE.match(entry.name)24333 if m is None:24334 continue24335 migrations.append(24336 Migration(24337 version=int(m.group(1)),24338 name=m.group(2),24339 sql=entry.read_text(),24340 )24341 )24342 migrations.sort(key=lambda mig: mig.version)24343 versions = [m.version for m in migrations]24344 if len(set(versions)) != len(versions):24345 msg = f"Duplicate migration versions: {versions}"24346> raise MigrationError(msg)24347E 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]2434824349nixbot/migrations.py:67: MigrationError24350______ ERROR at setup of test_reuse_replays_effect_statuses_to_new_commit ______24351[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142435224353self = <Coroutine test_reuse_replays_effect_statuses_to_new_commit>2435424355 def setup(self) -> None:24356 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24357 if runner_fixture_id not in self.fixturenames:24358 self.fixturenames.append(runner_fixture_id)24359 # When loop factories are configured, resolve the loop factory24360 # fixture early so that a factory variant change cascades cache24361 # invalidation before any async fixture checks its cache.24362 hook_caller = self.config.hook.pytest_asyncio_loop_factories24363 if hook_caller.get_hookimpls():24364 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24365> return super().setup()24366 ^^^^^^^^^^^^^^^2436724368/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24369_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24370nixbot/tests/conftest.py:33: in postgres_dsn24371 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24372 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24373/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24374 return next(self.gen)24375 ^^^^^^^^^^^^^^24376nixbot/tests/support.py:327: in ephemeral_postgres24377 run_sync(apply_migrations(dsn))24378nixbot/tests/support.py:285: in run_sync24379 return executor.submit(asyncio.run, coro).result(timeout=120)24380 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24381/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24382 return self.__get_result()24383 ^^^^^^^^^^^^^^^^^^^24384/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24385 raise self._exception24386/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24387 result = ctx.run(self.task)24388 ^^^^^^^^^^^^^^^^^^24389/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24390 return fn(*args, **kwargs)24391 ^^^^^^^^^^^^^^^^^^^24392/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24393 return runner.run(main)24394 ^^^^^^^^^^^^^^^^24395/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24396 return self._loop.run_until_complete(task)24397 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24398/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24399 return future.result()24400 ^^^^^^^^^^^^^^^24401nixbot/migrations.py:99: in apply_migrations24402 migrations = load_migrations()24403 ^^^^^^^^^^^^^^^^^24404_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2440524406 def load_migrations() -> list[Migration]:24407 """Load migration scripts shipped with the package, ordered by version."""24408 migrations = []24409 for entry in resources.files(__package__).joinpath("migrations").iterdir():24410 m = _SCRIPT_RE.match(entry.name)24411 if m is None:24412 continue24413 migrations.append(24414 Migration(24415 version=int(m.group(1)),24416 name=m.group(2),24417 sql=entry.read_text(),24418 )24419 )24420 migrations.sort(key=lambda mig: mig.version)24421 versions = [m.version for m in migrations]24422 if len(set(versions)) != len(versions):24423 msg = f"Duplicate migration versions: {versions}"24424> raise MigrationError(msg)24425E 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]2442624427nixbot/migrations.py:67: MigrationError24428__________ ERROR at setup of test_effect_changes_notify_build_events ___________24429[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142443024431request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24432tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2443324434 @pytest.fixture(scope="module")24435 def postgres_dsn(24436 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24437 ) -> Iterator[str]:24438 if shutil.which("initdb") is None:24439 pytest.skip("postgresql not available")24440 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24441> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24442 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2444324444nixbot/tests/conftest.py:33: 24445_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24446/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24447 return next(self.gen)24448 ^^^^^^^^^^^^^^24449nixbot/tests/support.py:327: in ephemeral_postgres24450 run_sync(apply_migrations(dsn))24451nixbot/tests/support.py:285: in run_sync24452 return executor.submit(asyncio.run, coro).result(timeout=120)24453 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24454/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24455 return self.__get_result()24456 ^^^^^^^^^^^^^^^^^^^24457/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24458 raise self._exception24459/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24460 result = ctx.run(self.task)24461 ^^^^^^^^^^^^^^^^^^24462/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24463 return fn(*args, **kwargs)24464 ^^^^^^^^^^^^^^^^^^^24465/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24466 return runner.run(main)24467 ^^^^^^^^^^^^^^^^24468/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24469 return self._loop.run_until_complete(task)24470 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24471/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24472 return future.result()24473 ^^^^^^^^^^^^^^^24474nixbot/migrations.py:99: in apply_migrations24475 migrations = load_migrations()24476 ^^^^^^^^^^^^^^^^^24477_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2447824479 def load_migrations() -> list[Migration]:24480 """Load migration scripts shipped with the package, ordered by version."""24481 migrations = []24482 for entry in resources.files(__package__).joinpath("migrations").iterdir():24483 m = _SCRIPT_RE.match(entry.name)24484 if m is None:24485 continue24486 migrations.append(24487 Migration(24488 version=int(m.group(1)),24489 name=m.group(2),24490 sql=entry.read_text(),24491 )24492 )24493 migrations.sort(key=lambda mig: mig.version)24494 versions = [m.version for m in migrations]24495 if len(set(versions)) != len(versions):24496 msg = f"Duplicate migration versions: {versions}"24497> raise MigrationError(msg)24498E 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]2449924500nixbot/migrations.py:67: MigrationError24501____ ERROR at setup of test_attach_to_already_terminal_build_replays_status ____24502[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142450324504self = <Coroutine test_attach_to_already_terminal_build_replays_status>2450524506 def setup(self) -> None:24507 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24508 if runner_fixture_id not in self.fixturenames:24509 self.fixturenames.append(runner_fixture_id)24510 # When loop factories are configured, resolve the loop factory24511 # fixture early so that a factory variant change cascades cache24512 # invalidation before any async fixture checks its cache.24513 hook_caller = self.config.hook.pytest_asyncio_loop_factories24514 if hook_caller.get_hookimpls():24515 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24516> return super().setup()24517 ^^^^^^^^^^^^^^^2451824519/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24520_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24521nixbot/tests/conftest.py:33: in postgres_dsn24522 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24523 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24524/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24525 return next(self.gen)24526 ^^^^^^^^^^^^^^24527nixbot/tests/support.py:327: in ephemeral_postgres24528 run_sync(apply_migrations(dsn))24529nixbot/tests/support.py:285: in run_sync24530 return executor.submit(asyncio.run, coro).result(timeout=120)24531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24532/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24533 return self.__get_result()24534 ^^^^^^^^^^^^^^^^^^^24535/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24536 raise self._exception24537/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24538 result = ctx.run(self.task)24539 ^^^^^^^^^^^^^^^^^^24540/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24541 return fn(*args, **kwargs)24542 ^^^^^^^^^^^^^^^^^^^24543/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24544 return runner.run(main)24545 ^^^^^^^^^^^^^^^^24546/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24547 return self._loop.run_until_complete(task)24548 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24549/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24550 return future.result()24551 ^^^^^^^^^^^^^^^24552nixbot/migrations.py:99: in apply_migrations24553 migrations = load_migrations()24554 ^^^^^^^^^^^^^^^^^24555_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2455624557 def load_migrations() -> list[Migration]:24558 """Load migration scripts shipped with the package, ordered by version."""24559 migrations = []24560 for entry in resources.files(__package__).joinpath("migrations").iterdir():24561 m = _SCRIPT_RE.match(entry.name)24562 if m is None:24563 continue24564 migrations.append(24565 Migration(24566 version=int(m.group(1)),24567 name=m.group(2),24568 sql=entry.read_text(),24569 )24570 )24571 migrations.sort(key=lambda mig: mig.version)24572 versions = [m.version for m in migrations]24573 if len(set(versions)) != len(versions):24574 msg = f"Duplicate migration versions: {versions}"24575> raise MigrationError(msg)24576E 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]2457724578nixbot/migrations.py:67: MigrationError24579___________________ ERROR at setup of test_effects_state_api ___________________24580[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142458124582request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24583tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2458424585 @pytest.fixture(scope="module")24586 def postgres_dsn(24587 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24588 ) -> Iterator[str]:24589 if shutil.which("initdb") is None:24590 pytest.skip("postgresql not available")24591 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24592> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24593 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2459424595nixbot/tests/conftest.py:33: 24596_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24597/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24598 return next(self.gen)24599 ^^^^^^^^^^^^^^24600nixbot/tests/support.py:327: in ephemeral_postgres24601 run_sync(apply_migrations(dsn))24602nixbot/tests/support.py:285: in run_sync24603 return executor.submit(asyncio.run, coro).result(timeout=120)24604 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24605/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24606 return self.__get_result()24607 ^^^^^^^^^^^^^^^^^^^24608/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24609 raise self._exception24610/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24611 result = ctx.run(self.task)24612 ^^^^^^^^^^^^^^^^^^24613/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24614 return fn(*args, **kwargs)24615 ^^^^^^^^^^^^^^^^^^^24616/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24617 return runner.run(main)24618 ^^^^^^^^^^^^^^^^24619/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24620 return self._loop.run_until_complete(task)24621 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24622/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24623 return future.result()24624 ^^^^^^^^^^^^^^^24625nixbot/migrations.py:99: in apply_migrations24626 migrations = load_migrations()24627 ^^^^^^^^^^^^^^^^^24628_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2462924630 def load_migrations() -> list[Migration]:24631 """Load migration scripts shipped with the package, ordered by version."""24632 migrations = []24633 for entry in resources.files(__package__).joinpath("migrations").iterdir():24634 m = _SCRIPT_RE.match(entry.name)24635 if m is None:24636 continue24637 migrations.append(24638 Migration(24639 version=int(m.group(1)),24640 name=m.group(2),24641 sql=entry.read_text(),24642 )24643 )24644 migrations.sort(key=lambda mig: mig.version)24645 versions = [m.version for m in migrations]24646 if len(set(versions)) != len(versions):24647 msg = f"Duplicate migration versions: {versions}"24648> raise MigrationError(msg)24649E 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]2465024651nixbot/migrations.py:67: MigrationError24652____________________ ERROR at setup of test_pr_comment_api _____________________24653[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142465424655request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24656tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2465724658 @pytest.fixture(scope="module")24659 def postgres_dsn(24660 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24661 ) -> Iterator[str]:24662 if shutil.which("initdb") is None:24663 pytest.skip("postgresql not available")24664 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24665> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24666 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2466724668nixbot/tests/conftest.py:33: 24669_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24670/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24671 return next(self.gen)24672 ^^^^^^^^^^^^^^24673nixbot/tests/support.py:327: in ephemeral_postgres24674 run_sync(apply_migrations(dsn))24675nixbot/tests/support.py:285: in run_sync24676 return executor.submit(asyncio.run, coro).result(timeout=120)24677 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24678/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24679 return self.__get_result()24680 ^^^^^^^^^^^^^^^^^^^24681/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24682 raise self._exception24683/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24684 result = ctx.run(self.task)24685 ^^^^^^^^^^^^^^^^^^24686/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24687 return fn(*args, **kwargs)24688 ^^^^^^^^^^^^^^^^^^^24689/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24690 return runner.run(main)24691 ^^^^^^^^^^^^^^^^24692/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24693 return self._loop.run_until_complete(task)24694 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24695/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24696 return future.result()24697 ^^^^^^^^^^^^^^^24698nixbot/migrations.py:99: in apply_migrations24699 migrations = load_migrations()24700 ^^^^^^^^^^^^^^^^^24701_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2470224703 def load_migrations() -> list[Migration]:24704 """Load migration scripts shipped with the package, ordered by version."""24705 migrations = []24706 for entry in resources.files(__package__).joinpath("migrations").iterdir():24707 m = _SCRIPT_RE.match(entry.name)24708 if m is None:24709 continue24710 migrations.append(24711 Migration(24712 version=int(m.group(1)),24713 name=m.group(2),24714 sql=entry.read_text(),24715 )24716 )24717 migrations.sort(key=lambda mig: mig.version)24718 versions = [m.version for m in migrations]24719 if len(set(versions)) != len(versions):24720 msg = f"Duplicate migration versions: {versions}"24721> raise MigrationError(msg)24722E 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]2472324724nixbot/migrations.py:67: MigrationError24725___ ERROR at setup of test_cancel_during_eval_resolves_linked_eval_contexts ____24726[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142472724728self = <Coroutine test_cancel_during_eval_resolves_linked_eval_contexts>2472924730 def setup(self) -> None:24731 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24732 if runner_fixture_id not in self.fixturenames:24733 self.fixturenames.append(runner_fixture_id)24734 # When loop factories are configured, resolve the loop factory24735 # fixture early so that a factory variant change cascades cache24736 # invalidation before any async fixture checks its cache.24737 hook_caller = self.config.hook.pytest_asyncio_loop_factories24738 if hook_caller.get_hookimpls():24739 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24740> return super().setup()24741 ^^^^^^^^^^^^^^^2474224743/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24744_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24745nixbot/tests/conftest.py:33: in postgres_dsn24746 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24747 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24748/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24749 return next(self.gen)24750 ^^^^^^^^^^^^^^24751nixbot/tests/support.py:327: in ephemeral_postgres24752 run_sync(apply_migrations(dsn))24753nixbot/tests/support.py:285: in run_sync24754 return executor.submit(asyncio.run, coro).result(timeout=120)24755 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24756/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24757 return self.__get_result()24758 ^^^^^^^^^^^^^^^^^^^24759/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24760 raise self._exception24761/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24762 result = ctx.run(self.task)24763 ^^^^^^^^^^^^^^^^^^24764/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24765 return fn(*args, **kwargs)24766 ^^^^^^^^^^^^^^^^^^^24767/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24768 return runner.run(main)24769 ^^^^^^^^^^^^^^^^24770/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24771 return self._loop.run_until_complete(task)24772 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24773/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24774 return future.result()24775 ^^^^^^^^^^^^^^^24776nixbot/migrations.py:99: in apply_migrations24777 migrations = load_migrations()24778 ^^^^^^^^^^^^^^^^^24779_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2478024781 def load_migrations() -> list[Migration]:24782 """Load migration scripts shipped with the package, ordered by version."""24783 migrations = []24784 for entry in resources.files(__package__).joinpath("migrations").iterdir():24785 m = _SCRIPT_RE.match(entry.name)24786 if m is None:24787 continue24788 migrations.append(24789 Migration(24790 version=int(m.group(1)),24791 name=m.group(2),24792 sql=entry.read_text(),24793 )24794 )24795 migrations.sort(key=lambda mig: mig.version)24796 versions = [m.version for m in migrations]24797 if len(set(versions)) != len(versions):24798 msg = f"Duplicate migration versions: {versions}"24799> raise MigrationError(msg)24800E 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]2480124802nixbot/migrations.py:67: MigrationError24803_________________ ERROR at setup of test_workload_identity_api _________________24804[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142480524806request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24807tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2480824809 @pytest.fixture(scope="module")24810 def postgres_dsn(24811 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24812 ) -> Iterator[str]:24813 if shutil.which("initdb") is None:24814 pytest.skip("postgresql not available")24815 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24816> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24817 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2481824819nixbot/tests/conftest.py:33: 24820_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24821/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24822 return next(self.gen)24823 ^^^^^^^^^^^^^^24824nixbot/tests/support.py:327: in ephemeral_postgres24825 run_sync(apply_migrations(dsn))24826nixbot/tests/support.py:285: in run_sync24827 return executor.submit(asyncio.run, coro).result(timeout=120)24828 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24829/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24830 return self.__get_result()24831 ^^^^^^^^^^^^^^^^^^^24832/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24833 raise self._exception24834/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24835 result = ctx.run(self.task)24836 ^^^^^^^^^^^^^^^^^^24837/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24838 return fn(*args, **kwargs)24839 ^^^^^^^^^^^^^^^^^^^24840/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24841 return runner.run(main)24842 ^^^^^^^^^^^^^^^^24843/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24844 return self._loop.run_until_complete(task)24845 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24846/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24847 return future.result()24848 ^^^^^^^^^^^^^^^24849nixbot/migrations.py:99: in apply_migrations24850 migrations = load_migrations()24851 ^^^^^^^^^^^^^^^^^24852_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2485324854 def load_migrations() -> list[Migration]:24855 """Load migration scripts shipped with the package, ordered by version."""24856 migrations = []24857 for entry in resources.files(__package__).joinpath("migrations").iterdir():24858 m = _SCRIPT_RE.match(entry.name)24859 if m is None:24860 continue24861 migrations.append(24862 Migration(24863 version=int(m.group(1)),24864 name=m.group(2),24865 sql=entry.read_text(),24866 )24867 )24868 migrations.sort(key=lambda mig: mig.version)24869 versions = [m.version for m in migrations]24870 if len(set(versions)) != len(versions):24871 msg = f"Duplicate migration versions: {versions}"24872> raise MigrationError(msg)24873E 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]2487424875nixbot/migrations.py:67: MigrationError24876____ ERROR at setup of test_effect_log_does_not_collide_with_attribute_log _____24877[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142487824879self = <Coroutine test_effect_log_does_not_collide_with_attribute_log>2488024881 def setup(self) -> None:24882 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24883 if runner_fixture_id not in self.fixturenames:24884 self.fixturenames.append(runner_fixture_id)24885 # When loop factories are configured, resolve the loop factory24886 # fixture early so that a factory variant change cascades cache24887 # invalidation before any async fixture checks its cache.24888 hook_caller = self.config.hook.pytest_asyncio_loop_factories24889 if hook_caller.get_hookimpls():24890 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24891> return super().setup()24892 ^^^^^^^^^^^^^^^2489324894/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24895_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24896nixbot/tests/conftest.py:33: in postgres_dsn24897 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24898 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24899/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24900 return next(self.gen)24901 ^^^^^^^^^^^^^^24902nixbot/tests/support.py:327: in ephemeral_postgres24903 run_sync(apply_migrations(dsn))24904nixbot/tests/support.py:285: in run_sync24905 return executor.submit(asyncio.run, coro).result(timeout=120)24906 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24907/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24908 return self.__get_result()24909 ^^^^^^^^^^^^^^^^^^^24910/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24911 raise self._exception24912/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24913 result = ctx.run(self.task)24914 ^^^^^^^^^^^^^^^^^^24915/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24916 return fn(*args, **kwargs)24917 ^^^^^^^^^^^^^^^^^^^24918/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24919 return runner.run(main)24920 ^^^^^^^^^^^^^^^^24921/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24922 return self._loop.run_until_complete(task)24923 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24924/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24925 return future.result()24926 ^^^^^^^^^^^^^^^24927nixbot/migrations.py:99: in apply_migrations24928 migrations = load_migrations()24929 ^^^^^^^^^^^^^^^^^24930_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2493124932 def load_migrations() -> list[Migration]:24933 """Load migration scripts shipped with the package, ordered by version."""24934 migrations = []24935 for entry in resources.files(__package__).joinpath("migrations").iterdir():24936 m = _SCRIPT_RE.match(entry.name)24937 if m is None:24938 continue24939 migrations.append(24940 Migration(24941 version=int(m.group(1)),24942 name=m.group(2),24943 sql=entry.read_text(),24944 )24945 )24946 migrations.sort(key=lambda mig: mig.version)24947 versions = [m.version for m in migrations]24948 if len(set(versions)) != len(versions):24949 msg = f"Duplicate migration versions: {versions}"24950> raise MigrationError(msg)24951E 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]2495224953nixbot/migrations.py:67: MigrationError24954_____________ ERROR at setup of test_logout_revokes_session_cookie _____________24955[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142495624957request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24958tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2495924960 @pytest.fixture(scope="module")24961 def postgres_dsn(24962 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24963 ) -> Iterator[str]:24964 if shutil.which("initdb") is None:24965 pytest.skip("postgresql not available")24966 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24967> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24968 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2496924970nixbot/tests/conftest.py:33: 24971_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24972/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24973 return next(self.gen)24974 ^^^^^^^^^^^^^^24975nixbot/tests/support.py:327: in ephemeral_postgres24976 run_sync(apply_migrations(dsn))24977nixbot/tests/support.py:285: in run_sync24978 return executor.submit(asyncio.run, coro).result(timeout=120)24979 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24980/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24981 return self.__get_result()24982 ^^^^^^^^^^^^^^^^^^^24983/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24984 raise self._exception24985/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24986 result = ctx.run(self.task)24987 ^^^^^^^^^^^^^^^^^^24988/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24989 return fn(*args, **kwargs)24990 ^^^^^^^^^^^^^^^^^^^24991/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24992 return runner.run(main)24993 ^^^^^^^^^^^^^^^^24994/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24995 return self._loop.run_until_complete(task)24996 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24997/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24998 return future.result()24999 ^^^^^^^^^^^^^^^25000nixbot/migrations.py:99: in apply_migrations25001 migrations = load_migrations()25002 ^^^^^^^^^^^^^^^^^25003_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2500425005 def load_migrations() -> list[Migration]:25006 """Load migration scripts shipped with the package, ordered by version."""25007 migrations = []25008 for entry in resources.files(__package__).joinpath("migrations").iterdir():25009 m = _SCRIPT_RE.match(entry.name)25010 if m is None:25011 continue25012 migrations.append(25013 Migration(25014 version=int(m.group(1)),25015 name=m.group(2),25016 sql=entry.read_text(),25017 )25018 )25019 migrations.sort(key=lambda mig: mig.version)25020 versions = [m.version for m in migrations]25021 if len(set(versions)) != len(versions):25022 msg = f"Duplicate migration versions: {versions}"25023> raise MigrationError(msg)25024E 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]2502525026nixbot/migrations.py:67: MigrationError25027__________ ERROR at setup of test_post_process_paths_are_forge_scoped __________25028[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142502925030self = <Coroutine test_post_process_paths_are_forge_scoped>2503125032 def setup(self) -> None:25033 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25034 if runner_fixture_id not in self.fixturenames:25035 self.fixturenames.append(runner_fixture_id)25036 # When loop factories are configured, resolve the loop factory25037 # fixture early so that a factory variant change cascades cache25038 # invalidation before any async fixture checks its cache.25039 hook_caller = self.config.hook.pytest_asyncio_loop_factories25040 if hook_caller.get_hookimpls():25041 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25042> return super().setup()25043 ^^^^^^^^^^^^^^^2504425045/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25046_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25047nixbot/tests/conftest.py:33: in postgres_dsn25048 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25049 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25050/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25051 return next(self.gen)25052 ^^^^^^^^^^^^^^25053nixbot/tests/support.py:327: in ephemeral_postgres25054 run_sync(apply_migrations(dsn))25055nixbot/tests/support.py:285: in run_sync25056 return executor.submit(asyncio.run, coro).result(timeout=120)25057 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25058/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25059 return self.__get_result()25060 ^^^^^^^^^^^^^^^^^^^25061/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25062 raise self._exception25063/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25064 result = ctx.run(self.task)25065 ^^^^^^^^^^^^^^^^^^25066/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25067 return fn(*args, **kwargs)25068 ^^^^^^^^^^^^^^^^^^^25069/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25070 return runner.run(main)25071 ^^^^^^^^^^^^^^^^25072/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25073 return self._loop.run_until_complete(task)25074 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25075/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25076 return future.result()25077 ^^^^^^^^^^^^^^^25078nixbot/migrations.py:99: in apply_migrations25079 migrations = load_migrations()25080 ^^^^^^^^^^^^^^^^^25081_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2508225083 def load_migrations() -> list[Migration]:25084 """Load migration scripts shipped with the package, ordered by version."""25085 migrations = []25086 for entry in resources.files(__package__).joinpath("migrations").iterdir():25087 m = _SCRIPT_RE.match(entry.name)25088 if m is None:25089 continue25090 migrations.append(25091 Migration(25092 version=int(m.group(1)),25093 name=m.group(2),25094 sql=entry.read_text(),25095 )25096 )25097 migrations.sort(key=lambda mig: mig.version)25098 versions = [m.version for m in migrations]25099 if len(set(versions)) != len(versions):25100 msg = f"Duplicate migration versions: {versions}"25101> raise MigrationError(msg)25102E 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]2510325104nixbot/migrations.py:67: MigrationError25105______________ ERROR at setup of test_gitlab_nested_group_routes _______________25106[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142510725108request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25109tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2511025111 @pytest.fixture(scope="module")25112 def postgres_dsn(25113 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25114 ) -> Iterator[str]:25115 if shutil.which("initdb") is None:25116 pytest.skip("postgresql not available")25117 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25118> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2512025121nixbot/tests/conftest.py:33: 25122_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25123/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25124 return next(self.gen)25125 ^^^^^^^^^^^^^^25126nixbot/tests/support.py:327: in ephemeral_postgres25127 run_sync(apply_migrations(dsn))25128nixbot/tests/support.py:285: in run_sync25129 return executor.submit(asyncio.run, coro).result(timeout=120)25130 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25131/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25132 return self.__get_result()25133 ^^^^^^^^^^^^^^^^^^^25134/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25135 raise self._exception25136/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25137 result = ctx.run(self.task)25138 ^^^^^^^^^^^^^^^^^^25139/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25140 return fn(*args, **kwargs)25141 ^^^^^^^^^^^^^^^^^^^25142/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25143 return runner.run(main)25144 ^^^^^^^^^^^^^^^^25145/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25146 return self._loop.run_until_complete(task)25147 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25148/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25149 return future.result()25150 ^^^^^^^^^^^^^^^25151nixbot/migrations.py:99: in apply_migrations25152 migrations = load_migrations()25153 ^^^^^^^^^^^^^^^^^25154_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2515525156 def load_migrations() -> list[Migration]:25157 """Load migration scripts shipped with the package, ordered by version."""25158 migrations = []25159 for entry in resources.files(__package__).joinpath("migrations").iterdir():25160 m = _SCRIPT_RE.match(entry.name)25161 if m is None:25162 continue25163 migrations.append(25164 Migration(25165 version=int(m.group(1)),25166 name=m.group(2),25167 sql=entry.read_text(),25168 )25169 )25170 migrations.sort(key=lambda mig: mig.version)25171 versions = [m.version for m in migrations]25172 if len(set(versions)) != len(versions):25173 msg = f"Duplicate migration versions: {versions}"25174> raise MigrationError(msg)25175E 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]2517625177nixbot/migrations.py:67: MigrationError25178_______ ERROR at setup of test_effects_phase_error_keeps_succeeded_build _______25179[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142518025181self = <Coroutine test_effects_phase_error_keeps_succeeded_build>2518225183 def setup(self) -> None:25184 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25185 if runner_fixture_id not in self.fixturenames:25186 self.fixturenames.append(runner_fixture_id)25187 # When loop factories are configured, resolve the loop factory25188 # fixture early so that a factory variant change cascades cache25189 # invalidation before any async fixture checks its cache.25190 hook_caller = self.config.hook.pytest_asyncio_loop_factories25191 if hook_caller.get_hookimpls():25192 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25193> return super().setup()25194 ^^^^^^^^^^^^^^^2519525196/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25197_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25198nixbot/tests/conftest.py:33: in postgres_dsn25199 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25200 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25201/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25202 return next(self.gen)25203 ^^^^^^^^^^^^^^25204nixbot/tests/support.py:327: in ephemeral_postgres25205 run_sync(apply_migrations(dsn))25206nixbot/tests/support.py:285: in run_sync25207 return executor.submit(asyncio.run, coro).result(timeout=120)25208 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25209/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25210 return self.__get_result()25211 ^^^^^^^^^^^^^^^^^^^25212/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25213 raise self._exception25214/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25215 result = ctx.run(self.task)25216 ^^^^^^^^^^^^^^^^^^25217/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25218 return fn(*args, **kwargs)25219 ^^^^^^^^^^^^^^^^^^^25220/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25221 return runner.run(main)25222 ^^^^^^^^^^^^^^^^25223/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25224 return self._loop.run_until_complete(task)25225 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25226/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25227 return future.result()25228 ^^^^^^^^^^^^^^^25229nixbot/migrations.py:99: in apply_migrations25230 migrations = load_migrations()25231 ^^^^^^^^^^^^^^^^^25232_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2523325234 def load_migrations() -> list[Migration]:25235 """Load migration scripts shipped with the package, ordered by version."""25236 migrations = []25237 for entry in resources.files(__package__).joinpath("migrations").iterdir():25238 m = _SCRIPT_RE.match(entry.name)25239 if m is None:25240 continue25241 migrations.append(25242 Migration(25243 version=int(m.group(1)),25244 name=m.group(2),25245 sql=entry.read_text(),25246 )25247 )25248 migrations.sort(key=lambda mig: mig.version)25249 versions = [m.version for m in migrations]25250 if len(set(versions)) != len(versions):25251 msg = f"Duplicate migration versions: {versions}"25252> raise MigrationError(msg)25253E 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]2525425255nixbot/migrations.py:67: MigrationError25256___________ ERROR at setup of test_scheduled_run_viewer_renders_ansi ___________25257[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142525825259request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25260tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2526125262 @pytest.fixture(scope="module")25263 def postgres_dsn(25264 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25265 ) -> Iterator[str]:25266 if shutil.which("initdb") is None:25267 pytest.skip("postgresql not available")25268 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25269> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25270 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2527125272nixbot/tests/conftest.py:33: 25273_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25274/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25275 return next(self.gen)25276 ^^^^^^^^^^^^^^25277nixbot/tests/support.py:327: in ephemeral_postgres25278 run_sync(apply_migrations(dsn))25279nixbot/tests/support.py:285: in run_sync25280 return executor.submit(asyncio.run, coro).result(timeout=120)25281 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25282/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25283 return self.__get_result()25284 ^^^^^^^^^^^^^^^^^^^25285/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25286 raise self._exception25287/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25288 result = ctx.run(self.task)25289 ^^^^^^^^^^^^^^^^^^25290/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25291 return fn(*args, **kwargs)25292 ^^^^^^^^^^^^^^^^^^^25293/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25294 return runner.run(main)25295 ^^^^^^^^^^^^^^^^25296/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25297 return self._loop.run_until_complete(task)25298 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25299/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25300 return future.result()25301 ^^^^^^^^^^^^^^^25302nixbot/migrations.py:99: in apply_migrations25303 migrations = load_migrations()25304 ^^^^^^^^^^^^^^^^^25305_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2530625307 def load_migrations() -> list[Migration]:25308 """Load migration scripts shipped with the package, ordered by version."""25309 migrations = []25310 for entry in resources.files(__package__).joinpath("migrations").iterdir():25311 m = _SCRIPT_RE.match(entry.name)25312 if m is None:25313 continue25314 migrations.append(25315 Migration(25316 version=int(m.group(1)),25317 name=m.group(2),25318 sql=entry.read_text(),25319 )25320 )25321 migrations.sort(key=lambda mig: mig.version)25322 versions = [m.version for m in migrations]25323 if len(set(versions)) != len(versions):25324 msg = f"Duplicate migration versions: {versions}"25325> raise MigrationError(msg)25326E 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]2532725328nixbot/migrations.py:67: MigrationError25329_____ ERROR at setup of test_reuse_post_process_error_still_reports_status _____25330[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142533125332self = <Coroutine test_reuse_post_process_error_still_reports_status>2533325334 def setup(self) -> None:25335 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25336 if runner_fixture_id not in self.fixturenames:25337 self.fixturenames.append(runner_fixture_id)25338 # When loop factories are configured, resolve the loop factory25339 # fixture early so that a factory variant change cascades cache25340 # invalidation before any async fixture checks its cache.25341 hook_caller = self.config.hook.pytest_asyncio_loop_factories25342 if hook_caller.get_hookimpls():25343 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25344> return super().setup()25345 ^^^^^^^^^^^^^^^2534625347/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25348_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25349nixbot/tests/conftest.py:33: in postgres_dsn25350 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25351 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25352/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25353 return next(self.gen)25354 ^^^^^^^^^^^^^^25355nixbot/tests/support.py:327: in ephemeral_postgres25356 run_sync(apply_migrations(dsn))25357nixbot/tests/support.py:285: in run_sync25358 return executor.submit(asyncio.run, coro).result(timeout=120)25359 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25360/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25361 return self.__get_result()25362 ^^^^^^^^^^^^^^^^^^^25363/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25364 raise self._exception25365/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25366 result = ctx.run(self.task)25367 ^^^^^^^^^^^^^^^^^^25368/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25369 return fn(*args, **kwargs)25370 ^^^^^^^^^^^^^^^^^^^25371/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25372 return runner.run(main)25373 ^^^^^^^^^^^^^^^^25374/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25375 return self._loop.run_until_complete(task)25376 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25377/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25378 return future.result()25379 ^^^^^^^^^^^^^^^25380nixbot/migrations.py:99: in apply_migrations25381 migrations = load_migrations()25382 ^^^^^^^^^^^^^^^^^25383_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2538425385 def load_migrations() -> list[Migration]:25386 """Load migration scripts shipped with the package, ordered by version."""25387 migrations = []25388 for entry in resources.files(__package__).joinpath("migrations").iterdir():25389 m = _SCRIPT_RE.match(entry.name)25390 if m is None:25391 continue25392 migrations.append(25393 Migration(25394 version=int(m.group(1)),25395 name=m.group(2),25396 sql=entry.read_text(),25397 )25398 )25399 migrations.sort(key=lambda mig: mig.version)25400 versions = [m.version for m in migrations]25401 if len(set(versions)) != len(versions):25402 msg = f"Duplicate migration versions: {versions}"25403> raise MigrationError(msg)25404E 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]2540525406nixbot/migrations.py:67: MigrationError25407________ ERROR at setup of test_scheduled_run_viewer_cross_project_404 _________25408[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142540925410request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25411tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2541225413 @pytest.fixture(scope="module")25414 def postgres_dsn(25415 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25416 ) -> Iterator[str]:25417 if shutil.which("initdb") is None:25418 pytest.skip("postgresql not available")25419 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25420> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25421 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2542225423nixbot/tests/conftest.py:33: 25424_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25425/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25426 return next(self.gen)25427 ^^^^^^^^^^^^^^25428nixbot/tests/support.py:327: in ephemeral_postgres25429 run_sync(apply_migrations(dsn))25430nixbot/tests/support.py:285: in run_sync25431 return executor.submit(asyncio.run, coro).result(timeout=120)25432 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25433/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25434 return self.__get_result()25435 ^^^^^^^^^^^^^^^^^^^25436/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25437 raise self._exception25438/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25439 result = ctx.run(self.task)25440 ^^^^^^^^^^^^^^^^^^25441/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25442 return fn(*args, **kwargs)25443 ^^^^^^^^^^^^^^^^^^^25444/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25445 return runner.run(main)25446 ^^^^^^^^^^^^^^^^25447/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25448 return self._loop.run_until_complete(task)25449 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25450/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25451 return future.result()25452 ^^^^^^^^^^^^^^^25453nixbot/migrations.py:99: in apply_migrations25454 migrations = load_migrations()25455 ^^^^^^^^^^^^^^^^^25456_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2545725458 def load_migrations() -> list[Migration]:25459 """Load migration scripts shipped with the package, ordered by version."""25460 migrations = []25461 for entry in resources.files(__package__).joinpath("migrations").iterdir():25462 m = _SCRIPT_RE.match(entry.name)25463 if m is None:25464 continue25465 migrations.append(25466 Migration(25467 version=int(m.group(1)),25468 name=m.group(2),25469 sql=entry.read_text(),25470 )25471 )25472 migrations.sort(key=lambda mig: mig.version)25473 versions = [m.version for m in migrations]25474 if len(set(versions)) != len(versions):25475 msg = f"Duplicate migration versions: {versions}"25476> raise MigrationError(msg)25477E 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]2547825479nixbot/migrations.py:67: MigrationError25480_______ ERROR at setup of test_scheduled_run_log_unavailable_placeholder _______25481[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142548225483request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25484tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...816e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2548525486 @pytest.fixture(scope="module")25487 def postgres_dsn(25488 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25489 ) -> Iterator[str]:25490 if shutil.which("initdb") is None:25491 pytest.skip("postgresql not available")25492 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25493> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25494 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2549525496nixbot/tests/conftest.py:33: 25497_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25498/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25499 return next(self.gen)25500 ^^^^^^^^^^^^^^25501nixbot/tests/support.py:327: in ephemeral_postgres25502 run_sync(apply_migrations(dsn))25503nixbot/tests/support.py:285: in run_sync25504 return executor.submit(asyncio.run, coro).result(timeout=120)25505 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25506/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25507 return self.__get_result()25508 ^^^^^^^^^^^^^^^^^^^25509/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25510 raise self._exception25511/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25512 result = ctx.run(self.task)25513 ^^^^^^^^^^^^^^^^^^25514/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25515 return fn(*args, **kwargs)25516 ^^^^^^^^^^^^^^^^^^^25517/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25518 return runner.run(main)25519 ^^^^^^^^^^^^^^^^25520/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25521 return self._loop.run_until_complete(task)25522 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25523/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25524 return future.result()25525 ^^^^^^^^^^^^^^^25526nixbot/migrations.py:99: in apply_migrations25527 migrations = load_migrations()25528 ^^^^^^^^^^^^^^^^^25529_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2553025531 def load_migrations() -> list[Migration]:25532 """Load migration scripts shipped with the package, ordered by version."""25533 migrations = []25534 for entry in resources.files(__package__).joinpath("migrations").iterdir():25535 m = _SCRIPT_RE.match(entry.name)25536 if m is None:25537 continue25538 migrations.append(25539 Migration(25540 version=int(m.group(1)),25541 name=m.group(2),25542 sql=entry.read_text(),25543 )25544 )25545 migrations.sort(key=lambda mig: mig.version)25546 versions = [m.version for m in migrations]25547 if len(set(versions)) != len(versions):25548 msg = f"Duplicate migration versions: {versions}"25549> raise MigrationError(msg)25550E 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]2555125552nixbot/migrations.py:67: MigrationError25553____ ERROR at setup of test_reuse_with_missing_output_still_post_processes _____25554[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142555525556self = <Coroutine test_reuse_with_missing_output_still_post_processes>2555725558 def setup(self) -> None:25559 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25560 if runner_fixture_id not in self.fixturenames:25561 self.fixturenames.append(runner_fixture_id)25562 # When loop factories are configured, resolve the loop factory25563 # fixture early so that a factory variant change cascades cache25564 # invalidation before any async fixture checks its cache.25565 hook_caller = self.config.hook.pytest_asyncio_loop_factories25566 if hook_caller.get_hookimpls():25567 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25568> return super().setup()25569 ^^^^^^^^^^^^^^^2557025571/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25572_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25573nixbot/tests/conftest.py:33: in postgres_dsn25574 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25575 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25576/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25585 return self.__get_result()25586 ^^^^^^^^^^^^^^^^^^^25587/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25588 raise self._exception25589/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25590 result = ctx.run(self.task)25591 ^^^^^^^^^^^^^^^^^^25592/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25593 return fn(*args, **kwargs)25594 ^^^^^^^^^^^^^^^^^^^25595/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25596 return runner.run(main)25597 ^^^^^^^^^^^^^^^^25598/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25599 return self._loop.run_until_complete(task)25600 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25601/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25658 return self.__get_result()25659 ^^^^^^^^^^^^^^^^^^^25660/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25661 raise self._exception25662/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25663 result = ctx.run(self.task)25664 ^^^^^^^^^^^^^^^^^^25665/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25666 return fn(*args, **kwargs)25667 ^^^^^^^^^^^^^^^^^^^25668/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25669 return runner.run(main)25670 ^^^^^^^^^^^^^^^^25671/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25672 return self._loop.run_until_complete(task)25673 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25674/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25731 return self.__get_result()25732 ^^^^^^^^^^^^^^^^^^^25733/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25734 raise self._exception25735/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25736 result = ctx.run(self.task)25737 ^^^^^^^^^^^^^^^^^^25738/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25739 return fn(*args, **kwargs)25740 ^^^^^^^^^^^^^^^^^^^25741/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25742 return runner.run(main)25743 ^^^^^^^^^^^^^^^^25744/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25745 return self._loop.run_until_complete(task)25746 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25747/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25804 return self.__get_result()25805 ^^^^^^^^^^^^^^^^^^^25806/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25807 raise self._exception25808/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25809 result = ctx.run(self.task)25810 ^^^^^^^^^^^^^^^^^^25811/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25812 return fn(*args, **kwargs)25813 ^^^^^^^^^^^^^^^^^^^25814/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25815 return runner.run(main)25816 ^^^^^^^^^^^^^^^^25817/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25818 return self._loop.run_until_complete(task)25819 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25820/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25877 return self.__get_result()25878 ^^^^^^^^^^^^^^^^^^^25879/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25880 raise self._exception25881/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25882 result = ctx.run(self.task)25883 ^^^^^^^^^^^^^^^^^^25884/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25885 return fn(*args, **kwargs)25886 ^^^^^^^^^^^^^^^^^^^25887/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25888 return runner.run(main)25889 ^^^^^^^^^^^^^^^^25890/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25891 return self._loop.run_until_complete(task)25892 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25893/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25950 return self.__get_result()25951 ^^^^^^^^^^^^^^^^^^^25952/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25953 raise self._exception25954/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25955 result = ctx.run(self.task)25956 ^^^^^^^^^^^^^^^^^^25957/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25958 return fn(*args, **kwargs)25959 ^^^^^^^^^^^^^^^^^^^25960/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25961 return runner.run(main)25962 ^^^^^^^^^^^^^^^^25963/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25964 return self._loop.run_until_complete(task)25965 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25966/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26023 return self.__get_result()26024 ^^^^^^^^^^^^^^^^^^^26025/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26026 raise self._exception26027/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26028 result = ctx.run(self.task)26029 ^^^^^^^^^^^^^^^^^^26030/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26031 return fn(*args, **kwargs)26032 ^^^^^^^^^^^^^^^^^^^26033/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26034 return runner.run(main)26035 ^^^^^^^^^^^^^^^^26036/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26037 return self._loop.run_until_complete(task)26038 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26039/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26096 return self.__get_result()26097 ^^^^^^^^^^^^^^^^^^^26098/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26099 raise self._exception26100/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26101 result = ctx.run(self.task)26102 ^^^^^^^^^^^^^^^^^^26103/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26104 return fn(*args, **kwargs)26105 ^^^^^^^^^^^^^^^^^^^26106/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26107 return runner.run(main)26108 ^^^^^^^^^^^^^^^^26109/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26110 return self._loop.run_until_complete(task)26111 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26112/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26169 return self.__get_result()26170 ^^^^^^^^^^^^^^^^^^^26171/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26172 raise self._exception26173/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26174 result = ctx.run(self.task)26175 ^^^^^^^^^^^^^^^^^^26176/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26177 return fn(*args, **kwargs)26178 ^^^^^^^^^^^^^^^^^^^26179/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26180 return runner.run(main)26181 ^^^^^^^^^^^^^^^^26182/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26183 return self._loop.run_until_complete(task)26184 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26185/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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...816e0>, _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/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result26242 return self.__get_result()26243 ^^^^^^^^^^^^^^^^^^^26244/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result26245 raise self._exception26246/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run26247 result = ctx.run(self.task)26248 ^^^^^^^^^^^^^^^^^^26249/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run26250 return fn(*args, **kwargs)26251 ^^^^^^^^^^^^^^^^^^^26252/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run26253 return runner.run(main)26254 ^^^^^^^^^^^^^^^^26255/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run26256 return self._loop.run_until_complete(task)26257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^26258/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-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/41m77i1296n33p6liin8ynr6wh3h6b7m-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_forge.py::test_project_store_sync_and_legacy_import26324ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migratio...26325ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations...26326ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixb...26327ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission26328ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect26329ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - ...26330ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.Mig...26331ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrati...26332ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - n...26333ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows26334ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbo...26335ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only26336ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nix...26337ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal26338ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbo...26339ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.mig...26340ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations...26341ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migra...26342ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec26343ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.mi...26344ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbo...26345ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - ni...26346ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge26347ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.mig...26348ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations....26349ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot...26350ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationEr...26351ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrat...26352ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migratio...26353ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names26354ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrat...26355ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.mi...26356ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrati...26357ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations...26358ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migra...26359ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue26360ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - ...26361ERROR nixbot/tests/test_cli_api.py::test_repos_and_builds - nixbot.migrations...26362ERROR nixbot/tests/e2e/test_browse.py::test_homepage_lists_project_and_recent_builds26363ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema26364ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot....26365ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.m...26366ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes26367ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build26368ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship26369ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search26370ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixb...26371ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrat...26372ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.mig...26373ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.Mi...26374ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migra...26375ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid26376ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired26377ERROR nixbot/tests/e2e/test_browse.py::test_navigate_sidebar_to_failed_build26378ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger26379ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.m...26380ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot...26381ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos26382ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - ...26383ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone26384ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - ...26385ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrat...26386ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot....26387ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows26388ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migr...26389ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migra...26390ERROR nixbot/tests/e2e/test_browse.py::test_build_prev_next_navigation - nixb...26391ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.Migrat...26392ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nix...26393ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds26394ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.m...26395ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.Mi...26396ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.Migratio...26397ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nix...26398ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.Migration...26399ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build26400ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.M...26401ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbo...26402ERROR nixbot/tests/e2e/test_browse.py::test_structured_log_viewer - nixbot.mi...26403ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migra...26404ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession26405ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbo...26406ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - n...26407ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - ni...26408ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbo...26409ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migra...26410ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - ...26411ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixb...26412ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations...26413ERROR nixbot/tests/e2e/test_browse.py::test_project_filter_form - nixbot.migr...26414ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - ni...26415ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base26416ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbo...26417ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - ...26418ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot....26419ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes26420ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos26421ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - n...26422ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.mi...26423ERROR nixbot/tests/e2e/test_browse.py::test_attribute_log_prev_next_navigation26424ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects26425ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context26426ERROR nixbot/tests/test_cli.py::test_log_follow_finished_attr_falls_back_to_stored_log26427ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue26428ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch26429ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.mi...26430ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - ni...26431ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos26432ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings26433ERROR nixbot/tests/e2e/test_browse.py::test_project_filter - nixbot.migration...26434ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.mig...26435ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - ...26436ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.m...26437ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - n...26438ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nix...26439ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message26440ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migra...26441ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver26442ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs26443ERROR nixbot/tests/e2e/test_browse.py::test_activity_shows_running_build - ni...26444ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbo...26445ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates26446ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded26447ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery26448ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrat...26449ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic26450ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - ...26451ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nix...26452ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.mi...26453ERROR nixbot/tests/e2e/test_browse.py::test_activity_infinite_scroll - nixbot...26454ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build26455ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates26456ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrat...26457ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names26458ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrat...26459ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects26460ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache26461ERROR nixbot/tests/e2e/test_browse.py::test_no_horizontal_overflow_on_mobile26462ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up26463ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrati...26464ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - ni...26465ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot....26466ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings26467ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project26468ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - ...26469ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migra...26470ERROR nixbot/tests/e2e/test_browse.py::test_attribute_search_filters_groups26471ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.Mi...26472ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized26473ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.mig...26474ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - ...26475ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop26476ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.Mig...26477ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups26478ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.mi...26479ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrat...26480ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - ...26481ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns26482ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.Mig...26483ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache26484ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - n...26485ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates26486ERROR nixbot/tests/e2e/test_browse.py::test_groups_keep_identity_when_one_appears26487ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbo...26488ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields26489ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending26490ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migratio...26491ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migr...26492ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request26493ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows26494ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - ...26495ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - ...26496ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migr...26497ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery26498ERROR nixbot/tests/test_forge.py::test_register_repo_hook_500_with_403_in_body_raises26499ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbo...26500ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history26501ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes26502ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrati...26503ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - n...26504ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty26505ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification26506ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.Migrat...26507ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload26508ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates26509ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.m...26510ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs26511ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nix...26512ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status26513ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns26514ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - ...26515ERROR nixbot/tests/test_service.py::test_restart_while_unwinding_waits_then_runs26516ERROR nixbot/tests/test_control.py::test_token_creation_with_expiry - nixbot....26517ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixb...26518ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - n...26519ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached26520ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - n...26521ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running26522ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.m...26523ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached26524ERROR nixbot/tests/e2e/test_live.py::test_attribute_table_refreshes_while_building26525ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens26526ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs26527ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status26528ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.M...26529ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata26530ERROR nixbot/tests/e2e/test_live.py::test_log_page_streams_live_output - nixb...26531ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.mi...26532ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github]26533ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.M...26534ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot....26535ERROR nixbot/tests/e2e/test_live.py::test_log_page_keeps_up_with_a_line_burst26536ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs26537ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.m...26538ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows26539ERROR nixbot/tests/e2e/test_live.py::test_repeated_activity_keeps_one_card - ...26540ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows26541ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab]26542ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot....26543ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixb...26544ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build26545ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at26546ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.mi...26547ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds26548ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot...26549ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable26550ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility26551ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - ...26552ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows26553ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status26554ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery26555ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects26556ERROR nixbot/tests/test_control.py::test_webhook_secret_regeneration - nixbot...26557ERROR nixbot/tests/test_orchestrator.py::test_stale_event_does_not_supersede_newer_build26558ERROR nixbot/tests/test_db.py::test_failed_build_cache_scoped_per_project - n...26559ERROR nixbot/tests/test_web.py::test_legacy_redirect_404s_on_ambiguous_owner_name26560ERROR nixbot/tests/test_service.py::test_startup_reevaluates_interrupted_eval26561ERROR nixbot/tests/test_control.py::test_retry_after_parsing - nixbot.migrati...26562ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations....26563ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_cleans_cancel_events26564ERROR nixbot/tests/test_web.py::test_health_and_static - nixbot.migrations.Mi...26565ERROR nixbot/tests/test_service.py::test_rerun_of_interrupted_eval_reevaluates26566ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.mi...26567ERROR nixbot/tests/test_web.py::test_404s - nixbot.migrations.MigrationError:...26568ERROR nixbot/tests/test_control.py::test_work_retry_delay_honors_retry_after26569ERROR nixbot/tests/test_service.py::test_rerun_resumes_building_rows_and_keeps_finished26570ERROR nixbot/tests/test_orchestrator.py::test_eval_netrc_withheld_from_pr_with_instance_wide_creds26571ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.Mig...26572ERROR nixbot/tests/test_web.py::test_log_viewer_and_raw - nixbot.migrations.M...26573ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected26574ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build26575ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrat...26576ERROR nixbot/tests/test_control.py::test_effect_item_setup_failure_settles_row26577ERROR nixbot/tests/test_service.py::test_reeval_failure_marks_build_failed - ...26578ERROR nixbot/tests/test_web.py::test_structured_log_window_caps_huge_derivation26579ERROR nixbot/tests/test_orchestrator.py::test_effects_run_after_default_branch_success26580ERROR nixbot/tests/test_control.py::test_restart_attribute_posts_pending - ni...26581ERROR nixbot/tests/test_service.py::test_gitlab_discovery_and_hook_registration26582ERROR nixbot/tests/test_web.py::test_attr_named_dot_txt_not_shadowed_by_raw_route26583ERROR nixbot/tests/test_orchestrator.py::test_pr_worktree_config_cannot_grant_effects26584ERROR nixbot/tests/test_control.py::test_recovery_reports_interrupted_effects26585ERROR nixbot/tests/test_web.py::test_attr_names_with_special_characters - nix...26586ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again26587ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.Mi...26588ERROR nixbot/tests/test_service.py::test_health_serves_while_startup_blocks26589ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - ...26590ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect26591ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migr...26592ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status26593ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migra...26594ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.mi...26595ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbo...26596ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot...26597ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - n...26598ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrati...26599ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbo...26600ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations...26601ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation26602ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbo...26603ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending26604ERROR nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure26605ERROR nixbot/tests/test_web.py::test_queue_sorts_active_before_pending - nixb...26606ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_settles_streamed_attributes26607ERROR nixbot/tests/test_web.py::test_queue_position_is_global_and_skips_running26608ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot....26609ERROR nixbot/tests/test_web.py::test_openapi_docs - nixbot.migrations.Migrati...26610ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending26611ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migratio...26612ERROR nixbot/tests/test_web.py::test_drv_raw_serves_running_attribute - nixbo...26613ERROR nixbot/tests/test_orchestrator.py::test_effect_crash_settles_the_row - ...26614ERROR nixbot/tests/test_web.py::test_log_sse_stream_caps_history_backlog - ni...26615ERROR nixbot/tests/test_orchestrator.py::test_concurrent_effects_use_independent_worktrees26616ERROR nixbot/tests/test_web.py::test_log_sse_stream_neutralizes_carriage_returns26617ERROR nixbot/tests/test_orchestrator.py::test_locked_effect_gets_shared_dedup_key26618ERROR nixbot/tests/test_web.py::test_api_builds_commit_filter - nixbot.migrat...26619ERROR nixbot/tests/test_web.py::test_log_tail_param - nixbot.migrations.Migra...26620ERROR nixbot/tests/test_orchestrator.py::test_effect_item_not_claimable_until_dep_settles26621ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent26622ERROR nixbot/tests/test_web.py::test_api_build_failures - nixbot.migrations.M...26623ERROR nixbot/tests/test_web.py::test_api_build_failures_rejects_non_positive_tail26624ERROR nixbot/tests/test_orchestrator.py::test_lock_serializes_builds_without_interleaving26625ERROR nixbot/tests/test_web.py::test_llms_txt - nixbot.migrations.MigrationEr...26626ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_cycle_fails_discovery26627ERROR nixbot/tests/test_web.py::test_event_broker_pushes_status_changes - nix...26628ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status26629ERROR nixbot/tests/test_web.py::test_events_stream_coalesces_burst - nixbot.m...26630ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build26631ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nix...26632ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build26633ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.Mig...26634ERROR nixbot/tests/test_web.py::test_build_page_shows_effects - nixbot.migrat...26635ERROR nixbot/tests/test_orchestrator.py::test_reuse_empty_succeeded_build_posts_eval_success26636ERROR nixbot/tests/test_web.py::test_build_page_shows_event_effects - nixbot....26637ERROR nixbot/tests/test_orchestrator.py::test_stale_event_reusing_old_build_does_not_cancel_newer26638ERROR nixbot/tests/test_web.py::test_effect_log_raw_text - nixbot.migrations....26639ERROR nixbot/tests/test_orchestrator.py::test_reuse_for_default_branch_push_runs_effects26640ERROR nixbot/tests/test_web.py::test_effect_log_viewer_status_icon - nixbot.m...26641ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit26642ERROR nixbot/tests/test_web.py::test_effect_changes_notify_build_events - nix...26643ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status26644ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.Mi...26645ERROR nixbot/tests/test_web.py::test_pr_comment_api - nixbot.migrations.Migra...26646ERROR nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts26647ERROR nixbot/tests/test_web.py::test_workload_identity_api - nixbot.migration...26648ERROR nixbot/tests/test_orchestrator.py::test_effect_log_does_not_collide_with_attribute_log26649ERROR nixbot/tests/test_web.py::test_logout_revokes_session_cookie - nixbot.m...26650ERROR nixbot/tests/test_orchestrator.py::test_post_process_paths_are_forge_scoped26651ERROR nixbot/tests/test_web.py::test_gitlab_nested_group_routes - nixbot.migr...26652ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build26653ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_renders_ansi - nixb...26654ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status26655ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_40426656ERROR nixbot/tests/test_web.py::test_scheduled_run_log_unavailable_placeholder26657ERROR nixbot/tests/test_orchestrator.py::test_reuse_with_missing_output_still_post_processes26658ERROR 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 14.35s ============