python3.14-nixbot-tests
checks.aarch64-darwin.nixbot-tests
· build #364
· raw
1Sourcing python-remove-tests-dir-hook2Sourcing python-catch-conflicts-hook.sh3Sourcing python-remove-bin-bytecode-hook.sh4Sourcing pypa-build-hook5Using pypaBuildPhase6Sourcing python-runtime-deps-check-hook7Using pythonRuntimeDepsCheckHook8Sourcing pypa-install-hook9Using pypaInstallPhase10Sourcing python-imports-check-hook.sh11Using pythonImportsCheckPhase12Sourcing python-namespaces-hook13Sourcing python-catch-conflicts-hook.sh14Sourcing pytest-check-hook15Using pytestCheckPhase
unpackPhase
16unpacking source archive /nix/store/zwm2z7xg8nrc0qyx19wga55yh56njhll-nixbot17source root is nixbot18setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "nixbot/pyproject.toml"configurePhase
19no configure script, doing nothingbuildPhase
20Executing pypaBuildPhase21Creating a wheel...22pypa build flags: --no-isolation --outdir dist/ --wheel23* Getting build dependencies for wheel...24* Building wheel...25Successfully built nixbot-0.0.1-py3-none-any.whl26Finished creating a wheel...27Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
28Executing pythonRuntimeDepsCheck29Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl30Finished executing pythonRuntimeDepsCheckinstallPhase
31Executing pypaInstallPhase32Successfully installed nixbot-0.0.1-py3-none-any.whl33Finished executing pypaInstallPhasepythonOutputDistPhase
34Executing pythonOutputDistPhase35Finished executing pythonOutputDistPhasefixupPhase
36checking for references to /nix/var/nix/builds/nix-34626-734064540/ in /nix/store/p6xwyyy4adkmkpygpr9nx2nvl4sjzxhf-python3.14-nixbot-tests...37patching script interpreter paths in /nix/store/p6xwyyy4adkmkpygpr9nx2nvl4sjzxhf-python3.14-nixbot-tests38stripping (with command strip and flags -S) in /nix/store/p6xwyyy4adkmkpygpr9nx2nvl4sjzxhf-python3.14-nixbot-tests/lib /nix/store/p6xwyyy4adkmkpygpr9nx2nvl4sjzxhf-python3.14-nixbot-tests/bin39checking for references to /nix/var/nix/builds/nix-34626-734064540/ in /nix/store/1rg16i4cxc2sb3py1chvbmzk1bjcj2qa-python3.14-nixbot-tests-dist...40patching script interpreter paths in /nix/store/1rg16i4cxc2sb3py1chvbmzk1bjcj2qa-python3.14-nixbot-tests-dist41Rewriting #!/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14 to #!/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.642wrapping `/nix/store/p6xwyyy4adkmkpygpr9nx2nvl4sjzxhf-python3.14-nixbot-tests/bin/nixbot'...43Executing pythonRemoveTestsDir44Finished executing pythonRemoveTestsDirinstallCheckPhase
45no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
46Executing pythonImportsCheckPhasepytestCheckPhase
47Executing pytestCheckPhase48pytest flags: -m pytest --numprocesses=1049/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.50 warner(PytestBenchmarkWarning(text))51============================= test session starts ==============================52platform darwin -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.053benchmark: 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)54rootdir: /nix/var/nix/builds/nix-34626-734064540/nixbot55configfile: pyproject.toml56plugins: asyncio-1.4.0, timeout-2.4.0, xdist-3.8.0, benchmark-5.2.3, anyio-4.14.257asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function58timeout: 60.0s59timeout method: signal60timeout func_only: False61initialized: 7/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.62 warner(PytestBenchmarkWarning(text))63initialized: 8/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.64 warner(PytestBenchmarkWarning(text))65initialized: 9/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.66 warner(PytestBenchmarkWarning(text))67ready: 3/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.68 warner(PytestBenchmarkWarning(text))69ready: 4/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.70 warner(PytestBenchmarkWarning(text))71ready: 5/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.72 warner(PytestBenchmarkWarning(text))73ready: 6/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.74 warner(PytestBenchmarkWarning(text))75ready: 7/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.76 warner(PytestBenchmarkWarning(text))77ready: 8/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.78 warner(PytestBenchmarkWarning(text))79/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.80 warner(PytestBenchmarkWarning(text))8110 workers [807 items] 82...........s....ssss.s.......sss........................................ [ 8%]83........................................................................ [ 17%]84......F.......................................................E.EE.EEEEE [ 26%]85EEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEE. [ 35%]86EEEEEEEEEEEEEE.EEEEEEsE.EE.EEEEE...E.EE.EEE.EEEE....sEEEEEEEEEEE.EEEEEEE [ 44%]87EEEEEEEEEEE.EEE.EEEEE.EEEEEEEEEEE..EEEEEEEEEE.EEEEEEEE..E...E.....EEEEEE [ 53%]88EE.EEEEEEEE.E............ssssssssssss........E..EEEEEE.E........E...E..E [ 62%]89.EE.EE.EEE..EEE............................EEEE.EE...EE.E.E.EE.......... [ 71%]90.....EEEE.EEEEEE...EEEE..EEEEEE.E..E.EEEE.EE.EEEE........E....E.E....... [ 80%]91............EEEE.....E.E....EE.EEEEEE.E..E..E.EEE.EEEEEEssss.........E.E [ 89%]92..EE.EEEE..EE.EEEE.E........EE..EEEEs..E......E...EEEEEEEE.......EE.E... [ 98%]93............... [100%]94==================================== ERRORS ====================================95____________________ ERROR at setup of test_full_lifecycle _____________________96[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.149798self = <Coroutine test_full_lifecycle>99100 def setup(self) -> None:101 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"102 if runner_fixture_id not in self.fixturenames:103 self.fixturenames.append(runner_fixture_id)104 # When loop factories are configured, resolve the loop factory105 # fixture early so that a factory variant change cascades cache106 # invalidation before any async fixture checks its cache.107 hook_caller = self.config.hook.pytest_asyncio_loop_factories108 if hook_caller.get_hookimpls():109 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)110> return super().setup()111 ^^^^^^^^^^^^^^^112113/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 114_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 115/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup116 return (yield)117 ^^^^^118nixbot/tests/conftest.py:33: in postgres_dsn119 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:120 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^121/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__122 return next(self.gen)123 ^^^^^^^^^^^^^^124nixbot/tests/support.py:327: in ephemeral_postgres125 run_sync(apply_migrations(dsn))126nixbot/tests/support.py:285: in run_sync127 return executor.submit(asyncio.run, coro).result(timeout=120)128 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^129/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result130 return self.__get_result()131 ^^^^^^^^^^^^^^^^^^^132/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result133 raise self._exception134/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run135 result = ctx.run(self.task)136 ^^^^^^^^^^^^^^^^^^137/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run138 return fn(*args, **kwargs)139 ^^^^^^^^^^^^^^^^^^^140/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run141 return runner.run(main)142 ^^^^^^^^^^^^^^^^143/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run144 return self._loop.run_until_complete(task)145 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^146/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete147 return future.result()148 ^^^^^^^^^^^^^^^149nixbot/migrations.py:99: in apply_migrations150 migrations = load_migrations()151 ^^^^^^^^^^^^^^^^^152_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 153154 def load_migrations() -> list[Migration]:155 """Load migration scripts shipped with the package, ordered by version."""156 migrations = []157 for entry in resources.files(__package__).joinpath("migrations").iterdir():158 m = _SCRIPT_RE.match(entry.name)159 if m is None:160 continue161 migrations.append(162 Migration(163 version=int(m.group(1)),164 name=m.group(2),165 sql=entry.read_text(),166 )167 )168 migrations.sort(key=lambda mig: mig.version)169 versions = [m.version for m in migrations]170 if len(set(versions)) != len(versions):171 msg = f"Duplicate migration versions: {versions}"172> raise MigrationError(msg)173E 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]174175nixbot/migrations.py:67: MigrationError176__________________ ERROR at setup of test_failure_aggregation __________________177[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14178179self = <Coroutine test_failure_aggregation>180181 def setup(self) -> None:182 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"183 if runner_fixture_id not in self.fixturenames:184 self.fixturenames.append(runner_fixture_id)185 # When loop factories are configured, resolve the loop factory186 # fixture early so that a factory variant change cascades cache187 # invalidation before any async fixture checks its cache.188 hook_caller = self.config.hook.pytest_asyncio_loop_factories189 if hook_caller.get_hookimpls():190 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)191> return super().setup()192 ^^^^^^^^^^^^^^^193194/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 195_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 196nixbot/tests/conftest.py:33: in postgres_dsn197 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:198 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^199/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__200 return next(self.gen)201 ^^^^^^^^^^^^^^202nixbot/tests/support.py:327: in ephemeral_postgres203 run_sync(apply_migrations(dsn))204nixbot/tests/support.py:285: in run_sync205 return executor.submit(asyncio.run, coro).result(timeout=120)206 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^207/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result208 return self.__get_result()209 ^^^^^^^^^^^^^^^^^^^210/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result211 raise self._exception212/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run213 result = ctx.run(self.task)214 ^^^^^^^^^^^^^^^^^^215/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run216 return fn(*args, **kwargs)217 ^^^^^^^^^^^^^^^^^^^218/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run219 return runner.run(main)220 ^^^^^^^^^^^^^^^^221/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run222 return self._loop.run_until_complete(task)223 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^224/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete225 return future.result()226 ^^^^^^^^^^^^^^^227nixbot/migrations.py:99: in apply_migrations228 migrations = load_migrations()229 ^^^^^^^^^^^^^^^^^230_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 231232 def load_migrations() -> list[Migration]:233 """Load migration scripts shipped with the package, ordered by version."""234 migrations = []235 for entry in resources.files(__package__).joinpath("migrations").iterdir():236 m = _SCRIPT_RE.match(entry.name)237 if m is None:238 continue239 migrations.append(240 Migration(241 version=int(m.group(1)),242 name=m.group(2),243 sql=entry.read_text(),244 )245 )246 migrations.sort(key=lambda mig: mig.version)247 versions = [m.version for m in migrations]248 if len(set(versions)) != len(versions):249 msg = f"Duplicate migration versions: {versions}"250> raise MigrationError(msg)251E 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]252253nixbot/migrations.py:67: MigrationError254_______ ERROR at setup of test_control_buttons_hidden_without_permission _______255[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14256257fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>258request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>259260 @pytest.hookimpl(wrapper=True)261 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:262 if (263 fixturedef.argname == "event_loop_policy"264 and fixturedef.func.__module__ != __name__265 ):266 warnings.warn(267 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),268 )269 asyncio_mode = _get_asyncio_mode(request.config)270 if not _is_asyncio_fixture_function(fixturedef.func):271 if asyncio_mode == Mode.STRICT:272 # Ignore async fixtures without explicit asyncio mark in strict mode273 # This applies to pytest_trio fixtures, for example274 return (yield)275 if not _is_coroutine_or_asyncgen(fixturedef.func):276> return (yield)277 ^^^^^278279/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 280_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 281nixbot/tests/conftest.py:33: in postgres_dsn282 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:283 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^284/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__285 return next(self.gen)286 ^^^^^^^^^^^^^^287nixbot/tests/support.py:327: in ephemeral_postgres288 run_sync(apply_migrations(dsn))289nixbot/tests/support.py:285: in run_sync290 return executor.submit(asyncio.run, coro).result(timeout=120)291 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^292/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result293 return self.__get_result()294 ^^^^^^^^^^^^^^^^^^^295/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result296 raise self._exception297/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run298 result = ctx.run(self.task)299 ^^^^^^^^^^^^^^^^^^300/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run301 return fn(*args, **kwargs)302 ^^^^^^^^^^^^^^^^^^^303/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run304 return runner.run(main)305 ^^^^^^^^^^^^^^^^306/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run307 return self._loop.run_until_complete(task)308 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^309/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete310 return future.result()311 ^^^^^^^^^^^^^^^312nixbot/migrations.py:99: in apply_migrations313 migrations = load_migrations()314 ^^^^^^^^^^^^^^^^^315_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 316317 def load_migrations() -> list[Migration]:318 """Load migration scripts shipped with the package, ordered by version."""319 migrations = []320 for entry in resources.files(__package__).joinpath("migrations").iterdir():321 m = _SCRIPT_RE.match(entry.name)322 if m is None:323 continue324 migrations.append(325 Migration(326 version=int(m.group(1)),327 name=m.group(2),328 sql=entry.read_text(),329 )330 )331 migrations.sort(key=lambda mig: mig.version)332 versions = [m.version for m in migrations]333 if len(set(versions)) != len(versions):334 msg = f"Duplicate migration versions: {versions}"335> raise MigrationError(msg)336E 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]337338nixbot/migrations.py:67: MigrationError339____________________ ERROR at setup of test_tree_hash_reuse ____________________340[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14341342self = <Coroutine test_tree_hash_reuse>343344 def setup(self) -> None:345 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"346 if runner_fixture_id not in self.fixturenames:347 self.fixturenames.append(runner_fixture_id)348 # When loop factories are configured, resolve the loop factory349 # fixture early so that a factory variant change cascades cache350 # invalidation before any async fixture checks its cache.351 hook_caller = self.config.hook.pytest_asyncio_loop_factories352 if hook_caller.get_hookimpls():353 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)354> return super().setup()355 ^^^^^^^^^^^^^^^356357/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 358_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 359nixbot/tests/conftest.py:33: in postgres_dsn360 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:361 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^362/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__363 return next(self.gen)364 ^^^^^^^^^^^^^^365nixbot/tests/support.py:327: in ephemeral_postgres366 run_sync(apply_migrations(dsn))367nixbot/tests/support.py:285: in run_sync368 return executor.submit(asyncio.run, coro).result(timeout=120)369 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^370/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result371 return self.__get_result()372 ^^^^^^^^^^^^^^^^^^^373/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result374 raise self._exception375/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run376 result = ctx.run(self.task)377 ^^^^^^^^^^^^^^^^^^378/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run379 return fn(*args, **kwargs)380 ^^^^^^^^^^^^^^^^^^^381/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run382 return runner.run(main)383 ^^^^^^^^^^^^^^^^384/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run385 return self._loop.run_until_complete(task)386 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^387/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete388 return future.result()389 ^^^^^^^^^^^^^^^390nixbot/migrations.py:99: in apply_migrations391 migrations = load_migrations()392 ^^^^^^^^^^^^^^^^^393_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 394395 def load_migrations() -> list[Migration]:396 """Load migration scripts shipped with the package, ordered by version."""397 migrations = []398 for entry in resources.files(__package__).joinpath("migrations").iterdir():399 m = _SCRIPT_RE.match(entry.name)400 if m is None:401 continue402 migrations.append(403 Migration(404 version=int(m.group(1)),405 name=m.group(2),406 sql=entry.read_text(),407 )408 )409 migrations.sort(key=lambda mig: mig.version)410 versions = [m.version for m in migrations]411 if len(set(versions)) != len(versions):412 msg = f"Duplicate migration versions: {versions}"413> raise MigrationError(msg)414E 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]415416nixbot/migrations.py:67: MigrationError417_____________ ERROR at setup of test_admin_can_restart_and_cancel ______________418[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14419420request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>421tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')422423 @pytest.fixture(scope="module")424 def postgres_dsn(425 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory426 ) -> Iterator[str]:427 if shutil.which("initdb") is None:428 pytest.skip("postgresql not available")429 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")430> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:431 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^432433nixbot/tests/conftest.py:33: 434_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 435/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__436 return next(self.gen)437 ^^^^^^^^^^^^^^438nixbot/tests/support.py:327: in ephemeral_postgres439 run_sync(apply_migrations(dsn))440nixbot/tests/support.py:285: in run_sync441 return executor.submit(asyncio.run, coro).result(timeout=120)442 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^443/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result444 return self.__get_result()445 ^^^^^^^^^^^^^^^^^^^446/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result447 raise self._exception448/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run449 result = ctx.run(self.task)450 ^^^^^^^^^^^^^^^^^^451/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run452 return fn(*args, **kwargs)453 ^^^^^^^^^^^^^^^^^^^454/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run455 return runner.run(main)456 ^^^^^^^^^^^^^^^^457/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run458 return self._loop.run_until_complete(task)459 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^460/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete461 return future.result()462 ^^^^^^^^^^^^^^^463nixbot/migrations.py:99: in apply_migrations464 migrations = load_migrations()465 ^^^^^^^^^^^^^^^^^466_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 467468 def load_migrations() -> list[Migration]:469 """Load migration scripts shipped with the package, ordered by version."""470 migrations = []471 for entry in resources.files(__package__).joinpath("migrations").iterdir():472 m = _SCRIPT_RE.match(entry.name)473 if m is None:474 continue475 migrations.append(476 Migration(477 version=int(m.group(1)),478 name=m.group(2),479 sql=entry.read_text(),480 )481 )482 migrations.sort(key=lambda mig: mig.version)483 versions = [m.version for m in migrations]484 if len(set(versions)) != len(versions):485 msg = f"Duplicate migration versions: {versions}"486> raise MigrationError(msg)487E 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]488489nixbot/migrations.py:67: MigrationError490____________ ERROR at setup of test_eval_reuse_from_cancelled_build ____________491[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14492493self = <Coroutine test_eval_reuse_from_cancelled_build>494495 def setup(self) -> None:496 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"497 if runner_fixture_id not in self.fixturenames:498 self.fixturenames.append(runner_fixture_id)499 # When loop factories are configured, resolve the loop factory500 # fixture early so that a factory variant change cascades cache501 # invalidation before any async fixture checks its cache.502 hook_caller = self.config.hook.pytest_asyncio_loop_factories503 if hook_caller.get_hookimpls():504 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)505> return super().setup()506 ^^^^^^^^^^^^^^^507508/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 509_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 510nixbot/tests/conftest.py:33: in postgres_dsn511 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:512 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^513/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__514 return next(self.gen)515 ^^^^^^^^^^^^^^516nixbot/tests/support.py:327: in ephemeral_postgres517 run_sync(apply_migrations(dsn))518nixbot/tests/support.py:285: in run_sync519 return executor.submit(asyncio.run, coro).result(timeout=120)520 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^521/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result522 return self.__get_result()523 ^^^^^^^^^^^^^^^^^^^524/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result525 raise self._exception526/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run527 result = ctx.run(self.task)528 ^^^^^^^^^^^^^^^^^^529/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run530 return fn(*args, **kwargs)531 ^^^^^^^^^^^^^^^^^^^532/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run533 return runner.run(main)534 ^^^^^^^^^^^^^^^^535/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run536 return self._loop.run_until_complete(task)537 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^538/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete539 return future.result()540 ^^^^^^^^^^^^^^^541nixbot/migrations.py:99: in apply_migrations542 migrations = load_migrations()543 ^^^^^^^^^^^^^^^^^544_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 545546 def load_migrations() -> list[Migration]:547 """Load migration scripts shipped with the package, ordered by version."""548 migrations = []549 for entry in resources.files(__package__).joinpath("migrations").iterdir():550 m = _SCRIPT_RE.match(entry.name)551 if m is None:552 continue553 migrations.append(554 Migration(555 version=int(m.group(1)),556 name=m.group(2),557 sql=entry.read_text(),558 )559 )560 migrations.sort(key=lambda mig: mig.version)561 versions = [m.version for m in migrations]562 if len(set(versions)) != len(versions):563 msg = f"Duplicate migration versions: {versions}"564> raise MigrationError(msg)565E 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]566567nixbot/migrations.py:67: MigrationError568_____________ ERROR at setup of test_pr_author_can_control_own_pr ______________569[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14570571request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>572tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')573574 @pytest.fixture(scope="module")575 def postgres_dsn(576 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory577 ) -> Iterator[str]:578 if shutil.which("initdb") is None:579 pytest.skip("postgresql not available")580 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")581> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:582 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^583584nixbot/tests/conftest.py:33: 585_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 586/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__587 return next(self.gen)588 ^^^^^^^^^^^^^^589nixbot/tests/support.py:327: in ephemeral_postgres590 run_sync(apply_migrations(dsn))591nixbot/tests/support.py:285: in run_sync592 return executor.submit(asyncio.run, coro).result(timeout=120)593 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^594/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result595 return self.__get_result()596 ^^^^^^^^^^^^^^^^^^^597/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result598 raise self._exception599/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run600 result = ctx.run(self.task)601 ^^^^^^^^^^^^^^^^^^602/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run603 return fn(*args, **kwargs)604 ^^^^^^^^^^^^^^^^^^^605/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run606 return runner.run(main)607 ^^^^^^^^^^^^^^^^608/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run609 return self._loop.run_until_complete(task)610 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^611/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete612 return future.result()613 ^^^^^^^^^^^^^^^614nixbot/migrations.py:99: in apply_migrations615 migrations = load_migrations()616 ^^^^^^^^^^^^^^^^^617_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 618619 def load_migrations() -> list[Migration]:620 """Load migration scripts shipped with the package, ordered by version."""621 migrations = []622 for entry in resources.files(__package__).joinpath("migrations").iterdir():623 m = _SCRIPT_RE.match(entry.name)624 if m is None:625 continue626 migrations.append(627 Migration(628 version=int(m.group(1)),629 name=m.group(2),630 sql=entry.read_text(),631 )632 )633 migrations.sort(key=lambda mig: mig.version)634 versions = [m.version for m in migrations]635 if len(set(versions)) != len(versions):636 msg = f"Duplicate migration versions: {versions}"637> raise MigrationError(msg)638E 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]639640nixbot/migrations.py:67: MigrationError641_________________ ERROR at setup of test_migrations_idempotent _________________642[gw8] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14643644self = <Coroutine test_migrations_idempotent>645646 def setup(self) -> None:647 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"648 if runner_fixture_id not in self.fixturenames:649 self.fixturenames.append(runner_fixture_id)650 # When loop factories are configured, resolve the loop factory651 # fixture early so that a factory variant change cascades cache652 # invalidation before any async fixture checks its cache.653 hook_caller = self.config.hook.pytest_asyncio_loop_factories654 if hook_caller.get_hookimpls():655 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)656> return super().setup()657 ^^^^^^^^^^^^^^^658659/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 660_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 661/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup662 return (yield)663 ^^^^^664nixbot/tests/conftest.py:33: in postgres_dsn665 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:666 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^667/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__668 return next(self.gen)669 ^^^^^^^^^^^^^^670nixbot/tests/support.py:327: in ephemeral_postgres671 run_sync(apply_migrations(dsn))672nixbot/tests/support.py:285: in run_sync673 return executor.submit(asyncio.run, coro).result(timeout=120)674 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^675/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result676 return self.__get_result()677 ^^^^^^^^^^^^^^^^^^^678/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result679 raise self._exception680/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run681 result = ctx.run(self.task)682 ^^^^^^^^^^^^^^^^^^683/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run684 return fn(*args, **kwargs)685 ^^^^^^^^^^^^^^^^^^^686/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run687 return runner.run(main)688 ^^^^^^^^^^^^^^^^689/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run690 return self._loop.run_until_complete(task)691 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^692/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete693 return future.result()694 ^^^^^^^^^^^^^^^695nixbot/migrations.py:99: in apply_migrations696 migrations = load_migrations()697 ^^^^^^^^^^^^^^^^^698_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 699700 def load_migrations() -> list[Migration]:701 """Load migration scripts shipped with the package, ordered by version."""702 migrations = []703 for entry in resources.files(__package__).joinpath("migrations").iterdir():704 m = _SCRIPT_RE.match(entry.name)705 if m is None:706 continue707 migrations.append(708 Migration(709 version=int(m.group(1)),710 name=m.group(2),711 sql=entry.read_text(),712 )713 )714 migrations.sort(key=lambda mig: mig.version)715 versions = [m.version for m in migrations]716 if len(set(versions)) != len(versions):717 msg = f"Duplicate migration versions: {versions}"718> raise MigrationError(msg)719E 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]720721nixbot/migrations.py:67: MigrationError722__ ERROR at setup of test_repo_writer_can_control_without_admin_or_authorship __723[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14724725request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>726tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')727728 @pytest.fixture(scope="module")729 def postgres_dsn(730 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory731 ) -> Iterator[str]:732 if shutil.which("initdb") is None:733 pytest.skip("postgresql not available")734 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")735> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:736 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^737738nixbot/tests/conftest.py:33: 739_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 740/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__741 return next(self.gen)742 ^^^^^^^^^^^^^^743nixbot/tests/support.py:327: in ephemeral_postgres744 run_sync(apply_migrations(dsn))745nixbot/tests/support.py:285: in run_sync746 return executor.submit(asyncio.run, coro).result(timeout=120)747 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^748/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result749 return self.__get_result()750 ^^^^^^^^^^^^^^^^^^^751/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result752 raise self._exception753/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run754 result = ctx.run(self.task)755 ^^^^^^^^^^^^^^^^^^756/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run757 return fn(*args, **kwargs)758 ^^^^^^^^^^^^^^^^^^^759/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run760 return runner.run(main)761 ^^^^^^^^^^^^^^^^762/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run763 return self._loop.run_until_complete(task)764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^765/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete766 return future.result()767 ^^^^^^^^^^^^^^^768nixbot/migrations.py:99: in apply_migrations769 migrations = load_migrations()770 ^^^^^^^^^^^^^^^^^771_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 772773 def load_migrations() -> list[Migration]:774 """Load migration scripts shipped with the package, ordered by version."""775 migrations = []776 for entry in resources.files(__package__).joinpath("migrations").iterdir():777 m = _SCRIPT_RE.match(entry.name)778 if m is None:779 continue780 migrations.append(781 Migration(782 version=int(m.group(1)),783 name=m.group(2),784 sql=entry.read_text(),785 )786 )787 migrations.sort(key=lambda mig: mig.version)788 versions = [m.version for m in migrations]789 if len(set(versions)) != len(versions):790 msg = f"Duplicate migration versions: {versions}"791> raise MigrationError(msg)792E 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]793794nixbot/migrations.py:67: MigrationError795___________ ERROR at setup of test_eval_reuse_skipped_when_drvs_gone ___________796[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14797798self = <Coroutine test_eval_reuse_skipped_when_drvs_gone>799800 def setup(self) -> None:801 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"802 if runner_fixture_id not in self.fixturenames:803 self.fixturenames.append(runner_fixture_id)804 # When loop factories are configured, resolve the loop factory805 # fixture early so that a factory variant change cascades cache806 # invalidation before any async fixture checks its cache.807 hook_caller = self.config.hook.pytest_asyncio_loop_factories808 if hook_caller.get_hookimpls():809 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)810> return super().setup()811 ^^^^^^^^^^^^^^^812813/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 814_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 815nixbot/tests/conftest.py:33: in postgres_dsn816 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:817 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^818/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-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/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result827 return self.__get_result()828 ^^^^^^^^^^^^^^^^^^^829/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result830 raise self._exception831/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run832 result = ctx.run(self.task)833 ^^^^^^^^^^^^^^^^^^834/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run835 return fn(*args, **kwargs)836 ^^^^^^^^^^^^^^^^^^^837/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run838 return runner.run(main)839 ^^^^^^^^^^^^^^^^840/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run841 return self._loop.run_until_complete(task)842 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^843/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-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_project_store_sync_and_legacy_import __________874[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14875876self = <Coroutine test_project_store_sync_and_legacy_import>877878 def setup(self) -> None:879 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"880 if runner_fixture_id not in self.fixturenames:881 self.fixturenames.append(runner_fixture_id)882 # When loop factories are configured, resolve the loop factory883 # fixture early so that a factory variant change cascades cache884 # invalidation before any async fixture checks its cache.885 hook_caller = self.config.hook.pytest_asyncio_loop_factories886 if hook_caller.get_hookimpls():887 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)888> return super().setup()889 ^^^^^^^^^^^^^^^890891/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 892_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 893/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup894 return (yield)895 ^^^^^896nixbot/tests/conftest.py:33: in postgres_dsn897 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:898 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^899/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__900 return next(self.gen)901 ^^^^^^^^^^^^^^902nixbot/tests/support.py:327: in ephemeral_postgres903 run_sync(apply_migrations(dsn))904nixbot/tests/support.py:285: in run_sync905 return executor.submit(asyncio.run, coro).result(timeout=120)906 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^907/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result908 return self.__get_result()909 ^^^^^^^^^^^^^^^^^^^910/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result911 raise self._exception912/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run913 result = ctx.run(self.task)914 ^^^^^^^^^^^^^^^^^^915/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run916 return fn(*args, **kwargs)917 ^^^^^^^^^^^^^^^^^^^918/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run919 return runner.run(main)920 ^^^^^^^^^^^^^^^^921/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run922 return self._loop.run_until_complete(task)923 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^924/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete925 return future.result()926 ^^^^^^^^^^^^^^^927nixbot/migrations.py:99: in apply_migrations928 migrations = load_migrations()929 ^^^^^^^^^^^^^^^^^930_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 931932 def load_migrations() -> list[Migration]:933 """Load migration scripts shipped with the package, ordered by version."""934 migrations = []935 for entry in resources.files(__package__).joinpath("migrations").iterdir():936 m = _SCRIPT_RE.match(entry.name)937 if m is None:938 continue939 migrations.append(940 Migration(941 version=int(m.group(1)),942 name=m.group(2),943 sql=entry.read_text(),944 )945 )946 migrations.sort(key=lambda mig: mig.version)947 versions = [m.version for m in migrations]948 if len(set(versions)) != len(versions):949 msg = f"Duplicate migration versions: {versions}"950> raise MigrationError(msg)951E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]952953nixbot/migrations.py:67: MigrationError954_______________ ERROR at setup of test_cancel_all_requires_admin _______________955[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14956957request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>958tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')959960 @pytest.fixture(scope="module")961 def postgres_dsn(962 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory963 ) -> Iterator[str]:964 if shutil.which("initdb") is None:965 pytest.skip("postgresql not available")966 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")967> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:968 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^969970nixbot/tests/conftest.py:33: 971_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 972/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__973 return next(self.gen)974 ^^^^^^^^^^^^^^975nixbot/tests/support.py:327: in ephemeral_postgres976 run_sync(apply_migrations(dsn))977nixbot/tests/support.py:285: in run_sync978 return executor.submit(asyncio.run, coro).result(timeout=120)979 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^980/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result981 return self.__get_result()982 ^^^^^^^^^^^^^^^^^^^983/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result984 raise self._exception985/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run986 result = ctx.run(self.task)987 ^^^^^^^^^^^^^^^^^^988/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run989 return fn(*args, **kwargs)990 ^^^^^^^^^^^^^^^^^^^991/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run992 return runner.run(main)993 ^^^^^^^^^^^^^^^^994/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run995 return self._loop.run_until_complete(task)996 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^997/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete998 return future.result()999 ^^^^^^^^^^^^^^^1000nixbot/migrations.py:99: in apply_migrations1001 migrations = load_migrations()1002 ^^^^^^^^^^^^^^^^^1003_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10041005 def load_migrations() -> list[Migration]:1006 """Load migration scripts shipped with the package, ordered by version."""1007 migrations = []1008 for entry in resources.files(__package__).joinpath("migrations").iterdir():1009 m = _SCRIPT_RE.match(entry.name)1010 if m is None:1011 continue1012 migrations.append(1013 Migration(1014 version=int(m.group(1)),1015 name=m.group(2),1016 sql=entry.read_text(),1017 )1018 )1019 migrations.sort(key=lambda mig: mig.version)1020 versions = [m.version for m in migrations]1021 if len(set(versions)) != len(versions):1022 msg = f"Duplicate migration versions: {versions}"1023> raise MigrationError(msg)1024E 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]10251026nixbot/migrations.py:67: MigrationError1027_______ ERROR at setup of test_scheduled_worktree_id_distinct_per_effect _______1028[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1410291030fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1031request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>10321033 @pytest.hookimpl(wrapper=True)1034 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1035 if (1036 fixturedef.argname == "event_loop_policy"1037 and fixturedef.func.__module__ != __name__1038 ):1039 warnings.warn(1040 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1041 )1042 asyncio_mode = _get_asyncio_mode(request.config)1043 if not _is_asyncio_fixture_function(fixturedef.func):1044 if asyncio_mode == Mode.STRICT:1045 # Ignore async fixtures without explicit asyncio mark in strict mode1046 # This applies to pytest_trio fixtures, for example1047 return (yield)1048 if not _is_coroutine_or_asyncgen(fixturedef.func):1049> return (yield)1050 ^^^^^10511052/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1053_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1054nixbot/tests/conftest.py:33: in postgres_dsn1055 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1056 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1057/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1058 return next(self.gen)1059 ^^^^^^^^^^^^^^1060nixbot/tests/support.py:327: in ephemeral_postgres1061 run_sync(apply_migrations(dsn))1062nixbot/tests/support.py:285: in run_sync1063 return executor.submit(asyncio.run, coro).result(timeout=120)1064 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1065/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1066 return self.__get_result()1067 ^^^^^^^^^^^^^^^^^^^1068/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1069 raise self._exception1070/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1071 result = ctx.run(self.task)1072 ^^^^^^^^^^^^^^^^^^1073/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1074 return fn(*args, **kwargs)1075 ^^^^^^^^^^^^^^^^^^^1076/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1077 return runner.run(main)1078 ^^^^^^^^^^^^^^^^1079/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1080 return self._loop.run_until_complete(task)1081 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1082/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1083 return future.result()1084 ^^^^^^^^^^^^^^^1085nixbot/migrations.py:99: in apply_migrations1086 migrations = load_migrations()1087 ^^^^^^^^^^^^^^^^^1088_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 10891090 def load_migrations() -> list[Migration]:1091 """Load migration scripts shipped with the package, ordered by version."""1092 migrations = []1093 for entry in resources.files(__package__).joinpath("migrations").iterdir():1094 m = _SCRIPT_RE.match(entry.name)1095 if m is None:1096 continue1097 migrations.append(1098 Migration(1099 version=int(m.group(1)),1100 name=m.group(2),1101 sql=entry.read_text(),1102 )1103 )1104 migrations.sort(key=lambda mig: mig.version)1105 versions = [m.version for m in migrations]1106 if len(set(versions)) != len(versions):1107 msg = f"Duplicate migration versions: {versions}"1108> raise MigrationError(msg)1109E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33]11101111nixbot/migrations.py:67: MigrationError1112___________________ ERROR at setup of test_html_error_pages ____________________1113[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1411141115fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1116request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>11171118 @pytest.hookimpl(wrapper=True)1119 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1120 if (1121 fixturedef.argname == "event_loop_policy"1122 and fixturedef.func.__module__ != __name__1123 ):1124 warnings.warn(1125 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1126 )1127 asyncio_mode = _get_asyncio_mode(request.config)1128 if not _is_asyncio_fixture_function(fixturedef.func):1129 if asyncio_mode == Mode.STRICT:1130 # Ignore async fixtures without explicit asyncio mark in strict mode1131 # This applies to pytest_trio fixtures, for example1132 return (yield)1133 if not _is_coroutine_or_asyncgen(fixturedef.func):1134> return (yield)1135 ^^^^^11361137/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1138_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1139nixbot/tests/conftest.py:33: in postgres_dsn1140 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1141 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1142/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1143 return next(self.gen)1144 ^^^^^^^^^^^^^^1145nixbot/tests/support.py:327: in ephemeral_postgres1146 run_sync(apply_migrations(dsn))1147nixbot/tests/support.py:285: in run_sync1148 return executor.submit(asyncio.run, coro).result(timeout=120)1149 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1150/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1151 return self.__get_result()1152 ^^^^^^^^^^^^^^^^^^^1153/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1154 raise self._exception1155/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1156 result = ctx.run(self.task)1157 ^^^^^^^^^^^^^^^^^^1158/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1159 return fn(*args, **kwargs)1160 ^^^^^^^^^^^^^^^^^^^1161/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1162 return runner.run(main)1163 ^^^^^^^^^^^^^^^^1164/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1165 return self._loop.run_until_complete(task)1166 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1167/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1168 return future.result()1169 ^^^^^^^^^^^^^^^1170nixbot/migrations.py:99: in apply_migrations1171 migrations = load_migrations()1172 ^^^^^^^^^^^^^^^^^1173_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 11741175 def load_migrations() -> list[Migration]:1176 """Load migration scripts shipped with the package, ordered by version."""1177 migrations = []1178 for entry in resources.files(__package__).joinpath("migrations").iterdir():1179 m = _SCRIPT_RE.match(entry.name)1180 if m is None:1181 continue1182 migrations.append(1183 Migration(1184 version=int(m.group(1)),1185 name=m.group(2),1186 sql=entry.read_text(),1187 )1188 )1189 migrations.sort(key=lambda mig: mig.version)1190 versions = [m.version for m in migrations]1191 if len(set(versions)) != len(versions):1192 msg = f"Duplicate migration versions: {versions}"1193> raise MigrationError(msg)1194E 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]11951196nixbot/migrations.py:67: MigrationError1197___________ ERROR at setup of test_failed_migration_error_not_masked ___________1198[gw8] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1411991200self = <Coroutine test_failed_migration_error_not_masked>12011202 def setup(self) -> None:1203 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1204 if runner_fixture_id not in self.fixturenames:1205 self.fixturenames.append(runner_fixture_id)1206 # When loop factories are configured, resolve the loop factory1207 # fixture early so that a factory variant change cascades cache1208 # invalidation before any async fixture checks its cache.1209 hook_caller = self.config.hook.pytest_asyncio_loop_factories1210 if hook_caller.get_hookimpls():1211 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1212> return super().setup()1213 ^^^^^^^^^^^^^^^12141215/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1216_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1217nixbot/tests/conftest.py:33: in postgres_dsn1218 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1219 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1220/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1221 return next(self.gen)1222 ^^^^^^^^^^^^^^1223nixbot/tests/support.py:327: in ephemeral_postgres1224 run_sync(apply_migrations(dsn))1225nixbot/tests/support.py:285: in run_sync1226 return executor.submit(asyncio.run, coro).result(timeout=120)1227 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1228/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1229 return self.__get_result()1230 ^^^^^^^^^^^^^^^^^^^1231/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1232 raise self._exception1233/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1234 result = ctx.run(self.task)1235 ^^^^^^^^^^^^^^^^^^1236/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1237 return fn(*args, **kwargs)1238 ^^^^^^^^^^^^^^^^^^^1239/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1240 return runner.run(main)1241 ^^^^^^^^^^^^^^^^1242/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1243 return self._loop.run_until_complete(task)1244 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1245/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1246 return future.result()1247 ^^^^^^^^^^^^^^^1248nixbot/migrations.py:99: in apply_migrations1249 migrations = load_migrations()1250 ^^^^^^^^^^^^^^^^^1251_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12521253 def load_migrations() -> list[Migration]:1254 """Load migration scripts shipped with the package, ordered by version."""1255 migrations = []1256 for entry in resources.files(__package__).joinpath("migrations").iterdir():1257 m = _SCRIPT_RE.match(entry.name)1258 if m is None:1259 continue1260 migrations.append(1261 Migration(1262 version=int(m.group(1)),1263 name=m.group(2),1264 sql=entry.read_text(),1265 )1266 )1267 migrations.sort(key=lambda mig: mig.version)1268 versions = [m.version for m in migrations]1269 if len(set(versions)) != len(versions):1270 msg = f"Duplicate migration versions: {versions}"1271> raise MigrationError(msg)1272E 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]12731274nixbot/migrations.py:67: MigrationError1275__________ ERROR at setup of test_main_push_promotes_reused_pr_build ___________1276[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1412771278self = <Coroutine test_main_push_promotes_reused_pr_build>12791280 def setup(self) -> None:1281 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1282 if runner_fixture_id not in self.fixturenames:1283 self.fixturenames.append(runner_fixture_id)1284 # When loop factories are configured, resolve the loop factory1285 # fixture early so that a factory variant change cascades cache1286 # invalidation before any async fixture checks its cache.1287 hook_caller = self.config.hook.pytest_asyncio_loop_factories1288 if hook_caller.get_hookimpls():1289 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1290> return super().setup()1291 ^^^^^^^^^^^^^^^12921293/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1294_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1295nixbot/tests/conftest.py:33: in postgres_dsn1296 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1297 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1298/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1299 return next(self.gen)1300 ^^^^^^^^^^^^^^1301nixbot/tests/support.py:327: in ephemeral_postgres1302 run_sync(apply_migrations(dsn))1303nixbot/tests/support.py:285: in run_sync1304 return executor.submit(asyncio.run, coro).result(timeout=120)1305 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1306/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1307 return self.__get_result()1308 ^^^^^^^^^^^^^^^^^^^1309/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1310 raise self._exception1311/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1312 result = ctx.run(self.task)1313 ^^^^^^^^^^^^^^^^^^1314/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1315 return fn(*args, **kwargs)1316 ^^^^^^^^^^^^^^^^^^^1317/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1318 return runner.run(main)1319 ^^^^^^^^^^^^^^^^1320/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1321 return self._loop.run_until_complete(task)1322 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1323/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1324 return future.result()1325 ^^^^^^^^^^^^^^^1326nixbot/migrations.py:99: in apply_migrations1327 migrations = load_migrations()1328 ^^^^^^^^^^^^^^^^^1329_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13301331 def load_migrations() -> list[Migration]:1332 """Load migration scripts shipped with the package, ordered by version."""1333 migrations = []1334 for entry in resources.files(__package__).joinpath("migrations").iterdir():1335 m = _SCRIPT_RE.match(entry.name)1336 if m is None:1337 continue1338 migrations.append(1339 Migration(1340 version=int(m.group(1)),1341 name=m.group(2),1342 sql=entry.read_text(),1343 )1344 )1345 migrations.sort(key=lambda mig: mig.version)1346 versions = [m.version for m in migrations]1347 if len(set(versions)) != len(versions):1348 msg = f"Duplicate migration versions: {versions}"1349> raise MigrationError(msg)1350E 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]13511352nixbot/migrations.py:67: MigrationError1353______________ ERROR at setup of test_anonymous_sees_public_only _______________1354[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1413551356fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>1357request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>13581359 @pytest.hookimpl(wrapper=True)1360 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:1361 if (1362 fixturedef.argname == "event_loop_policy"1363 and fixturedef.func.__module__ != __name__1364 ):1365 warnings.warn(1366 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),1367 )1368 asyncio_mode = _get_asyncio_mode(request.config)1369 if not _is_asyncio_fixture_function(fixturedef.func):1370 if asyncio_mode == Mode.STRICT:1371 # Ignore async fixtures without explicit asyncio mark in strict mode1372 # This applies to pytest_trio fixtures, for example1373 return (yield)1374 if not _is_coroutine_or_asyncgen(fixturedef.func):1375> return (yield)1376 ^^^^^13771378/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 1379_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1380nixbot/tests/conftest.py:33: in postgres_dsn1381 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1382 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1383/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1384 return next(self.gen)1385 ^^^^^^^^^^^^^^1386nixbot/tests/support.py:327: in ephemeral_postgres1387 run_sync(apply_migrations(dsn))1388nixbot/tests/support.py:285: in run_sync1389 return executor.submit(asyncio.run, coro).result(timeout=120)1390 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1391/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1392 return self.__get_result()1393 ^^^^^^^^^^^^^^^^^^^1394/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1395 raise self._exception1396/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1397 result = ctx.run(self.task)1398 ^^^^^^^^^^^^^^^^^^1399/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1400 return fn(*args, **kwargs)1401 ^^^^^^^^^^^^^^^^^^^1402/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1403 return runner.run(main)1404 ^^^^^^^^^^^^^^^^1405/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1406 return self._loop.run_until_complete(task)1407 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1408/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1409 return future.result()1410 ^^^^^^^^^^^^^^^1411nixbot/migrations.py:99: in apply_migrations1412 migrations = load_migrations()1413 ^^^^^^^^^^^^^^^^^1414_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14151416 def load_migrations() -> list[Migration]:1417 """Load migration scripts shipped with the package, ordered by version."""1418 migrations = []1419 for entry in resources.files(__package__).joinpath("migrations").iterdir():1420 m = _SCRIPT_RE.match(entry.name)1421 if m is None:1422 continue1423 migrations.append(1424 Migration(1425 version=int(m.group(1)),1426 name=m.group(2),1427 sql=entry.read_text(),1428 )1429 )1430 migrations.sort(key=lambda mig: mig.version)1431 versions = [m.version for m in migrations]1432 if len(set(versions)) != len(versions):1433 msg = f"Duplicate migration versions: {versions}"1434> raise MigrationError(msg)1435E 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]14361437nixbot/migrations.py:67: MigrationError1438______ ERROR at setup of test_legacy_import_runs_despite_pull_based_rows _______1439[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1414401441self = <Coroutine test_legacy_import_runs_despite_pull_based_rows>14421443 def setup(self) -> None:1444 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1445 if runner_fixture_id not in self.fixturenames:1446 self.fixturenames.append(runner_fixture_id)1447 # When loop factories are configured, resolve the loop factory1448 # fixture early so that a factory variant change cascades cache1449 # invalidation before any async fixture checks its cache.1450 hook_caller = self.config.hook.pytest_asyncio_loop_factories1451 if hook_caller.get_hookimpls():1452 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1453> return super().setup()1454 ^^^^^^^^^^^^^^^14551456/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1457_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1458nixbot/tests/conftest.py:33: in postgres_dsn1459 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1460 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1461/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1462 return next(self.gen)1463 ^^^^^^^^^^^^^^1464nixbot/tests/support.py:327: in ephemeral_postgres1465 run_sync(apply_migrations(dsn))1466nixbot/tests/support.py:285: in run_sync1467 return executor.submit(asyncio.run, coro).result(timeout=120)1468 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1469/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1470 return self.__get_result()1471 ^^^^^^^^^^^^^^^^^^^1472/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1473 raise self._exception1474/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1475 result = ctx.run(self.task)1476 ^^^^^^^^^^^^^^^^^^1477/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1478 return fn(*args, **kwargs)1479 ^^^^^^^^^^^^^^^^^^^1480/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1481 return runner.run(main)1482 ^^^^^^^^^^^^^^^^1483/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1484 return self._loop.run_until_complete(task)1485 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1486/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1487 return future.result()1488 ^^^^^^^^^^^^^^^1489nixbot/migrations.py:99: in apply_migrations1490 migrations = load_migrations()1491 ^^^^^^^^^^^^^^^^^1492_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 14931494 def load_migrations() -> list[Migration]:1495 """Load migration scripts shipped with the package, ordered by version."""1496 migrations = []1497 for entry in resources.files(__package__).joinpath("migrations").iterdir():1498 m = _SCRIPT_RE.match(entry.name)1499 if m is None:1500 continue1501 migrations.append(1502 Migration(1503 version=int(m.group(1)),1504 name=m.group(2),1505 sql=entry.read_text(),1506 )1507 )1508 migrations.sort(key=lambda mig: mig.version)1509 versions = [m.version for m in migrations]1510 if len(set(versions)) != len(versions):1511 msg = f"Duplicate migration versions: {versions}"1512> raise MigrationError(msg)1513E 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]15141515nixbot/migrations.py:67: MigrationError1516_____ ERROR at setup of test_cancel_all_cancels_pending_and_running_builds _____1517[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1415181519request = <SubRequest 'postgres_dsn' for <Function test_control_buttons_hidden_without_permission>>1520tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')15211522 @pytest.fixture(scope="module")1523 def postgres_dsn(1524 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1525 ) -> Iterator[str]:1526 if shutil.which("initdb") is None:1527 pytest.skip("postgresql not available")1528 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1529> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1530 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^15311532nixbot/tests/conftest.py:33: 1533_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1534/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1535 return next(self.gen)1536 ^^^^^^^^^^^^^^1537nixbot/tests/support.py:327: in ephemeral_postgres1538 run_sync(apply_migrations(dsn))1539nixbot/tests/support.py:285: in run_sync1540 return executor.submit(asyncio.run, coro).result(timeout=120)1541 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1542/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1543 return self.__get_result()1544 ^^^^^^^^^^^^^^^^^^^1545/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1546 raise self._exception1547/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1548 result = ctx.run(self.task)1549 ^^^^^^^^^^^^^^^^^^1550/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1551 return fn(*args, **kwargs)1552 ^^^^^^^^^^^^^^^^^^^1553/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1554 return runner.run(main)1555 ^^^^^^^^^^^^^^^^1556/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1557 return self._loop.run_until_complete(task)1558 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1559/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1560 return future.result()1561 ^^^^^^^^^^^^^^^1562nixbot/migrations.py:99: in apply_migrations1563 migrations = load_migrations()1564 ^^^^^^^^^^^^^^^^^1565_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15661567 def load_migrations() -> list[Migration]:1568 """Load migration scripts shipped with the package, ordered by version."""1569 migrations = []1570 for entry in resources.files(__package__).joinpath("migrations").iterdir():1571 m = _SCRIPT_RE.match(entry.name)1572 if m is None:1573 continue1574 migrations.append(1575 Migration(1576 version=int(m.group(1)),1577 name=m.group(2),1578 sql=entry.read_text(),1579 )1580 )1581 migrations.sort(key=lambda mig: mig.version)1582 versions = [m.version for m in migrations]1583 if len(set(versions)) != len(versions):1584 msg = f"Duplicate migration versions: {versions}"1585> raise MigrationError(msg)1586E 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]15871588nixbot/migrations.py:67: MigrationError1589_______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______1590[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1415911592request = <SubRequest 'postgres_dsn' for <Function test_scheduled_worktree_id_distinct_per_effect>>1593tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all')15941595 @pytest.fixture(scope="module")1596 def postgres_dsn(1597 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1598 ) -> Iterator[str]:1599 if shutil.which("initdb") is None:1600 pytest.skip("postgresql not available")1601 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1602> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1603 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^16041605nixbot/tests/conftest.py:33: 1606_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1607/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1608 return next(self.gen)1609 ^^^^^^^^^^^^^^1610nixbot/tests/support.py:327: in ephemeral_postgres1611 run_sync(apply_migrations(dsn))1612nixbot/tests/support.py:285: in run_sync1613 return executor.submit(asyncio.run, coro).result(timeout=120)1614 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1615/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1616 return self.__get_result()1617 ^^^^^^^^^^^^^^^^^^^1618/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1619 raise self._exception1620/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1621 result = ctx.run(self.task)1622 ^^^^^^^^^^^^^^^^^^1623/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1624 return fn(*args, **kwargs)1625 ^^^^^^^^^^^^^^^^^^^1626/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1627 return runner.run(main)1628 ^^^^^^^^^^^^^^^^1629/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1630 return self._loop.run_until_complete(task)1631 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1632/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1633 return future.result()1634 ^^^^^^^^^^^^^^^1635nixbot/migrations.py:99: in apply_migrations1636 migrations = load_migrations()1637 ^^^^^^^^^^^^^^^^^1638_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16391640 def load_migrations() -> list[Migration]:1641 """Load migration scripts shipped with the package, ordered by version."""1642 migrations = []1643 for entry in resources.files(__package__).joinpath("migrations").iterdir():1644 m = _SCRIPT_RE.match(entry.name)1645 if m is None:1646 continue1647 migrations.append(1648 Migration(1649 version=int(m.group(1)),1650 name=m.group(2),1651 sql=entry.read_text(),1652 )1653 )1654 migrations.sort(key=lambda mig: mig.version)1655 versions = [m.version for m in migrations]1656 if len(set(versions)) != len(versions):1657 msg = f"Duplicate migration versions: {versions}"1658> raise MigrationError(msg)1659E 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]16601661nixbot/migrations.py:67: MigrationError1662______________ ERROR at setup of test_api_strips_ansi_from_errors ______________1663[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1416641665request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>1666tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')16671668 @pytest.fixture(scope="module")1669 def postgres_dsn(1670 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1671 ) -> Iterator[str]:1672 if shutil.which("initdb") is None:1673 pytest.skip("postgresql not available")1674 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1675> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1676 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^16771678nixbot/tests/conftest.py:33: 1679_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1680/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1681 return next(self.gen)1682 ^^^^^^^^^^^^^^1683nixbot/tests/support.py:327: in ephemeral_postgres1684 run_sync(apply_migrations(dsn))1685nixbot/tests/support.py:285: in run_sync1686 return executor.submit(asyncio.run, coro).result(timeout=120)1687 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1688/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1689 return self.__get_result()1690 ^^^^^^^^^^^^^^^^^^^1691/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1692 raise self._exception1693/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1694 result = ctx.run(self.task)1695 ^^^^^^^^^^^^^^^^^^1696/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1697 return fn(*args, **kwargs)1698 ^^^^^^^^^^^^^^^^^^^1699/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1700 return runner.run(main)1701 ^^^^^^^^^^^^^^^^1702/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1703 return self._loop.run_until_complete(task)1704 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1705/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1706 return future.result()1707 ^^^^^^^^^^^^^^^1708nixbot/migrations.py:99: in apply_migrations1709 migrations = load_migrations()1710 ^^^^^^^^^^^^^^^^^1711_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17121713 def load_migrations() -> list[Migration]:1714 """Load migration scripts shipped with the package, ordered by version."""1715 migrations = []1716 for entry in resources.files(__package__).joinpath("migrations").iterdir():1717 m = _SCRIPT_RE.match(entry.name)1718 if m is None:1719 continue1720 migrations.append(1721 Migration(1722 version=int(m.group(1)),1723 name=m.group(2),1724 sql=entry.read_text(),1725 )1726 )1727 migrations.sort(key=lambda mig: mig.version)1728 versions = [m.version for m in migrations]1729 if len(set(versions)) != len(versions):1730 msg = f"Duplicate migration versions: {versions}"1731> raise MigrationError(msg)1732E 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]17331734nixbot/migrations.py:67: MigrationError1735__________ ERROR at setup of test_unauthorized_user_sees_public_only ___________1736[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1417371738request = <SubRequest 'postgres_dsn' for <Function test_anonymous_sees_public_only>>1739tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')17401741 @pytest.fixture(scope="module")1742 def postgres_dsn(1743 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory1744 ) -> Iterator[str]:1745 if shutil.which("initdb") is None:1746 pytest.skip("postgresql not available")1747 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")1748> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1749 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^17501751nixbot/tests/conftest.py:33: 1752_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1753/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1754 return next(self.gen)1755 ^^^^^^^^^^^^^^1756nixbot/tests/support.py:327: in ephemeral_postgres1757 run_sync(apply_migrations(dsn))1758nixbot/tests/support.py:285: in run_sync1759 return executor.submit(asyncio.run, coro).result(timeout=120)1760 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1761/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1762 return self.__get_result()1763 ^^^^^^^^^^^^^^^^^^^1764/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1765 raise self._exception1766/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1767 result = ctx.run(self.task)1768 ^^^^^^^^^^^^^^^^^^1769/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1770 return fn(*args, **kwargs)1771 ^^^^^^^^^^^^^^^^^^^1772/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1773 return runner.run(main)1774 ^^^^^^^^^^^^^^^^1775/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1776 return self._loop.run_until_complete(task)1777 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1778/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1779 return future.result()1780 ^^^^^^^^^^^^^^^1781nixbot/migrations.py:99: in apply_migrations1782 migrations = load_migrations()1783 ^^^^^^^^^^^^^^^^^1784_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 17851786 def load_migrations() -> list[Migration]:1787 """Load migration scripts shipped with the package, ordered by version."""1788 migrations = []1789 for entry in resources.files(__package__).joinpath("migrations").iterdir():1790 m = _SCRIPT_RE.match(entry.name)1791 if m is None:1792 continue1793 migrations.append(1794 Migration(1795 version=int(m.group(1)),1796 name=m.group(2),1797 sql=entry.read_text(),1798 )1799 )1800 migrations.sort(key=lambda mig: mig.version)1801 versions = [m.version for m in migrations]1802 if len(set(versions)) != len(versions):1803 msg = f"Duplicate migration versions: {versions}"1804> raise MigrationError(msg)1805E 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]18061807nixbot/migrations.py:67: MigrationError1808_______________ ERROR at setup of test_edited_migration_rejected _______________1809[gw8] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1418101811self = <Coroutine test_edited_migration_rejected>18121813 def setup(self) -> None:1814 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1815 if runner_fixture_id not in self.fixturenames:1816 self.fixturenames.append(runner_fixture_id)1817 # When loop factories are configured, resolve the loop factory1818 # fixture early so that a factory variant change cascades cache1819 # invalidation before any async fixture checks its cache.1820 hook_caller = self.config.hook.pytest_asyncio_loop_factories1821 if hook_caller.get_hookimpls():1822 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1823> return super().setup()1824 ^^^^^^^^^^^^^^^18251826/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1827_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1828nixbot/tests/conftest.py:33: in postgres_dsn1829 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1830 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1831/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1832 return next(self.gen)1833 ^^^^^^^^^^^^^^1834nixbot/tests/support.py:327: in ephemeral_postgres1835 run_sync(apply_migrations(dsn))1836nixbot/tests/support.py:285: in run_sync1837 return executor.submit(asyncio.run, coro).result(timeout=120)1838 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1839/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1840 return self.__get_result()1841 ^^^^^^^^^^^^^^^^^^^1842/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1843 raise self._exception1844/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1845 result = ctx.run(self.task)1846 ^^^^^^^^^^^^^^^^^^1847/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1848 return fn(*args, **kwargs)1849 ^^^^^^^^^^^^^^^^^^^1850/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1851 return runner.run(main)1852 ^^^^^^^^^^^^^^^^1853/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1854 return self._loop.run_until_complete(task)1855 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1856/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1857 return future.result()1858 ^^^^^^^^^^^^^^^1859nixbot/migrations.py:99: in apply_migrations1860 migrations = load_migrations()1861 ^^^^^^^^^^^^^^^^^1862_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 18631864 def load_migrations() -> list[Migration]:1865 """Load migration scripts shipped with the package, ordered by version."""1866 migrations = []1867 for entry in resources.files(__package__).joinpath("migrations").iterdir():1868 m = _SCRIPT_RE.match(entry.name)1869 if m is None:1870 continue1871 migrations.append(1872 Migration(1873 version=int(m.group(1)),1874 name=m.group(2),1875 sql=entry.read_text(),1876 )1877 )1878 migrations.sort(key=lambda mig: mig.version)1879 versions = [m.version for m in migrations]1880 if len(set(versions)) != len(versions):1881 msg = f"Duplicate migration versions: {versions}"1882> raise MigrationError(msg)1883E 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]18841885nixbot/migrations.py:67: MigrationError1886______________ ERROR at setup of test_merge_conflict_fails_build _______________1887[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1418881889self = <Coroutine test_merge_conflict_fails_build>18901891 def setup(self) -> None:1892 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1893 if runner_fixture_id not in self.fixturenames:1894 self.fixturenames.append(runner_fixture_id)1895 # When loop factories are configured, resolve the loop factory1896 # fixture early so that a factory variant change cascades cache1897 # invalidation before any async fixture checks its cache.1898 hook_caller = self.config.hook.pytest_asyncio_loop_factories1899 if hook_caller.get_hookimpls():1900 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1901> return super().setup()1902 ^^^^^^^^^^^^^^^19031904/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1905_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1906nixbot/tests/conftest.py:33: in postgres_dsn1907 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1908 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1909/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1910 return next(self.gen)1911 ^^^^^^^^^^^^^^1912nixbot/tests/support.py:327: in ephemeral_postgres1913 run_sync(apply_migrations(dsn))1914nixbot/tests/support.py:285: in run_sync1915 return executor.submit(asyncio.run, coro).result(timeout=120)1916 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1917/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1918 return self.__get_result()1919 ^^^^^^^^^^^^^^^^^^^1920/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1921 raise self._exception1922/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run1923 result = ctx.run(self.task)1924 ^^^^^^^^^^^^^^^^^^1925/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run1926 return fn(*args, **kwargs)1927 ^^^^^^^^^^^^^^^^^^^1928/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run1929 return runner.run(main)1930 ^^^^^^^^^^^^^^^^1931/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run1932 return self._loop.run_until_complete(task)1933 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1934/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete1935 return future.result()1936 ^^^^^^^^^^^^^^^1937nixbot/migrations.py:99: in apply_migrations1938 migrations = load_migrations()1939 ^^^^^^^^^^^^^^^^^1940_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19411942 def load_migrations() -> list[Migration]:1943 """Load migration scripts shipped with the package, ordered by version."""1944 migrations = []1945 for entry in resources.files(__package__).joinpath("migrations").iterdir():1946 m = _SCRIPT_RE.match(entry.name)1947 if m is None:1948 continue1949 migrations.append(1950 Migration(1951 version=int(m.group(1)),1952 name=m.group(2),1953 sql=entry.read_text(),1954 )1955 )1956 migrations.sort(key=lambda mig: mig.version)1957 versions = [m.version for m in migrations]1958 if len(set(versions)) != len(versions):1959 msg = f"Duplicate migration versions: {versions}"1960> raise MigrationError(msg)1961E 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]19621963nixbot/migrations.py:67: MigrationError1964_________ ERROR at setup of test_legacy_import_scopes_topics_per_forge _________1965[gw5] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.1419661967self = <Coroutine test_legacy_import_scopes_topics_per_forge>19681969 def setup(self) -> None:1970 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"1971 if runner_fixture_id not in self.fixturenames:1972 self.fixturenames.append(runner_fixture_id)1973 # When loop factories are configured, resolve the loop factory1974 # fixture early so that a factory variant change cascades cache1975 # invalidation before any async fixture checks its cache.1976 hook_caller = self.config.hook.pytest_asyncio_loop_factories1977 if hook_caller.get_hookimpls():1978 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)1979> return super().setup()1980 ^^^^^^^^^^^^^^^19811982/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 1983_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1984nixbot/tests/conftest.py:33: in postgres_dsn1985 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:1986 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1987/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__1988 return next(self.gen)1989 ^^^^^^^^^^^^^^1990nixbot/tests/support.py:327: in ephemeral_postgres1991 run_sync(apply_migrations(dsn))1992nixbot/tests/support.py:285: in run_sync1993 return executor.submit(asyncio.run, coro).result(timeout=120)1994 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1995/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result1996 return self.__get_result()1997 ^^^^^^^^^^^^^^^^^^^1998/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result1999 raise self._exception2000/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in runloading 20,422 hidden lines…
22423nixbot/migrations.py:67: MigrationError22424______________ ERROR at setup of test_run_recording_and_overview _______________22425[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142242622427self = <Coroutine test_run_recording_and_overview>2242822429 def setup(self) -> None:22430 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22431 if runner_fixture_id not in self.fixturenames:22432 self.fixturenames.append(runner_fixture_id)22433 # When loop factories are configured, resolve the loop factory22434 # fixture early so that a factory variant change cascades cache22435 # invalidation before any async fixture checks its cache.22436 hook_caller = self.config.hook.pytest_asyncio_loop_factories22437 if hook_caller.get_hookimpls():22438 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22439> return super().setup()22440 ^^^^^^^^^^^^^^^2244122442/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22443_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22444nixbot/tests/conftest.py:33: in postgres_dsn22445 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22446 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22447/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22448 return next(self.gen)22449 ^^^^^^^^^^^^^^22450nixbot/tests/support.py:327: in ephemeral_postgres22451 run_sync(apply_migrations(dsn))22452nixbot/tests/support.py:285: in run_sync22453 return executor.submit(asyncio.run, coro).result(timeout=120)22454 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22455/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22456 return self.__get_result()22457 ^^^^^^^^^^^^^^^^^^^22458/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22459 raise self._exception22460/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22461 result = ctx.run(self.task)22462 ^^^^^^^^^^^^^^^^^^22463/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22464 return fn(*args, **kwargs)22465 ^^^^^^^^^^^^^^^^^^^22466/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22467 return runner.run(main)22468 ^^^^^^^^^^^^^^^^22469/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22470 return self._loop.run_until_complete(task)22471 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22472/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22473 return future.result()22474 ^^^^^^^^^^^^^^^22475nixbot/migrations.py:99: in apply_migrations22476 migrations = load_migrations()22477 ^^^^^^^^^^^^^^^^^22478_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2247922480 def load_migrations() -> list[Migration]:22481 """Load migration scripts shipped with the package, ordered by version."""22482 migrations = []22483 for entry in resources.files(__package__).joinpath("migrations").iterdir():22484 m = _SCRIPT_RE.match(entry.name)22485 if m is None:22486 continue22487 migrations.append(22488 Migration(22489 version=int(m.group(1)),22490 name=m.group(2),22491 sql=entry.read_text(),22492 )22493 )22494 migrations.sort(key=lambda mig: mig.version)22495 versions = [m.version for m in migrations]22496 if len(set(versions)) != len(versions):22497 msg = f"Duplicate migration versions: {versions}"22498> raise MigrationError(msg)22499E 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]2250022501nixbot/migrations.py:67: MigrationError22502____________________ ERROR at setup of test_pr_comment_api _____________________22503[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142250422505request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>22506tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2250722508 @pytest.fixture(scope="module")22509 def postgres_dsn(22510 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22511 ) -> Iterator[str]:22512 if shutil.which("initdb") is None:22513 pytest.skip("postgresql not available")22514 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22515> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22516 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2251722518nixbot/tests/conftest.py:33: 22519_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22520/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22521 return next(self.gen)22522 ^^^^^^^^^^^^^^22523nixbot/tests/support.py:327: in ephemeral_postgres22524 run_sync(apply_migrations(dsn))22525nixbot/tests/support.py:285: in run_sync22526 return executor.submit(asyncio.run, coro).result(timeout=120)22527 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22528/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22529 return self.__get_result()22530 ^^^^^^^^^^^^^^^^^^^22531/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22532 raise self._exception22533/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22534 result = ctx.run(self.task)22535 ^^^^^^^^^^^^^^^^^^22536/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22537 return fn(*args, **kwargs)22538 ^^^^^^^^^^^^^^^^^^^22539/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22540 return runner.run(main)22541 ^^^^^^^^^^^^^^^^22542/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22543 return self._loop.run_until_complete(task)22544 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22545/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22546 return future.result()22547 ^^^^^^^^^^^^^^^22548nixbot/migrations.py:99: in apply_migrations22549 migrations = load_migrations()22550 ^^^^^^^^^^^^^^^^^22551_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2255222553 def load_migrations() -> list[Migration]:22554 """Load migration scripts shipped with the package, ordered by version."""22555 migrations = []22556 for entry in resources.files(__package__).joinpath("migrations").iterdir():22557 m = _SCRIPT_RE.match(entry.name)22558 if m is None:22559 continue22560 migrations.append(22561 Migration(22562 version=int(m.group(1)),22563 name=m.group(2),22564 sql=entry.read_text(),22565 )22566 )22567 migrations.sort(key=lambda mig: mig.version)22568 versions = [m.version for m in migrations]22569 if len(set(versions)) != len(versions):22570 msg = f"Duplicate migration versions: {versions}"22571> raise MigrationError(msg)22572E 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]2257322574nixbot/migrations.py:67: MigrationError22575____ ERROR at setup of test_reuse_with_missing_output_still_post_processes _____22576[gw1] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142257722578self = <Coroutine test_reuse_with_missing_output_still_post_processes>2257922580 def setup(self) -> None:22581 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22582 if runner_fixture_id not in self.fixturenames:22583 self.fixturenames.append(runner_fixture_id)22584 # When loop factories are configured, resolve the loop factory22585 # fixture early so that a factory variant change cascades cache22586 # invalidation before any async fixture checks its cache.22587 hook_caller = self.config.hook.pytest_asyncio_loop_factories22588 if hook_caller.get_hookimpls():22589 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22590> return super().setup()22591 ^^^^^^^^^^^^^^^2259222593/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22594_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22595nixbot/tests/conftest.py:33: in postgres_dsn22596 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22597 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22598/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22599 return next(self.gen)22600 ^^^^^^^^^^^^^^22601nixbot/tests/support.py:327: in ephemeral_postgres22602 run_sync(apply_migrations(dsn))22603nixbot/tests/support.py:285: in run_sync22604 return executor.submit(asyncio.run, coro).result(timeout=120)22605 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22606/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22607 return self.__get_result()22608 ^^^^^^^^^^^^^^^^^^^22609/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22610 raise self._exception22611/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22612 result = ctx.run(self.task)22613 ^^^^^^^^^^^^^^^^^^22614/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22615 return fn(*args, **kwargs)22616 ^^^^^^^^^^^^^^^^^^^22617/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22618 return runner.run(main)22619 ^^^^^^^^^^^^^^^^22620/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22621 return self._loop.run_until_complete(task)22622 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22623/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22624 return future.result()22625 ^^^^^^^^^^^^^^^22626nixbot/migrations.py:99: in apply_migrations22627 migrations = load_migrations()22628 ^^^^^^^^^^^^^^^^^22629_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2263022631 def load_migrations() -> list[Migration]:22632 """Load migration scripts shipped with the package, ordered by version."""22633 migrations = []22634 for entry in resources.files(__package__).joinpath("migrations").iterdir():22635 m = _SCRIPT_RE.match(entry.name)22636 if m is None:22637 continue22638 migrations.append(22639 Migration(22640 version=int(m.group(1)),22641 name=m.group(2),22642 sql=entry.read_text(),22643 )22644 )22645 migrations.sort(key=lambda mig: mig.version)22646 versions = [m.version for m in migrations]22647 if len(set(versions)) != len(versions):22648 msg = f"Duplicate migration versions: {versions}"22649> raise MigrationError(msg)22650E 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]2265122652nixbot/migrations.py:67: MigrationError22653_________ ERROR at setup of test_final_upload_reports_and_clears_queue _________22654[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142265522656self = <Coroutine test_final_upload_reports_and_clears_queue>2265722658 def setup(self) -> None:22659 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22660 if runner_fixture_id not in self.fixturenames:22661 self.fixturenames.append(runner_fixture_id)22662 # When loop factories are configured, resolve the loop factory22663 # fixture early so that a factory variant change cascades cache22664 # invalidation before any async fixture checks its cache.22665 hook_caller = self.config.hook.pytest_asyncio_loop_factories22666 if hook_caller.get_hookimpls():22667 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22668> return super().setup()22669 ^^^^^^^^^^^^^^^2267022671/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22672_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22673nixbot/tests/conftest.py:33: in postgres_dsn22674 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22675 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22676/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22677 return next(self.gen)22678 ^^^^^^^^^^^^^^22679nixbot/tests/support.py:327: in ephemeral_postgres22680 run_sync(apply_migrations(dsn))22681nixbot/tests/support.py:285: in run_sync22682 return executor.submit(asyncio.run, coro).result(timeout=120)22683 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22684/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22685 return self.__get_result()22686 ^^^^^^^^^^^^^^^^^^^22687/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22688 raise self._exception22689/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22690 result = ctx.run(self.task)22691 ^^^^^^^^^^^^^^^^^^22692/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22693 return fn(*args, **kwargs)22694 ^^^^^^^^^^^^^^^^^^^22695/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22696 return runner.run(main)22697 ^^^^^^^^^^^^^^^^22698/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22699 return self._loop.run_until_complete(task)22700 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22701/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22702 return future.result()22703 ^^^^^^^^^^^^^^^22704nixbot/migrations.py:99: in apply_migrations22705 migrations = load_migrations()22706 ^^^^^^^^^^^^^^^^^22707_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2270822709 def load_migrations() -> list[Migration]:22710 """Load migration scripts shipped with the package, ordered by version."""22711 migrations = []22712 for entry in resources.files(__package__).joinpath("migrations").iterdir():22713 m = _SCRIPT_RE.match(entry.name)22714 if m is None:22715 continue22716 migrations.append(22717 Migration(22718 version=int(m.group(1)),22719 name=m.group(2),22720 sql=entry.read_text(),22721 )22722 )22723 migrations.sort(key=lambda mig: mig.version)22724 versions = [m.version for m in migrations]22725 if len(set(versions)) != len(versions):22726 msg = f"Duplicate migration versions: {versions}"22727> raise MigrationError(msg)22728E 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]2272922730nixbot/migrations.py:67: MigrationError22731_________________ ERROR at setup of test_workload_identity_api _________________22732[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142273322734request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>22735tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2273622737 @pytest.fixture(scope="module")22738 def postgres_dsn(22739 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22740 ) -> Iterator[str]:22741 if shutil.which("initdb") is None:22742 pytest.skip("postgresql not available")22743 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22744> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22745 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2274622747nixbot/tests/conftest.py:33: 22748_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22749/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22750 return next(self.gen)22751 ^^^^^^^^^^^^^^22752nixbot/tests/support.py:327: in ephemeral_postgres22753 run_sync(apply_migrations(dsn))22754nixbot/tests/support.py:285: in run_sync22755 return executor.submit(asyncio.run, coro).result(timeout=120)22756 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22757/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22758 return self.__get_result()22759 ^^^^^^^^^^^^^^^^^^^22760/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22761 raise self._exception22762/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22763 result = ctx.run(self.task)22764 ^^^^^^^^^^^^^^^^^^22765/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22766 return fn(*args, **kwargs)22767 ^^^^^^^^^^^^^^^^^^^22768/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22769 return runner.run(main)22770 ^^^^^^^^^^^^^^^^22771/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22772 return self._loop.run_until_complete(task)22773 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22774/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22775 return future.result()22776 ^^^^^^^^^^^^^^^22777nixbot/migrations.py:99: in apply_migrations22778 migrations = load_migrations()22779 ^^^^^^^^^^^^^^^^^22780_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2278122782 def load_migrations() -> list[Migration]:22783 """Load migration scripts shipped with the package, ordered by version."""22784 migrations = []22785 for entry in resources.files(__package__).joinpath("migrations").iterdir():22786 m = _SCRIPT_RE.match(entry.name)22787 if m is None:22788 continue22789 migrations.append(22790 Migration(22791 version=int(m.group(1)),22792 name=m.group(2),22793 sql=entry.read_text(),22794 )22795 )22796 migrations.sort(key=lambda mig: mig.version)22797 versions = [m.version for m in migrations]22798 if len(set(versions)) != len(versions):22799 msg = f"Duplicate migration versions: {versions}"22800> raise MigrationError(msg)22801E 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]2280222803nixbot/migrations.py:67: MigrationError22804____ ERROR at setup of test_intermediates_batch_with_final_and_drop_invalid ____22805[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142280622807self = <Coroutine test_intermediates_batch_with_final_and_drop_invalid>2280822809 def setup(self) -> None:22810 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"22811 if runner_fixture_id not in self.fixturenames:22812 self.fixturenames.append(runner_fixture_id)22813 # When loop factories are configured, resolve the loop factory22814 # fixture early so that a factory variant change cascades cache22815 # invalidation before any async fixture checks its cache.22816 hook_caller = self.config.hook.pytest_asyncio_loop_factories22817 if hook_caller.get_hookimpls():22818 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)22819> return super().setup()22820 ^^^^^^^^^^^^^^^2282122822/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 22823_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22824nixbot/tests/conftest.py:33: in postgres_dsn22825 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22826 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22827/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22828 return next(self.gen)22829 ^^^^^^^^^^^^^^22830nixbot/tests/support.py:327: in ephemeral_postgres22831 run_sync(apply_migrations(dsn))22832nixbot/tests/support.py:285: in run_sync22833 return executor.submit(asyncio.run, coro).result(timeout=120)22834 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22835/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22836 return self.__get_result()22837 ^^^^^^^^^^^^^^^^^^^22838/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22839 raise self._exception22840/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22841 result = ctx.run(self.task)22842 ^^^^^^^^^^^^^^^^^^22843/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22844 return fn(*args, **kwargs)22845 ^^^^^^^^^^^^^^^^^^^22846/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22847 return runner.run(main)22848 ^^^^^^^^^^^^^^^^22849/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22850 return self._loop.run_until_complete(task)22851 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22852/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22853 return future.result()22854 ^^^^^^^^^^^^^^^22855nixbot/migrations.py:99: in apply_migrations22856 migrations = load_migrations()22857 ^^^^^^^^^^^^^^^^^22858_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2285922860 def load_migrations() -> list[Migration]:22861 """Load migration scripts shipped with the package, ordered by version."""22862 migrations = []22863 for entry in resources.files(__package__).joinpath("migrations").iterdir():22864 m = _SCRIPT_RE.match(entry.name)22865 if m is None:22866 continue22867 migrations.append(22868 Migration(22869 version=int(m.group(1)),22870 name=m.group(2),22871 sql=entry.read_text(),22872 )22873 )22874 migrations.sort(key=lambda mig: mig.version)22875 versions = [m.version for m in migrations]22876 if len(set(versions)) != len(versions):22877 msg = f"Duplicate migration versions: {versions}"22878> raise MigrationError(msg)22879E 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]2288022881nixbot/migrations.py:67: MigrationError22882_____________ ERROR at setup of test_logout_revokes_session_cookie _____________22883[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142288422885request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>22886tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2288722888 @pytest.fixture(scope="module")22889 def postgres_dsn(22890 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22891 ) -> Iterator[str]:22892 if shutil.which("initdb") is None:22893 pytest.skip("postgresql not available")22894 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22895> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22896 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2289722898nixbot/tests/conftest.py:33: 22899_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22900/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22901 return next(self.gen)22902 ^^^^^^^^^^^^^^22903nixbot/tests/support.py:327: in ephemeral_postgres22904 run_sync(apply_migrations(dsn))22905nixbot/tests/support.py:285: in run_sync22906 return executor.submit(asyncio.run, coro).result(timeout=120)22907 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22908/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22909 return self.__get_result()22910 ^^^^^^^^^^^^^^^^^^^22911/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22912 raise self._exception22913/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22914 result = ctx.run(self.task)22915 ^^^^^^^^^^^^^^^^^^22916/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22917 return fn(*args, **kwargs)22918 ^^^^^^^^^^^^^^^^^^^22919/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22920 return runner.run(main)22921 ^^^^^^^^^^^^^^^^22922/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22923 return self._loop.run_until_complete(task)22924 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22925/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22926 return future.result()22927 ^^^^^^^^^^^^^^^22928nixbot/migrations.py:99: in apply_migrations22929 migrations = load_migrations()22930 ^^^^^^^^^^^^^^^^^22931_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2293222933 def load_migrations() -> list[Migration]:22934 """Load migration scripts shipped with the package, ordered by version."""22935 migrations = []22936 for entry in resources.files(__package__).joinpath("migrations").iterdir():22937 m = _SCRIPT_RE.match(entry.name)22938 if m is None:22939 continue22940 migrations.append(22941 Migration(22942 version=int(m.group(1)),22943 name=m.group(2),22944 sql=entry.read_text(),22945 )22946 )22947 migrations.sort(key=lambda mig: mig.version)22948 versions = [m.version for m in migrations]22949 if len(set(versions)) != len(versions):22950 msg = f"Duplicate migration versions: {versions}"22951> raise MigrationError(msg)22952E 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]2295322954nixbot/migrations.py:67: MigrationError22955______________ ERROR at setup of test_gitlab_nested_group_routes _______________22956[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142295722958request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>22959tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2296022961 @pytest.fixture(scope="module")22962 def postgres_dsn(22963 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory22964 ) -> Iterator[str]:22965 if shutil.which("initdb") is None:22966 pytest.skip("postgresql not available")22967 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")22968> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:22969 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2297022971nixbot/tests/conftest.py:33: 22972_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 22973/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__22974 return next(self.gen)22975 ^^^^^^^^^^^^^^22976nixbot/tests/support.py:327: in ephemeral_postgres22977 run_sync(apply_migrations(dsn))22978nixbot/tests/support.py:285: in run_sync22979 return executor.submit(asyncio.run, coro).result(timeout=120)22980 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22981/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result22982 return self.__get_result()22983 ^^^^^^^^^^^^^^^^^^^22984/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result22985 raise self._exception22986/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run22987 result = ctx.run(self.task)22988 ^^^^^^^^^^^^^^^^^^22989/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run22990 return fn(*args, **kwargs)22991 ^^^^^^^^^^^^^^^^^^^22992/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run22993 return runner.run(main)22994 ^^^^^^^^^^^^^^^^22995/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run22996 return self._loop.run_until_complete(task)22997 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22998/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete22999 return future.result()23000 ^^^^^^^^^^^^^^^23001nixbot/migrations.py:99: in apply_migrations23002 migrations = load_migrations()23003 ^^^^^^^^^^^^^^^^^23004_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2300523006 def load_migrations() -> list[Migration]:23007 """Load migration scripts shipped with the package, ordered by version."""23008 migrations = []23009 for entry in resources.files(__package__).joinpath("migrations").iterdir():23010 m = _SCRIPT_RE.match(entry.name)23011 if m is None:23012 continue23013 migrations.append(23014 Migration(23015 version=int(m.group(1)),23016 name=m.group(2),23017 sql=entry.read_text(),23018 )23019 )23020 migrations.sort(key=lambda mig: mig.version)23021 versions = [m.version for m in migrations]23022 if len(set(versions)) != len(versions):23023 msg = f"Duplicate migration versions: {versions}"23024> raise MigrationError(msg)23025E 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]2302623027nixbot/migrations.py:67: MigrationError23028______________________ ERROR at setup of test_stdin_mode _______________________23029[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142303023031self = <Coroutine test_stdin_mode>2303223033 def setup(self) -> None:23034 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23035 if runner_fixture_id not in self.fixturenames:23036 self.fixturenames.append(runner_fixture_id)23037 # When loop factories are configured, resolve the loop factory23038 # fixture early so that a factory variant change cascades cache23039 # invalidation before any async fixture checks its cache.23040 hook_caller = self.config.hook.pytest_asyncio_loop_factories23041 if hook_caller.get_hookimpls():23042 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23043> return super().setup()23044 ^^^^^^^^^^^^^^^2304523046/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23047_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23048nixbot/tests/conftest.py:33: in postgres_dsn23049 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23050 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23051/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23052 return next(self.gen)23053 ^^^^^^^^^^^^^^23054nixbot/tests/support.py:327: in ephemeral_postgres23055 run_sync(apply_migrations(dsn))23056nixbot/tests/support.py:285: in run_sync23057 return executor.submit(asyncio.run, coro).result(timeout=120)23058 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23059/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23060 return self.__get_result()23061 ^^^^^^^^^^^^^^^^^^^23062/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23063 raise self._exception23064/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23065 result = ctx.run(self.task)23066 ^^^^^^^^^^^^^^^^^^23067/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23068 return fn(*args, **kwargs)23069 ^^^^^^^^^^^^^^^^^^^23070/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23071 return runner.run(main)23072 ^^^^^^^^^^^^^^^^23073/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23074 return self._loop.run_until_complete(task)23075 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23076/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23077 return future.result()23078 ^^^^^^^^^^^^^^^23079nixbot/migrations.py:99: in apply_migrations23080 migrations = load_migrations()23081 ^^^^^^^^^^^^^^^^^23082_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2308323084 def load_migrations() -> list[Migration]:23085 """Load migration scripts shipped with the package, ordered by version."""23086 migrations = []23087 for entry in resources.files(__package__).joinpath("migrations").iterdir():23088 m = _SCRIPT_RE.match(entry.name)23089 if m is None:23090 continue23091 migrations.append(23092 Migration(23093 version=int(m.group(1)),23094 name=m.group(2),23095 sql=entry.read_text(),23096 )23097 )23098 migrations.sort(key=lambda mig: mig.version)23099 versions = [m.version for m in migrations]23100 if len(set(versions)) != len(versions):23101 msg = f"Duplicate migration versions: {versions}"23102> raise MigrationError(msg)23103E 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]2310423105nixbot/migrations.py:67: MigrationError23106___________ ERROR at setup of test_scheduled_run_viewer_renders_ansi ___________23107[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142310823109request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23110tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2311123112 @pytest.fixture(scope="module")23113 def postgres_dsn(23114 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23115 ) -> Iterator[str]:23116 if shutil.which("initdb") is None:23117 pytest.skip("postgresql not available")23118 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23119> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23120 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2312123122nixbot/tests/conftest.py:33: 23123_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23124/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23125 return next(self.gen)23126 ^^^^^^^^^^^^^^23127nixbot/tests/support.py:327: in ephemeral_postgres23128 run_sync(apply_migrations(dsn))23129nixbot/tests/support.py:285: in run_sync23130 return executor.submit(asyncio.run, coro).result(timeout=120)23131 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23132/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23133 return self.__get_result()23134 ^^^^^^^^^^^^^^^^^^^23135/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23136 raise self._exception23137/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23138 result = ctx.run(self.task)23139 ^^^^^^^^^^^^^^^^^^23140/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23141 return fn(*args, **kwargs)23142 ^^^^^^^^^^^^^^^^^^^23143/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23144 return runner.run(main)23145 ^^^^^^^^^^^^^^^^23146/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23147 return self._loop.run_until_complete(task)23148 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23149/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23150 return future.result()23151 ^^^^^^^^^^^^^^^23152nixbot/migrations.py:99: in apply_migrations23153 migrations = load_migrations()23154 ^^^^^^^^^^^^^^^^^23155_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2315623157 def load_migrations() -> list[Migration]:23158 """Load migration scripts shipped with the package, ordered by version."""23159 migrations = []23160 for entry in resources.files(__package__).joinpath("migrations").iterdir():23161 m = _SCRIPT_RE.match(entry.name)23162 if m is None:23163 continue23164 migrations.append(23165 Migration(23166 version=int(m.group(1)),23167 name=m.group(2),23168 sql=entry.read_text(),23169 )23170 )23171 migrations.sort(key=lambda mig: mig.version)23172 versions = [m.version for m in migrations]23173 if len(set(versions)) != len(versions):23174 msg = f"Duplicate migration versions: {versions}"23175> raise MigrationError(msg)23176E 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]2317723178nixbot/migrations.py:67: MigrationError23179_____________ ERROR at setup of test_pending_paths_survive_restart _____________23180[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142318123182self = <Coroutine test_pending_paths_survive_restart>2318323184 def setup(self) -> None:23185 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23186 if runner_fixture_id not in self.fixturenames:23187 self.fixturenames.append(runner_fixture_id)23188 # When loop factories are configured, resolve the loop factory23189 # fixture early so that a factory variant change cascades cache23190 # invalidation before any async fixture checks its cache.23191 hook_caller = self.config.hook.pytest_asyncio_loop_factories23192 if hook_caller.get_hookimpls():23193 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23194> return super().setup()23195 ^^^^^^^^^^^^^^^2319623197/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23198_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23199nixbot/tests/conftest.py:33: in postgres_dsn23200 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23201 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23202/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23203 return next(self.gen)23204 ^^^^^^^^^^^^^^23205nixbot/tests/support.py:327: in ephemeral_postgres23206 run_sync(apply_migrations(dsn))23207nixbot/tests/support.py:285: in run_sync23208 return executor.submit(asyncio.run, coro).result(timeout=120)23209 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23210/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23211 return self.__get_result()23212 ^^^^^^^^^^^^^^^^^^^23213/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23214 raise self._exception23215/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23216 result = ctx.run(self.task)23217 ^^^^^^^^^^^^^^^^^^23218/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23219 return fn(*args, **kwargs)23220 ^^^^^^^^^^^^^^^^^^^23221/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23222 return runner.run(main)23223 ^^^^^^^^^^^^^^^^23224/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23225 return self._loop.run_until_complete(task)23226 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23227/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23228 return future.result()23229 ^^^^^^^^^^^^^^^23230nixbot/migrations.py:99: in apply_migrations23231 migrations = load_migrations()23232 ^^^^^^^^^^^^^^^^^23233_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2323423235 def load_migrations() -> list[Migration]:23236 """Load migration scripts shipped with the package, ordered by version."""23237 migrations = []23238 for entry in resources.files(__package__).joinpath("migrations").iterdir():23239 m = _SCRIPT_RE.match(entry.name)23240 if m is None:23241 continue23242 migrations.append(23243 Migration(23244 version=int(m.group(1)),23245 name=m.group(2),23246 sql=entry.read_text(),23247 )23248 )23249 migrations.sort(key=lambda mig: mig.version)23250 versions = [m.version for m in migrations]23251 if len(set(versions)) != len(versions):23252 msg = f"Duplicate migration versions: {versions}"23253> raise MigrationError(msg)23254E 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]2325523256nixbot/migrations.py:67: MigrationError23257________ ERROR at setup of test_scheduled_run_viewer_cross_project_404 _________23258[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142325923260request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23261tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2326223263 @pytest.fixture(scope="module")23264 def postgres_dsn(23265 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23266 ) -> Iterator[str]:23267 if shutil.which("initdb") is None:23268 pytest.skip("postgresql not available")23269 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23270> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23271 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2327223273nixbot/tests/conftest.py:33: 23274_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23275/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23276 return next(self.gen)23277 ^^^^^^^^^^^^^^23278nixbot/tests/support.py:327: in ephemeral_postgres23279 run_sync(apply_migrations(dsn))23280nixbot/tests/support.py:285: in run_sync23281 return executor.submit(asyncio.run, coro).result(timeout=120)23282 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23283/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23284 return self.__get_result()23285 ^^^^^^^^^^^^^^^^^^^23286/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23287 raise self._exception23288/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23289 result = ctx.run(self.task)23290 ^^^^^^^^^^^^^^^^^^23291/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23292 return fn(*args, **kwargs)23293 ^^^^^^^^^^^^^^^^^^^23294/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23295 return runner.run(main)23296 ^^^^^^^^^^^^^^^^23297/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23298 return self._loop.run_until_complete(task)23299 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23300/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23301 return future.result()23302 ^^^^^^^^^^^^^^^23303nixbot/migrations.py:99: in apply_migrations23304 migrations = load_migrations()23305 ^^^^^^^^^^^^^^^^^23306_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2330723308 def load_migrations() -> list[Migration]:23309 """Load migration scripts shipped with the package, ordered by version."""23310 migrations = []23311 for entry in resources.files(__package__).joinpath("migrations").iterdir():23312 m = _SCRIPT_RE.match(entry.name)23313 if m is None:23314 continue23315 migrations.append(23316 Migration(23317 version=int(m.group(1)),23318 name=m.group(2),23319 sql=entry.read_text(),23320 )23321 )23322 migrations.sort(key=lambda mig: mig.version)23323 versions = [m.version for m in migrations]23324 if len(set(versions)) != len(versions):23325 msg = f"Duplicate migration versions: {versions}"23326> raise MigrationError(msg)23327E 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]2332823329nixbot/migrations.py:67: MigrationError23330_____________ ERROR at setup of test_uploader_factory_picks_stream _____________23331[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142333223333request = <SubRequest 'postgres_dsn' for <Function test_chunk_args_splits_on_byte_limit>>23334tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all')2333523336 @pytest.fixture(scope="module")23337 def postgres_dsn(23338 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23339 ) -> Iterator[str]:23340 if shutil.which("initdb") is None:23341 pytest.skip("postgresql not available")23342 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23343> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23344 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2334523346nixbot/tests/conftest.py:33: 23347_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23348/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23349 return next(self.gen)23350 ^^^^^^^^^^^^^^23351nixbot/tests/support.py:327: in ephemeral_postgres23352 run_sync(apply_migrations(dsn))23353nixbot/tests/support.py:285: in run_sync23354 return executor.submit(asyncio.run, coro).result(timeout=120)23355 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23356/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23357 return self.__get_result()23358 ^^^^^^^^^^^^^^^^^^^23359/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23360 raise self._exception23361/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23362 result = ctx.run(self.task)23363 ^^^^^^^^^^^^^^^^^^23364/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23365 return fn(*args, **kwargs)23366 ^^^^^^^^^^^^^^^^^^^23367/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23368 return runner.run(main)23369 ^^^^^^^^^^^^^^^^23370/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23371 return self._loop.run_until_complete(task)23372 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23373/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23374 return future.result()23375 ^^^^^^^^^^^^^^^23376nixbot/migrations.py:99: in apply_migrations23377 migrations = load_migrations()23378 ^^^^^^^^^^^^^^^^^23379_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2338023381 def load_migrations() -> list[Migration]:23382 """Load migration scripts shipped with the package, ordered by version."""23383 migrations = []23384 for entry in resources.files(__package__).joinpath("migrations").iterdir():23385 m = _SCRIPT_RE.match(entry.name)23386 if m is None:23387 continue23388 migrations.append(23389 Migration(23390 version=int(m.group(1)),23391 name=m.group(2),23392 sql=entry.read_text(),23393 )23394 )23395 migrations.sort(key=lambda mig: mig.version)23396 versions = [m.version for m in migrations]23397 if len(set(versions)) != len(versions):23398 msg = f"Duplicate migration versions: {versions}"23399> raise MigrationError(msg)23400E 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]2340123402nixbot/migrations.py:67: MigrationError23403_______ ERROR at setup of test_scheduled_run_log_unavailable_placeholder _______23404[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142340523406request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23407tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2340823409 @pytest.fixture(scope="module")23410 def postgres_dsn(23411 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23412 ) -> Iterator[str]:23413 if shutil.which("initdb") is None:23414 pytest.skip("postgresql not available")23415 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23416> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23417 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2341823419nixbot/tests/conftest.py:33: 23420_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23421/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23422 return next(self.gen)23423 ^^^^^^^^^^^^^^23424nixbot/tests/support.py:327: in ephemeral_postgres23425 run_sync(apply_migrations(dsn))23426nixbot/tests/support.py:285: in run_sync23427 return executor.submit(asyncio.run, coro).result(timeout=120)23428 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23429/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23430 return self.__get_result()23431 ^^^^^^^^^^^^^^^^^^^23432/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23433 raise self._exception23434/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23435 result = ctx.run(self.task)23436 ^^^^^^^^^^^^^^^^^^23437/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23438 return fn(*args, **kwargs)23439 ^^^^^^^^^^^^^^^^^^^23440/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23441 return runner.run(main)23442 ^^^^^^^^^^^^^^^^23443/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23444 return self._loop.run_until_complete(task)23445 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23446/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23447 return future.result()23448 ^^^^^^^^^^^^^^^23449nixbot/migrations.py:99: in apply_migrations23450 migrations = load_migrations()23451 ^^^^^^^^^^^^^^^^^23452_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2345323454 def load_migrations() -> list[Migration]:23455 """Load migration scripts shipped with the package, ordered by version."""23456 migrations = []23457 for entry in resources.files(__package__).joinpath("migrations").iterdir():23458 m = _SCRIPT_RE.match(entry.name)23459 if m is None:23460 continue23461 migrations.append(23462 Migration(23463 version=int(m.group(1)),23464 name=m.group(2),23465 sql=entry.read_text(),23466 )23467 )23468 migrations.sort(key=lambda mig: mig.version)23469 versions = [m.version for m in migrations]23470 if len(set(versions)) != len(versions):23471 msg = f"Duplicate migration versions: {versions}"23472> raise MigrationError(msg)23473E 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]2347423475nixbot/migrations.py:67: MigrationError23476_______ ERROR at setup of test_stream_reports_per_path_and_clears_queue ________23477[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142347823479self = <Coroutine test_stream_reports_per_path_and_clears_queue>2348023481 def setup(self) -> None:23482 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23483 if runner_fixture_id not in self.fixturenames:23484 self.fixturenames.append(runner_fixture_id)23485 # When loop factories are configured, resolve the loop factory23486 # fixture early so that a factory variant change cascades cache23487 # invalidation before any async fixture checks its cache.23488 hook_caller = self.config.hook.pytest_asyncio_loop_factories23489 if hook_caller.get_hookimpls():23490 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23491> return super().setup()23492 ^^^^^^^^^^^^^^^2349323494/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23495_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23496nixbot/tests/conftest.py:33: in postgres_dsn23497 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23498 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23499/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23500 return next(self.gen)23501 ^^^^^^^^^^^^^^23502nixbot/tests/support.py:327: in ephemeral_postgres23503 run_sync(apply_migrations(dsn))23504nixbot/tests/support.py:285: in run_sync23505 return executor.submit(asyncio.run, coro).result(timeout=120)23506 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23507/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23508 return self.__get_result()23509 ^^^^^^^^^^^^^^^^^^^23510/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23511 raise self._exception23512/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23513 result = ctx.run(self.task)23514 ^^^^^^^^^^^^^^^^^^23515/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23516 return fn(*args, **kwargs)23517 ^^^^^^^^^^^^^^^^^^^23518/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23519 return runner.run(main)23520 ^^^^^^^^^^^^^^^^23521/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23522 return self._loop.run_until_complete(task)23523 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23524/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23525 return future.result()23526 ^^^^^^^^^^^^^^^23527nixbot/migrations.py:99: in apply_migrations23528 migrations = load_migrations()23529 ^^^^^^^^^^^^^^^^^23530_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2353123532 def load_migrations() -> list[Migration]:23533 """Load migration scripts shipped with the package, ordered by version."""23534 migrations = []23535 for entry in resources.files(__package__).joinpath("migrations").iterdir():23536 m = _SCRIPT_RE.match(entry.name)23537 if m is None:23538 continue23539 migrations.append(23540 Migration(23541 version=int(m.group(1)),23542 name=m.group(2),23543 sql=entry.read_text(),23544 )23545 )23546 migrations.sort(key=lambda mig: mig.version)23547 versions = [m.version for m in migrations]23548 if len(set(versions)) != len(versions):23549 msg = f"Duplicate migration versions: {versions}"23550> raise MigrationError(msg)23551E 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]2355223553nixbot/migrations.py:67: MigrationError23554________ ERROR at setup of test_scheduled_run_viewer_waiting_before_log ________23555[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142355623557request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23558tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2355923560 @pytest.fixture(scope="module")23561 def postgres_dsn(23562 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23563 ) -> Iterator[str]:23564 if shutil.which("initdb") is None:23565 pytest.skip("postgresql not available")23566 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23567> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23568 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2356923570nixbot/tests/conftest.py:33: 23571_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23572/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23573 return next(self.gen)23574 ^^^^^^^^^^^^^^23575nixbot/tests/support.py:327: in ephemeral_postgres23576 run_sync(apply_migrations(dsn))23577nixbot/tests/support.py:285: in run_sync23578 return executor.submit(asyncio.run, coro).result(timeout=120)23579 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23580/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23581 return self.__get_result()23582 ^^^^^^^^^^^^^^^^^^^23583/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23584 raise self._exception23585/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23586 result = ctx.run(self.task)23587 ^^^^^^^^^^^^^^^^^^23588/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23589 return fn(*args, **kwargs)23590 ^^^^^^^^^^^^^^^^^^^23591/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23592 return runner.run(main)23593 ^^^^^^^^^^^^^^^^23594/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23595 return self._loop.run_until_complete(task)23596 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23597/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23598 return future.result()23599 ^^^^^^^^^^^^^^^23600nixbot/migrations.py:99: in apply_migrations23601 migrations = load_migrations()23602 ^^^^^^^^^^^^^^^^^23603_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2360423605 def load_migrations() -> list[Migration]:23606 """Load migration scripts shipped with the package, ordered by version."""23607 migrations = []23608 for entry in resources.files(__package__).joinpath("migrations").iterdir():23609 m = _SCRIPT_RE.match(entry.name)23610 if m is None:23611 continue23612 migrations.append(23613 Migration(23614 version=int(m.group(1)),23615 name=m.group(2),23616 sql=entry.read_text(),23617 )23618 )23619 migrations.sort(key=lambda mig: mig.version)23620 versions = [m.version for m in migrations]23621 if len(set(versions)) != len(versions):23622 msg = f"Duplicate migration versions: {versions}"23623> raise MigrationError(msg)23624E 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]2362523626nixbot/migrations.py:67: MigrationError23627_________ ERROR at setup of test_stream_error_is_reported_with_message _________23628[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142362923630self = <Coroutine test_stream_error_is_reported_with_message>2363123632 def setup(self) -> None:23633 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23634 if runner_fixture_id not in self.fixturenames:23635 self.fixturenames.append(runner_fixture_id)23636 # When loop factories are configured, resolve the loop factory23637 # fixture early so that a factory variant change cascades cache23638 # invalidation before any async fixture checks its cache.23639 hook_caller = self.config.hook.pytest_asyncio_loop_factories23640 if hook_caller.get_hookimpls():23641 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23642> return super().setup()23643 ^^^^^^^^^^^^^^^2364423645/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23646_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23647nixbot/tests/conftest.py:33: in postgres_dsn23648 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23649 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23650/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23651 return next(self.gen)23652 ^^^^^^^^^^^^^^23653nixbot/tests/support.py:327: in ephemeral_postgres23654 run_sync(apply_migrations(dsn))23655nixbot/tests/support.py:285: in run_sync23656 return executor.submit(asyncio.run, coro).result(timeout=120)23657 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23658/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23659 return self.__get_result()23660 ^^^^^^^^^^^^^^^^^^^23661/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23662 raise self._exception23663/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23664 result = ctx.run(self.task)23665 ^^^^^^^^^^^^^^^^^^23666/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23667 return fn(*args, **kwargs)23668 ^^^^^^^^^^^^^^^^^^^23669/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23670 return runner.run(main)23671 ^^^^^^^^^^^^^^^^23672/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23673 return self._loop.run_until_complete(task)23674 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23675/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23676 return future.result()23677 ^^^^^^^^^^^^^^^23678nixbot/migrations.py:99: in apply_migrations23679 migrations = load_migrations()23680 ^^^^^^^^^^^^^^^^^23681_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2368223683 def load_migrations() -> list[Migration]:23684 """Load migration scripts shipped with the package, ordered by version."""23685 migrations = []23686 for entry in resources.files(__package__).joinpath("migrations").iterdir():23687 m = _SCRIPT_RE.match(entry.name)23688 if m is None:23689 continue23690 migrations.append(23691 Migration(23692 version=int(m.group(1)),23693 name=m.group(2),23694 sql=entry.read_text(),23695 )23696 )23697 migrations.sort(key=lambda mig: mig.version)23698 versions = [m.version for m in migrations]23699 if len(set(versions)) != len(versions):23700 msg = f"Duplicate migration versions: {versions}"23701> raise MigrationError(msg)23702E 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]2370323704nixbot/migrations.py:67: MigrationError23705___________ ERROR at setup of test_scheduled_run_history_lists_runs ____________23706[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142370723708request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23709tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2371023711 @pytest.fixture(scope="module")23712 def postgres_dsn(23713 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23714 ) -> Iterator[str]:23715 if shutil.which("initdb") is None:23716 pytest.skip("postgresql not available")23717 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23718> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23719 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2372023721nixbot/tests/conftest.py:33: 23722_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23723/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23724 return next(self.gen)23725 ^^^^^^^^^^^^^^23726nixbot/tests/support.py:327: in ephemeral_postgres23727 run_sync(apply_migrations(dsn))23728nixbot/tests/support.py:285: in run_sync23729 return executor.submit(asyncio.run, coro).result(timeout=120)23730 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23731/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23732 return self.__get_result()23733 ^^^^^^^^^^^^^^^^^^^23734/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23735 raise self._exception23736/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23737 result = ctx.run(self.task)23738 ^^^^^^^^^^^^^^^^^^23739/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23740 return fn(*args, **kwargs)23741 ^^^^^^^^^^^^^^^^^^^23742/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23743 return runner.run(main)23744 ^^^^^^^^^^^^^^^^23745/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23746 return self._loop.run_until_complete(task)23747 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23748/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23749 return future.result()23750 ^^^^^^^^^^^^^^^23751nixbot/migrations.py:99: in apply_migrations23752 migrations = load_migrations()23753 ^^^^^^^^^^^^^^^^^23754_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2375523756 def load_migrations() -> list[Migration]:23757 """Load migration scripts shipped with the package, ordered by version."""23758 migrations = []23759 for entry in resources.files(__package__).joinpath("migrations").iterdir():23760 m = _SCRIPT_RE.match(entry.name)23761 if m is None:23762 continue23763 migrations.append(23764 Migration(23765 version=int(m.group(1)),23766 name=m.group(2),23767 sql=entry.read_text(),23768 )23769 )23770 migrations.sort(key=lambda mig: mig.version)23771 versions = [m.version for m in migrations]23772 if len(set(versions)) != len(versions):23773 msg = f"Duplicate migration versions: {versions}"23774> raise MigrationError(msg)23775E 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]2377623777nixbot/migrations.py:67: MigrationError23778__________ ERROR at setup of test_stream_child_crash_refeeds_pending ___________23779[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142378023781self = <Coroutine test_stream_child_crash_refeeds_pending>2378223783 def setup(self) -> None:23784 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23785 if runner_fixture_id not in self.fixturenames:23786 self.fixturenames.append(runner_fixture_id)23787 # When loop factories are configured, resolve the loop factory23788 # fixture early so that a factory variant change cascades cache23789 # invalidation before any async fixture checks its cache.23790 hook_caller = self.config.hook.pytest_asyncio_loop_factories23791 if hook_caller.get_hookimpls():23792 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23793> return super().setup()23794 ^^^^^^^^^^^^^^^2379523796/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23797_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23798nixbot/tests/conftest.py:33: in postgres_dsn23799 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23800 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23801/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23802 return next(self.gen)23803 ^^^^^^^^^^^^^^23804nixbot/tests/support.py:327: in ephemeral_postgres23805 run_sync(apply_migrations(dsn))23806nixbot/tests/support.py:285: in run_sync23807 return executor.submit(asyncio.run, coro).result(timeout=120)23808 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23809/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23810 return self.__get_result()23811 ^^^^^^^^^^^^^^^^^^^23812/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23813 raise self._exception23814/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23815 result = ctx.run(self.task)23816 ^^^^^^^^^^^^^^^^^^23817/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23818 return fn(*args, **kwargs)23819 ^^^^^^^^^^^^^^^^^^^23820/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23821 return runner.run(main)23822 ^^^^^^^^^^^^^^^^23823/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23824 return self._loop.run_until_complete(task)23825 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23826/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23827 return future.result()23828 ^^^^^^^^^^^^^^^23829nixbot/migrations.py:99: in apply_migrations23830 migrations = load_migrations()23831 ^^^^^^^^^^^^^^^^^23832_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2383323834 def load_migrations() -> list[Migration]:23835 """Load migration scripts shipped with the package, ordered by version."""23836 migrations = []23837 for entry in resources.files(__package__).joinpath("migrations").iterdir():23838 m = _SCRIPT_RE.match(entry.name)23839 if m is None:23840 continue23841 migrations.append(23842 Migration(23843 version=int(m.group(1)),23844 name=m.group(2),23845 sql=entry.read_text(),23846 )23847 )23848 migrations.sort(key=lambda mig: mig.version)23849 versions = [m.version for m in migrations]23850 if len(set(versions)) != len(versions):23851 msg = f"Duplicate migration versions: {versions}"23852> raise MigrationError(msg)23853E 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]2385423855nixbot/migrations.py:67: MigrationError23856__________ ERROR at setup of test_scheduled_run_history_special_chars __________23857[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142385823859request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>23860tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2386123862 @pytest.fixture(scope="module")23863 def postgres_dsn(23864 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory23865 ) -> Iterator[str]:23866 if shutil.which("initdb") is None:23867 pytest.skip("postgresql not available")23868 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")23869> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23870 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2387123872nixbot/tests/conftest.py:33: 23873_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23874/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23875 return next(self.gen)23876 ^^^^^^^^^^^^^^23877nixbot/tests/support.py:327: in ephemeral_postgres23878 run_sync(apply_migrations(dsn))23879nixbot/tests/support.py:285: in run_sync23880 return executor.submit(asyncio.run, coro).result(timeout=120)23881 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23882/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23883 return self.__get_result()23884 ^^^^^^^^^^^^^^^^^^^23885/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23886 raise self._exception23887/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23888 result = ctx.run(self.task)23889 ^^^^^^^^^^^^^^^^^^23890/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23891 return fn(*args, **kwargs)23892 ^^^^^^^^^^^^^^^^^^^23893/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23894 return runner.run(main)23895 ^^^^^^^^^^^^^^^^23896/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23897 return self._loop.run_until_complete(task)23898 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23899/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23900 return future.result()23901 ^^^^^^^^^^^^^^^23902nixbot/migrations.py:99: in apply_migrations23903 migrations = load_migrations()23904 ^^^^^^^^^^^^^^^^^23905_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2390623907 def load_migrations() -> list[Migration]:23908 """Load migration scripts shipped with the package, ordered by version."""23909 migrations = []23910 for entry in resources.files(__package__).joinpath("migrations").iterdir():23911 m = _SCRIPT_RE.match(entry.name)23912 if m is None:23913 continue23914 migrations.append(23915 Migration(23916 version=int(m.group(1)),23917 name=m.group(2),23918 sql=entry.read_text(),23919 )23920 )23921 migrations.sort(key=lambda mig: mig.version)23922 versions = [m.version for m in migrations]23923 if len(set(versions)) != len(versions):23924 msg = f"Duplicate migration versions: {versions}"23925> raise MigrationError(msg)23926E 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]2392723928nixbot/migrations.py:67: MigrationError23929_________ ERROR at setup of test_failure_reports_retries_and_gives_up __________23930[gw4] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142393123932self = <Coroutine test_failure_reports_retries_and_gives_up>2393323934 def setup(self) -> None:23935 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"23936 if runner_fixture_id not in self.fixturenames:23937 self.fixturenames.append(runner_fixture_id)23938 # When loop factories are configured, resolve the loop factory23939 # fixture early so that a factory variant change cascades cache23940 # invalidation before any async fixture checks its cache.23941 hook_caller = self.config.hook.pytest_asyncio_loop_factories23942 if hook_caller.get_hookimpls():23943 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)23944> return super().setup()23945 ^^^^^^^^^^^^^^^2394623947/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 23948_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 23949nixbot/tests/conftest.py:33: in postgres_dsn23950 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:23951 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23952/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__23953 return next(self.gen)23954 ^^^^^^^^^^^^^^23955nixbot/tests/support.py:327: in ephemeral_postgres23956 run_sync(apply_migrations(dsn))23957nixbot/tests/support.py:285: in run_sync23958 return executor.submit(asyncio.run, coro).result(timeout=120)23959 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23960/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result23961 return self.__get_result()23962 ^^^^^^^^^^^^^^^^^^^23963/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result23964 raise self._exception23965/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run23966 result = ctx.run(self.task)23967 ^^^^^^^^^^^^^^^^^^23968/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run23969 return fn(*args, **kwargs)23970 ^^^^^^^^^^^^^^^^^^^23971/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run23972 return runner.run(main)23973 ^^^^^^^^^^^^^^^^23974/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run23975 return self._loop.run_until_complete(task)23976 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^23977/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete23978 return future.result()23979 ^^^^^^^^^^^^^^^23980nixbot/migrations.py:99: in apply_migrations23981 migrations = load_migrations()23982 ^^^^^^^^^^^^^^^^^23983_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2398423985 def load_migrations() -> list[Migration]:23986 """Load migration scripts shipped with the package, ordered by version."""23987 migrations = []23988 for entry in resources.files(__package__).joinpath("migrations").iterdir():23989 m = _SCRIPT_RE.match(entry.name)23990 if m is None:23991 continue23992 migrations.append(23993 Migration(23994 version=int(m.group(1)),23995 name=m.group(2),23996 sql=entry.read_text(),23997 )23998 )23999 migrations.sort(key=lambda mig: mig.version)24000 versions = [m.version for m in migrations]24001 if len(set(versions)) != len(versions):24002 msg = f"Duplicate migration versions: {versions}"24003> raise MigrationError(msg)24004E 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]2400524006nixbot/migrations.py:67: MigrationError24007_________ ERROR at setup of test_scheduled_run_stream_replays_history __________24008[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142400924010request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24011tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2401224013 @pytest.fixture(scope="module")24014 def postgres_dsn(24015 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24016 ) -> Iterator[str]:24017 if shutil.which("initdb") is None:24018 pytest.skip("postgresql not available")24019 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24020> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24021 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2402224023nixbot/tests/conftest.py:33: 24024_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24025/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24026 return next(self.gen)24027 ^^^^^^^^^^^^^^24028nixbot/tests/support.py:327: in ephemeral_postgres24029 run_sync(apply_migrations(dsn))24030nixbot/tests/support.py:285: in run_sync24031 return executor.submit(asyncio.run, coro).result(timeout=120)24032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24033/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24034 return self.__get_result()24035 ^^^^^^^^^^^^^^^^^^^24036/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24037 raise self._exception24038/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24039 result = ctx.run(self.task)24040 ^^^^^^^^^^^^^^^^^^24041/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24042 return fn(*args, **kwargs)24043 ^^^^^^^^^^^^^^^^^^^24044/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24045 return runner.run(main)24046 ^^^^^^^^^^^^^^^^24047/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24048 return self._loop.run_until_complete(task)24049 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24050/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24051 return future.result()24052 ^^^^^^^^^^^^^^^24053nixbot/migrations.py:99: in apply_migrations24054 migrations = load_migrations()24055 ^^^^^^^^^^^^^^^^^24056_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2405724058 def load_migrations() -> list[Migration]:24059 """Load migration scripts shipped with the package, ordered by version."""24060 migrations = []24061 for entry in resources.files(__package__).joinpath("migrations").iterdir():24062 m = _SCRIPT_RE.match(entry.name)24063 if m is None:24064 continue24065 migrations.append(24066 Migration(24067 version=int(m.group(1)),24068 name=m.group(2),24069 sql=entry.read_text(),24070 )24071 )24072 migrations.sort(key=lambda mig: mig.version)24073 versions = [m.version for m in migrations]24074 if len(set(versions)) != len(versions):24075 msg = f"Duplicate migration versions: {versions}"24076> raise MigrationError(msg)24077E 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]2407824079nixbot/migrations.py:67: MigrationError24080___________ ERROR at setup of test_scheduled_run_notify_build_events ___________24081[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142408224083request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24084tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2408524086 @pytest.fixture(scope="module")24087 def postgres_dsn(24088 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24089 ) -> Iterator[str]:24090 if shutil.which("initdb") is None:24091 pytest.skip("postgresql not available")24092 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24093> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24094 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2409524096nixbot/tests/conftest.py:33: 24097_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24098/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24099 return next(self.gen)24100 ^^^^^^^^^^^^^^24101nixbot/tests/support.py:327: in ephemeral_postgres24102 run_sync(apply_migrations(dsn))24103nixbot/tests/support.py:285: in run_sync24104 return executor.submit(asyncio.run, coro).result(timeout=120)24105 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24106/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24107 return self.__get_result()24108 ^^^^^^^^^^^^^^^^^^^24109/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24110 raise self._exception24111/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24112 result = ctx.run(self.task)24113 ^^^^^^^^^^^^^^^^^^24114/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24115 return fn(*args, **kwargs)24116 ^^^^^^^^^^^^^^^^^^^24117/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24118 return runner.run(main)24119 ^^^^^^^^^^^^^^^^24120/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24121 return self._loop.run_until_complete(task)24122 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24123/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24124 return future.result()24125 ^^^^^^^^^^^^^^^24126nixbot/migrations.py:99: in apply_migrations24127 migrations = load_migrations()24128 ^^^^^^^^^^^^^^^^^24129_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2413024131 def load_migrations() -> list[Migration]:24132 """Load migration scripts shipped with the package, ordered by version."""24133 migrations = []24134 for entry in resources.files(__package__).joinpath("migrations").iterdir():24135 m = _SCRIPT_RE.match(entry.name)24136 if m is None:24137 continue24138 migrations.append(24139 Migration(24140 version=int(m.group(1)),24141 name=m.group(2),24142 sql=entry.read_text(),24143 )24144 )24145 migrations.sort(key=lambda mig: mig.version)24146 versions = [m.version for m in migrations]24147 if len(set(versions)) != len(versions):24148 msg = f"Duplicate migration versions: {versions}"24149> raise MigrationError(msg)24150E 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]2415124152nixbot/migrations.py:67: MigrationError24153_________________ ERROR at setup of test_api_log_toc_and_text __________________24154[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142415524156request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24157tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2415824159 @pytest.fixture(scope="module")24160 def postgres_dsn(24161 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24162 ) -> Iterator[str]:24163 if shutil.which("initdb") is None:24164 pytest.skip("postgresql not available")24165 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24166> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24167 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2416824169nixbot/tests/conftest.py:33: 24170_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24171/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24172 return next(self.gen)24173 ^^^^^^^^^^^^^^24174nixbot/tests/support.py:327: in ephemeral_postgres24175 run_sync(apply_migrations(dsn))24176nixbot/tests/support.py:285: in run_sync24177 return executor.submit(asyncio.run, coro).result(timeout=120)24178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24179/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24180 return self.__get_result()24181 ^^^^^^^^^^^^^^^^^^^24182/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24183 raise self._exception24184/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24185 result = ctx.run(self.task)24186 ^^^^^^^^^^^^^^^^^^24187/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24188 return fn(*args, **kwargs)24189 ^^^^^^^^^^^^^^^^^^^24190/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24191 return runner.run(main)24192 ^^^^^^^^^^^^^^^^24193/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24194 return self._loop.run_until_complete(task)24195 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24196/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24197 return future.result()24198 ^^^^^^^^^^^^^^^24199nixbot/migrations.py:99: in apply_migrations24200 migrations = load_migrations()24201 ^^^^^^^^^^^^^^^^^24202_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2420324204 def load_migrations() -> list[Migration]:24205 """Load migration scripts shipped with the package, ordered by version."""24206 migrations = []24207 for entry in resources.files(__package__).joinpath("migrations").iterdir():24208 m = _SCRIPT_RE.match(entry.name)24209 if m is None:24210 continue24211 migrations.append(24212 Migration(24213 version=int(m.group(1)),24214 name=m.group(2),24215 sql=entry.read_text(),24216 )24217 )24218 migrations.sort(key=lambda mig: mig.version)24219 versions = [m.version for m in migrations]24220 if len(set(versions)) != len(versions):24221 msg = f"Duplicate migration versions: {versions}"24222> raise MigrationError(msg)24223E 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]2422424225nixbot/migrations.py:67: MigrationError24226___________________ ERROR at setup of test_repos_and_builds ____________________24227[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142422824229fixturedef = <FixtureDef argname='postgres_dsn' scope='module' baseid='nixbot/tests'>24230request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>2423124232 @pytest.hookimpl(wrapper=True)24233 def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None:24234 if (24235 fixturedef.argname == "event_loop_policy"24236 and fixturedef.func.__module__ != __name__24237 ):24238 warnings.warn(24239 PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING),24240 )24241 asyncio_mode = _get_asyncio_mode(request.config)24242 if not _is_asyncio_fixture_function(fixturedef.func):24243 if asyncio_mode == Mode.STRICT:24244 # Ignore async fixtures without explicit asyncio mark in strict mode24245 # This applies to pytest_trio fixtures, for example24246 return (yield)24247 if not _is_coroutine_or_asyncgen(fixturedef.func):24248> return (yield)24249 ^^^^^2425024251/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: 24252_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24253nixbot/tests/conftest.py:33: in postgres_dsn24254 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24255 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24256/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24257 return next(self.gen)24258 ^^^^^^^^^^^^^^24259nixbot/tests/support.py:327: in ephemeral_postgres24260 run_sync(apply_migrations(dsn))24261nixbot/tests/support.py:285: in run_sync24262 return executor.submit(asyncio.run, coro).result(timeout=120)24263 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24264/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24265 return self.__get_result()24266 ^^^^^^^^^^^^^^^^^^^24267/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24268 raise self._exception24269/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24270 result = ctx.run(self.task)24271 ^^^^^^^^^^^^^^^^^^24272/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24273 return fn(*args, **kwargs)24274 ^^^^^^^^^^^^^^^^^^^24275/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24276 return runner.run(main)24277 ^^^^^^^^^^^^^^^^24278/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24279 return self._loop.run_until_complete(task)24280 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24281/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24282 return future.result()24283 ^^^^^^^^^^^^^^^24284nixbot/migrations.py:99: in apply_migrations24285 migrations = load_migrations()24286 ^^^^^^^^^^^^^^^^^24287_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2428824289 def load_migrations() -> list[Migration]:24290 """Load migration scripts shipped with the package, ordered by version."""24291 migrations = []24292 for entry in resources.files(__package__).joinpath("migrations").iterdir():24293 m = _SCRIPT_RE.match(entry.name)24294 if m is None:24295 continue24296 migrations.append(24297 Migration(24298 version=int(m.group(1)),24299 name=m.group(2),24300 sql=entry.read_text(),24301 )24302 )24303 migrations.sort(key=lambda mig: mig.version)24304 versions = [m.version for m in migrations]24305 if len(set(versions)) != len(versions):24306 msg = f"Duplicate migration versions: {versions}"24307> raise MigrationError(msg)24308E 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]2430924310nixbot/migrations.py:67: MigrationError24311_____________ ERROR at setup of test_api_log_toc_flat_log_fallback _____________24312[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142431324314request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24315tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2431624317 @pytest.fixture(scope="module")24318 def postgres_dsn(24319 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24320 ) -> Iterator[str]:24321 if shutil.which("initdb") is None:24322 pytest.skip("postgresql not available")24323 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24324> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24325 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2432624327nixbot/tests/conftest.py:33: 24328_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24329/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24330 return next(self.gen)24331 ^^^^^^^^^^^^^^24332nixbot/tests/support.py:327: in ephemeral_postgres24333 run_sync(apply_migrations(dsn))24334nixbot/tests/support.py:285: in run_sync24335 return executor.submit(asyncio.run, coro).result(timeout=120)24336 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24337/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24338 return self.__get_result()24339 ^^^^^^^^^^^^^^^^^^^24340/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24341 raise self._exception24342/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24343 result = ctx.run(self.task)24344 ^^^^^^^^^^^^^^^^^^24345/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24346 return fn(*args, **kwargs)24347 ^^^^^^^^^^^^^^^^^^^24348/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24349 return runner.run(main)24350 ^^^^^^^^^^^^^^^^24351/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24352 return self._loop.run_until_complete(task)24353 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24354/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24355 return future.result()24356 ^^^^^^^^^^^^^^^24357nixbot/migrations.py:99: in apply_migrations24358 migrations = load_migrations()24359 ^^^^^^^^^^^^^^^^^24360_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2436124362 def load_migrations() -> list[Migration]:24363 """Load migration scripts shipped with the package, ordered by version."""24364 migrations = []24365 for entry in resources.files(__package__).joinpath("migrations").iterdir():24366 m = _SCRIPT_RE.match(entry.name)24367 if m is None:24368 continue24369 migrations.append(24370 Migration(24371 version=int(m.group(1)),24372 name=m.group(2),24373 sql=entry.read_text(),24374 )24375 )24376 migrations.sort(key=lambda mig: mig.version)24377 versions = [m.version for m in migrations]24378 if len(set(versions)) != len(versions):24379 msg = f"Duplicate migration versions: {versions}"24380> raise MigrationError(msg)24381E 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]2438224383nixbot/migrations.py:67: MigrationError24384_________________ ERROR at setup of test_finished_attrs_cursor _________________24385[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142438624387request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>24388tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')2438924390 @pytest.fixture(scope="module")24391 def postgres_dsn(24392 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24393 ) -> Iterator[str]:24394 if shutil.which("initdb") is None:24395 pytest.skip("postgresql not available")24396 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24397> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24398 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2439924400nixbot/tests/conftest.py:33: 24401_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24402/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24403 return next(self.gen)24404 ^^^^^^^^^^^^^^24405nixbot/tests/support.py:327: in ephemeral_postgres24406 run_sync(apply_migrations(dsn))24407nixbot/tests/support.py:285: in run_sync24408 return executor.submit(asyncio.run, coro).result(timeout=120)24409 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24410/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24411 return self.__get_result()24412 ^^^^^^^^^^^^^^^^^^^24413/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24414 raise self._exception24415/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24416 result = ctx.run(self.task)24417 ^^^^^^^^^^^^^^^^^^24418/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24419 return fn(*args, **kwargs)24420 ^^^^^^^^^^^^^^^^^^^24421/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24422 return runner.run(main)24423 ^^^^^^^^^^^^^^^^24424/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24425 return self._loop.run_until_complete(task)24426 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24427/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24428 return future.result()24429 ^^^^^^^^^^^^^^^24430nixbot/migrations.py:99: in apply_migrations24431 migrations = load_migrations()24432 ^^^^^^^^^^^^^^^^^24433_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2443424435 def load_migrations() -> list[Migration]:24436 """Load migration scripts shipped with the package, ordered by version."""24437 migrations = []24438 for entry in resources.files(__package__).joinpath("migrations").iterdir():24439 m = _SCRIPT_RE.match(entry.name)24440 if m is None:24441 continue24442 migrations.append(24443 Migration(24444 version=int(m.group(1)),24445 name=m.group(2),24446 sql=entry.read_text(),24447 )24448 )24449 migrations.sort(key=lambda mig: mig.version)24450 versions = [m.version for m in migrations]24451 if len(set(versions)) != len(versions):24452 msg = f"Duplicate migration versions: {versions}"24453> raise MigrationError(msg)24454E 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]2445524456nixbot/migrations.py:67: MigrationError24457__________________ ERROR at setup of test_api_log_stream_json __________________24458[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142445924460request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24461tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2446224463 @pytest.fixture(scope="module")24464 def postgres_dsn(24465 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24466 ) -> Iterator[str]:24467 if shutil.which("initdb") is None:24468 pytest.skip("postgresql not available")24469 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24470> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24471 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2447224473nixbot/tests/conftest.py:33: 24474_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24475/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24476 return next(self.gen)24477 ^^^^^^^^^^^^^^24478nixbot/tests/support.py:327: in ephemeral_postgres24479 run_sync(apply_migrations(dsn))24480nixbot/tests/support.py:285: in run_sync24481 return executor.submit(asyncio.run, coro).result(timeout=120)24482 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24483/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24484 return self.__get_result()24485 ^^^^^^^^^^^^^^^^^^^24486/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24487 raise self._exception24488/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24489 result = ctx.run(self.task)24490 ^^^^^^^^^^^^^^^^^^24491/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24492 return fn(*args, **kwargs)24493 ^^^^^^^^^^^^^^^^^^^24494/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24495 return runner.run(main)24496 ^^^^^^^^^^^^^^^^24497/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24498 return self._loop.run_until_complete(task)24499 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24500/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24501 return future.result()24502 ^^^^^^^^^^^^^^^24503nixbot/migrations.py:99: in apply_migrations24504 migrations = load_migrations()24505 ^^^^^^^^^^^^^^^^^24506_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2450724508 def load_migrations() -> list[Migration]:24509 """Load migration scripts shipped with the package, ordered by version."""24510 migrations = []24511 for entry in resources.files(__package__).joinpath("migrations").iterdir():24512 m = _SCRIPT_RE.match(entry.name)24513 if m is None:24514 continue24515 migrations.append(24516 Migration(24517 version=int(m.group(1)),24518 name=m.group(2),24519 sql=entry.read_text(),24520 )24521 )24522 migrations.sort(key=lambda mig: mig.version)24523 versions = [m.version for m in migrations]24524 if len(set(versions)) != len(versions):24525 msg = f"Duplicate migration versions: {versions}"24526> raise MigrationError(msg)24527E 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]2452824529nixbot/migrations.py:67: MigrationError24530________________ ERROR at setup of test_control_requires_token _________________24531[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142453224533request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>24534tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')2453524536 @pytest.fixture(scope="module")24537 def postgres_dsn(24538 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24539 ) -> Iterator[str]:24540 if shutil.which("initdb") is None:24541 pytest.skip("postgresql not available")24542 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24543> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24544 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2454524546nixbot/tests/conftest.py:33: 24547_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24548/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24549 return next(self.gen)24550 ^^^^^^^^^^^^^^24551nixbot/tests/support.py:327: in ephemeral_postgres24552 run_sync(apply_migrations(dsn))24553nixbot/tests/support.py:285: in run_sync24554 return executor.submit(asyncio.run, coro).result(timeout=120)24555 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24556/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24557 return self.__get_result()24558 ^^^^^^^^^^^^^^^^^^^24559/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24560 raise self._exception24561/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24562 result = ctx.run(self.task)24563 ^^^^^^^^^^^^^^^^^^24564/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24565 return fn(*args, **kwargs)24566 ^^^^^^^^^^^^^^^^^^^24567/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24568 return runner.run(main)24569 ^^^^^^^^^^^^^^^^24570/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24571 return self._loop.run_until_complete(task)24572 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24573/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24574 return future.result()24575 ^^^^^^^^^^^^^^^24576nixbot/migrations.py:99: in apply_migrations24577 migrations = load_migrations()24578 ^^^^^^^^^^^^^^^^^24579_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2458024581 def load_migrations() -> list[Migration]:24582 """Load migration scripts shipped with the package, ordered by version."""24583 migrations = []24584 for entry in resources.files(__package__).joinpath("migrations").iterdir():24585 m = _SCRIPT_RE.match(entry.name)24586 if m is None:24587 continue24588 migrations.append(24589 Migration(24590 version=int(m.group(1)),24591 name=m.group(2),24592 sql=entry.read_text(),24593 )24594 )24595 migrations.sort(key=lambda mig: mig.version)24596 versions = [m.version for m in migrations]24597 if len(set(versions)) != len(versions):24598 msg = f"Duplicate migration versions: {versions}"24599> raise MigrationError(msg)24600E 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]2460124602nixbot/migrations.py:67: MigrationError24603_______________ ERROR at setup of test_build_eval_stats_surface ________________24604[gw0] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142460524606request = <SubRequest 'postgres_dsn' for <Function test_html_error_pages>>24607tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all')2460824609 @pytest.fixture(scope="module")24610 def postgres_dsn(24611 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24612 ) -> Iterator[str]:24613 if shutil.which("initdb") is None:24614 pytest.skip("postgresql not available")24615 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24616> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24617 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2461824619nixbot/tests/conftest.py:33: 24620_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24621/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24622 return next(self.gen)24623 ^^^^^^^^^^^^^^24624nixbot/tests/support.py:327: in ephemeral_postgres24625 run_sync(apply_migrations(dsn))24626nixbot/tests/support.py:285: in run_sync24627 return executor.submit(asyncio.run, coro).result(timeout=120)24628 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24629/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24630 return self.__get_result()24631 ^^^^^^^^^^^^^^^^^^^24632/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24633 raise self._exception24634/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24635 result = ctx.run(self.task)24636 ^^^^^^^^^^^^^^^^^^24637/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24638 return fn(*args, **kwargs)24639 ^^^^^^^^^^^^^^^^^^^24640/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24641 return runner.run(main)24642 ^^^^^^^^^^^^^^^^24643/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24644 return self._loop.run_until_complete(task)24645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24646/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24647 return future.result()24648 ^^^^^^^^^^^^^^^24649nixbot/migrations.py:99: in apply_migrations24650 migrations = load_migrations()24651 ^^^^^^^^^^^^^^^^^24652_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2465324654 def load_migrations() -> list[Migration]:24655 """Load migration scripts shipped with the package, ordered by version."""24656 migrations = []24657 for entry in resources.files(__package__).joinpath("migrations").iterdir():24658 m = _SCRIPT_RE.match(entry.name)24659 if m is None:24660 continue24661 migrations.append(24662 Migration(24663 version=int(m.group(1)),24664 name=m.group(2),24665 sql=entry.read_text(),24666 )24667 )24668 migrations.sort(key=lambda mig: mig.version)24669 versions = [m.version for m in migrations]24670 if len(set(versions)) != len(versions):24671 msg = f"Duplicate migration versions: {versions}"24672> raise MigrationError(msg)24673E 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]2467424675nixbot/migrations.py:67: MigrationError24676____________________ ERROR at setup of test_enable_disable _____________________24677[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142467824679request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>24680tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')2468124682 @pytest.fixture(scope="module")24683 def postgres_dsn(24684 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24685 ) -> Iterator[str]:24686 if shutil.which("initdb") is None:24687 pytest.skip("postgresql not available")24688 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24689> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24690 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2469124692nixbot/tests/conftest.py:33: 24693_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24694/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24695 return next(self.gen)24696 ^^^^^^^^^^^^^^24697nixbot/tests/support.py:327: in ephemeral_postgres24698 run_sync(apply_migrations(dsn))24699nixbot/tests/support.py:285: in run_sync24700 return executor.submit(asyncio.run, coro).result(timeout=120)24701 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24702/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24703 return self.__get_result()24704 ^^^^^^^^^^^^^^^^^^^24705/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24706 raise self._exception24707/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24708 result = ctx.run(self.task)24709 ^^^^^^^^^^^^^^^^^^24710/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24711 return fn(*args, **kwargs)24712 ^^^^^^^^^^^^^^^^^^^24713/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24714 return runner.run(main)24715 ^^^^^^^^^^^^^^^^24716/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24717 return self._loop.run_until_complete(task)24718 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24719/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24720 return future.result()24721 ^^^^^^^^^^^^^^^24722nixbot/migrations.py:99: in apply_migrations24723 migrations = load_migrations()24724 ^^^^^^^^^^^^^^^^^24725_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2472624727 def load_migrations() -> list[Migration]:24728 """Load migration scripts shipped with the package, ordered by version."""24729 migrations = []24730 for entry in resources.files(__package__).joinpath("migrations").iterdir():24731 m = _SCRIPT_RE.match(entry.name)24732 if m is None:24733 continue24734 migrations.append(24735 Migration(24736 version=int(m.group(1)),24737 name=m.group(2),24738 sql=entry.read_text(),24739 )24740 )24741 migrations.sort(key=lambda mig: mig.version)24742 versions = [m.version for m in migrations]24743 if len(set(versions)) != len(versions):24744 msg = f"Duplicate migration versions: {versions}"24745> raise MigrationError(msg)24746E 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]2474724748nixbot/migrations.py:67: MigrationError24749___________________ ERROR at setup of test_log_toc_and_text ____________________24750[gw6] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142475124752request = <SubRequest 'postgres_dsn' for <Function test_repos_and_builds>>24753tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/nix/var/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-g...ar/nix/builds/nix-34626-734064540/pytest-of-_nixbld1/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all')2475424755 @pytest.fixture(scope="module")24756 def postgres_dsn(24757 request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory24758 ) -> Iterator[str]:24759 if shutil.which("initdb") is None:24760 pytest.skip("postgresql not available")24761 dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_")24762> with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24763 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2476424765nixbot/tests/conftest.py:33: 24766_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24767/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24768 return next(self.gen)24769 ^^^^^^^^^^^^^^24770nixbot/tests/support.py:327: in ephemeral_postgres24771 run_sync(apply_migrations(dsn))24772nixbot/tests/support.py:285: in run_sync24773 return executor.submit(asyncio.run, coro).result(timeout=120)24774 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24775/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24776 return self.__get_result()24777 ^^^^^^^^^^^^^^^^^^^24778/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24779 raise self._exception24780/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24781 result = ctx.run(self.task)24782 ^^^^^^^^^^^^^^^^^^24783/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24784 return fn(*args, **kwargs)24785 ^^^^^^^^^^^^^^^^^^^24786/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24787 return runner.run(main)24788 ^^^^^^^^^^^^^^^^24789/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24790 return self._loop.run_until_complete(task)24791 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24792/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24793 return future.result()24794 ^^^^^^^^^^^^^^^24795nixbot/migrations.py:99: in apply_migrations24796 migrations = load_migrations()24797 ^^^^^^^^^^^^^^^^^24798_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2479924800 def load_migrations() -> list[Migration]:24801 """Load migration scripts shipped with the package, ordered by version."""24802 migrations = []24803 for entry in resources.files(__package__).joinpath("migrations").iterdir():24804 m = _SCRIPT_RE.match(entry.name)24805 if m is None:24806 continue24807 migrations.append(24808 Migration(24809 version=int(m.group(1)),24810 name=m.group(2),24811 sql=entry.read_text(),24812 )24813 )24814 migrations.sort(key=lambda mig: mig.version)24815 versions = [m.version for m in migrations]24816 if len(set(versions)) != len(versions):24817 msg = f"Duplicate migration versions: {versions}"24818> raise MigrationError(msg)24819E 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]2482024821nixbot/migrations.py:67: MigrationError24822________________ ERROR at setup of test_enqueue_dedupes_pending ________________24823[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142482424825self = <Coroutine test_enqueue_dedupes_pending>2482624827 def setup(self) -> None:24828 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24829 if runner_fixture_id not in self.fixturenames:24830 self.fixturenames.append(runner_fixture_id)24831 # When loop factories are configured, resolve the loop factory24832 # fixture early so that a factory variant change cascades cache24833 # invalidation before any async fixture checks its cache.24834 hook_caller = self.config.hook.pytest_asyncio_loop_factories24835 if hook_caller.get_hookimpls():24836 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24837> return super().setup()24838 ^^^^^^^^^^^^^^^2483924840/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24841_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24842/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup24843 return (yield)24844 ^^^^^24845nixbot/tests/conftest.py:33: in postgres_dsn24846 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24847 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24848/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24849 return next(self.gen)24850 ^^^^^^^^^^^^^^24851nixbot/tests/support.py:327: in ephemeral_postgres24852 run_sync(apply_migrations(dsn))24853nixbot/tests/support.py:285: in run_sync24854 return executor.submit(asyncio.run, coro).result(timeout=120)24855 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24856/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24857 return self.__get_result()24858 ^^^^^^^^^^^^^^^^^^^24859/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24860 raise self._exception24861/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24862 result = ctx.run(self.task)24863 ^^^^^^^^^^^^^^^^^^24864/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24865 return fn(*args, **kwargs)24866 ^^^^^^^^^^^^^^^^^^^24867/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24868 return runner.run(main)24869 ^^^^^^^^^^^^^^^^24870/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24871 return self._loop.run_until_complete(task)24872 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24873/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24874 return future.result()24875 ^^^^^^^^^^^^^^^24876nixbot/migrations.py:99: in apply_migrations24877 migrations = load_migrations()24878 ^^^^^^^^^^^^^^^^^24879_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2488024881 def load_migrations() -> list[Migration]:24882 """Load migration scripts shipped with the package, ordered by version."""24883 migrations = []24884 for entry in resources.files(__package__).joinpath("migrations").iterdir():24885 m = _SCRIPT_RE.match(entry.name)24886 if m is None:24887 continue24888 migrations.append(24889 Migration(24890 version=int(m.group(1)),24891 name=m.group(2),24892 sql=entry.read_text(),24893 )24894 )24895 migrations.sort(key=lambda mig: mig.version)24896 versions = [m.version for m in migrations]24897 if len(set(versions)) != len(versions):24898 msg = f"Duplicate migration versions: {versions}"24899> raise MigrationError(msg)24900E 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]2490124902nixbot/migrations.py:67: MigrationError24903_______________ ERROR at setup of test_claim_serializes_per_key ________________24904[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142490524906self = <Coroutine test_claim_serializes_per_key>2490724908 def setup(self) -> None:24909 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24910 if runner_fixture_id not in self.fixturenames:24911 self.fixturenames.append(runner_fixture_id)24912 # When loop factories are configured, resolve the loop factory24913 # fixture early so that a factory variant change cascades cache24914 # invalidation before any async fixture checks its cache.24915 hook_caller = self.config.hook.pytest_asyncio_loop_factories24916 if hook_caller.get_hookimpls():24917 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24918> return super().setup()24919 ^^^^^^^^^^^^^^^2492024921/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 24922_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 24923nixbot/tests/conftest.py:33: in postgres_dsn24924 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:24925 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24926/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__24927 return next(self.gen)24928 ^^^^^^^^^^^^^^24929nixbot/tests/support.py:327: in ephemeral_postgres24930 run_sync(apply_migrations(dsn))24931nixbot/tests/support.py:285: in run_sync24932 return executor.submit(asyncio.run, coro).result(timeout=120)24933 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24934/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result24935 return self.__get_result()24936 ^^^^^^^^^^^^^^^^^^^24937/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result24938 raise self._exception24939/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run24940 result = ctx.run(self.task)24941 ^^^^^^^^^^^^^^^^^^24942/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run24943 return fn(*args, **kwargs)24944 ^^^^^^^^^^^^^^^^^^^24945/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run24946 return runner.run(main)24947 ^^^^^^^^^^^^^^^^24948/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run24949 return self._loop.run_until_complete(task)24950 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^24951/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete24952 return future.result()24953 ^^^^^^^^^^^^^^^24954nixbot/migrations.py:99: in apply_migrations24955 migrations = load_migrations()24956 ^^^^^^^^^^^^^^^^^24957_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2495824959 def load_migrations() -> list[Migration]:24960 """Load migration scripts shipped with the package, ordered by version."""24961 migrations = []24962 for entry in resources.files(__package__).joinpath("migrations").iterdir():24963 m = _SCRIPT_RE.match(entry.name)24964 if m is None:24965 continue24966 migrations.append(24967 Migration(24968 version=int(m.group(1)),24969 name=m.group(2),24970 sql=entry.read_text(),24971 )24972 )24973 migrations.sort(key=lambda mig: mig.version)24974 versions = [m.version for m in migrations]24975 if len(set(versions)) != len(versions):24976 msg = f"Duplicate migration versions: {versions}"24977> raise MigrationError(msg)24978E 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]2497924980nixbot/migrations.py:67: MigrationError24981______________ ERROR at setup of test_settle_interrupted_requeues ______________24982[gw7] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142498324984self = <Coroutine test_settle_interrupted_requeues>2498524986 def setup(self) -> None:24987 runner_fixture_id = f"_{self._loop_scope}_scoped_runner"24988 if runner_fixture_id not in self.fixturenames:24989 self.fixturenames.append(runner_fixture_id)24990 # When loop factories are configured, resolve the loop factory24991 # fixture early so that a factory variant change cascades cache24992 # invalidation before any async fixture checks its cache.24993 hook_caller = self.config.hook.pytest_asyncio_loop_factories24994 if hook_caller.get_hookimpls():24995 _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__)24996> return super().setup()24997 ^^^^^^^^^^^^^^^2499824999/nix/store/4fdzail6axj09flzabahq3f4b2ws3i4j-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: 25000_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 25001nixbot/tests/conftest.py:33: in postgres_dsn25002 with ephemeral_postgres(tmp_path_factory, dbname) as dsn:25003 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25004/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__25005 return next(self.gen)25006 ^^^^^^^^^^^^^^25007nixbot/tests/support.py:327: in ephemeral_postgres25008 run_sync(apply_migrations(dsn))25009nixbot/tests/support.py:285: in run_sync25010 return executor.submit(asyncio.run, coro).result(timeout=120)25011 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25012/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result25013 return self.__get_result()25014 ^^^^^^^^^^^^^^^^^^^25015/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result25016 raise self._exception25017/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run25018 result = ctx.run(self.task)25019 ^^^^^^^^^^^^^^^^^^25020/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run25021 return fn(*args, **kwargs)25022 ^^^^^^^^^^^^^^^^^^^25023/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run25024 return runner.run(main)25025 ^^^^^^^^^^^^^^^^25026/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run25027 return self._loop.run_until_complete(task)25028 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^25029/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete25030 return future.result()25031 ^^^^^^^^^^^^^^^25032nixbot/migrations.py:99: in apply_migrations25033 migrations = load_migrations()25034 ^^^^^^^^^^^^^^^^^25035_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2503625037 def load_migrations() -> list[Migration]:25038 """Load migration scripts shipped with the package, ordered by version."""25039 migrations = []25040 for entry in resources.files(__package__).joinpath("migrations").iterdir():25041 m = _SCRIPT_RE.match(entry.name)25042 if m is None:25043 continue25044 migrations.append(25045 Migration(25046 version=int(m.group(1)),25047 name=m.group(2),25048 sql=entry.read_text(),25049 )25050 )25051 migrations.sort(key=lambda mig: mig.version)25052 versions = [m.version for m in migrations]25053 if len(set(versions)) != len(versions):25054 msg = f"Duplicate migration versions: {versions}"25055> raise MigrationError(msg)25056E 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]2505725058nixbot/migrations.py:67: MigrationError25059=================================== FAILURES ===================================25060_____________________________ test_load_migrations _____________________________25061[gw8] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.142506225063 def test_load_migrations() -> None:25064> migrations = load_migrations()25065 ^^^^^^^^^^^^^^^^^2506625067nixbot/tests/test_db.py:33: 25068_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2506925070 def load_migrations() -> list[Migration]:25071 """Load migration scripts shipped with the package, ordered by version."""25072 migrations = []25073 for entry in resources.files(__package__).joinpath("migrations").iterdir():25074 m = _SCRIPT_RE.match(entry.name)25075 if m is None:25076 continue25077 migrations.append(25078 Migration(25079 version=int(m.group(1)),25080 name=m.group(2),25081 sql=entry.read_text(),25082 )25083 )25084 migrations.sort(key=lambda mig: mig.version)25085 versions = [m.version for m in migrations]25086 if len(set(versions)) != len(versions):25087 msg = f"Duplicate migration versions: {versions}"25088> raise MigrationError(msg)25089E 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]2509025091nixbot/migrations.py:67: MigrationError25092=========================== short test summary info ============================25093FAILED nixbot/tests/test_db.py::test_load_migrations - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25094ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25095ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25096ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25097ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25098ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25099ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25100ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25101ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25102ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25103ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25104ERROR nixbot/tests/test_forge.py::test_project_store_sync_and_legacy_import - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25105ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25106ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25107ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25108ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25109ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25110ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25111ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25112ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25113ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25114ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25115ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25116ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25117ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25118ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25119ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25120ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25121ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25122ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25123ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25124ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25125ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25126ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25127ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25128ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25129ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25130ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25131ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25132ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25133ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25134ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25135ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25136ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25137ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25138ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25139ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25140ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25141ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25142ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25143ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25144ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25145ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25146ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25147ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25148ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25149ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25150ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25151ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25152ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25153ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25154ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25155ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25156ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25157ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25158ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25159ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25160ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25161ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25162ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25163ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25164ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25165ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25166ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25167ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25168ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25169ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25170ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25171ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25172ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25173ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25174ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25175ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25176ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25177ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25178ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25179ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25180ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25181ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25182ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25183ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25184ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25185ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25186ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25187ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25188ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25189ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25190ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25191ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25192ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25193ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25194ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25195ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25196ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25197ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25198ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25199ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25200ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25201ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25202ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25203ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25204ERROR nixbot/tests/test_control.py::test_token_creation_with_expiry - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25205ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25206ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25207ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25208ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25209ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25210ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25211ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25212ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github] - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25213ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25214ERROR nixbot/tests/test_forge.py::test_register_repo_hook_500_with_403_in_body_raises - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25215ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25216ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25217ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25218ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25219ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25220ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab] - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25221ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25222ERROR nixbot/tests/test_service.py::test_restart_while_unwinding_waits_then_runs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25223ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25224ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25225ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25226ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25227ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25228ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25229ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25230ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25231ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25232ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25233ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25234ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25235ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25236ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25237ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25238ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25239ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25240ERROR nixbot/tests/test_orchestrator.py::test_stale_event_does_not_supersede_newer_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25241ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25242ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25243ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25244ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_cleans_cancel_events - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25245ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25246ERROR nixbot/tests/test_control.py::test_webhook_secret_regeneration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25247ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25248ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25249ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25250ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25251ERROR nixbot/tests/test_control.py::test_retry_after_parsing - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25252ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25253ERROR nixbot/tests/test_orchestrator.py::test_eval_netrc_withheld_from_pr_with_instance_wide_creds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25254ERROR nixbot/tests/test_control.py::test_work_retry_delay_honors_retry_after - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25255ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25256ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25257ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25258ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25259ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25260ERROR nixbot/tests/test_db.py::test_failed_build_cache_scoped_per_project - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25261ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25262ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25263ERROR nixbot/tests/test_orchestrator.py::test_effects_run_after_default_branch_success - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25264ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25265ERROR nixbot/tests/test_service.py::test_startup_reevaluates_interrupted_eval - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25266ERROR nixbot/tests/test_control.py::test_effect_item_setup_failure_settles_row - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25267ERROR nixbot/tests/test_web.py::test_legacy_redirect_404s_on_ambiguous_owner_name - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25268ERROR nixbot/tests/test_orchestrator.py::test_pr_worktree_config_cannot_grant_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25269ERROR nixbot/tests/test_control.py::test_restart_attribute_posts_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25270ERROR nixbot/tests/test_service.py::test_rerun_of_interrupted_eval_reevaluates - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25271ERROR nixbot/tests/test_web.py::test_health_and_static - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25272ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25273ERROR nixbot/tests/test_service.py::test_rerun_resumes_building_rows_and_keeps_finished - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25274ERROR nixbot/tests/test_web.py::test_404s - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25275ERROR nixbot/tests/test_control.py::test_recovery_reports_interrupted_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25276ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25277ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25278ERROR nixbot/tests/test_web.py::test_log_viewer_and_raw - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25279ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25280ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25281ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25282ERROR nixbot/tests/test_service.py::test_reeval_failure_marks_build_failed - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25283ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25284ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25285ERROR nixbot/tests/test_web.py::test_structured_log_window_caps_huge_derivation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25286ERROR nixbot/tests/test_service.py::test_gitlab_discovery_and_hook_registration - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25287ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25288ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25289ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25290ERROR nixbot/tests/test_web.py::test_attr_named_dot_txt_not_shadowed_by_raw_route - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25291ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25292ERROR nixbot/tests/test_service.py::test_health_serves_while_startup_blocks - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25293ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25294ERROR nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25295ERROR nixbot/tests/test_web.py::test_attr_names_with_special_characters - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25296ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25297ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25298ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25299ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25300ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25301ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_settles_streamed_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25302ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25303ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25304ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25305ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25306ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25307ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25308ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25309ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25310ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25311ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25312ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25313ERROR nixbot/tests/test_orchestrator.py::test_effect_crash_settles_the_row - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25314ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25315ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25316ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25317ERROR nixbot/tests/test_orchestrator.py::test_concurrent_effects_use_independent_worktrees - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25318ERROR nixbot/tests/test_web.py::test_queue_sorts_active_before_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25319ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25320ERROR nixbot/tests/test_orchestrator.py::test_locked_effect_gets_shared_dedup_key - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25321ERROR nixbot/tests/test_web.py::test_queue_position_is_global_and_skips_running - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25322ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25323ERROR nixbot/tests/test_orchestrator.py::test_effect_item_not_claimable_until_dep_settles - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25324ERROR nixbot/tests/test_web.py::test_openapi_docs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25325ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25326ERROR nixbot/tests/test_cli.py::test_log_follow_finished_attr_falls_back_to_stored_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25327ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25328ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25329ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25330ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25331ERROR nixbot/tests/test_web.py::test_drv_raw_serves_running_attribute - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25332ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25333ERROR nixbot/tests/test_orchestrator.py::test_lock_serializes_builds_without_interleaving - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25334ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25335ERROR nixbot/tests/test_web.py::test_log_sse_stream_caps_history_backlog - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25336ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25337ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_cycle_fails_discovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25338ERROR nixbot/tests/test_web.py::test_log_sse_stream_neutralizes_carriage_returns - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25339ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25340ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25341ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25342ERROR nixbot/tests/test_web.py::test_api_builds_commit_filter - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25343ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25344ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25345ERROR nixbot/tests/test_web.py::test_log_tail_param - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25346ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25347ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25348ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25349ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25350ERROR nixbot/tests/test_web.py::test_api_build_failures - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25351ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25352ERROR nixbot/tests/test_orchestrator.py::test_reuse_empty_succeeded_build_posts_eval_success - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25353ERROR nixbot/tests/test_web.py::test_api_build_failures_rejects_non_positive_tail - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25354ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25355ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25356ERROR nixbot/tests/test_orchestrator.py::test_stale_event_reusing_old_build_does_not_cancel_newer - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25357ERROR nixbot/tests/test_web.py::test_llms_txt - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25358ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25359ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25360ERROR nixbot/tests/test_web.py::test_event_broker_pushes_status_changes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25361ERROR nixbot/tests/test_orchestrator.py::test_reuse_for_default_branch_push_runs_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25362ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25363ERROR nixbot/tests/test_web.py::test_events_stream_coalesces_burst - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25364ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25365ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25366ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25367ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25368ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25369ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25370ERROR nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25371ERROR nixbot/tests/test_web.py::test_build_page_shows_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25372ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25373ERROR nixbot/tests/test_orchestrator.py::test_effect_log_does_not_collide_with_attribute_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25374ERROR nixbot/tests/test_web.py::test_build_page_shows_event_effects - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25375ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25376ERROR nixbot/tests/test_web.py::test_effect_log_raw_text - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25377ERROR nixbot/tests/test_orchestrator.py::test_post_process_paths_are_forge_scoped - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25378ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25379ERROR nixbot/tests/test_web.py::test_effect_log_viewer_status_icon - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25380ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25381ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25382ERROR nixbot/tests/test_web.py::test_effect_changes_notify_build_events - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25383ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25384ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25385ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25386ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25387ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25388ERROR nixbot/tests/test_web.py::test_pr_comment_api - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25389ERROR nixbot/tests/test_orchestrator.py::test_reuse_with_missing_output_still_post_processes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25390ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25391ERROR nixbot/tests/test_web.py::test_workload_identity_api - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25392ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25393ERROR nixbot/tests/test_web.py::test_logout_revokes_session_cookie - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25394ERROR nixbot/tests/test_web.py::test_gitlab_nested_group_routes - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25395ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25396ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_renders_ansi - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25397ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25398ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_404 - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25399ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25400ERROR nixbot/tests/test_web.py::test_scheduled_run_log_unavailable_placeholder - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25401ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25402ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_waiting_before_log - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25403ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25404ERROR nixbot/tests/test_web.py::test_scheduled_run_history_lists_runs - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25405ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25406ERROR nixbot/tests/test_web.py::test_scheduled_run_history_special_chars - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25407ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25408ERROR nixbot/tests/test_web.py::test_scheduled_run_stream_replays_history - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25409ERROR nixbot/tests/test_web.py::test_scheduled_run_notify_build_events - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25410ERROR nixbot/tests/test_web.py::test_api_log_toc_and_text - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25411ERROR nixbot/tests/test_cli_api.py::test_repos_and_builds - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25412ERROR nixbot/tests/test_web.py::test_api_log_toc_flat_log_fallback - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25413ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25414ERROR nixbot/tests/test_web.py::test_api_log_stream_json - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25415ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25416ERROR nixbot/tests/test_web.py::test_build_eval_stats_surface - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25417ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25418ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25419ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25420ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25421ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4...25422============ 1 failed, 450 passed, 28 skipped, 328 errors in 11.04s ============