python3.14-nixbot-tests
checks.aarch64-linux.nixbot-tests
· build #364
· 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.........................ss............................................. [ 8%]116..................F..................................................... [ 17%]117..............sssssss................................................... [ 26%]118........................................................................ [ 35%]119.....................................s.................................. [ 44%]120E.EEEEEEEEEEEEE..E..E.EEEEEEEEEEE..EE.EEEEEE.EEE..E..EEEEEEEEEEEEEEE.EEE [ 53%]121E..E.EEEE.EEEE.EEE.E.....EEEEEEEEEE...E...E..........EE........EEE..E... [ 62%]122EEEE.EEEEEEEEEEEEE..E...E.E.EEEEEEEEEEEEEEEE.EEE..EEEEEEEEEEEEEEEEEEEEEE [ 71%]123EE.EEEEs.EEE.E...E.sEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEE [ 80%]124EEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEE..E........EEEEEEEEEEEEEEE..EEEEEEEEEE [ 89%]125EEEEEEEE.EEEEE....E.EEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEE [ 98%]126EEEEE...E...EEE [100%]127==================================== ERRORS ====================================128___________________ ERROR at setup of test_repos_and_builds ____________________129[gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14130131fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>132request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>133134 @pytest.hookimpl(wrapper=True)135 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:136 if (137 fixturedef.argname == "event_loop_policy"138 and fixturedef.func.__module__ != __name__139 ):140 warnings.warn(141 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),142 )143 asyncio_mode = _get_asyncio_mode(request.config)144 if not _is_asyncio_fixture_function(fixturedef.func):145 if asyncio_mode == Mode.STRICT:146 # Ignore async fixtures without explicit asyncio mark in strict mode147 # This applies to pytest_trio fixtures, for example148 return (yield)149 if not _is_coroutine_or_asyncgen(fixturedef.func):150> return (yield)151 ^^^^^152153/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 154_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 155nixbot/tests/conftest.py:33: in postgres_dsn156 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:157 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^158/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__159 return next(self.gen)160 ^^^^^^^^^^^^^^161nixbot/tests/support.py:327: in ephemeral_postgres162 run_sync(apply_migrations(dsn))163nixbot/tests/support.py:285: in run_sync164 return executor.submit(asyncio.run, coro).result(timeout=120)165 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^166/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result167 return self.__get_result()168 ^^^^^^^^^^^^^^^^^^^169/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result170 raise self._exception171/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run172 result = ctx.run(self.task)173 ^^^^^^^^^^^^^^^^^^174/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run175 return fn(*args, **kwargs)176 ^^^^^^^^^^^^^^^^^^^177/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run178 return runner.run(main)179 ^^^^^^^^^^^^^^^^180/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run181 return self._loop.run_until_complete(task)182 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^183/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete184 return future.result()185 ^^^^^^^^^^^^^^^186nixbot/migrations.py:99: in apply_migrations187 migrations = load_migrations()188 ^^^^^^^^^^^^^^^^^189_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 190191 def load_migrations() -> list[Migration]:192 """Load migration scripts shipped with the package, ordered by version."""193 migrations = []194 for entry in resources.files(__package__).joinpath("migrations").iterdir():195 m = _SCRIPT_RE.match(entry.name)196 if m is None:197 continue198 migrations.append(199 Migration(200 version=int(m.group(1)),201 name=m.group(2),202 sql=entry.read_text(),203 )204 )205 migrations.sort(key=lambda mig: mig.version)206 versions = [m.version for m in migrations]207 if len(set(versions)) != len(versions):208 msg = f"Duplicate migration versions: {versions}"209> raise MigrationError(msg)210E 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]211212nixbot/migrations.py:67: MigrationError213_________________ ERROR at setup of test_migrations_idempotent _________________214[gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14215216self = <Coroutine test_migrations_idempotent>217218 def setup(self) -> None:219 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"220 if runner_fixture_id not in self.fixturenames:221 self.fixturenames.append(runner_fixture_id)222 # When loop factories are configured, resolve the loop factory223 # fixture early so that a factory variant change cascades cache224 # invalidation before any async fixture checks its cache.225 hook_caller = self.config.hook.pytest_asyncio_loop_factories226 if hook_caller.get_hookimpls():227 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)228> return super().setup()229 ^^^^^^^^^^^^^^^230231/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 232_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 233/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup234 return (yield)235 ^^^^^236nixbot/tests/conftest.py:33: in postgres_dsn237 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:238 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^239/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__240 return next(self.gen)241 ^^^^^^^^^^^^^^242nixbot/tests/support.py:327: in ephemeral_postgres243 run_sync(apply_migrations(dsn))244nixbot/tests/support.py:285: in run_sync245 return executor.submit(asyncio.run, coro).result(timeout=120)246 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^247/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result248 return self.__get_result()249 ^^^^^^^^^^^^^^^^^^^250/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result251 raise self._exception252/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run253 result = ctx.run(self.task)254 ^^^^^^^^^^^^^^^^^^255/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run256 return fn(*args, **kwargs)257 ^^^^^^^^^^^^^^^^^^^258/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run259 return runner.run(main)260 ^^^^^^^^^^^^^^^^261/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run262 return self._loop.run_until_complete(task)263 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^264/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete265 return future.result()266 ^^^^^^^^^^^^^^^267nixbot/migrations.py:99: in apply_migrations268 migrations = load_migrations()269 ^^^^^^^^^^^^^^^^^270_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 271272 def load_migrations() -> list[Migration]:273 """Load migration scripts shipped with the package, ordered by version."""274 migrations = []275 for entry in resources.files(__package__).joinpath("migrations").iterdir():276 m = _SCRIPT_RE.match(entry.name)277 if m is None:278 continue279 migrations.append(280 Migration(281 version=int(m.group(1)),282 name=m.group(2),283 sql=entry.read_text(),284 )285 )286 migrations.sort(key=lambda mig: mig.version)287 versions = [m.version for m in migrations]288 if len(set(versions)) != len(versions):289 msg = f"Duplicate migration versions: {versions}"290> raise MigrationError(msg)291E 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]292293nixbot/migrations.py:67: MigrationError294______________ ERROR at setup of test_anonymous_sees_public_only _______________295[gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14296297fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>298request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>299300 @pytest.hookimpl(wrapper=True)301 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:302 if (303 fixturedef.argname == "event_loop_policy"304 and fixturedef.func.__module__ != __name__305 ):306 warnings.warn(307 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),308 )309 asyncio_mode = _get_asyncio_mode(request.config)310 if not _is_asyncio_fixture_function(fixturedef.func):311 if asyncio_mode == Mode.STRICT:312 # Ignore async fixtures without explicit asyncio mark in strict mode313 # This applies to pytest_trio fixtures, for example314 return (yield)315 if not _is_coroutine_or_asyncgen(fixturedef.func):316> return (yield)317 ^^^^^318319/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 320_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 321nixbot/tests/conftest.py:33: in postgres_dsn322 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:323 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^324/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__325 return next(self.gen)326 ^^^^^^^^^^^^^^327nixbot/tests/support.py:327: in ephemeral_postgres328 run_sync(apply_migrations(dsn))329nixbot/tests/support.py:285: in run_sync330 return executor.submit(asyncio.run, coro).result(timeout=120)331 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^332/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result333 return self.__get_result()334 ^^^^^^^^^^^^^^^^^^^335/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result336 raise self._exception337/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run338 result = ctx.run(self.task)339 ^^^^^^^^^^^^^^^^^^340/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run341 return fn(*args, **kwargs)342 ^^^^^^^^^^^^^^^^^^^343/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run344 return runner.run(main)345 ^^^^^^^^^^^^^^^^346/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run347 return self._loop.run_until_complete(task)348 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^349/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete350 return future.result()351 ^^^^^^^^^^^^^^^352nixbot/migrations.py:99: in apply_migrations353 migrations = load_migrations()354 ^^^^^^^^^^^^^^^^^355_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 356357 def load_migrations() -> list[Migration]:358 """Load migration scripts shipped with the package, ordered by version."""359 migrations = []360 for entry in resources.files(__package__).joinpath("migrations").iterdir():361 m = _SCRIPT_RE.match(entry.name)362 if m is None:363 continue364 migrations.append(365 Migration(366 version=int(m.group(1)),367 name=m.group(2),368 sql=entry.read_text(),369 )370 )371 migrations.sort(key=lambda mig: mig.version)372 versions = [m.version for m in migrations]373 if len(set(versions)) != len(versions):374 msg = f"Duplicate migration versions: {versions}"375> raise MigrationError(msg)376E 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]377378nixbot/migrations.py:67: MigrationError379____________________ ERROR at setup of test_full_lifecycle _____________________380[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14381382self = <Coroutine test_full_lifecycle>383384 def setup(self) -> None:385 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"386 if runner_fixture_id not in self.fixturenames:387 self.fixturenames.append(runner_fixture_id)388 # When loop factories are configured, resolve the loop factory389 # fixture early so that a factory variant change cascades cache390 # invalidation before any async fixture checks its cache.391 hook_caller = self.config.hook.pytest_asyncio_loop_factories392 if hook_caller.get_hookimpls():393 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)394> return super().setup()395 ^^^^^^^^^^^^^^^396397/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 398_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 399/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup400 return (yield)401 ^^^^^402nixbot/tests/conftest.py:33: in postgres_dsn403 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:404 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^405/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__406 return next(self.gen)407 ^^^^^^^^^^^^^^408nixbot/tests/support.py:327: in ephemeral_postgres409 run_sync(apply_migrations(dsn))410nixbot/tests/support.py:285: in run_sync411 return executor.submit(asyncio.run, coro).result(timeout=120)412 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^413/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result414 return self.__get_result()415 ^^^^^^^^^^^^^^^^^^^416/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result417 raise self._exception418/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run419 result = ctx.run(self.task)420 ^^^^^^^^^^^^^^^^^^421/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run422 return fn(*args, **kwargs)423 ^^^^^^^^^^^^^^^^^^^424/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run425 return runner.run(main)426 ^^^^^^^^^^^^^^^^427/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run428 return self._loop.run_until_complete(task)429 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^430/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete431 return future.result()432 ^^^^^^^^^^^^^^^433nixbot/migrations.py:99: in apply_migrations434 migrations = load_migrations()435 ^^^^^^^^^^^^^^^^^436_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 437438 def load_migrations() -> list[Migration]:439 """Load migration scripts shipped with the package, ordered by version."""440 migrations = []441 for entry in resources.files(__package__).joinpath("migrations").iterdir():442 m = _SCRIPT_RE.match(entry.name)443 if m is None:444 continue445 migrations.append(446 Migration(447 version=int(m.group(1)),448 name=m.group(2),449 sql=entry.read_text(),450 )451 )452 migrations.sort(key=lambda mig: mig.version)453 versions = [m.version for m in migrations]454 if len(set(versions)) != len(versions):455 msg = f"Duplicate migration versions: {versions}"456> raise MigrationError(msg)457E 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]458459nixbot/migrations.py:67: MigrationError460_______ ERROR at setup of test_control_buttons_hidden_without_permission _______461[gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14462463fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>464request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>465466 @pytest.hookimpl(wrapper=True)467 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:468 if (469 fixturedef.argname == "event_loop_policy"470 and fixturedef.func.__module__ != __name__471 ):472 warnings.warn(473 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),474 )475 asyncio_mode = _get_asyncio_mode(request.config)476 if not _is_asyncio_fixture_function(fixturedef.func):477 if asyncio_mode == Mode.STRICT:478 # Ignore async fixtures without explicit asyncio mark in strict mode479 # This applies to pytest_trio fixtures, for example480 return (yield)481 if not _is_coroutine_or_asyncgen(fixturedef.func):482> return (yield)483 ^^^^^484485/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 486_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 487nixbot/tests/conftest.py:33: in postgres_dsn488 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:489 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^490/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__491 return next(self.gen)492 ^^^^^^^^^^^^^^493nixbot/tests/support.py:327: in ephemeral_postgres494 run_sync(apply_migrations(dsn))495nixbot/tests/support.py:285: in run_sync496 return executor.submit(asyncio.run, coro).result(timeout=120)497 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^498/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result499 return self.__get_result()500 ^^^^^^^^^^^^^^^^^^^501/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result502 raise self._exception503/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run504 result = ctx.run(self.task)505 ^^^^^^^^^^^^^^^^^^506/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run507 return fn(*args, **kwargs)508 ^^^^^^^^^^^^^^^^^^^509/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run510 return runner.run(main)511 ^^^^^^^^^^^^^^^^512/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run513 return self._loop.run_until_complete(task)514 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^515/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete516 return future.result()517 ^^^^^^^^^^^^^^^518nixbot/migrations.py:99: in apply_migrations519 migrations = load_migrations()520 ^^^^^^^^^^^^^^^^^521_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 522523 def load_migrations() -> list[Migration]:524 """Load migration scripts shipped with the package, ordered by version."""525 migrations = []526 for entry in resources.files(__package__).joinpath("migrations").iterdir():527 m = _SCRIPT_RE.match(entry.name)528 if m is None:529 continue530 migrations.append(531 Migration(532 version=int(m.group(1)),533 name=m.group(2),534 sql=entry.read_text(),535 )536 )537 migrations.sort(key=lambda mig: mig.version)538 versions = [m.version for m in migrations]539 if len(set(versions)) != len(versions):540 msg = f"Duplicate migration versions: {versions}"541> raise MigrationError(msg)542E 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]543544nixbot/migrations.py:67: MigrationError545____________ ERROR at setup of test_chunk_args_splits_on_byte_limit ____________546[gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14547548fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>549request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>550551 @pytest.hookimpl(wrapper=True)552 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:553 if (554 fixturedef.argname == "event_loop_policy"555 and fixturedef.func.__module__ != __name__556 ):557 warnings.warn(558 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),559 )560 asyncio_mode = _get_asyncio_mode(request.config)561 if not _is_asyncio_fixture_function(fixturedef.func):562 if asyncio_mode == Mode.STRICT:563 # Ignore async fixtures without explicit asyncio mark in strict mode564 # This applies to pytest_trio fixtures, for example565 return (yield)566 if not _is_coroutine_or_asyncgen(fixturedef.func):567> return (yield)568 ^^^^^569570/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 571_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 572nixbot/tests/conftest.py:33: in postgres_dsn573 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:574 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^575/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__576 return next(self.gen)577 ^^^^^^^^^^^^^^578nixbot/tests/support.py:327: in ephemeral_postgres579 run_sync(apply_migrations(dsn))580nixbot/tests/support.py:285: in run_sync581 return executor.submit(asyncio.run, coro).result(timeout=120)582 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^583/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result584 return self.__get_result()585 ^^^^^^^^^^^^^^^^^^^586/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result587 raise self._exception588/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run589 result = ctx.run(self.task)590 ^^^^^^^^^^^^^^^^^^591/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run592 return fn(*args, **kwargs)593 ^^^^^^^^^^^^^^^^^^^594/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run595 return runner.run(main)596 ^^^^^^^^^^^^^^^^597/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run598 return self._loop.run_until_complete(task)599 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^600/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete601 return future.result()602 ^^^^^^^^^^^^^^^603nixbot/migrations.py:99: in apply_migrations604 migrations = load_migrations()605 ^^^^^^^^^^^^^^^^^606_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 607608 def load_migrations() -> list[Migration]:609 """Load migration scripts shipped with the package, ordered by version."""610 migrations = []611 for entry in resources.files(__package__).joinpath("migrations").iterdir():612 m = _SCRIPT_RE.match(entry.name)613 if m is None:614 continue615 migrations.append(616 Migration(617 version=int(m.group(1)),618 name=m.group(2),619 sql=entry.read_text(),620 )621 )622 migrations.sort(key=lambda mig: mig.version)623 versions = [m.version for m in migrations]624 if len(set(versions)) != len(versions):625 msg = f"Duplicate migration versions: {versions}"626> raise MigrationError(msg)627E 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]628629nixbot/migrations.py:67: MigrationError630___________ ERROR at setup of test_resume_skips_terminal_attributes ____________631[gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14632633self = <Coroutine test_resume_skips_terminal_attributes>634635 def setup(self) -> None:636 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"637 if runner_fixture_id not in self.fixturenames:638 self.fixturenames.append(runner_fixture_id)639 # When loop factories are configured, resolve the loop factory640 # fixture early so that a factory variant change cascades cache641 # invalidation before any async fixture checks its cache.642 hook_caller = self.config.hook.pytest_asyncio_loop_factories643 if hook_caller.get_hookimpls():644 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)645> return super().setup()646 ^^^^^^^^^^^^^^^647648/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 649_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 650/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup651 return (yield)652 ^^^^^653nixbot/tests/conftest.py:33: in postgres_dsn654 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:655 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^656/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__657 return next(self.gen)658 ^^^^^^^^^^^^^^659nixbot/tests/support.py:327: in ephemeral_postgres660 run_sync(apply_migrations(dsn))661nixbot/tests/support.py:285: in run_sync662 return executor.submit(asyncio.run, coro).result(timeout=120)663 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^664/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result665 return self.__get_result()666 ^^^^^^^^^^^^^^^^^^^667/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result668 raise self._exception669/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run670 result = ctx.run(self.task)671 ^^^^^^^^^^^^^^^^^^672/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run673 return fn(*args, **kwargs)674 ^^^^^^^^^^^^^^^^^^^675/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run676 return runner.run(main)677 ^^^^^^^^^^^^^^^^678/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run679 return self._loop.run_until_complete(task)680 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^681/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete682 return future.result()683 ^^^^^^^^^^^^^^^684nixbot/migrations.py:99: in apply_migrations685 migrations = load_migrations()686 ^^^^^^^^^^^^^^^^^687_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 688689 def load_migrations() -> list[Migration]:690 """Load migration scripts shipped with the package, ordered by version."""691 migrations = []692 for entry in resources.files(__package__).joinpath("migrations").iterdir():693 m = _SCRIPT_RE.match(entry.name)694 if m is None:695 continue696 migrations.append(697 Migration(698 version=int(m.group(1)),699 name=m.group(2),700 sql=entry.read_text(),701 )702 )703 migrations.sort(key=lambda mig: mig.version)704 versions = [m.version for m in migrations]705 if len(set(versions)) != len(versions):706 msg = f"Duplicate migration versions: {versions}"707> raise MigrationError(msg)708E 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]709710nixbot/migrations.py:67: MigrationError711________________ ERROR at setup of test_enqueue_dedupes_pending ________________712[gw22] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14713714self = <Coroutine test_enqueue_dedupes_pending>715716 def setup(self) -> None:717 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"718 if runner_fixture_id not in self.fixturenames:719 self.fixturenames.append(runner_fixture_id)720 # When loop factories are configured, resolve the loop factory721 # fixture early so that a factory variant change cascades cache722 # invalidation before any async fixture checks its cache.723 hook_caller = self.config.hook.pytest_asyncio_loop_factories724 if hook_caller.get_hookimpls():725 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)726> return super().setup()727 ^^^^^^^^^^^^^^^728729/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 730_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 731/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup732 return (yield)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_match_skip_and_run ___________________793[gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14794795self = <Coroutine test_match_skip_and_run>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_html_error_pages ____________________874[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14875876fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>877request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>878879 @pytest.hookimpl(wrapper=True)880 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:881 if (882 fixturedef.argname == "event_loop_policy"883 and fixturedef.func.__module__ != __name__884 ):885 warnings.warn(886 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),887 )888 asyncio_mode = _get_asyncio_mode(request.config)889 if not _is_asyncio_fixture_function(fixturedef.func):890 if asyncio_mode == Mode.STRICT:891 # Ignore async fixtures without explicit asyncio mark in strict mode892 # This applies to pytest_trio fixtures, for example893 return (yield)894 if not _is_coroutine_or_asyncgen(fixturedef.func):895> return (yield)896 ^^^^^897898/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 899_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 900nixbot/tests/conftest.py:33: in postgres_dsn901 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:902 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^903/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__904 return next(self.gen)905 ^^^^^^^^^^^^^^906nixbot/tests/support.py:327: in ephemeral_postgres907 run_sync(apply_migrations(dsn))908nixbot/tests/support.py:285: in run_sync909 return executor.submit(asyncio.run, coro).result(timeout=120)910 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^911/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result912 return self.__get_result()913 ^^^^^^^^^^^^^^^^^^^914/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result915 raise self._exception916/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run917 result = ctx.run(self.task)918 ^^^^^^^^^^^^^^^^^^919/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run920 return fn(*args, **kwargs)921 ^^^^^^^^^^^^^^^^^^^922/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run923 return runner.run(main)924 ^^^^^^^^^^^^^^^^925/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run926 return self._loop.run_until_complete(task)927 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^928/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete929 return future.result()930 ^^^^^^^^^^^^^^^931nixbot/migrations.py:99: in apply_migrations932 migrations = load_migrations()933 ^^^^^^^^^^^^^^^^^934_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 935936 def load_migrations() -> list[Migration]:937 """Load migration scripts shipped with the package, ordered by version."""938 migrations = []939 for entry in resources.files(__package__).joinpath("migrations").iterdir():940 m = _SCRIPT_RE.match(entry.name)941 if m is None:942 continue943 migrations.append(944 Migration(945 version=int(m.group(1)),946 name=m.group(2),947 sql=entry.read_text(),948 )949 )950 migrations.sort(key=lambda mig: mig.version)951 versions = [m.version for m in migrations]952 if len(set(versions)) != len(versions):953 msg = f"Duplicate migration versions: {versions}"954> raise MigrationError(msg)955E 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]956957nixbot/migrations.py:67: MigrationError958_________ ERROR at setup of test_project_store_sync_and_legacy_import __________959[gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14960961self = <Coroutine test_project_store_sync_and_legacy_import>962963 def setup(self) -> None:964 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"965 if runner_fixture_id not in self.fixturenames:966 self.fixturenames.append(runner_fixture_id)967 # When loop factories are configured, resolve the loop factory968 # fixture early so that a factory variant change cascades cache969 # invalidation before any async fixture checks its cache.970 hook_caller = self.config.hook.pytest_asyncio_loop_factories971 if hook_caller.get_hookimpls():972 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)973> return super().setup()974 ^^^^^^^^^^^^^^^975976/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 977_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 978/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup979 return (yield)980 ^^^^^981nixbot/tests/conftest.py:33: in postgres_dsn982 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:983 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^984/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__985 return next(self.gen)986 ^^^^^^^^^^^^^^987nixbot/tests/support.py:327: in ephemeral_postgres988 run_sync(apply_migrations(dsn))989nixbot/tests/support.py:285: in run_sync990 return executor.submit(asyncio.run, coro).result(timeout=120)991 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^992/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result993 return self.__get_result()994 ^^^^^^^^^^^^^^^^^^^995/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result996 raise self._exception997/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run998 result = ctx.run(self.task)999 ^^^^^^^^^^^^^^^^^^1000/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1001 return fn(*args, **kwargs)1002 ^^^^^^^^^^^^^^^^^^^1003/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1004 return runner.run(main)1005 ^^^^^^^^^^^^^^^^1006/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1007 return self._loop.run_until_complete(task)1008 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1009/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1010 return future.result()1011 ^^^^^^^^^^^^^^^1012nixbot/migrations.py:99: in apply_migrations1013 migrations = load_migrations()1014 ^^^^^^^^^^^^^^^^^1015_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10161017 def load_migrations() -> list[Migration]:1018 """Load migration scripts shipped with the package, ordered by version."""1019 migrations = []1020 for entry in resources.files(__package__).joinpath("migrations").iterdir():1021 m = _SCRIPT_RE.match(entry.name)1022 if m is None:1023 continue1024 migrations.append(1025 Migration(1026 version=int(m.group(1)),1027 name=m.group(2),1028 sql=entry.read_text(),1029 )1030 )1031 migrations.sort(key=lambda mig: mig.version)1032 versions = [m.version for m in migrations]1033 if len(set(versions)) != len(versions):1034 msg = f"Duplicate migration versions: {versions}"1035> raise MigrationError(msg)1036E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]10371038nixbot/migrations.py:67: MigrationError1039_________________ ERROR at setup of test_repo_list_and_toggle __________________1040[gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1410411042fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1043request = <SubRequest 'postgres_dsn' for <Function test_repo_list_and_toggle>>10441045 @pytest.hookimpl(wrapper=True)1046 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1047 if (1048 fixturedef.argname == "event_loop_policy"1049 and fixturedef.func.__module__ != __name__1050 ):1051 warnings.warn(1052 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1053 )1054 asyncio_mode = _get_asyncio_mode(request.config)1055 if not _is_asyncio_fixture_function(fixturedef.func):1056 if asyncio_mode == Mode.STRICT:1057 # Ignore async fixtures without explicit asyncio mark in strict mode1058 # This applies to pytest_trio fixtures, for example1059 return (yield)1060 if not _is_coroutine_or_asyncgen(fixturedef.func):1061> return (yield)1062 ^^^^^10631064/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1065_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1066nixbot/tests/conftest.py:33: in postgres_dsn1067 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1068 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1069/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1070 return next(self.gen)1071 ^^^^^^^^^^^^^^1072nixbot/tests/support.py:327: in ephemeral_postgres1073 run_sync(apply_migrations(dsn))1074nixbot/tests/support.py:285: in run_sync1075 return executor.submit(asyncio.run, coro).result(timeout=120)1076 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1077/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1078 return self.__get_result()1079 ^^^^^^^^^^^^^^^^^^^1080/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1081 raise self._exception1082/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1083 result = ctx.run(self.task)1084 ^^^^^^^^^^^^^^^^^^1085/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1086 return fn(*args, **kwargs)1087 ^^^^^^^^^^^^^^^^^^^1088/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1089 return runner.run(main)1090 ^^^^^^^^^^^^^^^^1091/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1092 return self._loop.run_until_complete(task)1093 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1094/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1095 return future.result()1096 ^^^^^^^^^^^^^^^1097nixbot/migrations.py:99: in apply_migrations1098 migrations = load_migrations()1099 ^^^^^^^^^^^^^^^^^1100_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11011102 def load_migrations() -> list[Migration]:1103 """Load migration scripts shipped with the package, ordered by version."""1104 migrations = []1105 for entry in resources.files(__package__).joinpath("migrations").iterdir():1106 m = _SCRIPT_RE.match(entry.name)1107 if m is None:1108 continue1109 migrations.append(1110 Migration(1111 version=int(m.group(1)),1112 name=m.group(2),1113 sql=entry.read_text(),1114 )1115 )1116 migrations.sort(key=lambda mig: mig.version)1117 versions = [m.version for m in migrations]1118 if len(set(versions)) != len(versions):1119 msg = f"Duplicate migration versions: {versions}"1120> raise MigrationError(msg)1121E 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]11221123nixbot/migrations.py:67: MigrationError1124_______ ERROR at setup of test_scheduled_worktree_id_distinct_per_effect _______1125[gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1411261127fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1128request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>11291130 @pytest.hookimpl(wrapper=True)1131 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1132 if (1133 fixturedef.argname == "event_loop_policy"1134 and fixturedef.func.__module__ != __name__1135 ):1136 warnings.warn(1137 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1138 )1139 asyncio_mode = _get_asyncio_mode(request.config)1140 if not _is_asyncio_fixture_function(fixturedef.func):1141 if asyncio_mode == Mode.STRICT:1142 # Ignore async fixtures without explicit asyncio mark in strict mode1143 # This applies to pytest_trio fixtures, for example1144 return (yield)1145 if not _is_coroutine_or_asyncgen(fixturedef.func):1146> return (yield)1147 ^^^^^11481149/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1150_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1151nixbot/tests/conftest.py:33: in postgres_dsn1152 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1153 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1154/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1155 return next(self.gen)1156 ^^^^^^^^^^^^^^1157nixbot/tests/support.py:327: in ephemeral_postgres1158 run_sync(apply_migrations(dsn))1159nixbot/tests/support.py:285: in run_sync1160 return executor.submit(asyncio.run, coro).result(timeout=120)1161 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1162/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1163 return self.__get_result()1164 ^^^^^^^^^^^^^^^^^^^1165/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1166 raise self._exception1167/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1168 result = ctx.run(self.task)1169 ^^^^^^^^^^^^^^^^^^1170/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1171 return fn(*args, **kwargs)1172 ^^^^^^^^^^^^^^^^^^^1173/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1174 return runner.run(main)1175 ^^^^^^^^^^^^^^^^1176/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1177 return self._loop.run_until_complete(task)1178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1179/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1180 return future.result()1181 ^^^^^^^^^^^^^^^1182nixbot/migrations.py:99: in apply_migrations1183 migrations = load_migrations()1184 ^^^^^^^^^^^^^^^^^1185_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11861187 def load_migrations() -> list[Migration]:1188 """Load migration scripts shipped with the package, ordered by version."""1189 migrations = []1190 for entry in resources.files(__package__).joinpath("migrations").iterdir():1191 m = _SCRIPT_RE.match(entry.name)1192 if m is None:1193 continue1194 migrations.append(1195 Migration(1196 version=int(m.group(1)),1197 name=m.group(2),1198 sql=entry.read_text(),1199 )1200 )1201 migrations.sort(key=lambda mig: mig.version)1202 versions = [m.version for m in migrations]1203 if len(set(versions)) != len(versions):1204 msg = f"Duplicate migration versions: {versions}"1205> raise MigrationError(msg)1206E 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]12071208nixbot/migrations.py:67: MigrationError1209_ ERROR at setup of test_replace_schedules_preserves_last_run_for_unchanged_spec _1210[gw21] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1412111212self = <Coroutine test_replace_schedules_preserves_last_run_for_unchanged_spec>12131214 def setup(self) -> None:1215 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1216 if runner_fixture_id not in self.fixturenames:1217 self.fixturenames.append(runner_fixture_id)1218 # When loop factories are configured, resolve the loop factory1219 # fixture early so that a factory variant change cascades cache1220 # invalidation before any async fixture checks its cache.1221 hook_caller = self.config.hook.pytest_asyncio_loop_factories1222 if hook_caller.get_hookimpls():1223 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1224> return super().setup()1225 ^^^^^^^^^^^^^^^12261227/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1228_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1229/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup1230 return (yield)1231 ^^^^^1232nixbot/tests/conftest.py:33: in postgres_dsn1233 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1234 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1235/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1236 return next(self.gen)1237 ^^^^^^^^^^^^^^1238nixbot/tests/support.py:327: in ephemeral_postgres1239 run_sync(apply_migrations(dsn))1240nixbot/tests/support.py:285: in run_sync1241 return executor.submit(asyncio.run, coro).result(timeout=120)1242 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1243/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1244 return self.__get_result()1245 ^^^^^^^^^^^^^^^^^^^1246/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1247 raise self._exception1248/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1249 result = ctx.run(self.task)1250 ^^^^^^^^^^^^^^^^^^1251/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1252 return fn(*args, **kwargs)1253 ^^^^^^^^^^^^^^^^^^^1254/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1255 return runner.run(main)1256 ^^^^^^^^^^^^^^^^1257/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1258 return self._loop.run_until_complete(task)1259 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1260/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1261 return future.result()1262 ^^^^^^^^^^^^^^^1263nixbot/migrations.py:99: in apply_migrations1264 migrations = load_migrations()1265 ^^^^^^^^^^^^^^^^^1266_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12671268 def load_migrations() -> list[Migration]:1269 """Load migration scripts shipped with the package, ordered by version."""1270 migrations = []1271 for entry in resources.files(__package__).joinpath("migrations").iterdir():1272 m = _SCRIPT_RE.match(entry.name)1273 if m is None:1274 continue1275 migrations.append(1276 Migration(1277 version=int(m.group(1)),1278 name=m.group(2),1279 sql=entry.read_text(),1280 )1281 )1282 migrations.sort(key=lambda mig: mig.version)1283 versions = [m.version for m in migrations]1284 if len(set(versions)) != len(versions):1285 msg = f"Duplicate migration versions: {versions}"1286> raise MigrationError(msg)1287E 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]12881289nixbot/migrations.py:67: MigrationError1290_________________ ERROR at setup of test_finished_attrs_cursor _________________1291[gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1412921293request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>1294tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')12951296 @pytest.fixture(scope="module")1297 def postgres_dsn(1298 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1299 ) -> Iterator[str]:1300 if shutil.which("initdb") is None:1301 pytest.skip("postgresql not available")1302 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1303> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1304 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^13051306nixbot/tests/conftest.py:33: 1307_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1308/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1309 return next(self.gen)1310 ^^^^^^^^^^^^^^1311nixbot/tests/support.py:327: in ephemeral_postgres1312 run_sync(apply_migrations(dsn))1313nixbot/tests/support.py:285: in run_sync1314 return executor.submit(asyncio.run, coro).result(timeout=120)1315 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1316/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1317 return self.__get_result()1318 ^^^^^^^^^^^^^^^^^^^1319/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1320 raise self._exception1321/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1322 result = ctx.run(self.task)1323 ^^^^^^^^^^^^^^^^^^1324/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1325 return fn(*args, **kwargs)1326 ^^^^^^^^^^^^^^^^^^^1327/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1328 return runner.run(main)1329 ^^^^^^^^^^^^^^^^1330/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1331 return self._loop.run_until_complete(task)1332 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1333/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1334 return future.result()1335 ^^^^^^^^^^^^^^^1336nixbot/migrations.py:99: in apply_migrations1337 migrations = load_migrations()1338 ^^^^^^^^^^^^^^^^^1339_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13401341 def load_migrations() -> list[Migration]:1342 """Load migration scripts shipped with the package, ordered by version."""1343 migrations = []1344 for entry in resources.files(__package__).joinpath("migrations").iterdir():1345 m = _SCRIPT_RE.match(entry.name)1346 if m is None:1347 continue1348 migrations.append(1349 Migration(1350 version=int(m.group(1)),1351 name=m.group(2),1352 sql=entry.read_text(),1353 )1354 )1355 migrations.sort(key=lambda mig: mig.version)1356 versions = [m.version for m in migrations]1357 if len(set(versions)) != len(versions):1358 msg = f"Duplicate migration versions: {versions}"1359> raise MigrationError(msg)1360E 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]13611362nixbot/migrations.py:67: MigrationError1363__________ ERROR at setup of test_unauthorized_user_sees_public_only ___________1364[gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1413651366request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>1367tmp_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')13681369 @pytest.fixture(scope="module")1370 def postgres_dsn(1371 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1372 ) -> Iterator[str]:1373 if shutil.which("initdb") is None:1374 pytest.skip("postgresql not available")1375 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1376> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1377 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^13781379nixbot/tests/conftest.py:33: 1380_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1381/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1382 return next(self.gen)1383 ^^^^^^^^^^^^^^1384nixbot/tests/support.py:327: in ephemeral_postgres1385 run_sync(apply_migrations(dsn))1386nixbot/tests/support.py:285: in run_sync1387 return executor.submit(asyncio.run, coro).result(timeout=120)1388 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1389/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1390 return self.__get_result()1391 ^^^^^^^^^^^^^^^^^^^1392/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1393 raise self._exception1394/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1395 result = ctx.run(self.task)1396 ^^^^^^^^^^^^^^^^^^1397/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1398 return fn(*args, **kwargs)1399 ^^^^^^^^^^^^^^^^^^^1400/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1401 return runner.run(main)1402 ^^^^^^^^^^^^^^^^1403/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1404 return self._loop.run_until_complete(task)1405 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1406/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1407 return future.result()1408 ^^^^^^^^^^^^^^^1409nixbot/migrations.py:99: in apply_migrations1410 migrations = load_migrations()1411 ^^^^^^^^^^^^^^^^^1412_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14131414 def load_migrations() -> list[Migration]:1415 """Load migration scripts shipped with the package, ordered by version."""1416 migrations = []1417 for entry in resources.files(__package__).joinpath("migrations").iterdir():1418 m = _SCRIPT_RE.match(entry.name)1419 if m is None:1420 continue1421 migrations.append(1422 Migration(1423 version=int(m.group(1)),1424 name=m.group(2),1425 sql=entry.read_text(),1426 )1427 )1428 migrations.sort(key=lambda mig: mig.version)1429 versions = [m.version for m in migrations]1430 if len(set(versions)) != len(versions):1431 msg = f"Duplicate migration versions: {versions}"1432> raise MigrationError(msg)1433E 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]14341435nixbot/migrations.py:67: MigrationError1436_____________ ERROR at setup of test_admin_can_restart_and_cancel ______________1437[gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1414381439request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1440tmp_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')14411442 @pytest.fixture(scope="module")1443 def postgres_dsn(1444 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1445 ) -> Iterator[str]:1446 if shutil.which("initdb") is None:1447 pytest.skip("postgresql not available")1448 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1449> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1450 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^14511452nixbot/tests/conftest.py:33: 1453_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1454/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1455 return next(self.gen)1456 ^^^^^^^^^^^^^^1457nixbot/tests/support.py:327: in ephemeral_postgres1458 run_sync(apply_migrations(dsn))1459nixbot/tests/support.py:285: in run_sync1460 return executor.submit(asyncio.run, coro).result(timeout=120)1461 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1462/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1463 return self.__get_result()1464 ^^^^^^^^^^^^^^^^^^^1465/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1466 raise self._exception1467/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1468 result = ctx.run(self.task)1469 ^^^^^^^^^^^^^^^^^^1470/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1471 return fn(*args, **kwargs)1472 ^^^^^^^^^^^^^^^^^^^1473/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1474 return runner.run(main)1475 ^^^^^^^^^^^^^^^^1476/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1477 return self._loop.run_until_complete(task)1478 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1479/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1480 return future.result()1481 ^^^^^^^^^^^^^^^1482nixbot/migrations.py:99: in apply_migrations1483 migrations = load_migrations()1484 ^^^^^^^^^^^^^^^^^1485_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14861487 def load_migrations() -> list[Migration]:1488 """Load migration scripts shipped with the package, ordered by version."""1489 migrations = []1490 for entry in resources.files(__package__).joinpath("migrations").iterdir():1491 m = _SCRIPT_RE.match(entry.name)1492 if m is None:1493 continue1494 migrations.append(1495 Migration(1496 version=int(m.group(1)),1497 name=m.group(2),1498 sql=entry.read_text(),1499 )1500 )1501 migrations.sort(key=lambda mig: mig.version)1502 versions = [m.version for m in migrations]1503 if len(set(versions)) != len(versions):1504 msg = f"Duplicate migration versions: {versions}"1505> raise MigrationError(msg)1506E 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]15071508nixbot/migrations.py:67: MigrationError1509______________ ERROR at setup of test_api_strips_ansi_from_errors ______________1510[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1415111512request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1513tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')15141515 @pytest.fixture(scope="module")1516 def postgres_dsn(1517 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1518 ) -> Iterator[str]:1519 if shutil.which("initdb") is None:1520 pytest.skip("postgresql not available")1521 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1522> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1523 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^15241525nixbot/tests/conftest.py:33: 1526_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1527/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1528 return next(self.gen)1529 ^^^^^^^^^^^^^^1530nixbot/tests/support.py:327: in ephemeral_postgres1531 run_sync(apply_migrations(dsn))1532nixbot/tests/support.py:285: in run_sync1533 return executor.submit(asyncio.run, coro).result(timeout=120)1534 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1535/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1536 return self.__get_result()1537 ^^^^^^^^^^^^^^^^^^^1538/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1539 raise self._exception1540/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1541 result = ctx.run(self.task)1542 ^^^^^^^^^^^^^^^^^^1543/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1544 return fn(*args, **kwargs)1545 ^^^^^^^^^^^^^^^^^^^1546/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1547 return runner.run(main)1548 ^^^^^^^^^^^^^^^^1549/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1550 return self._loop.run_until_complete(task)1551 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1552/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1553 return future.result()1554 ^^^^^^^^^^^^^^^1555nixbot/migrations.py:99: in apply_migrations1556 migrations = load_migrations()1557 ^^^^^^^^^^^^^^^^^1558_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15591560 def load_migrations() -> list[Migration]:1561 """Load migration scripts shipped with the package, ordered by version."""1562 migrations = []1563 for entry in resources.files(__package__).joinpath("migrations").iterdir():1564 m = _SCRIPT_RE.match(entry.name)1565 if m is None:1566 continue1567 migrations.append(1568 Migration(1569 version=int(m.group(1)),1570 name=m.group(2),1571 sql=entry.read_text(),1572 )1573 )1574 migrations.sort(key=lambda mig: mig.version)1575 versions = [m.version for m in migrations]1576 if len(set(versions)) != len(versions):1577 msg = f"Duplicate migration versions: {versions}"1578> raise MigrationError(msg)1579E 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]15801581nixbot/migrations.py:67: MigrationError1582_____________ ERROR at setup of test_parse_path_info_both_formats ______________1583[gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1415841585request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>1586tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw18'), _trace=<pluggy._tracing.TagT...16e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw18'), _retention_count=3, _retention_policy='all')15871588 @pytest.fixture(scope="module")1589 def postgres_dsn(1590 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1591 ) -> Iterator[str]:1592 if shutil.which("initdb") is None:1593 pytest.skip("postgresql not available")1594 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1595> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1596 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^15971598nixbot/tests/conftest.py:33: 1599_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1600/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1601 return next(self.gen)1602 ^^^^^^^^^^^^^^1603nixbot/tests/support.py:327: in ephemeral_postgres1604 run_sync(apply_migrations(dsn))1605nixbot/tests/support.py:285: in run_sync1606 return executor.submit(asyncio.run, coro).result(timeout=120)1607 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1608/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1609 return self.__get_result()1610 ^^^^^^^^^^^^^^^^^^^1611/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1612 raise self._exception1613/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1614 result = ctx.run(self.task)1615 ^^^^^^^^^^^^^^^^^^1616/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1617 return fn(*args, **kwargs)1618 ^^^^^^^^^^^^^^^^^^^1619/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1620 return runner.run(main)1621 ^^^^^^^^^^^^^^^^1622/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1623 return self._loop.run_until_complete(task)1624 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1625/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1626 return future.result()1627 ^^^^^^^^^^^^^^^1628nixbot/migrations.py:99: in apply_migrations1629 migrations = load_migrations()1630 ^^^^^^^^^^^^^^^^^1631_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16321633 def load_migrations() -> list[Migration]:1634 """Load migration scripts shipped with the package, ordered by version."""1635 migrations = []1636 for entry in resources.files(__package__).joinpath("migrations").iterdir():1637 m = _SCRIPT_RE.match(entry.name)1638 if m is None:1639 continue1640 migrations.append(1641 Migration(1642 version=int(m.group(1)),1643 name=m.group(2),1644 sql=entry.read_text(),1645 )1646 )1647 migrations.sort(key=lambda mig: mig.version)1648 versions = [m.version for m in migrations]1649 if len(set(versions)) != len(versions):1650 msg = f"Duplicate migration versions: {versions}"1651> raise MigrationError(msg)1652E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]16531654nixbot/migrations.py:67: MigrationError1655___________ ERROR at setup of test_failed_migration_error_not_masked ___________1656[gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1416571658self = <Coroutine test_failed_migration_error_not_masked>16591660 def setup(self) -> None:1661 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1662 if runner_fixture_id not in self.fixturenames:1663 self.fixturenames.append(runner_fixture_id)1664 # When loop factories are configured, resolve the loop factory1665 # fixture early so that a factory variant change cascades cache1666 # invalidation before any async fixture checks its cache.1667 hook_caller = self.config.hook.pytest_asyncio_loop_factories1668 if hook_caller.get_hookimpls():1669 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1670> return super().setup()1671 ^^^^^^^^^^^^^^^16721673/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1674_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1675nixbot/tests/conftest.py:33: in postgres_dsn1676 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1677 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1678/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1679 return next(self.gen)1680 ^^^^^^^^^^^^^^1681nixbot/tests/support.py:327: in ephemeral_postgres1682 run_sync(apply_migrations(dsn))1683nixbot/tests/support.py:285: in run_sync1684 return executor.submit(asyncio.run, coro).result(timeout=120)1685 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1686/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1687 return self.__get_result()1688 ^^^^^^^^^^^^^^^^^^^1689/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1690 raise self._exception1691/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1692 result = ctx.run(self.task)1693 ^^^^^^^^^^^^^^^^^^1694/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1695 return fn(*args, **kwargs)1696 ^^^^^^^^^^^^^^^^^^^1697/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1698 return runner.run(main)1699 ^^^^^^^^^^^^^^^^1700/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1701 return self._loop.run_until_complete(task)1702 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1703/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1704 return future.result()1705 ^^^^^^^^^^^^^^^1706nixbot/migrations.py:99: in apply_migrations1707 migrations = load_migrations()1708 ^^^^^^^^^^^^^^^^^1709_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17101711 def load_migrations() -> list[Migration]:1712 """Load migration scripts shipped with the package, ordered by version."""1713 migrations = []1714 for entry in resources.files(__package__).joinpath("migrations").iterdir():1715 m = _SCRIPT_RE.match(entry.name)1716 if m is None:1717 continue1718 migrations.append(1719 Migration(1720 version=int(m.group(1)),1721 name=m.group(2),1722 sql=entry.read_text(),1723 )1724 )1725 migrations.sort(key=lambda mig: mig.version)1726 versions = [m.version for m in migrations]1727 if len(set(versions)) != len(versions):1728 msg = f"Duplicate migration versions: {versions}"1729> raise MigrationError(msg)1730E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]17311732nixbot/migrations.py:67: MigrationError1733_______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______1734[gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1417351736request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>1737tmp_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')17381739 @pytest.fixture(scope="module")1740 def postgres_dsn(1741 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1742 ) -> Iterator[str]:1743 if shutil.which("initdb") is None:1744 pytest.skip("postgresql not available")1745 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1746> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1747 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^17481749nixbot/tests/conftest.py:33: 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_failure_aggregation __________________1807[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1418081809self = <Coroutine test_failure_aggregation>18101811 def setup(self) -> None:1812 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1813 if runner_fixture_id not in self.fixturenames:1814 self.fixturenames.append(runner_fixture_id)1815 # When loop factories are configured, resolve the loop factory1816 # fixture early so that a factory variant change cascades cache1817 # invalidation before any async fixture checks its cache.1818 hook_caller = self.config.hook.pytest_asyncio_loop_factories1819 if hook_caller.get_hookimpls():1820 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1821> return super().setup()1822 ^^^^^^^^^^^^^^^18231824/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1825_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1826nixbot/tests/conftest.py:33: in postgres_dsn1827 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1828 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1829/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1830 return next(self.gen)1831 ^^^^^^^^^^^^^^1832nixbot/tests/support.py:327: in ephemeral_postgres1833 run_sync(apply_migrations(dsn))1834nixbot/tests/support.py:285: in run_sync1835 return executor.submit(asyncio.run, coro).result(timeout=120)1836 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1837/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1838 return self.__get_result()1839 ^^^^^^^^^^^^^^^^^^^1840/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1841 raise self._exception1842/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1843 result = ctx.run(self.task)1844 ^^^^^^^^^^^^^^^^^^1845/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1846 return fn(*args, **kwargs)1847 ^^^^^^^^^^^^^^^^^^^1848/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1849 return runner.run(main)1850 ^^^^^^^^^^^^^^^^1851/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1852 return self._loop.run_until_complete(task)1853 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1854/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1855 return future.result()1856 ^^^^^^^^^^^^^^^1857nixbot/migrations.py:99: in apply_migrations1858 migrations = load_migrations()1859 ^^^^^^^^^^^^^^^^^1860_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 18611862 def load_migrations() -> list[Migration]:1863 """Load migration scripts shipped with the package, ordered by version."""1864 migrations = []1865 for entry in resources.files(__package__).joinpath("migrations").iterdir():1866 m = _SCRIPT_RE.match(entry.name)1867 if m is None:1868 continue1869 migrations.append(1870 Migration(1871 version=int(m.group(1)),1872 name=m.group(2),1873 sql=entry.read_text(),1874 )1875 )1876 migrations.sort(key=lambda mig: mig.version)1877 versions = [m.version for m in migrations]1878 if len(set(versions)) != len(versions):1879 msg = f"Duplicate migration versions: {versions}"1880> raise MigrationError(msg)1881E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]18821883nixbot/migrations.py:67: MigrationError1884_________________ ERROR at setup of test_settle_already_built __________________1885[gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1418861887self = <Coroutine test_settle_already_built>18881889 def setup(self) -> None:1890 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1891 if runner_fixture_id not in self.fixturenames:1892 self.fixturenames.append(runner_fixture_id)1893 # When loop factories are configured, resolve the loop factory1894 # fixture early so that a factory variant change cascades cache1895 # invalidation before any async fixture checks its cache.1896 hook_caller = self.config.hook.pytest_asyncio_loop_factories1897 if hook_caller.get_hookimpls():1898 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1899> return super().setup()1900 ^^^^^^^^^^^^^^^19011902/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1903_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1904nixbot/tests/conftest.py:33: in postgres_dsn1905 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1906 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1907/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1908 return next(self.gen)1909 ^^^^^^^^^^^^^^1910nixbot/tests/support.py:327: in ephemeral_postgres1911 run_sync(apply_migrations(dsn))1912nixbot/tests/support.py:285: in run_sync1913 return executor.submit(asyncio.run, coro).result(timeout=120)1914 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1915/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1916 return self.__get_result()1917 ^^^^^^^^^^^^^^^^^^^1918/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1919 raise self._exception1920/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1921 result = ctx.run(self.task)1922 ^^^^^^^^^^^^^^^^^^1923/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1924 return fn(*args, **kwargs)1925 ^^^^^^^^^^^^^^^^^^^1926/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1927 return runner.run(main)1928 ^^^^^^^^^^^^^^^^1929/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1930 return self._loop.run_until_complete(task)1931 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1932/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1933 return future.result()1934 ^^^^^^^^^^^^^^^1935nixbot/migrations.py:99: in apply_migrations1936 migrations = load_migrations()1937 ^^^^^^^^^^^^^^^^^1938_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19391940 def load_migrations() -> list[Migration]:1941 """Load migration scripts shipped with the package, ordered by version."""1942 migrations = []1943 for entry in resources.files(__package__).joinpath("migrations").iterdir():1944 m = _SCRIPT_RE.match(entry.name)1945 if m is None:1946 continue1947 migrations.append(1948 Migration(1949 version=int(m.group(1)),1950 name=m.group(2),1951 sql=entry.read_text(),1952 )1953 )1954 migrations.sort(key=lambda mig: mig.version)1955 versions = [m.version for m in migrations]1956 if len(set(versions)) != len(versions):1957 msg = f"Duplicate migration versions: {versions}"1958> raise MigrationError(msg)1959E 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]19601961nixbot/migrations.py:67: MigrationError1962_______________ ERROR at setup of test_claim_serializes_per_key ________________1963[gw22] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.1419641965self = <Coroutine test_claim_serializes_per_key>19661967 def setup(self) -> None:1968 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1969 if runner_fixture_id not in self.fixturenames:1970 self.fixturenames.append(runner_fixture_id)1971 # When loop factories are configured, resolve the loop factory1972 # fixture early so that a factory variant change cascades cache1973 # invalidation before any async fixture checks its cache.1974 hook_caller = self.config.hook.pytest_asyncio_loop_factories1975 if hook_caller.get_hookimpls():1976 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1977> return super().setup()1978 ^^^^^^^^^^^^^^^19791980/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1981_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1982nixbot/tests/conftest.py:33: in postgres_dsn1983 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1984 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1985/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1986 return next(self.gen)1987 ^^^^^^^^^^^^^^1988nixbot/tests/support.py:327: in ephemeral_postgres1989 run_sync(apply_migrations(dsn))1990nixbot/tests/support.py:285: in run_sync1991 return executor.submit(asyncio.run, coro).result(timeout=120)1992 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1993/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1994 return self.__get_result()1995 ^^^^^^^^^^^^^^^^^^^1996/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1997 raise self._exception1998/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1999 result = ctx.run(self.task)2000 ^^^^^^^^^^^^^^^^^^loading 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_attribute_search ____________________23674[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142367523676request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23677tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2367823679 @pytest.fixture(scope="module")23680 def postgres_dsn(23681 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23682 ) -> Iterator[str]:23683 if shutil.which("initdb") is None:23684 pytest.skip("postgresql not available")23685 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23686> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23687 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2368823689nixbot/tests/conftest.py:33: 23690_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23691/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23692 return next(self.gen)23693 ^^^^^^^^^^^^^^23694nixbot/tests/support.py:327: in ephemeral_postgres23695 run_sync(apply_migrations(dsn))23696nixbot/tests/support.py:285: in run_sync23697 return executor.submit(asyncio.run, coro).result(timeout=120)23698 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23699/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23700 return self.__get_result()23701 ^^^^^^^^^^^^^^^^^^^23702/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23703 raise self._exception23704/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23705 result = ctx.run(self.task)23706 ^^^^^^^^^^^^^^^^^^23707/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23708 return fn(*args, **kwargs)23709 ^^^^^^^^^^^^^^^^^^^23710/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23711 return runner.run(main)23712 ^^^^^^^^^^^^^^^^23713/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23714 return self._loop.run_until_complete(task)23715 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23716/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23717 return future.result()23718 ^^^^^^^^^^^^^^^23719nixbot/migrations.py:99: in apply_migrations23720 migrations = load_migrations()23721 ^^^^^^^^^^^^^^^^^23722_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2372323724 def load_migrations() -> list[Migration]:23725 """Load migration scripts shipped with the package, ordered by version."""23726 migrations = []23727 for entry in resources.files(__package__).joinpath("migrations").iterdir():23728 m = _SCRIPT_RE.match(entry.name)23729 if m is None:23730 continue23731 migrations.append(23732 Migration(23733 version=int(m.group(1)),23734 name=m.group(2),23735 sql=entry.read_text(),23736 )23737 )23738 migrations.sort(key=lambda mig: mig.version)23739 versions = [m.version for m in migrations]23740 if len(set(versions)) != len(versions):23741 msg = f"Duplicate migration versions: {versions}"23742> raise MigrationError(msg)23743E 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]2374423745nixbot/migrations.py:67: MigrationError23746_______ ERROR at setup of test_unexpected_eval_path_error_settles_build ________23747[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142374823749self = <Coroutine test_unexpected_eval_path_error_settles_build>2375023751 def setup(self) -> None:23752 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23753 if runner_fixture_id not in self.fixturenames:23754 self.fixturenames.append(runner_fixture_id)23755 # When loop factories are configured, resolve the loop factory23756 # fixture early so that a factory variant change cascades cache23757 # invalidation before any async fixture checks its cache.23758 hook_caller = self.config.hook.pytest_asyncio_loop_factories23759 if hook_caller.get_hookimpls():23760 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23761> return super().setup()23762 ^^^^^^^^^^^^^^^2376323764/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23765_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23766nixbot/tests/conftest.py:33: in postgres_dsn23767 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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_effect_changes_notify_build_events ___________24351[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142435224353request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24354tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2435524356 @pytest.fixture(scope="module")24357 def postgres_dsn(24358 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24359 ) -> Iterator[str]:24360 if shutil.which("initdb") is None:24361 pytest.skip("postgresql not available")24362 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24363> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24364 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2436524366nixbot/tests/conftest.py:33: 24367_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24368/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24369 return next(self.gen)24370 ^^^^^^^^^^^^^^24371nixbot/tests/support.py:327: in ephemeral_postgres24372 run_sync(apply_migrations(dsn))24373nixbot/tests/support.py:285: in run_sync24374 return executor.submit(asyncio.run, coro).result(timeout=120)24375 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24376/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24377 return self.__get_result()24378 ^^^^^^^^^^^^^^^^^^^24379/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24380 raise self._exception24381/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24382 result = ctx.run(self.task)24383 ^^^^^^^^^^^^^^^^^^24384/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24385 return fn(*args, **kwargs)24386 ^^^^^^^^^^^^^^^^^^^24387/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24388 return runner.run(main)24389 ^^^^^^^^^^^^^^^^24390/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24391 return self._loop.run_until_complete(task)24392 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24393/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24394 return future.result()24395 ^^^^^^^^^^^^^^^24396nixbot/migrations.py:99: in apply_migrations24397 migrations = load_migrations()24398 ^^^^^^^^^^^^^^^^^24399_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2440024401 def load_migrations() -> list[Migration]:24402 """Load migration scripts shipped with the package, ordered by version."""24403 migrations = []24404 for entry in resources.files(__package__).joinpath("migrations").iterdir():24405 m = _SCRIPT_RE.match(entry.name)24406 if m is None:24407 continue24408 migrations.append(24409 Migration(24410 version=int(m.group(1)),24411 name=m.group(2),24412 sql=entry.read_text(),24413 )24414 )24415 migrations.sort(key=lambda mig: mig.version)24416 versions = [m.version for m in migrations]24417 if len(set(versions)) != len(versions):24418 msg = f"Duplicate migration versions: {versions}"24419> raise MigrationError(msg)24420E 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]2442124422nixbot/migrations.py:67: MigrationError24423______ ERROR at setup of test_reuse_replays_effect_statuses_to_new_commit ______24424[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142442524426self = <Coroutine test_reuse_replays_effect_statuses_to_new_commit>2442724428 def setup(self) -> None:24429 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24430 if runner_fixture_id not in self.fixturenames:24431 self.fixturenames.append(runner_fixture_id)24432 # When loop factories are configured, resolve the loop factory24433 # fixture early so that a factory variant change cascades cache24434 # invalidation before any async fixture checks its cache.24435 hook_caller = self.config.hook.pytest_asyncio_loop_factories24436 if hook_caller.get_hookimpls():24437 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24438> return super().setup()24439 ^^^^^^^^^^^^^^^2444024441/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24442_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24443nixbot/tests/conftest.py:33: in postgres_dsn24444 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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_effects_state_api ___________________24502[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142450324504request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24505tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2450624507 @pytest.fixture(scope="module")24508 def postgres_dsn(24509 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24510 ) -> Iterator[str]:24511 if shutil.which("initdb") is None:24512 pytest.skip("postgresql not available")24513 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24514> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24515 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2451624517nixbot/tests/conftest.py:33: 24518_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24519/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24520 return next(self.gen)24521 ^^^^^^^^^^^^^^24522nixbot/tests/support.py:327: in ephemeral_postgres24523 run_sync(apply_migrations(dsn))24524nixbot/tests/support.py:285: in run_sync24525 return executor.submit(asyncio.run, coro).result(timeout=120)24526 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24527/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24528 return self.__get_result()24529 ^^^^^^^^^^^^^^^^^^^24530/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24531 raise self._exception24532/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24533 result = ctx.run(self.task)24534 ^^^^^^^^^^^^^^^^^^24535/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24536 return fn(*args, **kwargs)24537 ^^^^^^^^^^^^^^^^^^^24538/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24539 return runner.run(main)24540 ^^^^^^^^^^^^^^^^24541/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24542 return self._loop.run_until_complete(task)24543 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24544/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24545 return future.result()24546 ^^^^^^^^^^^^^^^24547nixbot/migrations.py:99: in apply_migrations24548 migrations = load_migrations()24549 ^^^^^^^^^^^^^^^^^24550_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2455124552 def load_migrations() -> list[Migration]:24553 """Load migration scripts shipped with the package, ordered by version."""24554 migrations = []24555 for entry in resources.files(__package__).joinpath("migrations").iterdir():24556 m = _SCRIPT_RE.match(entry.name)24557 if m is None:24558 continue24559 migrations.append(24560 Migration(24561 version=int(m.group(1)),24562 name=m.group(2),24563 sql=entry.read_text(),24564 )24565 )24566 migrations.sort(key=lambda mig: mig.version)24567 versions = [m.version for m in migrations]24568 if len(set(versions)) != len(versions):24569 msg = f"Duplicate migration versions: {versions}"24570> raise MigrationError(msg)24571E 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]2457224573nixbot/migrations.py:67: MigrationError24574____ ERROR at setup of test_attach_to_already_terminal_build_replays_status ____24575[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142457624577self = <Coroutine test_attach_to_already_terminal_build_replays_status>2457824579 def setup(self) -> None:24580 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24581 if runner_fixture_id not in self.fixturenames:24582 self.fixturenames.append(runner_fixture_id)24583 # When loop factories are configured, resolve the loop factory24584 # fixture early so that a factory variant change cascades cache24585 # invalidation before any async fixture checks its cache.24586 hook_caller = self.config.hook.pytest_asyncio_loop_factories24587 if hook_caller.get_hookimpls():24588 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24589> return super().setup()24590 ^^^^^^^^^^^^^^^2459124592/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24593_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24594nixbot/tests/conftest.py:33: in postgres_dsn24595 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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_scheduled_run_viewer_renders_ansi ___________25179[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142518025181request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25182tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2518325184 @pytest.fixture(scope="module")25185 def postgres_dsn(25186 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25187 ) -> Iterator[str]:25188 if shutil.which("initdb") is None:25189 pytest.skip("postgresql not available")25190 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25191> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25192 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2519325194nixbot/tests/conftest.py:33: 25195_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25196/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25197 return next(self.gen)25198 ^^^^^^^^^^^^^^25199nixbot/tests/support.py:327: in ephemeral_postgres25200 run_sync(apply_migrations(dsn))25201nixbot/tests/support.py:285: in run_sync25202 return executor.submit(asyncio.run, coro).result(timeout=120)25203 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25204/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25205 return self.__get_result()25206 ^^^^^^^^^^^^^^^^^^^25207/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25208 raise self._exception25209/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25210 result = ctx.run(self.task)25211 ^^^^^^^^^^^^^^^^^^25212/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25213 return fn(*args, **kwargs)25214 ^^^^^^^^^^^^^^^^^^^25215/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25216 return runner.run(main)25217 ^^^^^^^^^^^^^^^^25218/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25219 return self._loop.run_until_complete(task)25220 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25221/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25222 return future.result()25223 ^^^^^^^^^^^^^^^25224nixbot/migrations.py:99: in apply_migrations25225 migrations = load_migrations()25226 ^^^^^^^^^^^^^^^^^25227_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2522825229 def load_migrations() -> list[Migration]:25230 """Load migration scripts shipped with the package, ordered by version."""25231 migrations = []25232 for entry in resources.files(__package__).joinpath("migrations").iterdir():25233 m = _SCRIPT_RE.match(entry.name)25234 if m is None:25235 continue25236 migrations.append(25237 Migration(25238 version=int(m.group(1)),25239 name=m.group(2),25240 sql=entry.read_text(),25241 )25242 )25243 migrations.sort(key=lambda mig: mig.version)25244 versions = [m.version for m in migrations]25245 if len(set(versions)) != len(versions):25246 msg = f"Duplicate migration versions: {versions}"25247> raise MigrationError(msg)25248E 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]2524925250nixbot/migrations.py:67: MigrationError25251_______ ERROR at setup of test_effects_phase_error_keeps_succeeded_build _______25252[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142525325254self = <Coroutine test_effects_phase_error_keeps_succeeded_build>2525525256 def setup(self) -> None:25257 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25258 if runner_fixture_id not in self.fixturenames:25259 self.fixturenames.append(runner_fixture_id)25260 # When loop factories are configured, resolve the loop factory25261 # fixture early so that a factory variant change cascades cache25262 # invalidation before any async fixture checks its cache.25263 hook_caller = self.config.hook.pytest_asyncio_loop_factories25264 if hook_caller.get_hookimpls():25265 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25266> return super().setup()25267 ^^^^^^^^^^^^^^^2526825269/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25270_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25271nixbot/tests/conftest.py:33: in postgres_dsn25272 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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_scheduled_run_viewer_cross_project_404 _________25330[gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142533125332request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>25333tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTr...7d6e0>, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2533425335 @pytest.fixture(scope="module")25336 def postgres_dsn(25337 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory25338 ) -> Iterator[str]:25339 if shutil.which("initdb") is None:25340 pytest.skip("postgresql not available")25341 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")25342> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25343 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2534425345nixbot/tests/conftest.py:33: 25346_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25347/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25348 return next(self.gen)25349 ^^^^^^^^^^^^^^25350nixbot/tests/support.py:327: in ephemeral_postgres25351 run_sync(apply_migrations(dsn))25352nixbot/tests/support.py:285: in run_sync25353 return executor.submit(asyncio.run, coro).result(timeout=120)25354 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25355/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25356 return self.__get_result()25357 ^^^^^^^^^^^^^^^^^^^25358/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25359 raise self._exception25360/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25361 result = ctx.run(self.task)25362 ^^^^^^^^^^^^^^^^^^25363/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25364 return fn(*args, **kwargs)25365 ^^^^^^^^^^^^^^^^^^^25366/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25367 return runner.run(main)25368 ^^^^^^^^^^^^^^^^25369/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25370 return self._loop.run_until_complete(task)25371 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25372/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25373 return future.result()25374 ^^^^^^^^^^^^^^^25375nixbot/migrations.py:99: in apply_migrations25376 migrations = load_migrations()25377 ^^^^^^^^^^^^^^^^^25378_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2537925380 def load_migrations() -> list[Migration]:25381 """Load migration scripts shipped with the package, ordered by version."""25382 migrations = []25383 for entry in resources.files(__package__).joinpath("migrations").iterdir():25384 m = _SCRIPT_RE.match(entry.name)25385 if m is None:25386 continue25387 migrations.append(25388 Migration(25389 version=int(m.group(1)),25390 name=m.group(2),25391 sql=entry.read_text(),25392 )25393 )25394 migrations.sort(key=lambda mig: mig.version)25395 versions = [m.version for m in migrations]25396 if len(set(versions)) != len(versions):25397 msg = f"Duplicate migration versions: {versions}"25398> raise MigrationError(msg)25399E 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]2540025401nixbot/migrations.py:67: MigrationError25402_____ ERROR at setup of test_reuse_post_process_error_still_reports_status _____25403[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.142540425405self = <Coroutine test_reuse_post_process_error_still_reports_status>2540625407 def setup(self) -> None:25408 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"25409 if runner_fixture_id not in self.fixturenames:25410 self.fixturenames.append(runner_fixture_id)25411 # When loop factories are configured, resolve the loop factory25412 # fixture early so that a factory variant change cascades cache25413 # invalidation before any async fixture checks its cache.25414 hook_caller = self.config.hook.pytest_asyncio_loop_factories25415 if hook_caller.get_hookimpls():25416 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)25417> return super().setup()25418 ^^^^^^^^^^^^^^^2541925420/nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25421_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25422nixbot/tests/conftest.py:33: in postgres_dsn25423 with ephemeral_postgres(tmp_path_factory, dbname) as dsn: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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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...7d6e0>, _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_cli_api.py::test_repos_and_builds - nixbot.migrations...26324ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations...26325ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixb...26326ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrati...26327ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission26328ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nix...26329ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - ...26330ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot....26331ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migratio...26332ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.Mig...26333ERROR nixbot/tests/test_forge.py::test_project_store_sync_and_legacy_import26334ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations...26335ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect26336ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec26337ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migra...26338ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only26339ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbo...26340ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.mig...26341ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot...26342ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbo...26343ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal26344ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.mi...26345ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migra...26346ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot...26347ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows26348ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - n...26349ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names26350ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migr...26351ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - ni...26352ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbo...26353ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations....26354ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationEr...26355ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.mig...26356ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue26357ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrat...26358ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrat...26359ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migratio...26360ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nix...26361ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.m...26362ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge26363ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrati...26364ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.M...26365ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.mi...26366ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations...26367ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migra...26368ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - ...26369ERROR nixbot/tests/e2e/test_browse.py::test_homepage_lists_project_and_recent_builds26370ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid26371ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema26372ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build26373ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations...26374ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixb...26375ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes26376ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - ...26377ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search26378ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship26379ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrat...26380ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.Mi...26381ERROR nixbot/tests/e2e/test_browse.py::test_navigate_sidebar_to_failed_build26382ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired26383ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.Migrat...26384ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger26385ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.mig...26386ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone26387ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos26388ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.m...26389ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - ...26390ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbo...26391ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrat...26392ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot....26393ERROR nixbot/tests/e2e/test_browse.py::test_build_prev_next_navigation - nixb...26394ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nix...26395ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.m...26396ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migra...26397ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows26398ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbo...26399ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build26400ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds26401ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.Migration...26402ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.Mi...26403ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.Migratio...26404ERROR nixbot/tests/e2e/test_browse.py::test_structured_log_viewer - nixbot.mi...26405ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - ni...26406ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbo...26407ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbo...26408ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixb...26409ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - ...26410ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession26411ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - n...26412ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migra...26413ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - ni...26414ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migra...26415ERROR nixbot/tests/e2e/test_browse.py::test_project_filter_form - nixbot.migr...26416ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos26417ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot....26418ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - n...26419ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue26420ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes26421ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - ...26422ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base26423ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context26424ERROR nixbot/tests/e2e/test_browse.py::test_attribute_log_prev_next_navigation26425ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects26426ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.mi...26427ERROR nixbot/tests/test_cli.py::test_log_follow_finished_attr_falls_back_to_stored_log26428ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos26429ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.mi...26430ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings26431ERROR nixbot/tests/e2e/test_browse.py::test_project_filter - nixbot.migration...26432ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch26433ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs26434ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - ni...26435ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.m...26436ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.mig...26437ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - ...26438ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nix...26439ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - n...26440ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbo...26441ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message26442ERROR nixbot/tests/e2e/test_browse.py::test_activity_shows_running_build - ni...26443ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver26444ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migra...26445ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic26446ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery26447ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrat...26448ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates26449ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded26450ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.mi...26451ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - ...26452ERROR nixbot/tests/e2e/test_browse.py::test_activity_infinite_scroll - nixbot...26453ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates26454ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names26455ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nix...26456ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrat...26457ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build26458ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache26459ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects26460ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrati...26461ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrat...26462ERROR nixbot/tests/e2e/test_browse.py::test_no_horizontal_overflow_on_mobile26463ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up26464ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings26465ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - ...26466ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project26467ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.Mi...26468ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot....26469ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - ni...26470ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized26471ERROR nixbot/tests/e2e/test_browse.py::test_attribute_search_filters_groups26472ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migra...26473ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.Mig...26474ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups26475ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop26476ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.mi...26477ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - ...26478ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.mig...26479ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - ...26480ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrat...26481ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.Mig...26482ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache26483ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbo...26484ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates26485ERROR nixbot/tests/e2e/test_browse.py::test_groups_keep_identity_when_one_appears26486ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - n...26487ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending26488ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns26489ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields26490ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migratio...26491ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - ...26492ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows26493ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request26494ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery26495ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migr...26496ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migr...26497ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - ...26498ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbo...26499ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes26500ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history26501ERROR nixbot/tests/e2e/test_live.py::test_attribute_table_refreshes_while_building26502ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrati...26503ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty26504ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.Migrat...26505ERROR nixbot/tests/test_forge.py::test_register_repo_hook_500_with_403_in_body_raises26506ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - n...26507ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates26508ERROR nixbot/tests/e2e/test_live.py::test_log_page_streams_live_output - nixb...26509ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.m...26510ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nix...26511ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload26512ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status26513ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification26514ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs26515ERROR 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/e2e/test_live.py::test_log_page_keeps_up_with_a_line_burst26518ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixb...26519ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - ...26520ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached26521ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns26522ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached26523ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - n...26524ERROR nixbot/tests/e2e/test_live.py::test_repeated_activity_keeps_one_card - ...26525ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running26526ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.m...26527ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs26528ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - n...26529ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens26530ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.M...26531ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status26532ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata26533ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github]26534ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.mi...26535ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.M...26536ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot....26537ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs26538ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.m...26539ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows26540ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixb...26541ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab]26542ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows26543ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot....26544ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build26545ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.mi...26546ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds26547ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at26548ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot...26549ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility26550ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable26551ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status26552ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows26553ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - ...26554ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects26555ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery26556ERROR 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_orchestrator.py::test_eval_failure_cleans_cancel_events26563ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations....26564ERROR 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_web.py::test_404s - nixbot.migrations.MigrationError:...26567ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.mi...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_web.py::test_log_viewer_and_raw - nixbot.migrations.M...26572ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.Mig...26573ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected26574ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrat...26575ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build26576ERROR 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_service.py::test_health_serves_while_startup_blocks26587ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again26588ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - ...26589ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.Mi...26590ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect26591ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status26592ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migr...26593ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbo...26594ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.mi...26595ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migra...26596ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrati...26597ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot...26598ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - n...26599ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations...26600ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbo...26601ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation26602ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending26603ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbo...26604ERROR 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_web.py::test_openapi_docs - nixbot.migrations.Migrati...26609ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot....26610ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migratio...26611ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending26612ERROR 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_web.py::test_api_build_failures - nixbot.migrations.M...26622ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent26623ERROR 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_web.py::test_events_stream_coalesces_burst - nixbot.m...26629ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status26630ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nix...26631ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build26632ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.Mig...26633ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build26634ERROR 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_web.py::test_effect_changes_notify_build_events - nix...26642ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit26643ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.Mi...26644ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status26645ERROR 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_web.py::test_scheduled_run_viewer_renders_ansi - nixb...26653ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build26654ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_40426655ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status26656ERROR 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 13.99s ============